0

我正在寻找我称之为“被动状态机”的逻辑结构的正确术语。

想象一下这个嵌入式设备:一些较低的程序层处理一个芯片卡阅读器,并通过确定三种状态来对用户输入做出反应:“卡入”、“卡出”、“卡错误”。在这里执行了足够的低级操作。称其为状态机。

下层将状态报告给上层程序层,上层程序层会对变化做出反应并与系统的其余部分进行通信,即发送消息、切换 LED 等。

这个上层的程序逻辑也可以像一个简化的状态机一样被建模(UML 2):它有状态之间的转换,最重要的是进入和退出动作。状态与下层基本相同,但不是必需的(例如,可能会简化为“Card OK”、“Card not OK”)。

最大的不同是这个“上层状态机”不做任何决定——它只是对从下层得到的状态做出反应并提供动作。状态/转换/动作模型只是一种很好的方式,可以以一种安排良好的方式将逻辑可视化给读者(当然,告诉编译器要做什么......)。

或者,换一种说法:据我所知,在“真实”状态机中,状态的逻辑决定了要转换到的下一个状态。在“被动”变体中,一些外部实体做出决定,状态随之而来。结果:状态之间的所有转换都必须在上层中是可能的。

但这实际上是一个“有限状态”(我想这里有一些活跃的东西)吗?或者有没有更好的术语来强调这个模型的被动特征?

编辑:感谢您的回复!两张图来说明。当然,两者都是状态机。但是我看到了一些质的差异:想象一下“较低级别”的 SM 直接接触硬件(阀门、传感器)并且知道它所反映的系统。例如,只有“正常”状态才能对“测试按钮”做出反应,其他状态不能。并非所有转换都是可能的。“更高级别”被认为是“愚蠢的”,并且应该只可视化/报告它从较低级别获得的输入。所以所有的转换都必须是可能的。状态切换逻辑对于所有状态都是相同的,并且将在状态之外实现(作为程序员思考)以避免冗余。它不决定,它只是执行进入/退出操作。

低等级: 在此处输入图像描述

更高层次: 在此处输入图像描述

4

2 回答 2

1

我认为您只有一个分层状态机(状态图和 UML 确实支持)。也许如果您可以发布您的状态机图表,我们可以提供更好的意见,但听起来您的“较低级别”机器将被建模为“上层”中的(复合)状态。你有从那个状态到其他状态的转换,或者只是回到它自己?

所有 FSM 在某种意义上都是“被动的”。它们定义了一组有效状态、它们之间允许的转换以及导致转换发生的触发器(条件)以及转换期间发生的(可选)操作。你的上层状态机不遵循这个模型吗?

于 2013-02-04T22:28:18.693 回答
1

从您的上一句到最后一句,我认为您误解了状态机。状态机不决定转换,但在接收到启用转换的event/时接受它们。trigger基本状态机实际上是被动的。如果一个状态没有completion转换,机器会一直等待,直到它收到可以将其移动到连接状态的触发器。

于 2013-02-05T14:25:20.580 回答