作为一个新手我正在尝试使用Visio为CD编写器开发一个状态机。下面是设备操作/交易和附件,是我到目前为止所做的事情的图表,我不确定它是否准确表示。
Device operation
加载按钮 - 导致抽屉打开,如果打开则关闭(加载空的cdr)
刻录按钮 - 在cdr上开始录制文档,在刻录过程中绿灯亮起 并在完成后熄灭。一旦cdr被烧毁,编写器就会停止。
验证按钮 - 验证以前在CDr上录制的文档,绿灯亮起 处理完成后关闭,然后设备停止
取消按钮 - 在录制或验证期间随时停止处理
取消按钮 - 如果CD刻录机为空或未忙于验证或录制,则无效当打开电源时 - CD刻录机将确保抽屉已关闭
刻录按钮 - 当CD刻录机为空并且在录制或验证过程中无效。
只有在CD刻录机没有忙于录制时才能启动验证。
答案 0 :(得分:1)
您需要将显式事件指定为转换的触发器。
在当前状态机中,每个转换(离开初始顶点的转换除外)都具有效果,但不具有触发器。更准确地说,它们由默认的完成事件触发,因此是自动的。
此外,由于所有转换都对同一事件做出反应,因此您的状态机是非确定性的。例如,在状态loaded
中,对Recording,empty和loaded all的转换都会对完成事件做出反应。当调度完成事件时,这些转换被认为是冲突的,并且其中一个是非确定性地选择的。我确信这不是你想要的。
阅读UML规范,并定义转换的触发器。
答案 1 :(得分:1)
视觉上你的图表看起来像状态机,状态名称听起来很好 - 这是一个好的开始。 :)
我看到的第一个问题是转换规范。这是不正确的。 UML中的状态转换按以下格式指定:
事件[警卫] /行动
其中:
回到你的图表我会说......
这是一个我觉得更精确的图表(参见附注中的注释):
答案 2 :(得分:1)
这是我绘制的图表。托盘的状态(无论是打开还是关闭)应在实际模型中考虑,但不在下面的示例图中。