对有限状态机建模
一个有限状态机表示若干由事件驱动的反应式系统,这些系统在满足特定条件时会在工作模式之间转移。例如,您可以对汽车加速时在挡位之间切换的变速器进行建模。由于有限状态机可以表示具有多个状态和转换的系统,因此它们在软件工程、机器人和电信等领域很常见。您可以使用 Stateflow® 中的状态、转移和数据对有限状态机进行建模。
例如,在这个简单的 Stateflow 图中,汽车变速器从一个挡位状态转移到另一个。

在软件开发中,您可以使用有限状态机来管理用户界面、协议设计和工作流自动化。在机器人领域,有限状态机控制机器人行为,实现任务(如导航、避障和操纵物体)之间的无缝转移。在电信领域,您需要对通信协议和网络操作进行建模。您可以使用 Stateflow 来设计各种领域中有限状态机的性能并对其进行仿真和故障排除。
Stateflow 模块的类型
为了表示有限状态机的输入、输出和工作模式之间的关系,您可以使用这些 Stateflow 模块创建状态转移图、状态转移表和真值表。
Stateflow 模块 | 用例 |
|---|---|
| Chart | 有限状态机的图形表示。在 Stateflow 图内部,您使用状态和转移来构建时序逻辑系统。状态对应于工作模式,转移表示状态之间的路径。有关详细信息,请参阅通过使用状态来表示工作模式和工作模式之间的转移。 |
| State Transition Table | 有限状态机的顺序模态逻辑的表格表示。使用 State Transition Table 模块以紧凑格式对状态机进行建模,该格式只需对图形对象进行极少的维护。有关详细信息,请参阅使用状态转移表对有限状态机建模。 |
| Truth Table | 组合逻辑设计的表格表示。您可以使用 Truth Table 模块为故障检测和管理以及模式切换的决策建模。有关详细信息,请参阅使用真值表对组合逻辑建模。 |
实现 Stateflow 模块
要创建对有限状态机进行建模的 Stateflow 图,请按照以下步骤操作:
使用
sfnew函数创建一个包含空 Stateflow 图的 Simulink® 模型。要打开 Stateflow 编辑器,请双击图模块。对于系统中的每个工作模式,绘制一个状态,并通过添加状态标签来实现动作。
绘制转移以表示状态之间的流程逻辑方向,并添加转移标签以实现转移条件。使用默认转移来标记第一个激活状态。
如果您的系统有输入或输出,或依赖于任何状态变量,请添加输入、输出和局部数据。有关详细信息,请参阅添加 Stateflow 数据。
如果您的系统对事件触发器作出反应,或必须在您的模型的图或其他模块中触发动作,请添加输入、输出或局部事件。有关详细信息,请参阅Use Events to Execute Charts。
如果您的图有复杂的状态动作或转移条件,您可以添加可重用函数。您可以从图形函数、MATLAB 函数、Simulink 函数或真值表中进行选择。您也可以编写自己的 C 或 C++ 代码以集成到图中。有关详细信息,请参阅通过定义 MATLAB 函数重用 MATLAB 代码和在状态和转移中调用 Simulink 函数。
使用输入端口和输出端口将图连接到 Simulink 模型中的其他模块。
点击运行
以仿真模型。Stateflow 编辑器在仿真期间通过突出显示激活状态和转移来实现图动画。
Stateflow 图和 State Transition Table 模块可以使用 MATLAB® 或 C 语言作为动作语言。Truth Table 模块仅使用 MATLAB 作为动作语言。有关详细信息,请参阅使用 MATLAB 和 C 作为动作语言语法时的差异。
有关说明如何创建 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.