Modelica 模型仿真过程中的抖振误差,使用;什么时候;作为控制条件

Modelica 模型仿真过程中的抖振误差,使用;什么时候;作为控制条件,modelica,openmodelica,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

我试着控制坦克的体积,但是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;

模型控制器
Modelica.Blocks.Interfaces.RealInput V_min;
Modelica.Blocks.Interfaces.RealInput V_max;
Modelica.Blocks.Interfaces.RealInput V;
布尔值open1(start=true),open2(start=false);
方程式
当V>V_min时
open1=true;

elsev如果使用相同的阈值打开和关闭阀门,明显的结果是抖动


参见和,它们都很好地描述了什么是颤振以及如何避免颤振。

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

请参阅和,它们都很好地描述了什么是聊天以及如何避免聊天。

尝试类似的方法

when abs(V - V_min) > 1.E-5 then 
  open = not pre(open);
end when;
这是一个双向触发的when条件,但公差很小。必须初始化变量
open(start=false)
,以确保其按预期工作

如果周围系统对该变化反应缓慢,则不会引起抖振,如果这直接影响到
der(V)
,则会减慢模拟速度,并可能仍然中断

为了更好地处理此类开关,我建议查看代表理想二极管的
Modelica.Electrical.Analog.Ideal.IdealDiode
(扩展自
Modelica.Electrical.Analog.Interfaces.IdealSemiconductor
)。正如您可能看到的,它并不是真正理想的二极管模型,但它尽可能地简化,而不会引起抖动

试试类似的方法

when abs(V - V_min) > 1.E-5 then 
  open = not pre(open);
end when;
这是一个双向触发的when条件,但公差很小。必须初始化变量
open(start=false)
,以确保其按预期工作

如果周围系统对该变化反应缓慢,则不会引起抖振,如果这直接影响到
der(V)
,则会减慢模拟速度,并可能仍然中断


为了更好地处理此类开关,我建议查看代表理想二极管的
Modelica.Electrical.Analog.Ideal.IdealDiode
(扩展自
Modelica.Electrical.Analog.Interfaces.IdealSemiconductor
)。正如您可能看到的,它并不是真正理想的二极管模型,但它尽可能地简化,而不会引起抖动

你能用磁滞效应吗?你能用磁滞效应吗?我尝试使用滞后,但当布尔变换器的状态(open1=false,open2=true)改变时,我得到了结果,但没有结果,我得到这个错误msg错误msg:85.3439s时间的雅可比求值自由混合系统解算器自由非线性系统解算器仿真过程失败。退出时代码为-11。现在,布尔状态更改后,我得到一些重采样,但仅在melli_秒,我在“DSKR因为IRES等于负1”中得到一个新的错误,这是什么原因造成的?您似乎正在使用OpenModelica。我添加了相关标签,因此其中一位专家可能会提供帮助。但我建议用最少的例子问一个新问题。根据目前的信息,很难提供帮助。当你这样做的时候,请看一看——特别是“帮助他人重现问题”部分。非常感谢,我是stackoverflow的新手,这就是为什么我在写帖子时遇到问题。我尝试使用滞后,但我得到了结果,但当布尔变换器的状态(open1=false,open2=true)改变时没有结果,我得到这个错误msg错误msg:85.3439s时间的雅可比求值自由混合系统解算器自由非线性系统解算器仿真过程失败。退出时代码为-11。现在,布尔状态更改后,我得到一些重采样,但仅在melli_秒,我在“DSKR因为IRES等于负1”中得到一个新的错误,这是什么原因造成的?您似乎正在使用OpenModelica。我添加了相关标签,因此其中一位专家可能会提供帮助。但我建议用最少的例子问一个新问题。根据目前的信息,很难提供帮助。当你这样做的时候,请看一看——特别是“帮助他人重现问题”部分。非常感谢,我是stackoverflow的新手,这就是为什么我在写文章时遇到问题的原因