显示端口值以进行调试
显示端口值以进行简单调试
对于信号携带数据的许多模块,simulink® 可在仿真过程中和仿真之后在模块图上以端口值标签(类似于工具提示)的形式显示信号值(模块输出)。当 simulink 运行模块输出方法时,端口值标签将显示模块输出值。此模型显示 constant 和 math 模块上端口的端口值标签,输出值为 1
和 4.04
。
如果端口值标签显示为空,则表示当前端口值不可用。例如,在仿真过程中暂停仿真时,启用连续模块上端口值标签的显示并不会在标签上显示任何值。
如果尚未进行模型仿真,端口值标签也会显示为空。因为不进行模型仿真,模块输出方法就不会运行。
当您进行仿真时,如果您将鼠标指针悬停在 simulink 在仿真过程中优化的模块(如虚拟子系统模块)上或者启用标签显示,模型将显示文本 optimized
。
在对模型进行交互式调试的过程中,显示端口值数据提示很有用。例如,下图显示了一个房屋的热模型输出。
这些结果表明该模型存在问题,因为:
所有温度下的供热成本都为
0
。室内温度与环境温度几乎完全相同。
在这种情况下,以交互方式对模型中的模块进行调试有助于找出错误。端口值标签提供模型中每个模块的输出信息。因此,在此示例中,如果您使用仿真步进器向前步进,您可以看到 heater 子系统在每个时间步的输出均为 0
。
要了解详细信息,您可以为 heater 子系统内的模块启用端口值标签。使用仿真步进器,如果您再次向前步进以显示值,您会看到 heatgain 模块有问题。输出一直保持为 0
。
这种方法可以帮助您找出问题。
为了简化调试,您可以在仿真过程中打开和关闭端口值标签。除了为调试提供有用信息外,显示端口值还可以帮助您在仿真过程中监视信号值。但是,这些标签不会保存到模型中。
对于非数值数据显示,simulink 使用以下值:
消息 | 说明 |
---|---|
action | 信号执行的是执行子系统。 |
fcn-call | 信号是一个函数调用信号,例如,function call generator 的输出。 |
ground | 信号来自 ground 模块。 |
not a data signal | 信号不包含有效数据,例如,信号来自被注释掉的模块。 |
在某些情况下:
端口值显示可能无法获取值信号,或者
信号值无法简单地显示
在这种情况下,simulink 将使用以下值:
消息 | 说明 |
---|---|
... | 信号维度超过 simulink 可以显示的最大元素数。有关详细信息,请参阅 显示模型的端口值。 |
(无信息) | 没有足够的可用仿真数据。向前步进或按 play 以获取更多数据。 |
click to add signals | 您已经在总线上启用端口值标签,但未选择要显示的信号。点击标签以选择总线信号。 |
inaccessible | simulink 无法获取端口值。有关示例,请参阅信号存储区重用。 |
[m*n] | 这是一个非向量信号。simulink 无法显示矩阵的实际值,而是显示矩阵维度。 |
no data yet | 以下情况下将显示此消息:
|
not used | 由于优化,simulink 无法获取信号值。 |
removed | 由于模块减少,simulink 无法获取信号值。 |
optimized | 由于优化,simulink 无法获取信号值。在普通模式下,启用了条件输入分支执行的模块会显示此消息。有关详细信息,请参阅。 |
unavailable | 没有足够的可用仿真数据。例如,请参阅仿真步进器。 |
注意
您可以通过将信号指定为测试点,强制值标签显示信号值。可以使用属性对话框执行此操作。
显示特定端口的值
要在仿真之前显示某个特定端口的值或某个模块的端口值,请选择一个或多个信号,右键点击所选内容并选择显示所选端口的值标签。
默认情况下,如果您在仿真过程中点击某个信号,simulink 将显示该信号的值。您可以控制此行为。在调试选项卡上,选择从画布中删除所有仿真输出值显示按钮箭头 ,然后选择选项。在“值标签显示选项”对话框中,选择仿真期间默认启用。
注意
要删除所有数据提示,请在调试选项卡上,选择从画布中删除所有仿真输出值显示按钮箭头 ,然后选择删除值显示。
对于总线信号,显示所选端口的值标签选项将打开一个对话框,允许您从总线的所有信号中进行选择。例如,在此模型中,您会看到 modelbus 中包含的所有信号的对话框。
您可以按名称搜索信号或者在层次结构中进行筛选。选择一个父信号将包括它所包含的所有信号。您还可以筛选显示内容,只查看您选择的那些信号。
在对话框外部的任何位置点击,关闭该对话框。将显示端口值标签。标签上没有数据;当您执行模型仿真时,标签上会显示值。
当您对模型进行仿真时,端口值标签将显示您选择的信号的名称和值。要更改显示的信号,请点击端口值标签,重新打开该对话框。您还可以点击另一个信号,以显示它的值。
注意
当您删除端口值标签时,simulink 不会保存信号值。
显示模型的端口值
指定端口值显示格式和更新频率。可通过“值标签显示选项”对话框控制整个模型上的这些设置。
在要显示其端口值的模型中,在调试选项卡上,选择从画布中删除所有仿真输出值显示按钮箭头 ,然后选择选项。
在“值标签显示选项”对话框中,指定以下各项的预设项:
显示选项,包括字体大小、刷新频率以及为信号宽度大于 1 的向量信号显示的元素数
显示模式
浮点或定点格式
端口值显示限制
性能
如果为模型启用了悬停显示端口值的选项,或者至少为一个模块设置了点击时切换值标签,这都会降低仿真速度。
加速模式
端口值的显示仅在普通和加速模式下受支持。在快速加速和外部模式下不受支持。下表说明加速模式如何影响端口值的显示。
加速模式 | 端口值 |
---|---|
加速 |
|
快速加速 | 不支持。不管是模型本身还是其父级指定进行加速仿真,都不会显示端口值。有关详细信息,请参阅 (simulink coder)。 |
信号存储区重用
如果一个模块的输出端口缓冲区通过信号存储区重用优化与另一个模块共享,则端口值显示为 inaccessible
。您可以使用信号存储重用复选框禁用信号存储区重用。但是,禁用信号存储区重用会增加仿真过程中使用的内存。
信号数据类型
对于大多数的数据类型的信号,包括内置数据类型(如
double
、int32
或boolean
)、dynamically_typed
以及其他几种数据类型,simulink 会为与其连接的端口显示端口值。仅当显示不复杂的信号值时,simulink 才会采用浮点格式。
对于定点数据类型,simulink 会基于转换后的双精度值显示端口值。
simulink 不显示具有某些复合数据类型的信号(如总线信号)的数据。
子系统
对于包含在可变子系统中的子系统,如果它们未连接任何信号线,则您不能显示这些子系统的端口值。在这种情况下,simulink 将在仿真过程中基于激活的变体自动确定模块的连接情况。但是,您可以在可变子系统中包含的子系统内显示端口值。还可以在可变子系统外部的信号线上显示值。
如果您禁用条件执行子系统,则进入 outport 模块的信号的端口值显示将根据禁用时的输出设置显示 outport 模块的值。
simulink 不会显示未启用的使能子系统的端口数据。
仿真步进器
如果您在向前步进时未启用端口值显示,向后步进时也不会显示。向后步进时,如果端口值不可用,将显示 unavailable
标签。
细化因子
端口值显示不支持细化因子值 (配置参数 > 数据导入/导出 > 附加参数 > 细化因子),因为 simulink 仅在主时间步中才会更新端口值显示。
signal specification 模块和 inport 模块
当您在子系统中的 signal specification 和 inport 模块上显示端口值时,将显示驱动该模块的值,而不是显示模块本身的值。
命令行仿真
为了提高效率,simulink 不支持在使用 sim
命令执行仿真时显示端口值。
merge 模块
simulink 不显示 merge 模块的输入值。要查看此值,请参考源模块。
命令行界面
不能通过命令行界面指定端口值显示。
非 simulink 信号
不能在非 simulink 信号(例如 simscape™ 或 simevents® 信号)上放置端口值。此限制同样适用于条件断点。