使用真实信号的反馈回路:如何初始化模型?
Feedback loops using real signals: How to initialize the model?
我正在将一个遗留模型从 Simulink 转移到 Dymola,其中包括一个反馈回路,在该回路中输出信号被传递回输入以进行衰减计算。在 Simulink 中,内存块用于创建一个积分时间步长延迟以及初始化信号。我尝试在 Dymola 中使用单位步长延迟,但是我们没有使用固定步长求解器并且模型出现分歧。固定延迟也没有按预期工作
对于如何在正确初始化时将输出传递给输入有什么建议吗?这些信号都是 "Real".
类型
Simulink 中的 Memory
块将信号延迟一个持续集成的时间步长(如果未放置在迭代器子系统中)。当与 variable-step 求解器结合使用时,结果是可变延迟,具体取决于求解器步长。在我看来,从稳定性和可重复性的角度来看,这实际上是一个相当危险的操作。
在 Dymola(我假设是 OpenModelica)中没有可用的等效块,因此我认为不可能 "exactly" 重现相同的行为。我想无论如何这都会很困难,求解器可能会选择不同的 step-sizes.
除此之外,您很有可能只需移除块并直接在任何 Modelica-based 工具中连接反馈回路,因为这些工具可能会象征性地处理代数回路并为您解决.对于初始化,您可以使用 initial equation
或 start
属性。如果没有一些示例代码,仍然很难判断哪种解决方案可以正常工作。
如果直接关闭循环不是一个选项,我建议使用 FirstOrder
(Modelica.Blocks.Continuous.FirstOrder
) 块而不是延迟。由于这是一个连续的块,与 Memory
块相比,它应该提供更好的性能和更可预测的行为。它还将使您能够使用多个选项初始化其输出值。
我正在将一个遗留模型从 Simulink 转移到 Dymola,其中包括一个反馈回路,在该回路中输出信号被传递回输入以进行衰减计算。在 Simulink 中,内存块用于创建一个积分时间步长延迟以及初始化信号。我尝试在 Dymola 中使用单位步长延迟,但是我们没有使用固定步长求解器并且模型出现分歧。固定延迟也没有按预期工作
对于如何在正确初始化时将输出传递给输入有什么建议吗?这些信号都是 "Real".
类型Simulink 中的 Memory
块将信号延迟一个持续集成的时间步长(如果未放置在迭代器子系统中)。当与 variable-step 求解器结合使用时,结果是可变延迟,具体取决于求解器步长。在我看来,从稳定性和可重复性的角度来看,这实际上是一个相当危险的操作。
在 Dymola(我假设是 OpenModelica)中没有可用的等效块,因此我认为不可能 "exactly" 重现相同的行为。我想无论如何这都会很困难,求解器可能会选择不同的 step-sizes.
除此之外,您很有可能只需移除块并直接在任何 Modelica-based 工具中连接反馈回路,因为这些工具可能会象征性地处理代数回路并为您解决.对于初始化,您可以使用 initial equation
或 start
属性。如果没有一些示例代码,仍然很难判断哪种解决方案可以正常工作。
如果直接关闭循环不是一个选项,我建议使用 FirstOrder
(Modelica.Blocks.Continuous.FirstOrder
) 块而不是延迟。由于这是一个连续的块,与 Memory
块相比,它应该提供更好的性能和更可预测的行为。它还将使您能够使用多个选项初始化其输出值。