构造并运行 Stateflow 图
Stateflow® 图是有限状态机的图形表示,由状态、转移和数据组成。您可以创建 Stateflow 图来定义系统如何响应外部输入信号、事件和基于时间的条件。
例如,下面的 Stateflow 图展示半波整流器的基础逻辑。该图包含两个标签为 On
和 Off
的状态。在 On
状态下,图输出信号 y
等于输入 x
。在 Off
状态下,输出信号设置为零。当输入信号跨越某个阈值 t0
时,图在这些状态之间转移。各个状态下的动作在仿真的每一时间步都会更新 y
的值。
此示例说明如何创建和仿真此 Stateflow 图。
构造 Stateflow 图
打开 Stateflow 编辑器
Stateflow 编辑器是一个图形环境,用于设计状态转移图、流程图、状态转移表和真值表。
Stateflow 编辑器的主要组件是图画布、对象选项板和符号窗格。
图画布是一个绘图区域,您可以在其中通过组合状态、转移和其他图形元素来创建图。
在画布的左侧有一个对象选项板,其中显示了一组可向图中添加图形元素的工具。
在画布的右侧有一个符合窗格,您可以用它向图添加新的数据、事件和消息并解析任何未定义或未使用的符号。
添加状态和转移
在对象选项板中,点击状态图标 并将指针移至图画布。将出现具有默认转移的状态。要放置该状态,请点击画布上的某个位置。在文本提示中,输入状态名称
On
和状态动作y = x
。添加另一个状态。右键点击并拖动
On
状态。蓝色图形提示可以帮助您水平或垂直对齐状态。新状态的名称变为Off
。双击该状态并将状态动作修改为y = 0
。重新对齐两个状态并在两个状态之间的空白处停留片刻。蓝色转移提示指示您可以连接状态的几种方式。要添加转移,请点击适当的提示。
或者,要绘制转移,请点击并从一个状态的边拖动到另一个状态的边。
双击每个转移并输入适当的转移条件
x<t0
或x>=t0
。条件出现在方括号内。清理图:
为使图更加清晰,将每个转移标签移到其对应转移上方或下方的方便位置。
要对齐图的图形元素并调整其大小,请在格式选项卡中,点击自动排列或按 Ctrl+Shift+A。
要调整图的大小以适合画布,请按空格键或点击适应视图大小图标 。
解析未定义的符号
在执行图之前,必须定义图中使用的每个符号并指定其作用域(例如,输入数据、输出数据或局部数据)。
在建模选项卡的设计数据下,选择符号窗格。
在符号窗格中,未定义的符号用红色错误标记 进行标记。
在符号窗格中,点击解析未定义的符号 。类型列根据每个未定义符号在图中的用例显示其建议作用域。Stateflow 编辑器将符号
x
和t0
解析为输入数据 ,将y
解析为 。由于阈值
t0
在仿真过程中不会更改,因此将其作用域更改为常量数据。在类型列中,点击t0
旁边的数据类型图标,然后选择 常量数据。设置阈值
t0
的值。在值列中,点击t0
旁边的空白输入框,并输入值 0。保存您的 Stateflow 图。
对模型进行仿真
要仿真 Simulink 模型,请通过输入和输出端口将图模块连接到模型中的其他模块。
要返回到 Simulink 编辑器,请在画布顶部的浏览器栏中点击 Simulink 模型的名称:rectify。如果浏览器栏不可见,请点击对象选项板顶部的隐藏/显示资源管理器栏图标 。
执行以下操作以将信源添加到模型中:
从 Simulink Sources 库中,添加一个 Sine Wave (Simulink) 模块。
双击 Sine Wave 模块并将采样时间设置为 0.2。
将 Sine Wave 模块的输出连接到 Stateflow 图的输入。
将信号标记为
x
。
向模型中添加一个信宿:
从 Simulink Sinks 库中,添加一个具有两个输入端口的 Scope (Simulink) 模块。
将 Sine Wave 模块的输出连接到 Scope 模块的第一个输入。
将 Stateflow 图的输出连接到 Scope 模块的第二个输入。
将信号标记为
y
。
保存 Simulink 模型。
要仿真模型,请点击运行 。在仿真过程中,Stateflow 编辑器通过图动画突出显示激活状态和转移。
对模型进行仿真后,双击 Scope 模块。示波器显示 Stateflow 图的输入信号和输出信号图。
仿真结果显示整流器滤除了负输入值。