Действия и переходы

Переход между шагами с использованием временных или сигнальных условий

Блок Test Sequence использует MATLAB® как язык действий. Можно переходить между этапами тестирования путем оценки тестируемого компонента. Можно использовать условную логику, темпоральные операторы и операторы событий.

Рассмотрим простую тестовую последовательность, которая выводит синусоиду на трех частотах. Test Sequence блокирует шаги через несколько действий на основе изменений в переключателе сигнала. См. hasChanged.

Темпоральные операторы

Чтобы создать выражение, которое оценивает время симуляции, используйте темпоральные операторы. Переменные, используемые в условиях сигнала, должны быть входами, параметрами или константами в блоке 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)

Использование сообщений в тестовых последовательностях

Сообщения несут данные между блоками Test Sequence и другими блоками, такие как графики Stateflow ®. Сообщения могут использоваться для моделирования асинхронных событий. Сообщение ставится в очередь до тех пор, пока вы не вычислите его, что удаляет его из очереди. Можно использовать сообщения и данные сообщений в тестовой последовательности. Сообщение остается в силе до тех пор, пока вы не переадресовываете его, или пока не закончится временной шаг. Для получения дополнительной информации см. Messages (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 - выход сообщения.

Сравнение тестовых последовательностей с использованием данных и сообщений

Этот пример демонстрирует входные и выходные входы сообщения, отправку и прием сообщения. Модель сравнивает две пары тестовых последовательностей. Каждая пара состоит из блока отправки и приема тестовой последовательности. Первая пара отправляет и получает данные, а вторая отправляет и получает сообщение.

Установите переменную имени модели.

model = 'sltest_testsequence_data_vs_message';

Откройте модель.

open_system(model)

Тестирование последовательностей с использованием данных

Блок DataSender присваивает значение выходным данным M.

Блок DataReceiver ждет 3 секунды, затем переходит к шагу S2. Шаг S2 переходит к шагу S3 с помощью условия сравнения M к ожидаемому значению и делает то же самое для S3 к S4.

Тестируйте последовательности с использованием сообщений

Блок MessageSender присваивает значение данным сообщения вывода сообщения M_out, затем отправляет сообщение в блок MessageReceiver.

Блок MessageReceiver ждет 3 секунды, затем переходит к шагу S2. Переход шага S2 оценивает очередь M с receive(M), удаление сообщения из очереди. receive(M) возвращает true поскольку сообщение присутствует. M.data == 3.5 сравнивает данные сообщения с ожидаемым значением. Оператор true, и последовательность переходит к шагу S3.

Когда условие перехода этапа S3 оценивается, никаких сообщений в очереди нет. Поэтому S3 не переходит на S4.

Запустите тест и наблюдайте выход, сравнивая различное поведение пар тестовой последовательности.

open_system([model '/Scope'])
sim(model)

close_system(model,0)
clear(model)

См. также

|

Похожие темы