Modelica Discrete Semantics

让人想犯罪 __ 提交于 2019-12-02 07:23:08

Well, a few comments. First, your code is non-deterministic. There are no assurances about the order of events that are not somehow tied to each other through a common "cause". There are features in Modelica 3.3 to make your system synchronous (which removes the ambiguities). But you'll have to read the specification for that.

But I'd also like to point out what is essentially an error in your code. You say:

when time >= 0.5 and time <= 0.5 then
  q := step.y;
end when;

My guess is that you are trying to set the value of q at the same "instant" that step.y is set (and then further wondering which gets resolved first). But this is not how a when statement works. I suspect you are trying to represent the "instant" that step.y gets set as time >= 0.5 and time <= 0.5. But that is not correct. The instant it gets set is time >= 0.5 alone. The key point here is the when is not the same as if.

To put this a bit more formally, the equation inside the when clause becomes active when the condition associated with the when clause becomes true. This is really beyond the scope of your question, but you should familiarize yourself with the differences between when and if, because this are very important semantics.

My instinct tells me that you may need a pre() for the conditions, but it's just my guess.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!