Main Content

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

测试序列和评估语法

本主题介绍 Test SequenceTest Assessment 模块以及 Stateflow® 图中使用的语法。在模块中,您可以使用此语法进行测试步骤操作、转移和评估。在图中,您可以在状态和转移中使用此语法。

Test SequenceTest 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(expression)

verify(expression, errorMessage)

verify(expression, identifier, errorMessage)

评估逻辑表达式。可选参量标签结果在测试管理器和诊断查看器中。

verify(x > y,...
'SimulinkTest:greaterThan',...
'x and y values are %d, %d',...
x,y)
assert

assert(expression)

assert(expression, errorMessage)

评估逻辑表达式。失败则停止仿真并返回错误。可选参量返回错误消息。

Test Sequence 模块或 Stateflow 图中的 assert 语句不支持代码生成并将被忽略,因此如果在 Simulink® 仿真期间断言条件失败,则不会发生错误。

assert(h==0 && k==0,...
'h and k must '...
'initialize to 0')

表中的语法使用这些参量:

 expression

 identifier

 errorMessage

时序运算符

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

运算符句法描述示例
et

et(TimeUnits)

TimeUnits 中的测试步骤已用时间。省略 TimeUnits 将返回以秒为单位的值。

测试序列步骤的经过时间(以毫秒为单位):

et(msec)
t

t(TimeUnits)

TimeUnits 中的仿真已用时间。省略 TimeUnits 将返回以秒为单位的值。

仿真的经过时间(微秒):

t(usec)
after

after(n, TimeUnits)

如果自当前测试步骤开始以来历经了指定的 n 个时间单位(TimeUnits),则返回 true

4 秒后:

after(4,sec)
before

before(n, TimeUnits)

从当前测试步骤开始,返回 true 直到 n 指定的时间单位内的 TimeUnits 时间。

4 秒前:

before(4,sec)
duration

ElapsedTime = duration (Condition, TimeUnits)

返回 TimeUnits 中的 ElapsedTime,其中 Condition 已为 true。当重新进入测试步骤或 Condition 不再为 true 时,ElapsedTime 将被重置。

如果自 Phi > 1 以来的时间(以毫秒为单位)大于 550,则返回 true

duration(Phi>1,msec) > 550

表中的语法使用这些参量:

 TimeUnits

 Condition

转移运算符

要创建评估信号事件的表达式,请使用转移运算符。常见的转移运算符包括:

运算符句法描述示例
hasChanged
hasChanged(u)

如果自测试步骤开始以来 u 的值发生变化,则返回 true,否则返回 false

u 必须是输入数据符号。

h 改变时的转移:

hasChanged(h)
hasChangedFrom
hasChangedFrom(u,A)

如果 u 从值 A 发生变化,则返回 true,否则返回 false。

u 必须是输入数据符号。

h1 变为其它值时的转移:

hasChangedFrom(h,1)
hasChangedTo
hasChangedTo(u,B)

如果 u 更改为值 B 则返回 true,否则返回 false。

u 必须是输入数据符号。

h 变为 0 时的转移:

hasChangedTo(h,0)

信号生成函数

下表列出了您可以在 Test Sequence 模块中使用的常用函数,以创建测试信号、随机数值和自然指数。它还描述了 latch 函数,该函数保存并返回在测试序列步骤中评估的特定值。要了解有关每个函数的更多信息,点击第一列中其名称。

一些信号生成函数使用时序运算符 et,它是测试步骤经过的时序(以秒为单位)。有关可在测试序列步骤中使用的与 et 相关的其他运算符,请参阅 时序运算符

注意

参量值的缩放、舍入和其他近似值可能会影响函数输出。

功能句法描述示例
sinsin(x)

返回 x 的正弦值,其中 x 以弧度为单位。

周期为 10 秒的正弦波:

sin(et*2*pi/10)
coscos(x)

返回 x 的余弦,其中 x 以弧度为单位。

周期为 10 秒的余弦波:

cos(et*2*pi/10)
squaresquare(x)

周期为 1、范围为 –11 的方波输出。

在区间 0 <= x < 1 内,square(x)0 <= x < 0.5 返回值 1,对 0.5 <= x < 1 返回值 –1

Stateflow 图不支持 square

输出周期为 10 秒的方波:

square(et/10)
sawtoothsawtooth(x)

周期为 1、范围为 –11 的锯齿波输出。

在区间 0 <= x < 1 内,sawtooth(x) 增加。

Stateflow 图不支持 sawtooth

输出周期为 10 秒的锯齿波:

sawtooth(et/10)
triangletriangle(x)

周期为 1 且范围为 –11 的三角波输出。

在区间 0 <= x < 0.5 内,triangle(x) 增加。

Stateflow 图不支持 triangle

输出周期为 10 秒的三角波:

triangle(et/10)
rampramp(x)

斜率 1 的斜坡信号,返回时间 x 时的斜坡值。

ramp(et) 有效地返回了测试步骤的经过时间。

Stateflow 图不支持 ramp

测试步骤每经过 5 秒,斜坡增加一个单位:

ramp(et/5)
heavisideheaviside(x)

Heaviside 阶跃信号,对 x < 0 返回 0,对 x >= 0 返回 1

Stateflow 图不支持 heaviside

5 秒后输出一个 heaviside 信号:

heaviside(et-5)
expexp(x)

返回自然指数函数 ex

以测试步骤耗时十分之一的速度前进的指数信号:

exp(et/10)
randrand

均匀分布的伪随机值

通过使用 coder.extrinsicrand 声明为外部的,为每个仿真生成新的随机值。将随机数分配给局部变量。例如:

coder.extrinsic('rand')
nr = rand
sg = a + (b-a)*nr
randnrandn

正态分布的伪随机值

通过使用 coder.extrinsicrandn 声明为外部的,为每个仿真生成新的随机值。将随机数分配给局部变量。例如:

coder.extrinsic('randn')
nr = randn
sg = nr*2
latchlatch(x)

在测试步骤中第一次评估 latch(x) 时保存 x 的值,随后返回保存的 x 的值。当步骤退出时重置 x 的保存值。当该步骤下次处于活动时,重新评估 latch(x)

Stateflow 图不支持 latch

b 锁存为 torque 的值:

b = latch(torque)

逻辑运算符

您可以在动作、转移和评估中使用逻辑连接词。在这些例子中,pq 表示布尔信号或逻辑表达式。

手术句法描述示例

否定

~p

不是 p

verify(~p)

连词

p && q

pq

verify(p && q)

分离

p || q

pq

verify(p || q)

含义

~p || q

如果 pq。逻辑上等同于蕴涵 pq

verify(~p || q)

双条件

(p && q) || (~p && ~q)

pq,或者不是 p 也不是 q。逻辑上等同于双条件 pq

verify((p && q) || (~p && ~q))

关系运算符

您可以在动作、转移和评估中使用关系运算符。在这些例子中,xy 代表数字类型变量。

verify 语句中使用 ==~= 运算符在比较浮点数据时会返回警告。在实现 verify 语句时,请考虑与浮点数相关的精度限制。参见 浮点数。如果使用浮点数据,请考虑定义评估的容差。例如,不要验证 verify(x == 5),而是验证 x0.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)

相关主题