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

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

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

Рассмотрите простую тестовую последовательность, которая выводит синусоиду на трех частотах. Тестовые переходы последовательности между шагами:

  • От Initialize к Sine когда Switch изменения

  • От Sine к Sine8 когда Switch изменения от значения 1

  • От Sine8 к Sine16 когда Switch изменения в значении 13.344

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

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

Перед 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)

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

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

Сравните тестовые последовательности Используя данные и сообщения

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

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

filePath = fullfile(matlabroot,'examples','simulinktest');
model = 'sltest_testsequence_data_vs_message';

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

open_system(fullfile(filePath,model))

Протестируйте последовательности Используя данные

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

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

Протестируйте последовательности Используя сообщения

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

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

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

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

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

close_system(model,0)
clear(model, filePath)

Смотрите также

|

Похожие темы