我尝试控制水箱的体积,但8秒钟后模拟震颤。
这是用于控制阀门的控制模型:
model CONTROLLER
Modelica.Blocks.Interfaces.RealInput V_min;
Modelica.Blocks.Interfaces.RealInput V_max;
Modelica.Blocks.Interfaces.RealInput V;
Boolean open1(start=true), open2(start=false);
equation
when V > V_min then
open1 = true;
elsewhen V <= V_min then
open1 = false;
end when;
open2 = not open1;
end CONTROLLER;
答案 0 :(得分:3)
如果使用相同的阈值打开和关闭阀门,则明显的结果是颤振。
请参见this answer和Modelica by Example,它们都很好地描述了什么是颤抖以及如何避免这种颤抖。
答案 1 :(得分:1)
尝试类似
when abs(V - V_min) > 1.E-5 then
open = not pre(open);
end when;
这是一个同时触发两种方式但容忍度较小的条件。您必须初始化变量open(start = false)
以确保其按预期工作。
如果周围的系统对该变化的反应较慢,则不会引起抖动;如果这直接影响der(V)
,则会使仿真变慢,并且可能会中断。
为了更好地处理此类开关,我建议查看代表理想二极管的Modelica.Electrical.Analog.Ideal.IdealDiode
(从Modelica.Electrical.Analog.Interfaces.IdealSemiconductor
扩展)。如您所见,它并不是真正理想二极管的模型,但它已尽可能简化而不会引起抖动。