我试图理解离散信号的Modelica语义。给定一个阶跃信号,该信号在t= 0.5处具有无限斜率,瞬间从0.0过渡到1.0。然后假设您还有一个when语句,如下代码所示:
model test_discrete
Modelica.Blocks.Interfaces.RealOutput q(start = -1.0);
Modelica.Blocks.Sources.Step step(
height=1,
offset=0,
startTime=0.5)
algorithm
when time >= 0.5 and time <= 0.5 then
q := step.y;
end when;
equation
end test_discrete;我的问题是Q是0.0还是1.0?让我们假设q被初始化为-1。当我实现代码时,它会转换为1.0,但我的困惑是0.0也会满足这个等式。所以,我只是想知道是否有任何规则来防止非决定性行为。如果有人能帮助或指点我任何文学作品,那将是非常感谢的!耽误您时间,实在对不起。
发布于 2013-08-05 00:57:54
好吧,有几点评论。首先,您的代码是不确定的.没有任何关于事件的顺序的保证,这些事件在某种程度上不通过一个共同的“原因”相互联系。Modelica 3.3中有一些特性可以使您的系统同步(这可以消除歧义)。但你得看一下说明书。
但我也想指出,代码中的错误本质上是什么。你说:
when time >= 0.5 and time <= 0.5 then
q := step.y;
end when;我的猜测是,您正在尝试将q的值设置在设置step.y的“瞬间”(然后进一步怀疑哪个值会首先得到解决)。但这不是when语句的工作方式。我怀疑您正在尝试表示step.y被设置为time >= 0.5 and time <= 0.5的“瞬间”。但这是不对的。一旦它被设置为time >= 0.5,它就会单独出现。这里的关键点是when与if不一样。
更正式地说,when子句中的等式在(与when子句关联的条件变为真)时变为active when。这确实超出了您的问题范围,但是您应该熟悉when和if之间的区别,因为这是非常重要的语义。
发布于 2013-08-02 20:59:19
我的直觉告诉我,你可能需要一个预()的条件,但这只是我的猜测。
https://stackoverflow.com/questions/18014281
复制相似问题