在Modelica中搜索类似“冗长”的概念

在Modelica中搜索类似“冗长”的概念,modelica,Modelica,我正在为大型Modelica模型的输出文件的大小而挣扎。当然,我可以保护一些对象,以便从结果文件中完全删除它们。然而,这带来了两个问题: 无法重新声明受保护的对象 如果我想详细测试我的模型,比如短期内,我需要再次公开声明这些对象,以便查看它们的变量 我想知道是否有一个技巧来设置Modelica模型的“详细程度”。也许我想要的是第三个关键字旁边的公共,保护,如透明。然后,在设置模拟时,我希望能够将详细级别设置为1或2,效果如下: 1 >考虑所有被保护的透明元素 2 >将所有透明元素视为公共 此

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

无法重新声明受保护的对象 如果我想详细测试我的模型,比如短期内,我需要再次公开声明这些对象,以便查看它们的变量 我想知道是否有一个技巧来设置Modelica模型的“详细程度”。也许我想要的是第三个关键字旁边的公共,保护,如透明。然后,在设置模拟时,我希望能够将详细级别设置为1或2,效果如下:

1 >考虑所有被保护的透明元素

2 >将所有透明元素视为公共

此效果将传播到所有模型和子模型。 我认为这还不存在。但是有一个简单的解决办法吗

谢谢, 罗尔

罗尔

我知道有几个人在为这个问题绞尽脑汁。目前,所有这些都取决于所使用的工具。我不知道其他工具是如何处理结果过滤的,但在Dymola中,您可以通过为信号提供特殊的限定符(例如,protected)来控制它

我过去做过的一件事是从一个模型扩展,然后为我感兴趣的东西添加一组输出信号。然后,您可以选择Dymola中的输出,以确保这些输出包含在结果文件中。这远非完美,因为列出您想要的所有内容可能会变得单调乏味,而引用受保护的变量也不是严格允许的,尽管Dymola允许您避开它,但会发出警告


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

我不确定这是否对您有帮助,但在Dymola中,您可以转到Simulation->Setup->Output并标记一个复选框,表示存储受保护的变量。通过这种方式,可以将大多数变量声明为受保护的:在正常模拟期间,它们不会被存储,但在调试模型时,您只需标记该复选框,它们就会被存储。
当然,这与您建议的关键字transparent不同,但可能有点帮助…

正如Michael Tiller在上面所写的,这在所有Modelica工具中处理方式都不同,并且没有明确的答案。要给出OpenModelica特定的答案,可以使用simulateModelName,outputFilter=regex,仅存储与给定regex完全匹配的变量。默认值为。*,匹配任何变量。

在SystemModeler中,您可以转到Simulation Center的实验浏览器中的设置选项卡。单击底部的Output并选择要存储的变量


这些选项包括状态变量、导数、代数变量、参数、受保护变量,如果您标记Store simulation log(存储模拟日志)选项,您将获得一些有关随时间变化的事件和函数评估的有趣统计信息,打开另一种可能性,追踪部分模拟和模型,创建更多评估

有点晚,但在Dymola 2013 FD01和更高版本中,您可以使用注释u Dymola_选择基于名称和模型名称选择要存储的变量,甚至可以过滤用户定义的标记,这样您就可以在模型中创建一个透明的标记名。请参阅手册中的匹配和变量选择。

感谢您的回答,这确实很有帮助,因为现在我可以保护长时间模拟所不需要的所有内容,只需单击一次,即可恢复所有内容以进行调试运行。但是让几乎所有的东西都受到保护仍然迫使我打破Dymola接受和引用受保护变量的规则。谢谢你的回答。尽可能多地保护和增加输出是我所做的,但我同意你的a和b。我希望语言标准的解决方案会出现,因为特定于工具的解决方案正在减少Modelica显然具有的跨工具优势。感谢您的提示。因此,要有效地使用此功能,您必须在长模拟输出中获得的所有变量中添加一个特定的“标记”,如_o。如果modelica社区能够制定一个跨工具的语言规范,那就太好了。不需要标记变量。使用正则表达式,您可以匹配a | b | c a或b或c,或a\.b\.c\[.*].x a.b.c[1].x。。a、 b.c[n].x。编写模式非常烦人,但它们用途广泛,易于工具实现。虽然我同意如果能找到一个跨工具的解决方案会很好,但是Modelica规范只涉及到一些地方的模拟问题。