【问题标题】:How to iterate over all instances of a class in Dymola?如何遍历 Dymola 中类的所有实例?
【发布时间】:2017-11-10 08:05:13
【问题描述】:

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

执行此操作的明显方法是使用 for 循环遍历每个管道并将各个热损失求和。但是,我不确定如何遍历每个管道。网络中的每个管道都是我创建的“管道”类的一个实例,声明如下:

 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)

我的问题是,有没有一种方法可以简单地迭代模型中“管道”类的所有实例并总结一个特定的输出,即每个输出的热损失?我目前在后期处理期间在 Python 中执行此操作,但直接从 Dymola 获得此操作会更有益。

非常感谢, 基思

【问题讨论】:

    标签: for-loop modelica dymola


    【解决方案1】:

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

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

    然后全局热损失将被收集到该散热器组件中(自动添加)。

    将来可能会出现另一个选项(尤其是当您无法修改 Pipe 类时): http://www.ep.liu.se/ecp/118/026/ecp15118245.pdf https://trac.modelica.org/Modelica/browser/MCP/public/MCP-0021_ComponentIterators

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多