主要内容

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

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 SequenceTest 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)

另请参阅

|

主题