1

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

Device operation 
  • 加载按钮 - 使抽屉打开并在打开时关闭(加载空 cdr)

  • 刻录按钮 - 开始在 cdr 上刻录文件,刻录过程中绿灯亮,
    完成后熄灭。一旦 cdr 被烧毁,writer 就会停止。

  • 验证按钮 - 验证之前记录在 cdr 上的文档,过程中绿灯亮,完成后熄灭,然后设备停止

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

  • 取消按钮 - 如果 cd writer 为空或不忙于验证或录制,则无效当加电时 - CD Writer 将确保抽屉关闭

  • 刻录按钮——当 cd writer 为空时以及在录制或验证过程中时无效。

  • 只有在刻录机不忙于刻录时才能开始验证。

    在此处输入图像描述

4

3 回答 3

1

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

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

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

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

于 2014-04-30T06:56:03.610 回答
1

从视觉上看,您的图表看起来像一个状态机,并且状态具有好听的名称 - 这是一个好的开始。:)

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

事件 [守卫] /动作

在哪里:

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

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

  1. 转换上的大多数标签不应该带有“/”,因为它表示一个动作。多为手动触发,如“加载”(按下按钮打开抽屉)、“取消”、“按钮”等。
  2. 考虑一些内部触发的事件,例如“刻录完成”或“CD 加载”
  3. 您可以在可能的情况下添加一些保护条件
  4. 我会删除所有没有效果的触发器(比如没有 CD 的取消)。它使图表更简单,不会丢失信息
  5. 在您的情况下,状态 LOADED 和 IDLE 有点奇怪,很弱。目前尚不清楚是什么让它们不同(参见下面的示例)

这是一个我觉得更准确的图表(有关其他评论,请参阅注释):

在此处输入图像描述

于 2014-04-30T07:24:07.783 回答
1
  • 您不需要描述从“空”到“空”的转换,因为不需要在状态机图中绘制没有任何操作或状态转换的转换。(状态转换表通常用于检查此类情况下的任何缺失转换。)
  • “已加载”和“空闲”可以表示为同一状态
  • 为了表示“绿灯”,我会写“打开绿灯”作为录制中的进入动作,“关闭绿灯”作为退出

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

在此处输入图像描述

于 2014-05-12T05:47:34.730 回答