如何在modelica for when语句中生成复杂事件?
我尝试使用以下代码:如何在modelica for when语句中生成复杂事件?,modelica,openmodelica,Modelica,Openmodelica,我尝试使用以下代码: Real x,y; Boolean trigger(start = true) when x < y and trigger then trigger = false; end when; 实x,y; 布尔触发器(开始=真) 当x
Real x,y;
Boolean trigger(start = true)
when x < y and trigger then
trigger = false;
end when;
实x,y;
布尔触发器(开始=真)
当x
我只想为“when”生成一次事件。但是我的代码不起作用。
如何在modelica for when语句中生成复杂事件?您似乎遇到的问题是第一条错误消息
内部错误BackendDAETransform.analyseStrongComponentBlock失败(很抱歉,尚未实现对离散方程系统的支持)
。这似乎是,我认为这是因为在when语句中重新定义了部分条件变量
您可以使用reinit
解决此问题。另见和。它需要作用于一个状态变量,这就是为什么我把der(trigger)
放在那里的原因
model test_when
Real trigger(start = 1.0, fixed = true);
equation
der(trigger) = 0;
when trigger > 0.5 and time > 5 then
reinit(trigger, 0);
end when;
annotation(
experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.02));
end test_when;
也许有更好的方法来实现这一点。还有其他人对此有意见吗
您可以检查编译日志(Statistics-events)以确认只触发了一个事件。在Dymola中,您会收到以下错误消息: 计算因果关系分析需要触发变量 由方程求解:当x
Real x,y;
Boolean trigger(start = true) ;
equation
when x < y and pre(trigger) then
trigger = false;
end when;
实x,y;
布尔触发器(start=true);
方程式
当x
正如您所看到的,这非常简单(并在Dymola中进行了模拟),但我没有在OpenModelica中检查它。“但我的代码不起作用”并不是很有帮助——您希望发生什么,会发生什么?另外,请发布一个完整的,有效的例子。我得到翻译错误,我认为这是无效的代码。当我使用时代码工作:
当x。但是我得到了很多事件(x时,可以使用几个条件,如,但它与运算符“or”(条件不相互排斥)一样工作。谢谢您的回答。我看到了它的工作原理,我会发现我的实现有问题。非常感谢,它也在OM中。它可能是不带'pre()'的模拟,带有'algorithm':布尔触发器(start=true,fixed=true);时间>5时的算法,然后触发:=假;结束时代码>