Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Stateflow 中的反应式系统建模

确定系统属性

在 Simulink® 模型中构建 Stateflow® 图之前,通过回答以下问题确定您的系统属性:

  1. 您的接口是什么?

    1. 您的系统对其作出反应的触发事件是什么?

    2. 您的系统的输入是什么?

    3. 您的系统的输出是什么?

  2. 您的系统是否带有任何工作模式?

    1. 如果答案是肯定的,那么这些工作模式是什么?

    2. 可以在哪些模式之间转移?是否有任何工作模式并行运行?

    如果您的系统没有工作模式,则该系统为无状态系统。如果您的系统带有工作模式,则该系统为模态系统。

选择状态机类型

确定系统属性后,第一步是创建新图。有关详细信息,请参阅sfnew。选择以下状态机类型之一:

  • Classic - 默认状态机类型。提供 MATLAB 语言状态图和 C 语言状态图的完整语义。

  • Mealy - 在这类状态机中,输出是输入状态的函数。

  • Moore - 在这类状态机中,输出是状态的函数。

有关详细信息,请参阅How Stateflow Objects Interact During Execution使用 MATLAB 和 C 作为动作语言语法时的差异Mealy 和 Moore 状态机概述

指定状态动作和转移条件

创建空图后,可再回答以下问题:

  1. 对于每个状态,您希望执行哪些动作?

  2. 状态间转移的规则是什么?如果图没有状态,在流程逻辑分支间转移的规则是什么?

根据您对这些问题的回答,指定状态动作和转移条件:

  1. 绘制状态来表示您的工作模式(如有)。请参阅通过使用状态来表示工作模式

  2. 通过添加使用正确语法的状态标签来实现状态动作。请参阅状态

  3. 绘制转移来表示状态间或流程图分支间的流程逻辑的方向。请参阅Transition Between Operating Modes

  4. 通过添加使用正确语法的转移标签来实现转移条件。请参阅转移

定义用于存储状态变量的持久数据

将状态动作和转移条件添加到图之后,确定图是否需要任何本地数据或持久数据用于存储状态变量。如果是,执行以下步骤:

  1. 将本地数据添加到图层次结构的合适层级。请参阅添加 Stateflow 数据

    您也可以使用 Symbol Wizard 添加数据到图中。请参阅通过 Symbol Wizard 解析符号

  2. 指定类型、大小、复/实性和其他数据属性。请参阅设置数据属性

使用函数调用来简化状态动作和转移条件

状态动作和转移条件可能会非常复杂,使得无法直接在状态或转移上对它们进行定义。在这种情况下,可以使用以下其中一种 Stateflow 函数来表示动作或条件:

  • 流程图 - 封装包含 if-then-else、switch-case、for、while 或 do-while 模式的流程图。

  • MATLAB - 编写面向矩阵的算法,调用 MATLAB 函数以进行数据分析和实现可视化。

  • Simulink - 直接调用 Simulink 函数调用子系统以简化设计并提高可读性。

  • 真值表 - 表示在故障检测和模式切换等决策应用中使用的组合逻辑。

在状态动作和转移条件中,使用对于所要进行的计算类型最自然的函数格式。有关这四种函数的详细信息,请参阅:

如果这四种类型的 Stateflow 函数不适用,您可以编写自己的 C 或 C++ 代码并集成到图中。有关自定义代码集成的详细信息,请参阅Reuse Custom Code in Stateflow Charts

检查您的系统表示是否完整

您的 Stateflow 图是否完整地表达了您系统的逻辑组件或事件驱动组件?

  • 如果答案为是,您的任务已完成。

  • 如果答案为否,您可以另外创建一个图,或者为当前图添加层次结构。

    • 要创建新图,请重复此基本工作流中的所有步骤。

    • 要添加层次结构,请在当前图的较低层级上重复之前的三个步骤。