Test Sequence 模块中的转移、时序运算符和消息
使用时序或信号条件在步骤之间进行转移
Test Sequence 模块使用 MATLAB® 作为动作语言。您可以通过评估被测组件在测试步骤之间转移。您可以使用条件逻辑、时序运算符和事件运算符。
考虑一个以三个频率输出正弦波的简单测试序列。Test Sequence 模块根据信号开关的变化逐步执行几个动作。请参阅 hasChanged。
时序运算符
要创建评估仿真时序的表达式,请使用时序运算符。信号条件中的变量必须是 Test Sequence 模块中的输入、参数或常量。您可以使用以下时间运算符:
转移运算符
要创建评估信号事件的表达式,请使用转移运算符。要评估信号事件,信号必须输入到 Test Sequence 或 Test Assessment 模块中。
运算符 | 描述 |
---|---|
hasChanged | 如果指定的信号在测试步骤开始后其值发生变化,则返回 |
hasChangedFrom | 如果指定的信号从指定的值更改为不同的值,则返回 |
hasChangedTo | 如果指定的信号值变为指定的值,则返回 true,否则返回 |
在测试序列中使用消息
消息在 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)
发送消息。
转发消息
您可以将消息从输入消息队列转发到输出端口。转发消息:
使用
receive
从输入队列接收消息。使用命令
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)
返回 true
。M.data == 3.5
将消息数据与预期值进行比较。该语句为 true,并且序列转移至步骤 S3。
当步骤 S3 的转移条件评估时,队列中没有消息。因此,S3 不会转移到 S4。
运行测试并观测输出,比较测试序列对的不同行为。
open_system([model '/Scope'])
sim(model)
close_system(model,0) clear(model)