首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Modelica离散语义

Modelica离散语义
EN

Stack Overflow用户
提问于 2013-08-02 10:07:42
回答 2查看 250关注 0票数 1

我试图理解离散信号的Modelica语义。给定一个阶跃信号,该信号在t= 0.5处具有无限斜率,瞬间从0.0过渡到1.0。然后假设您还有一个when语句,如下代码所示:

代码语言:javascript
复制
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也会满足这个等式。所以,我只是想知道是否有任何规则来防止非决定性行为。如果有人能帮助或指点我任何文学作品,那将是非常感谢的!耽误您时间,实在对不起。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-05 00:57:54

好吧,有几点评论。首先,您的代码是不确定的.没有任何关于事件的顺序的保证,这些事件在某种程度上不通过一个共同的“原因”相互联系。Modelica 3.3中有一些特性可以使您的系统同步(这可以消除歧义)。但你得看一下说明书。

但我也想指出,代码中的错误本质上是什么。你说:

代码语言:javascript
复制
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,它就会单独出现。这里的关键点是whenif不一样。

更正式地说,when子句中的等式在(与when子句关联的条件变为真)时变为active when。这确实超出了您的问题范围,但是您应该熟悉whenif之间的区别,因为这是非常重要的语义。

票数 1
EN

Stack Overflow用户

发布于 2013-08-02 20:59:19

我的直觉告诉我,你可能需要一个预()的条件,但这只是我的猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18014281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档