В этом разделе описывается синтаксис, используемый в блоках тестовой последовательности и тестовой оценки и диаграммах Stateflow ®. В блоках этот синтаксис используется для проверки действий шага, переходов и оценок. В диаграммах этот синтаксис используется в состояниях и переходах.
Сведения об использовании интерфейса командной строки для создания и редактирования шагов тестовой последовательности, переходов и символов данных см. в разделе Функции в разделе Тестовые последовательности на странице Тестовые сценарии.
В блоках тестовой последовательности и тестовой оценки в качестве языка действий используется MATLAB ®. Определяются действия, переходы, оценки с операторами оценки, временными операторами, операторами перехода, функциями генерации сигнала, логическими операторами и реляционными операторами. За исключением verify, диаграммы Stateflow могут использовать все операторы в MATLAB или C в качестве языка действий. verify может использоваться только с языком MATLAB. Например:
Вывод квадратной волны с периодом 10 сек:
square(et/10)
На переход, когда h изменения в 0:
hasChangedTo(h,0)
Чтобы убедиться, что значение x больше y, выполните следующие действия.
verify(x > y)
Для проверки моделирования, остановки моделирования и возврата результатов проверки используйте операторы оценки.
| Ключевое слово | Синтаксис оператора | Описание | Пример |
|---|---|---|---|
| проверить |
| Оценивает логическое выражение. Необязательные аргументы помечают результаты в диспетчере тестов и средстве просмотра диагностики. | verify(x > y,... 'SimulinkTest:'... 'greaterThan',... 'x and y values are '... '%d, %d',x,y) |
| утверждать |
| Вычисляет логическое выражение. Сбой останавливает моделирование и возвращает ошибку. Дополнительные аргументы возвращают сообщение об ошибке. | assert(h==0 && k==0,... 'h and k must '... 'initialize to 0') |
Синтаксис в таблице использует следующие аргументы:
Чтобы создать выражение, оценивающее время моделирования, используйте временные операторы. Переменные, используемые в условиях сигнала, должны быть входами, параметрами или константами в блоке тестовой последовательности.
| Оператор | Синтаксис | Описание | Пример |
|---|---|---|---|
| и |
| Прошедшее время этапа тестирования в | Истекшее время шага тестовой последовательности в миллисекундах: et(msec) |
| t |
| Прошедшее время моделирования в | Истекшее время моделирования в микросекундах: t(usec) |
| после |
| Прибыль | Через 4 секунды: after(4,sec) |
| прежде |
| Прибыль | До 4 секунд: before(4,sec) |
| продолжительность |
| Прибыль | Вернуть duration(Phi>1,msec) > 550 |
Синтаксис в таблице использует следующие аргументы:
Чтобы создать выражения, оценивающие сигнальные события, используйте операторы перехода. К общим операторам перехода относятся:
| Оператор | Синтаксис | Описание | Пример |
|---|---|---|---|
| hasChanged | hasChanged(u) | Прибыль
| Переход, когда hasChanged(h) |
| hasChangedFrom | hasChangedFrom(u,A) | Возвращает значение true, если
| Переход, когда hasChangedFrom(h,1) |
| hasChangedTo | hasChangedTo(u,B) | Возвращает значение true, если
| Переход, когда hasChangedTo(h,0) |
Некоторые функции генерации сигнала используют временной оператор et, которое представляет собой прошедшее время этапа тестирования в секундах. Масштабирование, округление и другие аппроксимации значений аргументов могут влиять на выходные данные функции. Общие функции формирования сигналов включают в себя:
| Функция | Синтаксис | Описание | Пример |
|---|---|---|---|
| квадрат | square(x) | Представляет выходной сигнал квадратной волны с периодом В пределах интервала
| Вывод квадратной волны с периодом square(et/10) |
| зуб пилы | sawtooth(x) | Представляет выход пилообразной волны с периодом В пределах интервала
| Вывод пилообразной волны с периодом sawtooth(et/10) |
| треугольник | triangle(x) | Представляет выходной сигнал треугольника с периодом В пределах интервала
| Вывести треугольную волну с периодом triangle(et/10) |
| пандус | ramp(x) | Представляет наклонный сигнал наклона
| Наклонить один блок на каждые 5 секунд прошедшего этапа испытания: ramp(et/5) |
| heaviside | heaviside(x) | Представляет тяжелый сигнал шага , возвращаемый
| Вывести тяжелый сигнал после heaviside(et-5) |
| замок | latch(x) | Сохраняет значение
| Замок b = latch(torque) |
sin | sin(x) | Возвращает синус | Синусоидальная волна с периодом 10 с: sin(et*2*pi/10) |
cos | cos(x) | Возвращает косинус | Косинусная волна с периодом 10 с: cos(et*2*pi/10) |
rand | rand | Равномерно распределенные псевдослучайные значения | Создание новых случайных значений для каждого моделирования путем объявления coder.extrinsic('rand')
nr = rand
sg = a + (b-a)*nr |
randn | randn | Обычно распределенные псевдослучайные значения |
Создание новых случайных значений для каждого моделирования путем объявления coder.extrinsic('randn')
nr = randn
sg = nr*2 |
exp | exp(x) | Возвращает натуральную экспоненциальную функцию, . | Экспоненциальный сигнал, прогрессирующий через одну десятую от времени, прошедшего тестовый этап: exp(et/10) |
Логические соединения можно использовать в действиях, переходах и оценках. В этих примерах 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) |