Синтаксис тестовой последовательности и оценки

В этой теме описывается синтаксис, используемый в Test Sequence и Test Assessment блоках, и Stateflow® чарты. В блоках этот синтаксис используется для тестовых действий, переходов и оценок. В графиках вы используете этот синтаксис в состояниях и переходах.

Для получения информации об использовании интерфейса командной строки для создания и редактирования шагов тестовой последовательности, переходов и символов данных, смотрите функции, перечисленные в Test Sequences на странице Тестовые скрипты.

Test Sequence и Test Assessment блоки используют MATLAB® как язык действий. Вы задаете действия, переходы, оценки с операторами оценки, темпоральными операторами, операторами перехода, функциями генерации сигналов, логическими операторами и реляционными операторами. Кроме verifyДиаграммы Stateflow можете использовать все операторы в MATLAB или C в качестве языка действий. verify может использоваться только с языком MATLAB. Для примера:

  • Вывод квадратной волны с периодом 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)

Оценивает логическое выражение. Отказ останавливает симуляцию и возвращает ошибку. Необязательные аргументы возвращают сообщение об ошибке.

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)

Возвращает true если n заданные модули времени в TimeUnits прошло с начала текущего тестового шага.

Через 4 секунды:

after(4,sec)
before

before(n, TimeUnits)

Возвращает true до n заданные модули времени в TimeUnits elapse, начиная с текущего тестового шага.

До 4 секунд:

before(4,sec)
duration

ElapsedTime = duration (Condition, TimeUnits)

Возвращает ElapsedTime в TimeUnits для чего Condition был true. ElapsedTime сбрасывается при повторном вводе тестового шага или при Condition больше не true.

Возврат true если время в миллисекундах с Phi > 1 больше 550:

duration(Phi>1,msec) > 550

Синтаксис в таблице использует следующие аргументы:

 TimeUnits

 Condition

Переходные операторы

Чтобы создать выражения, которые вычисляют события сигнала, используйте операторы перехода. Общие операторы перехода включают:

ОператорСинтаксисОписаниеПример
hasChanged
hasChanged(u)

Возвращает true если u изменяется в значении с начала тестового шага, в противном случае возвращается false.

u должен быть символом входных данных.

Переход при h изменения:

hasChanged(h)
hasChangedFrom
hasChangedFrom(u,A)

Возвращает true, если u изменяется от значения A, в противном случае возвращается false.

u должен быть символом входных данных.

Переход при h изменения от 1:

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

Возвращает true, если u изменения в значении B, в противном случае возвращается false.

u должен быть символом входных данных.

Переход при h изменения в 0:

hasChangedTo(h,0)

Функции генерации сигналов

Некоторые функции генерации сигналов используют темпоральный оператор et, которое является истекшим временем тестового шага в секундах. Масштабирование, округление и другие приближения значений аргументов могут повлиять на выходы функции. Общие функции генерации сигналов включают:

ФункцияСинтаксисОписаниеПример
squaresquare(x)

Представляет выход квадратной волны с периодом 1 и область значений –1 на 1.

В пределах интервала 0 <= x < 1, square(x) возвращает значение 1 для 0 <= x < 0.5и –1 для 0.5 <= x < 1.

square не поддерживается в диаграммах Stateflow.

Вывод квадратной волны с периодом 10 с:

square(et/10)
sawtoothsawtooth(x)

Представляет выход пилообразной волны с периодом 1 и область значений –1 на 1.

В пределах интервала 0 <= x < 1, sawtooth(x) увеличивается.

sawtooth не поддерживается в диаграммах Stateflow.

Вывод пилообразной волны с периодом 10 с:

sawtooth(et/10)
triangletriangle(x)

Представляет выход треугольной волны с периодом 1 и область значений –1 на 1.

В пределах интервала 0 <= x < 0.5, triangle(x) увеличивается.

triangle не поддерживается в диаграммах Stateflow.

Вывод треугольной волны с периодом 10 с:

triangle(et/10)
rampramp(x)

Представляет сигнал наклона 1, возвращая значение пандуса в момент времени x.

ramp(et) эффективно возвращает истекшее время тестового шага.

ramp не поддерживается в диаграммах Stateflow.

Наклоните один модуль на каждые 5 секунд истечения тестового шага:

ramp(et/5)
heavisideheaviside(x)

Представляет тяжелый сигнал шага , возвращаясь 0 для x < 0 и 1 для x >= 0.

heaviside не поддерживается в диаграммах Stateflow.

Вывод сигнала тяжести после 5 секунды:

heaviside(et-5)
latchlatch(x)

Сохраняет значение x в первый раз latch(x) оценивает в тестовом шаге и впоследствии возвращает сохраненное значение x. Сбрасывает сохраненное значение x когда шаг выходит. Переоценка latch(x) когда шаг будет следующим активным.

latch не поддерживается в диаграммах Stateflow.

Защелка b к значению torque:

b = latch(torque)
sinsin(x)

Возвращает синус x, где x находится в радианах.

Синусоида с периодом 10 секунд:

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

Возвращает косинус x, где x находится в радианах.

Косинусоидная волна с периодом 10 секунд:

cos(et*2*pi/10)
randrand

Равномерно распределенные псевдослучайные значения

Сгенерируйте новые случайные значения для каждой симуляции путем объявления rand extrinsic с coder.extrinsic. Присвойте случайное число локальной переменной. Для примера:

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

Нормально распределенные псевдослучайные значения

Сгенерируйте новые случайные значения для каждой симуляции путем объявления randn extrinsic с coder.extrinsic. Присвойте случайное число локальной переменной. Для примера:

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

Возвращает естественную экспоненциальную функцию, ex.

Экспоненциальный сигнал, прогрессирующий в одну десятую времени истечения тестового шага:

exp(et/10)

Логические операторы

Можно использовать логические соединения в действиях, переходах и оценках. В этих примерах p и q представление логических сигналов или логических выражений.

ОперацияСинтаксисОписаниеПример

Отрицание

~p

не p

verify(~p)

Соединение

p && q

p и q

verify(p && q)

Разъединение

p || q

p или q

verify(p || q)

Значение

~p || q

если p, q. Логически эквивалентно импликации pq.

verify(~p || q)

Двусторонняя условная зависимость

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

p и q, или нет p и не q. Логически эквивалентно бикондиционному pq.

verify((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)

Похожие темы