本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

在调试模式下检查和修改数据和消息

当您的 Stateflow® 图处于调试模式时,您可以通过检查数据、消息和时序逻辑表达式的值来检查图的状态。您还可以通过修改数据值以及发送本地和输出消息来测试图的设计。下表总结了可用于执行这些调试任务的接口。有关详细信息,请参阅 Debugging Stateflow Charts

调试任务Stateflow EditorSymbols 窗格Breakpoints and Watch 窗口MATLAB® 命令行窗口
检查数据和消息的值可以可以可以可以
检查时序逻辑表达式可以不可以不可以不可以
修改数据和消息的值不可以可以不可以可以
发送消息不可以不可以不可以可以

Stateflow Editor 中查看数据

当仿真在断点处暂停时,您可以通过指向图中的状态、转移或函数来检查数据值。工具提示会显示所选对象使用的数据和消息的值。

对象类型工具提示信息
状态和转移对象使用的数据、消息和时序逻辑表达式的值
图形函数、真值表函数和 MATLAB 函数本地数据、消息、函数作用域内的输入和输出的值

例如,当 second 状态计算其 during 动作时,此图中的断点会暂停仿真。指向父状态 gear 会显示工具提示,该工具提示显示以下各项的值:

  • 时序逻辑表达式 duration(speed >= up_threshold)duration(speed <= down_threshold)

  • 数据,包括 speedup_thresholdup

注意

如果选择图属性 Export Chart Level FunctionsTreat Exported Functions as Globally Visible,则工具提示不显示时序逻辑数据。

在 Symbols 窗格中查看和修改数据

当图处于调试模式时,Symbols 窗格会显示图中每个数据和消息对象的值。例如,当此图在断点处暂停时,您可以在 Value 列中看到列出的所有图数据的值。突出显示的值是在上一个时间步中发生了更改的值。

在 Symbols 窗格中,您可以更改以下各项的值:

  • 数据存储内存、本地数据和输出数据。

  • 本地消息和输出消息。

点击数据或消息对象的 Value 字段以输入新值。

在仿真过程中,无法更改常量、参数或输入数据和消息的值。

有关详细信息,请参阅 Manage Data, Events, and Messages in the Symbols Pane

查看 Breakpoints and Watch 窗口中的数据

当仿真在断点处暂停时,您可以在 Stateflow 的 Breakpoints and Watch 窗口中查看当前的数据和消息值。要打开 Breakpoints and Watch 窗口,请在 Debug 选项卡上,点击 Breakpoints List。或者,打开 Breakpoints 对话框,然后点击 Breakpoints List 链接。

跟踪观察列表中的数据

您可以使用 Breakpoints and Watch 窗口实现以下目的:

  • 将数据和消息对象添加到观察列表中。

  • 跟踪自上一个时间步以来发生更改的值。

  • 展开消息以查看消息队列和消息数据值。

例如,您可以将 speedup_thresholdup 添加到观察列表中,并在步进仿真时跟踪其值。高亮的部分指示 speedup_threshold 的值在上一个时间步期间发生变化。

要将数据或消息对象添加到观察列表,请打开 Property Inspector 或 Model Explorer。选择您要观察的数据或消息对象,然后点击 Add to Watch Window 链接。

或者,在 Stateflow Editor 中,右键点击使用数据或消息的状态或转移。选择 Add to Watch Window,并从下拉列表中选择变量名称。

格式化观察显示

要更改用于显示观察数据的格式,请选择窗口顶部的齿轮图标 。使用下拉列表为每个数据类型选择一种 MATLAB 格式。

从观察列表中删除数据

要从观察列表中删除数据或消息对象,请指向观察数据的路径,然后点击变量名称左侧的 Remove this watch 图标。

保存和还原观察数据

观察数据在 MATLAB 会话期间持续存在。当您关闭模型时,它的观察数据列表仍保留在 Breakpoints and Watch 窗口中。如果在同一 MATLAB 会话期间重新打开一个模型,该模型的观察数据列表将被还原。

您可以保存断点和观察数据列表,并在以后的 MATLAB 会话中重新加载它们。要保存断点和观察数据列表的快照,请在 Breakpoints and Watch 窗口顶部,点击 Save current breakpoints and watches 图标。要还原快照,请点击 Load breakpoints and watches 图标。

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                

要检查 speedup_threshold 的值,请输入:

speed
speed =

   26.3383
up_threshold
up_threshold =

   41.3601

使用调试提示符修改数据

在调试提示符下,您可以更改数据存储内存、本地和输出数据的值。例如,在上一个图中,您可以更改 up_thresholdupgear 的值:

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 的类型为 singley 的类型为 int32z 的类型为 fixpt(1,16,12)。要更改这些数据对象的值,请输入:

    x = single(98.6);
    y = int32(100);
    z = fi(0.5413,1,16,12);

  • 您无法在调试提示符下更改常量、参数或输入数据的值。

注意

要修改 int64uint64 类型的数据,请使用函数 fi 将新值转换为定点类型。在使用 C 语言作为动作语言的图中,int64fixpt(1,64,0) 的别名类型,uint64fixpt(0,64,0) 的别名类型。

使用调试提示符发送消息

在调试提示符下,您可以发送本地和输出消息。例如,在下图中,本地消息 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')

另请参阅

| | |

相关主题