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