全球FlexSim系统仿真中文论坛

搜索
查看: 5837|回复: 5
打印 上一主题 下一主题

关于on reset触发运行机制

[复制链接]
跳转到指定楼层
1#
雪饼 发表于 2014-3-26 15:30:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上午的时候有同学提出一个问题,完全相同的两个模型,自己做了两次之后,一个可以运行成功,而另一个无法实现。起初并未在意,以为是个bug,后来几番尝试之后发现终于发现了其中的规律。- X: K: A/ V4 V1 _6 P: a$ `( R6 J
      这是有关于onreset触发的问题。在onreset触发中关闭自己的端口是完全没有问题的,然而,当我们在onreset中关闭其他实体的端口时我们发现有的时候是可以的有的时候却不可以。我们来简单分析一下这个情况。简单的做了一个小模型(模型1)描述该问题。
' K  ^; Q4 i+ y7 y. u     首先,我们要提出的是,在重置时,他并不仅仅是将模型还原,这其中,还隐藏着一个逻辑,将各实体的输入输出端口全部打开。这点我们可以用模型2来验证。在重置时,我们延迟关闭的暂存去输入端口被打开了,而我并没有写任何的打开输入端口的代码。3 r4 L* x7 a6 B. G" b0 K
     其次,我们知道,在软件中,代码的执行速度是超快的,然而不管怎么快,它都是有顺序的。比如在同一个触发中,必然是先运行上一行的,然后运行下一行的。而不同的触发,由于触发的条件与时间不同,我们也比较容易区分。但是,onreset是个比较特殊的触发,因为模型中有很多实体,那么我们在点击重置的时候,它的运行顺序是怎样的呢?我在不同的实体的onreset中各自添加了断点。发现,它是按照在结构树中的rank位置依次运行的(没有正式版的同学可以初步认为是你拖入实体得到顺序)。
7 {) S( z! P! c    至此,两个同样的模型却出现不同情况的原因明了。模型1,虽然在source1中关闭了queue2的输入,但是这些都是在queue2重置触发代码运行之前实现的,当queue2的重置触发运行了的时候,queue2的输入端口又被打开了,所以失败了。而source4与queue3相反,因为queue3在source4之前(rank)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 2威望 +40 收起 理由
shadowwind + 30
慧娴亚伦 + 10 牛逼!

查看全部评分

2#
heh518 发表于 2014-3-26 16:57:49 | 只看该作者
1# 雪饼 9 [. X& n5 a7 z
( e& S3 D! U" X) d

+ ?3 o) [" H. j1 m: \% c2 G版主牛。顶起!受益匪浅!
3#
nancy0119 发表于 2014-3-26 17:27:19 | 只看该作者
很有用的东西~留着学习~顶版主~
4#
Rosalyn 发表于 2014-3-26 19:53:23 | 只看该作者
楼主的这种精神值得学习
5#
657776724 发表于 2015-12-12 20:42:58 | 只看该作者
精品
6#
hans_tigger 发表于 2015-12-24 19:38:36 | 只看该作者
精品
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-6-30 16:47 , Processed in 0.077673 second(s), 18 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表