使用“何时”作为控制条件的模型仿真过程中的颤振误差

时间:2019-11-16 20:27:26

标签: modelica openmodelica

我尝试控制水箱的体积,但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;

2 个答案:

答案 0 :(得分:3)

如果使用相同的阈值打开和关闭阀门,则明显的结果是颤振。

请参见this answerModelica 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扩展)。如您所见,它并不是真正理想二极管的模型,但它已尽可能简化而不会引起抖动。