【问题标题】:Searching for a concept like 'verbosity' in Modelica在 Modelica 中搜索诸如“冗长”之类的概念
【发布时间】:2011-11-26 20:50:00
【问题描述】:

我正在为大型 Modelica 模型的输出文件大小而苦恼。当然,我可以保护一些对象,以便将它们从结果文件中完全删除。但是,这会带来两个问题:

  1. 无法重新声明受保护的对象
  2. 如果我想详细测试我的模型(例如在短时间内),我需要再次公开声明这些对象以查看它们的变量

我想知道是否有设置 Modelica 模型的“详细程度”的技巧。也许我想要的是publicprotected 旁边的第三个关键字,例如。 transparent。然后,在设置模拟时,我希望能够将详细级别设置为 1 或 2,效果如下:

1--> 将所有transparent元素视为protected

2--> 将所有transparent元素视为public

这种效果会传播到所有模型和子模型。
我不认为这已经存在。但是有没有简单的解决方法?

谢谢, 罗尔

【问题讨论】:

    标签: modelica


    【解决方案1】:

    罗尔,

    我知道有几个人在为这个问题而苦苦挣扎。目前,所有这些都取决于所使用的工具。我不知道其他工具如何处理结果过滤,但在 Dymola 中,您可以通过为信号提供特殊限定符(例如受保护)来控制它(正如您所指出的)。

    我过去做过的一件事是从一个模型中扩展出来,然后为我感兴趣的东西添加一堆输出信号。然后你可以在 Dymola 中选择“输出”以确保这些信号进入结果文件。这远非完美,因为 a) 列出您想要的所有内容可能会变得乏味和 b) 引用受保护的变量是不严格允许的(尽管 Dymola 允许您侥幸逃脱但会发出警告)。

    在达索,我们正在积极讨论这个想法,并希望在这些方面提供一些更好的功能。目前尚不清楚此类功能是否严格特定于工具,或者是否会以某种方式涉及语言。但如果是语言相关的,我们(当然)会与设计团队合作制定其他工具供应商也可以支持的规范。

    【讨论】:

    • 感谢您的回答。我确实做了尽可能多的保护和增加输出,但我同意你的 a) 和 b)。我希望能有一个语言标准解决方案出现,因为特定工具的解决方案正在减少 Modelica 明显具有的跨工具优势。
    【解决方案2】:

    我不确定这是否对您有帮助,但在 Dymola 中,您可以转到 Simulation->Setup->Output 并标记一个复选框,上面写着“存储受保护的变量”。这样就可以将大多数变量声明为受保护的:在正常模拟期间它们不会被存储,但在调试模型时,您只需标记该复选框并存储它们。 当然,这与您建议的关键字透明不一样,但也许它有点帮助......

    【讨论】:

    • 感谢您的回答,这确实有帮助,因为现在我可以保护长时间模拟不需要的所有内容,并且只需单击一下即可将所有内容恢复为调试运行。但是让几乎所有东西都受到保护仍然迫使我打破规则(Dymola 接受)并引用受保护的变量。
    【解决方案3】:

    正如 Michael Tiller 上面所写,所有 Modelica 工具的处理方式都不相同,因此没有明确的答案。要给出特定于 OpenModelica 的答案,可以使用 simulate(ModelName,outputFilter="regex"),仅存储与给定正则表达式完全匹配的变量(默认为 .*,匹配任何变量)。

    【讨论】:

    • 感谢您的提示。因此,要有效地使用此功能,您必须在长时间模拟输出中获得的所有变量中添加一个特定的“标记”,例如 _o。如果 modelica 社区能够制定一个跨工具的语言规范,那就太好了。
    • 不需要标记变量。使用正则表达式,您可以匹配 a|b|c(a 或 b 或 c)或 a\.b\.c\[.*\].x(a.b.c[1].x ..a.b.c[n].x)。编写模式非常烦人,但它们用途广泛且易于工具实现。虽然我同意如果能找到一个跨工具解决方案会很好,但 Modelica 规范只涉及少数地方的模拟问题。
    【解决方案4】:

    在 SystemModeler 中,您转到模拟中心的实验浏览器中的设置选项卡。单击底部的输出并选择要存储的变量。

    (选项有state variablesderivativesalgebraic variablesparametersprotected variables,如果您标记Store simulation log-选项,您将获得一些关于事件随时间和功能的有趣统计数据评估,开辟了另一种可能性,以追踪创建更多评估的模拟和模型部分)

    【讨论】:

      【解决方案5】:

      有点晚了,但在 Dymola 2013 FD01 及更高版本中,您可以使用注释 __Dymola_selections 根据名称(和模型名称)选择要存储的变量,甚至可以过滤用户定义的标签 - 这样您就可以创建一个模型中的标签名称“透明”。请参阅手册中的“匹配和变量选择”。

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 2011-08-04
        • 2010-12-16
        • 2011-04-29
        • 2016-04-21
        相关资源
        最近更新 更多