【问题标题】:Automatically fetch component,result file name in the mos script在 mos 脚本中自动获取组件、结果文件名
【发布时间】:2020-02-18 10:20:48
【问题描述】:

使用 mos 脚本,我正在读取和绘制属于我的模型中组件“x”的某些变量的数据。如果组件名称从“x”更改为“y”,如何在脚本中自动更新?我想编写一个灵活的脚本,以便即使结果文件或组件的名称发生更改也可以使用它。

非常感谢。

【问题讨论】:

  • 你能分享一个脚本 sn-p 来演示你想要实现的目标吗?也许您可以使用 getInstanceName() ? build.openmodelica.org/Documentation/getInstanceName.html
  • @matth simulationModel("PID_Controller", stopTime=4, resultFile="PID_Controller"); createPlot(id=1, y={"kinematicPTP.sdd"},grid=true);假设我在模型中重命名了“kinematicPTP”。所以,我想将它分配给某个变量,并且在更改名称时应该更新变量。 getInstanceName() 在脚本中似乎不起作用,它给了我这个错误“警告:无法扩展 getInstanceName。必须首先确保将资源添加到库目录错误:函数 ModelicaInternal_print 的正常函数调用,但函数声明为 0 个输出”。

标签: modelica dymola openmodelica


【解决方案1】:

(目前)无法在 Dymola 中自动执行此操作。

您可以通过为表达式创建变量Real mySdd=kinematicPTP.sdd; 然后绘制mySdd 来减少问题。在这种情况下,重命名kinematicPTP 不会导致任何问题。 (显然重命名mySdd 会导致同样的问题,但我们的想法是这些名称更稳定。)

【讨论】:

  • 您好,我按照您说的进行了尝试,但没有成功。我的情况是这样的。我有一个包含变量 a、b 和 c 的组件“单元格”。我现在按照您的建议将 'cell' 存储在变量 'name' 中,name=cell;然后我在脚本中使用它们(x=name.a;y=name.b)。接下来,用户将组件重命名为“newCell”。变量“名称”现在不会更新(因为“细胞”不再存在)所以我的 x,y 也不会更新。另外,还有一个问题,是否可以将整个组件(记录变量)(在本例中的“单元格”中)分配给一个变量,或者我必须分配单个变量?谢谢
  • 在 Dymola 中,如果您使用参数对话框或变量声明对话框等对话框重命名“单元格”,则应重命名“单元格”的使用(至少在当前模型中,对于您的其他模型)可能必须启用该功能)。它也应该适用于记录 - 但有时一切都只是复制而没有任何好处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2011-05-12
  • 2011-02-24
  • 2011-11-02
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多