主要内容

本页采用了机器翻译。点击此处可查看英文原文。

Test Sequence 模块中的转移、时序运算符和消息

使用时序或信号条件在步骤之间进行转移

Test Sequence 模块使用 MATLAB® 作为动作语言。您可以通过评估被测组件在测试步骤之间转移。您可以使用条件逻辑、时序运算符和事件运算符。

考虑一个以三个频率输出正弦波的简单测试序列。Test Sequence 模块根据信号开关的变化逐步执行几个动作。请参阅 hasChanged

Test Sequence editor with has changed signal condition transitions

时序运算符

要创建计算仿真时间的表达式,请使用时序运算符。信号条件中的变量必须是 Test Sequence 模块中的输入、参数或常量。您可以使用以下时序运算符:

运算符描述
et测试步骤的历时。您可以指定时间单位。如果您未指定时间单位,则历时以秒为单位返回。
t

仿真的历时。您可以指定时间单位。如果您未指定时间单位,则历时以秒为单位返回。

after

如果自当前测试步骤开始起已过指定时间,则返回 true

before

如果自当前测试步骤开始起尚未过指定时间,则返回 true

duration

返回指定条件已为 true 的历时。当重新进入测试步骤或指定条件不再为 true 时,历时被重置。

转移运算符

要创建计算信号事件的表达式,请使用转移运算符。要计算信号事件,信号必须是 Test Sequence 模块或 Test Assessment 模块中的输入。

运算符描述
hasChanged

如果自当前测试步骤开始起指定信号的值发生变化,则返回 true;否则返回 false

hasChangedFrom

如果指定信号从指定值变化为其他值,则返回 true;否则返回 false

hasChangedTo

如果指定信号变化为指定值,则返回 true;否则返回 false

在测试序列中使用消息

消息在 Test Sequence 模块和其他模块(例如 Stateflow® 图)之间传输数据。消息可用于模型异步事件。消息会一直排队,直到您对其进行评估,然后将其从队列中删除。您可以在测试序列中使用消息和消息数据。该消息一直有效,直到您转发它或时间步结束为止。有关更多信息,请参阅 Stateflow® 文档中的 消息 (Stateflow)

接收消息并访问消息数据

如果您的 Test Sequence 模块有消息输入,您可以在测试序列操作或转移中使用排队消息。在访问消息数据或转发消息之前使用 receive 命令。

要创建消息输入,请将鼠标悬停在符号侧栏中的输入上,点击添加消息图标,然后输入消息名称。

receive(M) 确定输入队列 M 中是否存在消息,并从队列中删除该消息。如果消息在队列中,则 receive(M) 返回 true,否则返回 false。一旦收到消息,您就可以使用点符号 M.data 访问消息数据,或者转发消息。消息在被转发或当前时间步结束之前一直有效。

消息删除的顺序取决于队列类型。使用消息属性对话框设置队列类型。在符号侧栏中,点击消息输入旁边的编辑图标,然后选择队列类型

发送消息

要发送消息,请创建消息输出并使用 send 命令。要创建消息输出,请将鼠标悬停在符号侧栏中的输出上,点击添加消息图标,然后输入消息名称。

您可以使用点符号 M.data 将数据分配给消息,其中 M 是 Test Sequence 模块的消息输出。send(M) 发送消息。

转发消息

您可以将消息从输入消息队列转发到输出端口。转发消息:

  1. 使用 receive 从输入队列接收消息。

  2. 使用命令 forward(M,M_out) 转发消息,其中 M 是消息输入队列,M_out 是消息输出。

使用数据和消息比较测试序列

此示例演示了消息的输入和输出、发送和接收消息。该模型比较两对测试序列。每对由发送和接收 Test Sequence 模块组成。第一对发送和接收数据,第二对发送和接收消息。

设置模型名称变量。

model = 'sltest_testsequence_data_vs_message';

打开模型。

open_system(model)

使用数据测试序列

DataSender 模块为数据输出 M 分配一个值。

DataReceiver 模块等待 3 秒,然后转移至步骤 S2。步骤 S2 使用将 M 与预期值进行比较的条件转移到步骤 S3,并对 S3 到 S4 执行相同操作。

使用消息的测试序列

MessageSender 模块为消息输出 M_out 的消息数据分配一个值,然后将该消息发送到 MessageReceiver 模块。

MessageReceiver 模块等待 3 秒,然后转移至步骤 S2。步骤 S2 的转移使用 M 评估队列 receive(M),从队列中删除该消息。由于消息存在,receive(M) 返回 trueM.data == 3.5 将消息数据与预期值进行比较。该语句为 true,并且序列转移至步骤 S3。

当步骤 S3 的转移条件评估时,队列中没有消息。因此,S3 不会转移到 S4。

运行测试并观测输出,比较测试序列对的不同行为。

open_system([model '/Scope'])
sim(model)

close_system(model,0)
clear(model)

另请参阅

|

主题