使用 Stateflow 图对有限状态机进行建模
有限状态机表示一种事件驱动的反应式系统,当定义变化的条件成立时,该反应式系统会从一种工作模式转移到另一种工作模式。例如,您可以使用状态机表示一辆汽车的自动变速器。变速箱有多种工作模式,例如停车、倒车、空档、行驶和低速。当驾驶员移动换挡杆时,系统从一种工作模式转移到另一种工作模式。
Stateflow 模块的类型
为了表示有限状态机的输入、输出和工作模式之间的关系,您可以将 Stateflow® 模块添加到 Simulink® 模型中,以创建状态转移图、状态转移表和真值表:
Chart 是基于状态转移图的有限状态机的图形表示形式。在 Stateflow 图中,状态和转移构成了时序逻辑系统的基本构建块。状态对应于工作模式,转移表示状态之间的路径。有关详细信息,请参阅通过使用状态来表示工作模式和工作模式之间的转移。
State Transition Table 以表格形式表示序列模态逻辑的有限状态机。除了在 Stateflow 图中绘制状态和转移这种方式,您还可以使用状态转移表,以简洁、紧凑的格式对状态机进行建模,而且只需对图对象进行极少的维护。有关详细信息,请参阅使用状态转移表以表格形式表达时序逻辑。
Truth Table 以表格格式实现组合逻辑设计。您可以使用真值表模块为故障检测和管理以及模式切换的决策建模。有关详细信息,请参阅使用真值表对组合逻辑建模。
为了实现控制逻辑,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 图,请执行以下操作:
通过调用函数
sfnew
,创建一个包含空 Stateflow 图的 Simulink 模型。sfnew
要打开 Stateflow 编辑器,请双击图模块。有关使用 Stateflow 编辑器的详细信息,请参阅 Stateflow 编辑器操作。
对于系统中的每个工作模式,绘制一个状态,并通过添加状态标签来实现状态动作,如 通过使用状态来表示工作模式 中所述。
要组织复杂的系统,请通过在父状态中绘制子状态来定义状态层次结构。例如,您可以使用父状态来包含共享相同状态动作的子状态。有关详细信息,请参阅使用状态层次结构设计多级状态复杂性。
要对同时处于激活状态的多个工作模式建模,请在父状态中启用并行 (AND) 分解。有关详细信息,请参阅通过使用状态分解定义互斥和并行模式。
要表示状态之间的流程逻辑方向,请绘制转移并通过添加转移标签来实现转移条件,如 工作模式之间的转移 中所述。
要将第一个状态标记为激活,请使用默认转移。有关详细信息,请参阅使用默认转移来指定初始子状态活动。
要创建从一个源到多个目标或从多个源到一个目标的路径,请组合使用转移和连接结点。有关详细信息,请参阅组合使用转移和结点以创建分支路径。
如果您的系统有输入或输出,或依赖于任何状态变量,请添加输入、输出和局部数据,如添加 Stateflow 数据中所述。
如果您的系统对事件触发器作出反应,或必须在您的模型的图或其他模块中触发动作,请添加输入、输出或局部事件,如通过广播事件同步模型组件中所述。
如果您的图有复杂的状态动作或转移条件,请在图中添加可重用函数。通过从下列函数中进行选择,在状态动作和转移条件中使用对所要进行的计算类型最自然的函数格式:
图形函数 - 封装包含逻辑和迭代循环模式的流程图。请参阅通过定义图形函数重用逻辑模式。
MATLAB 函数 - 编写面向矩阵的算法以进行数据分析和实现可视化。请参阅通过定义 MATLAB 函数重用 MATLAB 代码。
Simulink 函数 - 通过调用 Simulink 函数调用子系统来简化您的设计。请参阅在 Stateflow 图中重用 Simulink 函数。
真值表 - 表示决策应用的组合逻辑。请参阅使用真值表对组合逻辑建模。
您也可以编写自己的 C 或 C++ 代码并集成到图中。有关详细信息,请参阅Reuse Custom Code in Stateflow Charts。
使用输入和输出端口将图连接到 Simulink 模型中的其他模块。
要仿真模型,请点击运行
。在仿真过程中,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.
另请参阅
sfnew
| Chart | State Transition Table | Truth Table