Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

使用 Stateflow 图对有限状态机进行建模

有限状态机表示一种事件驱动的反应式系统,当定义变化的条件成立时,该反应式系统会从一种工作模式转移到另一种工作模式。例如,您可以使用状态机表示一辆汽车的自动变速器。变速箱有多种工作模式,例如停车、倒车、空档、行驶和低速。当驾驶员移动换挡杆时,系统从一种工作模式转移到另一种工作模式。

Stateflow 模块的类型

为了表示有限状态机的输入、输出和工作模式之间的关系,您可以将 Stateflow® 模块添加到 Simulink® 模型中,以创建状态转移图、状态转移表和真值表:

为了实现控制逻辑,Stateflow 图和 State Transition Table 模块可以使用 MATLAB® 或 C 语言作为动作语言。Truth Table 模块只使用 MATLAB 作为动作语言。有关详细信息,请参阅使用 MATLAB 和 C 作为动作语言语法时的差异

提示

要将状态机编程的优势与 MATLAB 的全部功能结合起来,您可以创建一个独立的 Stateflow 图。您可以直接通过命令行窗口或使用脚本将独立图作为 MATLAB 对象执行。您还可以编写一个 MATLAB App 以通过图形用户界面控制图的状态。有关详细信息,请参阅Create Stateflow Charts for Execution as MATLAB Objects

Stateflow 图编程

要创建对有限状态机进行建模的 Stateflow 图,请执行以下操作:

  1. 通过调用函数 sfnew,创建一个包含空 Stateflow 图的 Simulink 模型。

    sfnew

  2. 要打开 Stateflow 编辑器,请双击图模块。有关使用 Stateflow 编辑器的详细信息,请参阅 Stateflow 编辑器操作

  3. 对于系统中的每个工作模式,绘制一个状态,并通过添加状态标签来实现状态动作,如 通过使用状态来表示工作模式 中所述。

  4. 要表示状态之间的流程逻辑方向,请绘制转移并通过添加转移标签来实现转移条件,如 工作模式之间的转移 中所述。

  5. 如果您的系统有输入或输出,或依赖于任何状态变量,请添加输入、输出和局部数据,如添加 Stateflow 数据中所述。

  6. 如果您的系统对事件触发器作出反应,或必须在您的模型的图或其他模块中触发动作,请添加输入、输出或局部事件,如通过广播事件同步模型组件中所述。

  7. 如果您的图有复杂的状态动作或转移条件,请在图中添加可重用函数。通过从下列函数中进行选择,在状态动作和转移条件中使用对所要进行的计算类型最自然的函数格式:

    您也可以编写自己的 C 或 C++ 代码并集成到图中。有关详细信息,请参阅Reuse Custom Code in Stateflow Charts

  8. 使用输入和输出端口将图连接到 Simulink 模型中的其他模块。

  9. 要仿真模型,请点击运行 。在仿真过程中,Stateflow 编辑器通过图动画突出显示激活状态和转移。

有关说明此工作流的教程,请参阅构造并运行 Stateflow 图

参考

[1] Harel, David. "Statecharts: A Visual Formalism for Complex Systems." Science of Computer Programming 8, no.3 (June 1987): 231-74.

[2] Hatley, Derek J. and Imtiaz A. Pirbhai. Strategies for Real-Time System Specification. New York, NY: Dorset House Publishing, 1988.

另请参阅

| | |

相关主题