Main Content

在 Stateflow 中创建流程图

Stateflow® 流程图采用图形化结构,用于对决策树和迭代循环等逻辑模式进行建模。流程图表示组合逻辑,其中的任一结果不依赖于先前的结果。您可以通过只结合使用连接结点和转移来构建流程图。结点提供不同转移路径之间的决策分支。流程图的执行从默认转移开始,到终止结点(没有出向转移的结点)结束。有关详细信息,请参阅组合使用转移和结点以创建分支路径

注意

如果 Stateflow 图只包含一个流程图,则图每次唤醒时都会计算该流程图。而对于存在于状态内的任何流程图,图仅在进入状态时才会计算它们。

最佳做法是将流程图封装在图形函数中,以创建可在图中的任何位置调用的模块化可重用逻辑。有关图形函数的详细信息,请参阅通过定义图形函数重用逻辑模式

例如,此流程图对简单的 if-else 逻辑建模:

Flow chart that models an if else statement.

流程图对以下代码进行建模:

if u > 0
   y = 1;
else
   y = 0;
end

绘制流程图

您可以使用连接结点作为备用转移路径之间的分支点来绘制流程图。要绘制流程图,请执行以下操作:

  1. 打开一个新图。

  2. 将默认转移添加到流程图执行开始处的结点。在对象选项板中,点击默认转移图标 。然后,在图画布上,点击转移的位置。Stateflow 编辑器添加一个新连接结点作为转移的目标。

  3. 要添加新转移,请指向一个结点的边框。然后,点击并从该结点拖离。Stateflow 编辑器提供图形提示,允许您添加结点或状态。

    • 要在转移的末尾放置结点,请点击圆形提示。

    • 要将转移连接到一个现有的结点,请将指针拖到所需的目标。

  4. 要向图添加一个连接结点,请在对象选项板中点击“结点”图标 。然后,在图画布上,点击新结点的位置。

  5. 根据需要重复前面的步骤。

  6. 为转移添加标签,如 定义转移中的动作 中所述。

创建流程图的最佳做法

创建流程图时,请遵循以下最佳做法。

Flow chart that illustrates best practices.

仅使用一个默认转移

流程图只有一个入口点。

仅提供一个终止结点

多个终止结点会降低流程图的可读性。

将所有转移路径汇聚到终止结点

流程图的执行总会到达终止点。

为终止结点以外的每个结点提供一个无条件出向转移

如果在仿真过程中出现意外回溯,则会出现警告消息。

要控制意外回溯的诊断动作级别,请打开“配置参数”对话框,并在诊断 > Stateflow 窗格中,将意外回溯参数设置为“”、“警告”或“错误”。默认设置为“警告”。有关详细信息,请参阅Unexpected backtracking (Simulink)

在以下情况下,结点可能会出现意外回溯:

  • 该结点没有指向某一状态或终止结点的无条件转移路径。

  • 有多条转移路径通向该结点。

要处理更新,请使用条件动作而不是转移动作

流程图会测试转移,但不会执行转移。因此,流程图从不执行转移动作。此外,在使用 MATLAB® 作为动作语言的图中,在图形函数中使用转移动作会导致编译时错误。

相关主题