网站大量收购独家精品文档,联系QQ:2885784924

visualSTATE第三章.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 双向交通灯控制器实际上是两个状态机的组合,每个状态机控制着一个方向的信号灯。 虽然这两个状态机不是互相独立的,而是孪生关系的,但是我们可以把它们看成是两个单独的状态机,这会给设计带来很多好处,特别是在设计大型系统的时候。 3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 并发交通灯控制器有两个状态机EW和NS,每个状态机中的状态转换是以另一个状态机中所处的状态为前提条件的。只要NS处于Red,那么EW就只能向状态Green改变,反之亦然。 重复一遍,时间ON_NS和ON_EW决定哪个灯先被激活。 3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 尽管从理论上看好像没必要区分这两种描述(1和2两种模型),然而,从实际运用的角度来看,后一种双状态机的模型设计更好一些。总之,这种设计方法允许设计者把一个状态机划分成许多相对独立的部分,而不是做出很大的单一状态机模型。 假设某个运用有10个并发的状态机,每个状态机向交通灯那样有3个状态。如果这10个状态机被组合成一个单一状态机,那么将有310=59049个状态,这么大的一个描述是无法掌握的,但如果用10个并发状态机时,将会很容易地实现这个系统。 3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 除了在结构设计时非常重要以外,并发结构也揭示了其它有趣的可能性,例如以下交通灯控制器实例的引申: “!”标志是表示监控结果为“非”。 3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 以上这种制约使得当一个状态机处于状态Green时,另一个状态机就无法转换到状态Green。然而,当某个状态机从状态Yellow转换到状态Red,而另一个状态机从Red转换到Green时,就没有监控信号的产生。 3.3.2 例子:交通灯控制器 2. 并发结构的交通灯控制器 这使得以下情况变得可能:当一个状态机处于Yellow状态时,另一个状态机能从Red转换到Green。在这里,“当处于xx状态”有很多种理解方式,所有理解都是能被状态机接受的系统实现,例如: 转换是同时被执行的 转换是按一些未明确的顺序被执行的 转换是相互交叉的 这种类型的转换(和它们所从属的状态机)被叫做并发结构(concurrent)。 3.3.2 例子:交通灯控制器 3. 并发模型与顺序模型的比较 虽然在1和2里状态机模型的运算结果是一样的,但是在实际应用中,我们推荐2中的并发结构模型。 如果并发结构能被恰当应用,它将能帮助你做出更易理解、更加精简的模型。选用一个包含有几个状态的模型好,还是选用一个单一的状态机模型好,其实这个决定并不容易做出,往往还需要依靠开发者的经验和直觉。 然而,这里有一个推荐法则:由一个独立的(并发的)状态机去控制每一个独立的行为。一个行为可以是一系列的时间处理,在交通灯的例子中,从两个方向来的汽车没有任何关系,所以序列ON_NS和ON_EW是彼此独立的。一个行为也可以是一串输出动作或一个内部的控制循环。 3.3.2 例子:交通灯控制器 3. 并发模型与顺序模型的比较 另一个例子是本书中介绍过的洗衣机的例子,on\off开关发出的事件和旋转检测是相互独立的,然而事件ON和事件DOOR并不是互相独立的,它们总是交替发生。 在实际应用中,有时很难精准地确定在一个环境中,独立的事件序列是什么。然而,当你遇到模型呈爆炸性的发展情况时,这就表示这个单一状态机控制着两个或更多的独立序列,你应该考虑把模型拆分成几个并发关系的状态机。 状态机的组合爆炸 3.3.3 状态机同步 本节将描述事件是如何被用来同步状态机,包括状态机互相间的同步以及状态机与环境间的同步。为了说明这一点,我们可以把交通灯的例子稍微修改一下。假设在紧急情况下,两个方向的交通灯不管当前处于何种状态,都变成红灯状态。我们可以通过增加另一个事件EMERGENCY到状态机模型中,来实现这样的功能。这个事件必须在一个单一的转换中,使两个状态机分别改变到一个新的状态,我们称之为NS_blink和状态EW_blink。 3.3.3 状态机同步 下图显示了这个能处理紧急事件的模型状态机,而事件NORMAL通过把NS和EW变为状态Red而把状态机带回到正常的工作状态。 3.3.3 状态机同步 当一个紧急事件发生时,两个状态机将同时分别地执行一条转换,把它们的当前状态分别置于状态NS_blink和状态EW_blink。例如,我们可以假设当事件EMERGENCY发生时,EW处于绿灯状态,而NS处于黄灯状态,同时发生的转换可以把EW和NS同时置于状态Blink。“同时发生”是指在状态(NS_green,EW_yellow)和状态(NS_red,EW_

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档