如何迭代Dymola中所有类的实例?

时间:2017-11-10 08:05:13

标签: for-loop modelica dymola

我目前正在模拟一个区域供热网络模型,其中包含Dymola中的许多管道,并希望计算有关整个网络的一些数据,即管道中的总热量损失。

显而易见的方法是使用for循环迭代每个管道并将各个热量损失相加。但我不确定如何迭代每根管道。网络中的每个管道都是我创建的类的一个实例" Pipe"声明如下:

 replaceable model Pipe =
      DHNAEE.Components.Pipe.PipeHeatLossMod_Double;

然后将每个管道定义为Pipe类的实例,如下所示:

 Pipe dualPipeK30_c78(redeclare package Medium = Medium,diameter=0.02, thicknessIns=0.036, length=12.3, m_flow_nominal=5,nPorts = 1)

我的问题是,有没有办法可以简单地遍历所有类的实例" Pipe"在模型中并总结一个特定的输出,即每个的热量损失?我目前在后期处理过程中使用Python进行此操作,但是直接从Dymola获取此信息会更有益。

非常感谢, 基思

1 个答案:

答案 0 :(得分:3)

如果所有管道都使用您可以控制的特殊类,并且它是一个动态物理属性,您可以在Pipe-class中添加类似(未测试)的内容:

   outer MyHeatCapacitor heatSink;
   model MyHeatCapacitor
     extends Modelica.Thermal.HeatTransfer.Components.HeatCapacitor;
     annotation(missingInnerMessage="Need to add global heatSink");
   end MyHeatCapacitor;
equation
   connect(..., heatSink.port);

然后全局热量损失将被收集在该heatSink组件中(自动添加)。

将来可能有另一种选择(特别是当你无法修改Pipe-class时): http://www.ep.liu.se/ecp/118/026/ecp15118245.pdf https://trac.modelica.org/Modelica/browser/MCP/public/MCP-0021_ComponentIterators