建立有限状态机模型Stateflow图表
一个有限状态机是事件驱动的反应式系统的表示,当定义更改的条件为真时,该系统将从一种操作模式转换到另一种操作模式。例如,您可以使用状态机来表示汽车的自动变速器。变速器有停车、倒车、空挡、驱动和低速等工作模式。当驾驶员移动换挡时,系统从一种工作模式过渡到另一种工作模式。
类型的Stateflow块
要表示有限状态机的输入、输出和操作模式之间的关系,可以添加Stateflow®块到Simulink®模型来创建状态转换图、状态转换表和真值表:
一个图表是基于状态转换图的有限状态机的图形表示。在状态流图中,状态和转换构成了顺序逻辑系统的基本构建块。状态对应于操作模式,转换表示状态之间的路径。有关更多信息,请参见通过使用状态表示操作模式而且运行模式转换.
一个状态转换表表示表式顺序模态逻辑的有限状态机。您可以使用状态转换表,而不是在Stateflow图中绘制状态和转换,以一种简洁、紧凑的格式为状态机建模,这种格式需要对图形对象进行最少的维护。有关更多信息,请参见状态流中的状态转换表.
一个真值表以表格格式实现组合逻辑设计。您可以使用真值表块为故障检测和管理以及模式切换的决策建模。有关更多信息,请参见使用真值表来建模组合逻辑.
实现控制逻辑、状态流图和状态转换表模块可以使用MATLAB®或C作为动作语言。真值表块只使用MATLAB作为动作语言。有关更多信息,请参见作为动作语言的MATLAB和C的语法差异.
提示
要将状态机编程的优点与MATLAB的完整功能结合起来,可以创建一个独立的Stateflow图。您可以直接通过命令窗口或使用脚本将独立图表作为MATLAB对象执行。您还可以编写一个MATLAB应用程序,通过图形用户界面控制图表的状态。有关更多信息,请参见创建状态流图执行作为MATLAB对象.
项目是Stateflow图表
创建一个建模有限状态机的状态流图:
通过调用函数创建一个包含空状态流图的Simulink模型
sfnew
.sfnew
要打开状态流编辑器,双击图表块。有关使用状态流编辑器的更多信息,请参见Stateflow编辑操作.
对于系统中的每个操作模式,绘制一个状态并通过添加状态标签来实现状态操作,如通过使用状态表示操作模式.
要组织复杂系统,可以通过在父状态中绘制子状态来定义状态层次结构。例如,可以使用超状态来包围共享相同状态操作的子状态。有关更多信息,请参见使用状态层次结构设计多级状态复杂性.
要对同时活动的操作模式建模,可以在父状态中启用并行(AND)分解。有关更多信息,请参见利用状态分解定义排他和并行模式.
要表示状态之间的流逻辑的方向,绘制转换并通过添加转换标签实现转换条件,如中所述运行模式转换.
要将第一个状态标记为活动状态,请使用默认转换。有关更多信息,请参见使用默认转换指定初始子状态活动.
要创建从单个源到多个目的地或从多个源到单个目的地的路径,请将转换和连接连接结合起来。有关更多信息,请参见结合过渡和连接创建分支路径.
如果您的系统有输入或输出,或依赖于任何状态变量,请添加输入、输出和本地数据,如中所述添加Stateflow数据.
如果系统对事件触发器作出反应,或者必须触发图表或模型中的其他块中的操作,请添加输入、输出或本地事件,如中所述通过广播事件同步模型组件.
如果图表有复杂的状态操作或转换条件,请向图表中添加可重用函数。通过从以下函数中选择,使用对状态动作或转换条件中的计算类型最自然的函数格式:
图形函数——封装包含逻辑和迭代循环模式的流程图。看到通过定义图形函数重用逻辑模式.
编写面向矩阵的数据分析和可视化算法。看到通过定义MATLAB函数重用MATLAB代码.
Simulink函数——通过调用Simulink函数调用子系统来简化设计。看到在状态流图中重用Simulink函数.
真值表——表示决策应用的组合逻辑。看到使用真值表来建模组合逻辑.
或者,您也可以编写自己的C或c++代码与图表集成。有关更多信息,请参见在状态流图中重用自定义代码.
使用输入和输出端口将图表连接到Simulink模型中的其他块。
要模拟模型,单击运行.在模拟过程中,Stateflow Editor通过图表动画突出显示活动状态和转换。
有关说明此工作流程的教程,请参见构造并运行状态流程图.
参考文献
Harel[1],大卫。“状态图:复杂系统的视觉形式主义。”计算机程序设计学8、3号(1987年6月):231 - 74。
哈特利,德里克J.和Imtiaz A. Pirbhai。实时系统规范的策略。纽约,纽约州:多塞特出版社,1988年。