我正在寻找逻辑结构的正确术语,我称之为“被动状态机”。
想象一下这个嵌入式设备:一些较低的程序层处理一个芯片卡读卡器并通过确定三种状态对用户输入作出反应:“卡入”,“卡出”,“卡错误”。这里执行足够的低级别操作。称之为状态机。
下层将状态报告给某些上层程序层,它会对更改作出反应,并与系统的其余部分进行通信,即发送消息,切换LED等< / p>
此上层中的程序逻辑也可以像简化状态机一样建模(UML 2):它在状态之间转换 - 最重要的是 - 条目和退出行动。状态基本上与较低层相同,但不是必需的(例如可能缩减为“卡OK”,“卡不正常”)。
最大的区别在于,这个“上层状态机”没有做任何决定 - 它只是对从较低级别获得的状态做出反应并提供动作。状态/转换/动作模型只是一种很好的方式,可以通过良好的方式将读者的逻辑可视化(当然,也可以告诉编译器要做什么......)。
或者换句话说:在“真实”状态机中,据我所知,状态的逻辑决定了要转换到的下一个状态。在“被动”变体中,一些外部实体做出决定,状态也相应地遵循。结果:所有状态之间的转换必须在上层可能。
但这实际上是一个“有限状态机器”(我想这里活跃的东西)?或者是否有一个更好的术语围绕着这个模型的被动特征?
编辑:感谢您的回复!两个数字澄清。当然两者都是状态机。然而,我看到一些质的差异:想象“低层”SM与硬件(阀门,传感器)直接接触,并且知道它反映的系统。例如,只有状态“正常”可以对“测试按钮”作出反应,其他人则不能。并非所有过渡都是可能的。 “更高级别”被认为是“愚蠢的”,只应该可视化/报告从较低级别获得的输入。所以所有转换必须是可能的。对于所有状态,状态切换逻辑都是相同的在外部状态(作为程序员)以避免冗余。它没有决定,它只是进入/退出行动。
较低级别:
更高级别:
答案 0 :(得分:1)
我认为你只有一个分层状态机(状态图表,所以UML支持)。也许如果您可以发布状态机的图表,我们可以提供更好的意见,但听起来好像您的“较低级别”机器将被建模为“上层”中的(复合)状态。你有从那个州到其他州的转变,或者只是回到自身?
所有FSM在某种意义上都是“被动的”。它们定义了一组有效状态,它们之间允许的转换以及导致转换发生的触发器(条件)和转换期间发生的(可选)操作。您的上层状态机是否不遵循此模型?
答案 1 :(得分:1)
从上一句到最后一句,我认为你误解了状态机。状态机不会决定转换,但会在收到启用转换的event
/ trigger
时接收它们。基本状态机实际上是被动的。如果状态没有completion
转换,则机器会等待,直到它收到可以将其移动到连接状态的触发器。