您的位置:首页 > 其它

RoseRT 中的 Transition 状态迁移,写给新手

2009-11-03 19:19 134 查看
  在开始介绍之前,先说点别的,我们刚进公司的那会,公司要对我们进行一些技术培训,而这些培训又外包了给外面的公司的,其中有一项就是RoseRT,在说了很多无关痛痒的东西之后,他要给我们演示下用 RoseRT 如何来实现一个工程,当然是大家都熟悉不能在熟悉的 HelloWorld 了。当然这么简单的工程是没有可能出错了的,不过接下来,他试图给我们讲解一下状态的迁移,决定在输出一次 Hello World,在状态图中他又拖了一个状态,然后用线给链接好,再写好代码之后,编译,运行,可是无论如何只有一个Hello World,第二个怎么也不出来。

  我说这些倒不是为了说他什么,因为他的那个错误我也犯了,我也觉得到了一个状态之后,这个状态完成了就因该自动去下一个状态,不过事实上并不是那么简单的。

  如果大家仔细观察,应该会发现,其实你将线连好之后,中间是有缺口的,不是一条完整的直线


  这就表示从Qua还是无法到达Ans这个状态的。

  那么如何来实现状态的迁移呢?

  大家双击这条线之后会发现有个 Trigger 栏, Trigger 触发器,对了!RoseRT中的状态迁移是要靠触发的,这种触发来源很多,有来自定时器的,有来自系统的,有来自程序本身的,也有可能来自外部的,随着你用RoseRT开发的越多,就回发现越多可以触发状态迁移的Trigger,当然我们今天就只举一个简单的列子,定时器触发。

  首先到End Ports中建了一个timer:

  


  然后到打开刚才的那个Trigger窗口,再 Insert 一个触发器,选择我们刚才建立的那个timer,Signal 就选择 timeout,然后点击确定。

  


  可以看到的那条线已经直了。然后在Qua中加入以下

   timer. informin(RTTimespec(2,0)) 代码 ,这是一个RoseRT自带的库函数,设置定时器用的,具体使用大家日后在学习吧。

  然后,写好其他相应的代码,因为都比较简单,不超两行代码我就不演示了,编译运行。



  定时器时间到了之后,从RoseRT中看到状态的迁移。



  

  这个演示相对来说是很简单的,正常情况下,一个较大的程序是很多个Capsule相互之间发送消息,通过不断来状态迁移来完成一系列的流程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: