我正在将一个旧模型从Simulink转移到Dymola,该模型包括一个反馈回路,在该回路中,输出信号被传递回输入端以进行衰减计算。在Simulink中,存储块用于创建一个积分时间步长延迟并初始化信号。我试图在Dymola中使用单位步长延迟,但是我们不使用固定步长求解器,因此模型有所不同。固定延迟也无法按预期工作
对于在正确初始化时如何将输出传递到输入有任何建议吗?这些信号都是“ Real”类型的。
答案 0 :(得分:5)
Simulink中的Memory
块将信号延迟连续积分的一个时间步长(如果未放置在迭代器子系统中)。当与可变步长求解器组合使用时,结果是可变延迟,具体取决于求解器步长。在我看来,从稳定性和可重复性的角度来看,这实际上是一个非常危险的操作。
在Dymola(我假设为OpenModelica)中没有可用的等效块,因此,我认为不可能“完全”复制相同的行为。我想这还是很困难的,因为求解器可能会选择不同的步长。
除此之外,您很有可能可以删除块并直接在任何基于Modelica的工具中直接连接反馈回路,因为它们可能会象征性地处理代数回路并为您解决。对于初始化,您可以使用initial equation
或start
属性。如果没有一些示例代码,很难判断哪种解决方案会很好。
如果不能直接关闭循环,我建议使用FirstOrder
(Modelica.Blocks.Continuous.FirstOrder
)块而不是延迟。由于这是一个连续的块,因此与Memory
块相比,它应具有更好的性能和更可预测的行为。同样,它将使您能够使用多个选项来初始化其输出值。