CD刻录机的状态机

时间:2014-04-29 23:18:24

标签: uml state-machine statechart

作为一个新手我正在尝试使用Visio为CD编写器开发一个状态机。下面是设备操作/交易和附件,是我到目前为止所做的事情的图表,我不确定它是否准确表示。

Device operation 
  • 加载按钮 - 导致抽屉打开,如果打开则关闭(加载空的cdr)

  • 刻录按钮 - 在cdr上开始录制文档,在刻录过程中绿灯亮起 并在完成后熄灭。一旦cdr被烧毁,编写器就会停止。

  • 验证按钮 - 验证以前在CDr上录制的文档,绿灯亮起 处理完成后关闭,然后设备停止

  • 取消按钮 - 在录制或验证期间随时停止处理

  • 取消按钮 - 如果CD刻录机为空或未忙于验证或录制,则无效当打开电源时 - CD刻录机将确保抽屉已关闭

  • 刻录按钮 - 当CD刻录机为空并且在录制或验证过程中无效。

  • 只有在CD刻录机没有忙于录制时才能启动验证。

    enter image description here

3 个答案:

答案 0 :(得分:1)

您需要将显式事件指定为转换的触发器。

在当前状态机中,每个转换(离开初始顶点的转换除外)都具有效果,但不具有触发器。更准确地说,它们由默认的完成事件触发,因此是自动的。

此外,由于所有转换都对同一事件做出反应,因此您的状态机是非确定性的。例如,在状态loaded中,对Recording,empty和loaded all的转换都会对完成事件做出反应。当调度完成事件时,这些转换被认为是冲突的,并且其中一个是非确定性地选择的。我确信这不是你想要的。

阅读UML规范,并定义转换的触发器。

答案 1 :(得分:1)

视觉上你的图表看起来像状态机,状态名称听起来很好 - 这是一个好的开始。 :)

我看到的第一个问题是转换规范。这是不正确的。 UML中的状态转换按以下格式指定:

事件[警卫] /行动

其中:

  • 事件(或触发器)是内部"信号的外部信号"开始过渡。它可以是用户激活的按钮,经过的计时器,检测到的错误等。甚至可以省略。
  • guard 是一个应该满足的逻辑条件,以便开始转换。它通常是一个返回布尔值tru或false的表达式。它也可以省略。
  • 动作是一种副作用,在触发转换时执行。 Ic也可以省略。

回到你的图表我会说......

  1. 转换过程中的大多数标签都不应该反复使用" /"因为它表示一个动作。主要有手动触发器,例如" load" (按下按钮打开抽屉),"取消"," butn"等。
  2. 考虑一些内部触发的事件,例如"刻录完成"或" CD已加载"
  3. 您可以在可能的情况下添加一些保护条件
  4. 我会删除所有没有效果的触发器(例如取消没有CD)。它使图表更简单,不会丢失信息
  5. 在你的情况下加载和空闲状态有点奇怪,弱。目前尚不清楚是什么使它们与众不同(见下面的例子)
  6. 这是一个我觉得更精确的图表(参见附注中的注释):

    enter image description here

答案 2 :(得分:1)

  • 你不需要描绘来自"空的"到"空"因为没有任何动作或状态转换的转换不需要在Statemachine图中绘制。 (State Transition tables通常用于检查此类情况下的任何缺失过渡。)
  • "装载"和#34;闲置"可以在一个中表示为同一个州
  • 要代表"绿灯",我会写"打开绿灯"作为录音中的录入动作和"关闭绿灯"作为退出

这是我绘制的图表。托盘的状态(无论是打开还是关闭)应在实际模型中考虑,但不在下面的示例图中。

enter image description here