在 Stateflow 编辑器中管理符号
在 Stateflow® 编辑器中工作时,您可以在符号窗格中查看和管理数据、事件和消息。在建模选项卡中,选择符号窗格。
在符号窗格中,您可以:
添加和删除数据、事件和消息。
设置对象类型和作用域。
更改端口号。
编辑对象的名称并更新图中对该对象名称的所有引用。
撤消和重做对类型、名称和端口号的更改。
检测未使用的对象。
检测并修复未解析的对象。
在窗口中的对象和这些对象在图中的使用之间进行跟踪。
在属性检查器中查看和编辑对象属性。
符号窗格中的行显示对象层次结构。在窗口中展开一个对象以查看以该对象为父级的数据、事件和消息。默认情况下,图中的所有非图形对象都会在窗口中列出。要仅查看在层次结构的当前级别及其以下级别使用的对象,请选择 图标。要搜索特定符号,请在过滤器搜索框
中键入内容。
添加和修改数据、事件和消息
要将非图形对象添加到 Stateflow 模块中,请在符号窗格中执行以下操作:
选择以下图标之一。
图标 描述 添加数据 添加事件 添加消息 在新对象的行中,在类型下,选择对象类型。
编辑对象的名称。
对于输入和输出对象,在端口下选择端口号。
要在属性检查器中查看对象,请右键点击该对象并选择检查。
在属性检查器中,修改对象属性。
在通过符号窗格添加对象后,这些对象显示为未使用,直到您在 Stateflow 设计中引用它们。
在符号窗格中,您可以修改 Stateflow 对象的名称、类型和端口号。在名称字段中编辑对象的名称。重命名对象时,按 Shift+Enter 键可重命名整个图中对该对象的所有引用。要更改对象的类型或端口号,请点击对应的字段并从可用选项中进行选择。要删除一个对象,请右键点击该对象并选择删除。
在“符号”窗格中检测未使用的数据
符号窗格用黄色警告图标 指示未使用的数据、消息、函数和事件。您可以使用符号窗格或符号向导来解析未定义的符号。
符号窗格不检测原子子图中 MATLAB® 函数或参数的输入和输出。
要删除未使用的对象,请右键点击符号窗格中的对象,然后选择删除。通过删除对仿真不起作用的对象,可以减小模型的大小。在此图中,添加 data
后,它首先显示为未使用。在图中引用 data
后,警告符号会消失。
通过“符号”窗格解析符号
出现在图中但未添加为数据、事件或消息的符号视为未定义或未解析状态。编辑图时,Stateflow 会检测未定义的符号,并在符号窗格中用红色错误图标 标记它们。
对于每个未定义的符号,符号窗格显示从图中的用例推断出的类和作用域。您可以单独或统一解析未定义的符号。
要使用推断的类和作用域定义符号,请点击错误图标并选择修复。
要使用不同的类或作用域定义符号,请从类型下拉列表中选择类和作用域的另一种组合。
要使用推断的类和作用域解析所有未定义的符号,请点击解析未定义的符号按钮
。
通过符号向导解析符号
如果在更新图、更新模型或仿真模型时,图包含任何未定义的符号,符号向导将打开并列出未定义的符号。对于每个未定义的符号,类和作用域列显示从图中的用例推断出的类和作用域。您可以接受、修改或拒绝符号向导建议的每个符号定义。
要接受采用推断的类和作用域的定义,请选中符号前面的复选框。
要修改定义,请从类或作用域下拉列表中选择其他类或作用域。
要拒绝一个定义,请清除符号前面的复选框。
编辑符号定义后,通过点击确定将符号添加到 Stateflow 层次结构中。
检测自定义代码中的符号定义
对自定义代码中定义的符号的检测取决于模型配置参数导入自定义代码。
如果您选择导入自定义代码,Stateflow 解析器会尝试在自定义代码中查找未解析的图符号。如果自定义代码未定义这些符号,它们将出现在符号向导中。
如果您未选择导入自定义代码,则 Stateflow 解析器会将图中未解析的数据符号视为在自定义代码中定义的符号。如果自定义代码未定义这些符号,则从模型中仿真和生成代码会导致错误。
导入自定义代码选项不适用于使用 MATLAB 作为动作语言的图。有关详细信息,请参阅Import custom code (Simulink)。
跟踪数据、事件和消息
Stateflow 提供图和非图形符号之间的可跟踪性。当您在符号窗格中选择符号时,Stateflow 会突出显示访问该符号的图部分。当您选择图中的对象时,Stateflow 会突出显示该对象使用的符号。
要控制对象和符号何时突出显示,请选择预设项按钮 。将出现一个下拉菜单。
要使 Stateflow 在符号窗格中突出显示对象使用的符号,请选择突出显示使用的符号。如果您要使 Stateflow 突出显示图中使用符号的对象,请选择在图上突出显示用例。通过在图上突出显示用例,您可以选择突出显示以下内容:
图中符号的所有用例。
从中读取符号的对象。
向其写入符号的对象。
注意
使用仿真期间更新值列选项可以允许符号窗格中显示在仿真期间更新的值。
例如,打开模型 sf_tetris2
。
openExample("sf_tetris2")
双击图 TetrisLogic
。在符号窗格中,当您选择常量 ARENA_HEIGHT
时,使用 ARENA_HEIGHT
的状态和函数会突出显示。
要查看常量 ARENA_HEIGHT
的用例,请打开函数 freeze
。
您还可以在图中选择图形对象(如状态、转移或函数)并查看该对象使用的符号。例如,在图 TetrisLogic
中,展开符号窗格中的符号 MainArea
。如果您在图中选择状态 FreezeShape
,则局部数据 shape
和函数 freeze()
将在符号窗格中突出显示。这种突出显示表示这些对象在状态 FreezeShape
中使用。
在调试模式下,每个数据的值都显示在符号窗格的值列中。Stateflow 在仿真运行时会定期更新这些值。当数据值发生变化时,“值”列会突出显示这些变化。当调试器在断点处停止时,您可以在命令提示符下或符号窗格中更新初始值或更改符号的值。
数据或消息 | 更新初始值 | 调试期间更新 |
---|---|---|
输入 | 否 | 否 |
输出 | 是 | 是 |
参数 | 否 | 否 |
常量 | 是 | 否 |
数据存储内存 | 否 | 是 |
局部 | 是 | 是 |
对于总线元素,您可以在命令提示符下或符号窗格中更改符号的值。
总线元素 | 更新初始值 | 调试期间更新 |
---|---|---|
输入 | 否 | 否 |
输出 | 否 | 是 |
参数 | 否 | 否 |
常量 | 否 | 否 |
数据存储内存 | 否 | 是 |
局部 | 否 | 是 |
在符号窗格中,多维数组会显示为数组的数据类型和大小。如果数组不超出 100 个元素,将光标悬停在符号上方可查看元素。对于包含 100 个以上元素的数组,请使用命令提示符查看元素。
当仿真暂停时,将鼠标悬停在画布中的消息上方可查看队列中的有效负载。这类似于画布上的悬停功能。对于其他非标量对象,将显示大小和数据类型。要查看这些值,请使用“监视”窗口。请参阅在调试模式下检查和修改数据和消息和跟踪观察列表中的数据。
“符号”窗格限制
如果数据、事件或消息以某个状态或函数为父级,则无法将其添加到符号窗格中。要添加这些类型的对象,请使用模型资源管理器。
当您修改 MATLAB 函数中的代码时,在您保存 MATLAB 函数之前,这些更改不会在符号窗格中更新。
您无法撤消或重做对 MATLAB 函数的输入和输出的更改。
您无法从状态转移表中恢复已删除的数据、事件或消息。
您无法撤消对以图形函数、MATLAB 函数和真值表为父级的数据的作用域的更改。
您无法撤消对真值表的对象的重命名。
当您删除基于 Simulink 的状态中包含的对象的数据时,该对象仍处于基于 Simulink 的状态,并且数据符号在符号窗格中显示为未定义。