Main Content

添加 Stateflow 数据

当您想要存储可在特定 Stateflow® 层级可见的值时,可向图中添加数据。仿真模型时,图数据对象在仿真期间保留其值。

在 Stateflow 图中定义的数据对图中的多个 Stateflow 对象可见,包括状态、转移、MATLAB® 函数和真值表。要确定在状态或转移中使用的数据,请右键点击状态或转移并选择 浏览。上下文菜单会列出在状态或转移中所有已解析符号的名称和作用域。从上下文菜单中选择一个符号将在模型资源管理器中显示其属性。从上下文菜单中选择输出事件将打开与事件关联的 Simulink® 子系统或 Stateflow 图。

注意

Stateflow 数据对于 Stateflow 图中的 Simulink 函数不可用。

您可以使用符号窗格、Stateflow 编辑器菜单或模型资源管理器向 Stateflow 图添加数据。

通过“符号”窗格添加数据

  1. 建模选项卡的设计数据下,选择符号窗格

  2. 点击创建数据按钮

  3. 在新数据行中,类型的下方,点击该图标并选择:

    • 输入数据

    • 局部数据

    • 输出数据

    • 常量

    • 数据存储内存

    • 参数

    • 临时

    有关这些选项的详细信息,请参阅 作用域

  4. 编辑数据名称。

  5. 对于输入和输出数据,点击端口字段并选择端口号。

  6. 要指定数据的属性,请打开属性检查器。在符号窗格中,右键点击该符号的行并选择浏览。有关详细信息,请参阅设置数据属性

使用 Stateflow 编辑器菜单添加数据

  1. 在 Simulink 模型的 Stateflow 图中,选择与您要添加的数据作用域对应的菜单选项。有关这些选项的详细信息,请参阅 作用域

    作用域菜单选项
    输入

    建模选项卡中的设计数据下,选择数据输入

    输出

    建模选项卡中的设计数据下,选择数据输出

    局部

    建模选项卡中的设计数据下,选择局部

    常量

    建模选项卡中的设计数据下,选择常量

    参数

    建模选项卡中的设计数据下,选择参数

    数据存储内存

    建模选项卡中的设计数据下,选择数据存储

  2. 在“数据”对话框中,指定数据属性。有关详细信息,请参阅设置数据属性

通过模型资源管理器添加数据

要向 Simulink 模型中的 Stateflow 图添加函数级别或状态级别的数据,请使用模型资源管理器:

  1. 建模选项卡的设计数据下,选择模型资源管理器

  2. 模型层次结构窗格中,在 Stateflow 层次结构中选择您希望新数据对其可见的对象。所选对象即变为新数据的父级。

  3. 在模型资源管理器工具条中,选择“添加数据” 按钮。或者,在模型资源管理器菜单中,选择添加 > 数据。具有默认定义的新数据出现在模型资源管理器的内容窗格中。

  4. 数据窗格中,指定数据的属性。有关详细信息,请参阅设置数据属性

提示

您不需要在以下类型的函数中显式创建局部或临时数据:

  • 图中使用 MATLAB 作为动作语言的图形函数

  • 使用 MATLAB 作为动作语言的真值表函数

  • MATLAB 函数

在这些函数中,您可以使用未定义的变量来存储仅在函数调用的其余部分可访问的值。要存储在各次函数调用之间保持不变的值,请在图级别使用局部数据。或者,在 MATLAB 函数中,可以使用关键字 persistent

使用图中数据的最佳做法

避免从 Simulink 模块继承输出数据属性

Stateflow 输出数据不应该从输出信号继承属性,因为这些值从 Simulink 模块反向传播且可能无法预测。

通过使用原位数据生成更高效的代码

通过使用原位数据,您可以提高 Stateflow 图、真值表和状态转移表的性能,并减少生成代码的内存占用。当您对图输入和图输出使用相同的数据名称时,您就会创建原位数据。从图生成代码时,生成的代码将输入和输出数据视为传引用的单个原位参数。使用原位数据可减少生成代码复制中间数据的次数,从而提高代码的效率。

当输入和输出数据具有相同的名称时,您只能编辑输入数据的属性。输出数据的属性为只读。

限制使用状态机级数据

避免使用状态机级数据。状态机级数据是在 Stateflow 层次结构的最高级别定义的数据。状态机级数据会阻止模型重用生成的代码和其他代码优化。状态机级数据也与许多 Simulink 及 Stateflow 功能不兼容。

例如,以下功能不支持状态机级数据:

  • 枚举数据

  • Simulink 函数

  • 图工作点

  • 隐式更改事件

  • 未使用数据检测

  • 将参数绑定到基础工作区中的 Simulink.Parameter 对象

  • 模型引用(请参阅模型引用的要求和限制 (Simulink)

  • 在 Embedded Coder® 生成的代码中使用代码替换库。有关详细信息,请参阅Code You Can Replace From Simulink Models (Embedded Coder)

  • Simulink PLC Coder™ 软件生成代码

  • Simulink Design Verifier™ 软件进行分析

要使模型中的其他图和模块能够访问 Stateflow 数据,请使用“数据存储内存”作用域的图级数据。有关详细信息,请参阅Access Data Store Memory from a Chart

注意

以后的版本中将不再支持状态机级数据。使用升级顾问将状态机级数据转换为图级数据存储内存。有关详细信息,请参阅Consult the Upgrade Advisor (Simulink)检查是否存在状态机级数据 (Simulink)

相关主题