测试序列和评估语法
本主题介绍 Test Sequence 和 Test Assessment 模块以及 Stateflow® 图中使用的语法。在模块中,您可以使用此语法进行测试步骤操作、转移和评估。在图中,您可以在状态和转移中使用此语法。
Test Sequence 和 Test Assessment 模块使用 MATLAB® 作为动作语言。您还可以在测试序列步骤和转移中使用字符串(包括字符串比较)。您可以使用评估运算符、时序运算符、转移运算符、信号生成函数、逻辑运算符和关系运算符来定义动作、转移和评估。除 verify
外,Stateflow 图可以使用 MATLAB 或 C 中的所有运算符作为动作语言。verify
只能与 MATLAB 语言一起使用,并且不能在 verify
语句中使用字符串。例如:
输出周期为
10
秒的方波:square(et/10)
当
h
变为0
时进行转移:hasChangedTo(h,0)
要验证 x 是否大于 y:
verify(x > y)
评估声明
要验证仿真、停止仿真并返回验证结果,请使用评估语句。
关键字 | 语句语法 | 描述 | 示例 |
---|---|---|---|
verify |
| 评估逻辑表达式。可选参量标签结果在测试管理器和诊断查看器中。 | verify(x > y,... 'SimulinkTest:greaterThan',... 'x and y values are %d, %d',... x,y) |
assert |
| 评估逻辑表达式。失败则停止仿真并返回错误。可选参量返回错误消息。 Test Sequence 模块或 Stateflow 图中的 | assert(h==0 && k==0,... 'h and k must '... 'initialize to 0') |
表中的语法使用这些参量:
时序运算符
要创建评估仿真时序的表达式,请使用时序运算符。信号条件中使用的变量必须是 Test Sequence 模块中的输入、参数或常量。
运算符 | 语法 | 描述 | 示例 |
---|---|---|---|
et |
|
| 测试序列步骤的经过时间(以毫秒为单位): et(msec) |
t |
|
| 仿真的经过时间(微秒): t(usec) |
after |
| 如果自当前测试步骤开始以来历经了指定的 | 4 秒后: after(4,sec) |
before |
| 从当前测试步骤开始,返回 | 4 秒前: before(4,sec) |
duration |
| 返回 | 如果自 duration(Phi>1,msec) > 550 |
表中的语法使用这些参量:
转移运算符
要创建评估信号事件的表达式,请使用转移运算符。常见的转移运算符包括:
运算符 | 语法 | 描述 | 示例 |
---|---|---|---|
hasChanged | hasChanged(u) | 如果自测试步骤开始以来
|
hasChanged(h) |
hasChangedFrom | hasChangedFrom(u,A) | 如果
| 当 hasChangedFrom(h,1) |
hasChangedTo | hasChangedTo(u,B) | 如果
| 当 hasChangedTo(h,0) |
信号生成函数
下表列出了您可以在 Test Sequence 模块中使用的常用函数,以创建测试信号、随机数值和自然指数。它还描述了 latch
函数,该函数保存并返回在测试序列步骤中评估的特定值。要了解有关每个函数的更多信息,点击第一列中其名称。
一些信号生成函数使用时序运算符 et
,它是测试步骤经过的时序(以秒为单位)。有关可在测试序列步骤中使用的与 et
相关的其他运算符,请参阅 时序运算符。
注意
参量值的缩放、舍入和其他近似值可能会影响函数输出。
函数 | 语法 | 描述 | 示例 |
---|---|---|---|
sin | sin(x) | 返回 | 周期为 10 秒的正弦波: sin(et*2*pi/10) |
cos | cos(x) | 返回 | 周期为 10 秒的余弦波: cos(et*2*pi/10) |
square | square(x) | 周期为 在区间 Stateflow 图不支持 | 输出周期为 square(et/10) |
sawtooth | sawtooth(x) | 周期为 在区间 Stateflow 图不支持 | 输出周期为 sawtooth(et/10) |
triangle | triangle(x) | 周期为 在区间 Stateflow 图不支持 | 输出周期为 triangle(et/10) |
ramp | ramp(x) | 斜率
Stateflow 图不支持 | 测试步骤每经过 5 秒,斜坡增加一个单位: ramp(et/5) |
heaviside | heaviside(x) | Heaviside 阶跃信号,对 Stateflow 图不支持 | 在 heaviside(et-5) |
exp | exp(x) | 返回自然指数函数 。 | 以测试步骤耗时十分之一的速度前进的指数信号: exp(et/10) |
rand | rand | 均匀分布的伪随机值 | 通过使用 coder.extrinsic('rand')
nr = rand
sg = a + (b-a)*nr |
randn | randn | 正态分布的伪随机值 | 通过使用 coder.extrinsic('randn')
nr = randn
sg = nr*2 |
latch | latch(x) | 在测试步骤中第一次评估 Stateflow 图不支持 | 将 b = latch(torque) |
逻辑运算符
您可以在动作、转移和评估中使用逻辑连接词。在这些示例中,p
和 q
表示布尔信号或逻辑表达式。
手术 | 语法 | 描述 | 示例 |
---|---|---|---|
否定 | ~p | 不是 |
|
连词 | p && q |
|
|
分离 | p || q |
|
|
含义 | ~p || q | 如果 |
|
双条件 | (p && q) || (~p && ~q) |
|
|
关系运算符
您可以在动作、转移和评估中使用关系运算符。在这些示例中,x
和 y
代表数值类型变量。
在 ==
语句中使用 ~=
或 verify
运算符在比较浮点数据时会返回警告。在实现 verify
语句时,请考虑与浮点数相关的精度限制。请参阅浮点数。如果使用浮点数据,请考虑定义评估的容差。例如,不要验证 verify(x == 5)
,而是验证 x
在 0.001
的容差范围内:
verify(abs(x-5) < 0.001)
运算符和语法 | 描述 | 示例 |
---|---|---|
x > y | 大于 | verify(x > y) |
x < y | 少于 | verify(x < y) |
x >= y | 大于或等于 | verify(x >= y) |
x <= y | 小于或等于 | verify(x <= y) |
x == y | 等于 | verify(x == y) |
x ~= y | 不等于 | verify(x ~= y) |