【问题标题】:Finite State Machine Vending Machine Diagram有限状态机自动售货机图
【发布时间】:2015-06-29 05:18:37
【问题描述】:

我正在尝试为自动售货机绘制 FSM 图。这台机器接受镍币、硬币、硬币、半美元和美钞。有 4 个选项可供您选择。 3 是 1.15 美元,1 是 1.50 美元。如果该人插入的物品超过了物品的价值,则将给予更改。

FSM 输入

现金接收器产生一个 3 位编码值,表示没有硬币/镍/一角硬币/四分之一/半美元/美元。 比较器产生一个 2 位编码信号,指示将其输入与“钱箱”值进行比较的结果。

项目选择器生成一个 3 位编码值,表示要购买(分配)的选择。

我的问题是,我需要为每一美元的价值建立一个状态吗?现在我正在尝试它,我有接近 50 个状态,我什至不在图表的项目选择部分。有没有更简单的方法?

【问题讨论】:

  • 你把这个问题复杂化了。自动售货机只关心几件事:你选择了什么项目,它花了多少钱,投入了多少钱。当你插入钱时,它并不一定会改变自动售货机的状态。如果某个操作改变了自动售货机的行为方式,那么您将转换到一个新状态。
  • 所以当钱被插入时,我不改变状态?我如何跟踪机器中有多少钱才能知道是否可以购买物品?如果我处于初始状态,并且我插入了四个四分之一,一角硬币和镍,在我准备好选择一个项目之前,我是否根本不改变状态?我什么时候知道我有足够的钱搬到下一个州
  • 正确,因为插入的金额不会改变机器的行为方式。您也可以将其视为转换到相同的状态。然后,一旦您做出选择,您就可以转换到下一个状态。您可以将状态视为与允许机器执行的一组操作相关联。在状态 A 中,机器只能收钱。在状态 B,机器只能分发物品。在状态C,机器只能找零。类似的东西。您的过渡条件基于投入的成本和金钱与所选项目之间的比较

标签: fsm state-machine


【解决方案1】:

由于 FSM 不提供量化值的方法,因此您必须按状态对这些值进行建模。这将导致状态数量的爆炸式增长。这就是为什么大多数反应系统都使用扩展的分层机器概念(如 Harel 状态图)来建模的原因。这些允许在状态机中使用变量,这使得它变得更加简单。您的案例的状态图可能如下所示:

在这里找到更大的版本:vending machine statechart

我希望状态机的含义是自我解释的……这个状态图定义了一个在各个重要方面都不同于 FSM 的状态机。

  1. 首先您可以定义变量(左侧)来保存数量值,例如硬币价格等。
  2. Choices(小菱形)可让您构建过渡结构,从而拒绝过渡复杂性
  3. 名为“付款”和“商品供应”的矩形是平行区域。每个区域都有自己的活动状态。所以整体状态是两种活动状态的组合。 FSM 需要定义所有并行区域的状态的叉积。

使用这些机制是维持有意义的状态数量的唯一方法。顺便说一下,该示例是使用开源 Yakindu Statechart Tools (on statecharts.org) 构建的。它允许您对模型进行建模和交互式仿真以及生成状态机代码。

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多