在调试模式下检查和修改数据和消息
当您的 Stateflow® 图处于调试模式时,您可以通过检查数据、消息和时序逻辑表达式的值来检查图的状态。您还可以通过修改数据值以及发送局部和输出消息来测试图的设计。下表总结了可用于执行这些调试任务的接口。有关详细信息,请参阅Set Breakpoints to Debug Charts。
调试任务 | Stateflow 编辑器 | 符号窗格 | 断点和监视窗口 | MATLAB® 命令行窗口 |
---|---|---|---|---|
检查数据和消息的值 | 可以 | 可以 | 可以 | 可以 |
检查时序逻辑表达式 | 可以 | 不可以 | 不可以 | 不可以 |
修改数据和消息的值 | 不可以 | 可以 | 不可以 | 可以 |
发送消息 | 不可以 | 不可以 | 不可以 | 可以 |
在 Stateflow 编辑器中查看数据
当仿真在断点处暂停时,您可以通过指向图中的状态、转移或函数来检查数据值。工具提示会显示所选对象使用的数据和消息的值。
对象类型 | 工具提示信息 |
---|---|
状态和转移 | 对象使用的数据、消息和时序逻辑表达式的值 |
图形函数、真值表函数和 MATLAB 函数 | 局部数据、消息、函数作用域内的输入和输出的值 |
例如,当 second
状态计算其 during
动作时,此图中的断点会暂停仿真。指向父状态 gear
会显示工具提示,该工具提示显示以下各项的值:
时序逻辑表达式
duration(speed >= up_threshold)
和duration(speed <= down_threshold)
。数据,包括
speed
、up_threshold
和up
。
注意
如果选择图属性导出图级别函数和将导出的函数视为全局可见,则工具提示不显示时序逻辑数据。
在“符号”窗格中查看和修改数据
当图处于调试模式时,符号窗格会显示图中每个数据和消息对象的值。例如,当此图在断点处暂停时,您可以在值列中看到列出的所有图数据的值。突出显示的值是在上一个时间步中发生了更改的值。
在符号窗格中,您可以更改以下各项的值:
数据存储内存、局部数据和输出数据。
局部消息和输出消息。
点击数据或消息对象的值字段以输入新值。
在仿真过程中,无法更改常量、参数或输入数据和消息的值。
有关详细信息,请参阅Manage Symbols in the Stateflow Editor。
查看“断点和监视”窗口中的数据
当仿真在断点处暂停时,您可以在 Stateflow 的“断点和监视”窗口中查看当前的数据和消息值。要打开“断点和监视”窗口,请在调试选项卡上点击断点列表。或者,打开“断点”对话框,然后点击断点列表链接。
要查看所有断点及其关联条件的列表,请选择断点选项卡。有关详细信息,请参阅Manage Breakpoints Through the Breakpoints and Watch Window。
要检查数据和消息值,请选择监视选项卡。
跟踪观察列表中的数据
您可以使用“断点和监视”窗口实现以下目的:
将数据和消息对象添加到观察列表中。
跟踪自上一个时间步以来发生更改的值。
展开消息以查看消息队列和消息数据值。
例如,您可以将 speed
、up_threshold
和 up
添加到观察列表中,并在步进仿真时跟踪其值。高亮的部分指示 speed
和 up_threshold
的值在上一个时间步期间发生变化。
要将数据或消息对象添加到观察列表,请打开属性检查器或模型资源管理器。选择您要观察的数据或消息对象,然后点击添加到监视窗口链接。
或者,在 Stateflow 编辑器中,右键点击使用数据或消息的状态或转移。选择添加到监视窗口,并从下拉列表中选择变量名称。
格式化观察显示
要更改用于显示观察数据的格式,请选择窗口顶部的齿轮图标 。使用下拉列表为每个数据类型选择一种 MATLAB 格式。
从观察列表中删除数据
要从观察列表中删除数据或消息对象,请指向观察数据的路径,然后点击变量名称左侧的删除此监视项图标。
保存和还原观察数据
观察数据在 MATLAB 会话期间持续存在。当您关闭模型时,它的观察数据列表仍保留在“断点和监视窗口”中。如果在同一 MATLAB 会话期间重新打开一个模型,该模型的观察数据列表将被还原。
您可以保存断点和观察数据列表,并在以后的 MATLAB 会话中重新加载它们。要保存断点和观察数据列表的快照,请在“断点和监视”窗口顶部,点击保存当前断点和监视项图标。要还原快照,请点击加载断点和监视项图标。
在 MATLAB 命令行窗口中查看和修改数据
当仿真在断点处暂停时,MATLAB 命令提示符变为 debug>>
。在此提示符下,您可以检查和更改 Stateflow 数据的值,发送局部和输出消息,并与 MATLAB 工作区交互。
例如,假设上一个图已到达某断点。要查看在当前作用域下可见的数据,请使用 whos
命令。
whos
Name Size Bytes Class Attributes TWAIT 1x1 1 uint8 down 1x1 1 logical down_th 1x1 8 double down_threshold 1x1 8 double gear 1x1 4 gearType speed 1x1 8 double throttle 1x1 8 double up 1x1 1 logical up_th 1x1 8 double up_threshold 1x1 8 double
要检查 speed
和 up_threshold
的值,请输入:
speed
speed = 26.3383
up_threshold
up_threshold = 41.3601
使用调试提示符修改数据
在调试提示符下,您可以更改数据存储内存、局部和输出数据的值。例如,在上一个图中,您可以更改 up_threshold
、up
和 gear
的值:
up_threshold = 25;
up = true;
gear = gearType.third;
要修改向量和矩阵,请使用 MATLAB 语法进行索引,而不考虑图的动作语言属性。请参阅索引表示法。
例如,要更改 2×2 矩阵
u
的对角线上的元素,请输入:u(1,1) = 6.022e23; u(2,2) = 6.626e-34
对于可变大小的数据,可以在指定的维度范围内更改其维度。例如,假设
v
是可变大小数组,其最大大小为[16 16]
。要将v
的值更改为由 1 组成的 5×7 数组,请输入:v = ones(5,7);
要修改枚举数据,请使用带前缀的标识符显式指定枚举类型。请参阅Notation for Enumerated Values。
例如,假设
w
具有枚举数据类型Colors
。要将w
的值更改为枚举值Red
,请输入:w = Colors.Red
要修改数值数据,请使用 MATLAB 类型转换函数将其转换为显式数据类型。
double
类型的数据不需要显式转换。请参阅类型转换运算。例如,假设
x
的类型为single
,y
的类型为int32
,z
的类型为fixdt(1,16,12)
。要更改这些数据对象的值,请输入:x = single(98.6); y = int32(100); z = fi(0.5413,1,16,12);
您无法在调试提示符下更改常量、参数或输入数据的值。
使用调试提示符发送消息
在调试提示符下,您可以发送局部和输出消息。例如,在下图中,局部消息 M
确定在 DecisionPoint
后哪个状态变为激活状态。如果该图收到带有正值的消息 M
,则状态 Received
变为激活状态,图输出值 true
。否则,状态 Missed
变为激活状态,图输出值 false
。
消息的初始值为零。要将数据字段的值更改为正数并将消息发送到其局部队列,请输入:
M = 5; send(M);
Received
状态的转移。有关详细信息,请参阅Control Chart Execution After a Breakpoint。从调试提示符发送消息时,请遵循以下规则:
要读取或写入有效消息的消息数据字段,请使用消息对象的名称。不要使用圆点表示法语法。
仅当图通过调用
send
运算符显式发送消息时,才能从调试提示符发送消息。您无法从调试提示符发送输入消息。
有关详细信息,请参阅Control Message Activity in Stateflow Charts。
在调试模式下访问 MATLAB 工作区
您可以在调试提示符下输入其他 MATLAB 命令,但结果会在 Stateflow 工作区中执行。例如,您可以使用 save
函数将所有图变量保存在 MAT 文件中:
save(chartVars)
要在 MATLAB 基础工作区中输入命令,请使用 evalin
命令和第一个参数 "base"
。例如,要列出 MATLAB 工作区中的变量,请使用以下命令:
evalin("base","whos")