在 Stateflow 中创建流程图
Stateflow® 流程图采用图形化结构,用于对决策树和迭代循环等逻辑模式进行建模。流程图表示组合逻辑,其中的任一结果不依赖于先前的结果。您可以通过只结合使用连接结点和转移来构建流程图。结点提供不同转移路径之间的决策分支。流程图的执行从默认转移开始,到终止结点(没有出向转移的结点)结束。有关详细信息,请参阅组合使用转移和结点以创建分支路径。
注意
如果 Stateflow 图只包含一个流程图,则图每次唤醒时都会计算该流程图。而对于存在于状态内的任何流程图,图仅在进入状态时才会计算它们。
最佳做法是将流程图封装在图形函数中,以创建可在图中的任何位置调用的模块化可重用逻辑。有关图形函数的详细信息,请参阅通过定义图形函数重用逻辑模式。
例如,此流程图对简单的 if
-else
逻辑建模:
流程图对以下代码进行建模:
if u > 0 y = 1; else y = 0; end
绘制流程图
您可以使用连接结点作为备用转移路径之间的分支点来绘制流程图。要绘制流程图,请执行以下操作:
打开一个新图。
将默认转移添加到流程图执行开始处的结点。在对象选项板中,点击默认转移图标 。然后,在图画布上,点击转移的位置。Stateflow 编辑器添加一个新连接结点作为转移的目标。
要添加新转移,请指向一个结点的边框。然后,点击并从该结点拖离。Stateflow 编辑器提供图形提示,允许您添加结点或状态。
要在转移的末尾放置结点,请点击圆形提示。
要将转移连接到一个现有的结点,请将指针拖到所需的目标。
要向图添加一个连接结点,请在对象选项板中点击“结点”图标 。然后,在图画布上,点击新结点的位置。
根据需要重复前面的步骤。
为转移添加标签,如 定义转移中的动作 中所述。
创建流程图的最佳做法
创建流程图时,请遵循以下最佳做法。
仅使用一个默认转移
流程图只有一个入口点。
仅提供一个终止结点
多个终止结点会降低流程图的可读性。
将所有转移路径汇聚到终止结点
流程图的执行总会到达终止点。
为终止结点以外的每个结点提供一个无条件出向转移
如果在仿真过程中出现意外回溯,则会出现警告消息。
要控制意外回溯的诊断动作级别,请打开“配置参数”对话框,并在诊断 > Stateflow 窗格中,将意外回溯参数设置为无、警告或错误。默认设置为警告。有关详细信息,请参阅Unexpected backtracking (Simulink)。
在以下情况下,结点可能会出现意外回溯:
该结点没有指向某一状态或终止结点的无条件转移路径。
有多条转移路径通向该结点。
要处理更新,请使用条件动作而不是转移动作
流程图会测试转移,但不会执行转移。因此,流程图从不执行转移动作。此外,在使用 MATLAB® 作为动作语言的图中,在图形函数中使用转移动作会导致编译时错误。