1

我在 dymola 中制作了 3 个模型,并希望按顺序(一个接一个)朗姆酒,这样一个模型的输出应该作为下一个的输入传递。我的模型计算温度,一个模型的最终温度应该是下一个模型的初始温度。你能建议一个方法吗?stategraph 是否可以用于此目的以及如何使用?

4

1 回答 1

1

即使这个问题已经很老了,但肯定是其他人也可能面临的问题,所以在这里回答(有点晚......)。

在 Dymola 中,使用该功能可以很容易地解决所描述的问题DymolaCommands.SimulatorAPI.simulateExtendedModel。它允许设置模拟的开始和停止时间、初始化状态和读取变量的最终值。

这是一个示例,modelica 函数的外观如何用于simulateExtendedModel将模拟结果从Model1转移到Model2。假设在两个模型中都使用温度传感器来测量感兴趣的温度,并且热电容器的起始温度已初始化:

function Script
protected 
  Modelica.SIunits.Temperature T[1] "Stores the final temperature at simulation end";
  Boolean ok "Indicates if simulation completed without error";
  String models[:] = {"MyLib.Model1", "MyLib.Model2"} "Full class paths for models to simulate";
algorithm 
   // Simulation 1 with model 1 from 0s to 1s  
  (ok, T) :=DymolaCommands.SimulatorAPI.simulateExtendedModel(
    models[1],
    startTime=0,
    stopTime=1,
    finalNames={"temperatureSensor.T"},
    resultFile=models[1]);

   // Simulation 2 with model 2 from 1s to 2s    
  (ok, T) :=DymolaCommands.SimulatorAPI.simulateExtendedModel(
    models[2],
    startTime=1,
    stopTime=2,
    initialNames={"heatCapacitor.T"},
    initialValues={T[1]},
    finalNames={"temperatureSensor.T"},
    resultFile=models[2]);

  // Plot temperature output of all models
  for m in models loop
    createPlot(
      id=1,
      heading="temperatureSensor.T",
      y={"temperatureSensor.T"},
      legends={m},
      filename=m+".mat",
      erase=m==models[1],
      grid=true,
      position={0, 0, 700, 400});
  end for;
end Script;

请注意 的第二个返回值simulateExtendedModel是一个向量(因为可以使用 访问多个最终值finalNames),因此该变量T是向量化的。

于 2018-10-08T13:24:25.780 回答