Протестируйте управление светофором при помощи логических и временных оценок

В этом примере показано, как использовать логические и временные оценки, чтобы протестировать логику сигнала на 2D светлое пересечение трафика.

Модель, используемая в этом примере, представляет контроллер в 2D светлом пересечении трафика. Изменения между состояниями светофора зависят от светофора и параметров задержки синхронизации, заданных в графике Stateflow®. Для получения дополнительной информации о логике Stateflow, используемой в модели, смотрите Действие Графика Монитора при помощи Активных Данных состояния (Stateflow).

Открытый и запуск модель

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

model = 'sltestTrafficLight';
open_system(model)
sim(model)

Постройте состояния этих двух световых сигналов в Инспекторе Данных моделирования.

runData = Simulink.sdi.Run.getLatest; 
LightState1 = getSignalsByName(runData,'Light1');
LightState2 = getSignalsByName(runData,'Light2');
Simulink.sdi.setSubPlotLayout(2,1);
plotOnSubPlot(LightState1,1,1,true);
plotOnSubPlot(LightState2,1,1,false);

plotOnSubPlot(LightState2,2,1,true);
plotOnSubPlot(LightState1,2,1,false);

Simulink.sdi.view

Светофор находится приблизительно в противоположных расписаниях. Когда один свет находится в Green состояние, другой свет находится в Red состояние, и наоборот. Кроме того, световые сигналы должны пройти через Yellow утвердите при переходе от Green к Red.

Чтобы исследовать логику Stateflow, рассмотрите:

  • Добавление точки останова в одной из двух атомарных субдиаграмм, чтобы продвинуться через логику. Для получения дополнительной информации об отладке диаграмм состояний смотрите Установку точек останова, чтобы Отладить Графики (Stateflow).

  • Осмотр логики с помощью Sequence Viewer.

  • Визуализация различных сигналов с помощью Инспектора Данных моделирования.

Требования и перечисляемые типы модели

Чтобы протестировать логику диспетчера, диаграмма Stateflow выводит перечислимый тип что correspopnds к Red, Yellow, или Green состояние света. По умолчанию Stateflow автоматически генерирует определение перечислимого типа. Чтобы создать пользовательское определение перечисления, смотрите, Задают Перечисляемый тип Действия состояния (Stateflow).

Симуляция модели создает встроенное определение перечисления. Подтвердить что определение перечислимого типа LightModeType существует, используйте which LightModeType.

Конструктивные требования

Тестовый файл в этом примере тестирует модель светофора против нескольких требований::

  • Количество автомобилей, ожидающих в свете, всегда больше или равно нулю.

  • В любом моменте времени по крайней мере одни из световых сигналов являются красными.

  • Каждый раз, когда свет становится желтым, это остается желтым для фиксированного количества времени в значении допуска 0,5 секунд прежде, чем превратиться в красный.

  • Каждый раз, когда свет становится зеленым, это остается зеленым между минимальным и максимальным временем в допуске 0,5 секунд прежде, чем превратиться в желтый.

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

Запустите логические и временные оценки

Загрузите тестовый файл и откройте тестовые оценки в менеджере по Тесту.

sltest.testmanager.load('test_traffic.mldatx');
sltest.testmanager.view;

Запустите тест граничной проверки

Проверяйте, больше ли количество автомобилей, ожидающих в свете всегда, или равно нулю при помощи граничной проверки логическая оценка. Символ NumCars сопоставлен с выходом Car_Monitor1 подсистема. Car_Monitor1 подсистема выводит int32 введите, таким образом, выражение нижней границы снято как int32(0). Для получения дополнительной информации о требованиях типа данных, смотрите Типы данных в Условиях Оценки.

  1. В менеджере по Тесту нажмите New Test Case 1 в Тестовой панели Браузера.

  2. Расширьте раздел Logical и Temporal Assessments менеджера по Тесту

  3. Выберите Waiting Cars в таблице и проверьте, что ее логика Оценки правильна.

  4. В верхнем правом углу Визуальной панели Представления кликните по Исследовать значку Шаблона, чтобы открыть Проводник Шаблона.

  5. Просмотрите Передачу и Сбой Примеров. Это изображение показывает передающий пример:

6. С автомобильной выбранной оценкой Ожидания запустите тест.

7. Чтобы просмотреть результаты, расширьте Результаты в панели Результатов и Артефактов.

8. Выберите New Test Case 1> Logical and Temporal Assessments> автомобили Waiting

.

Запустите пользовательскую логическую оценку

Сравните состояния обоих световых сигналов на всех временных шагах при помощи пользовательской логической оценки.

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

В разделе Logical и Temporal Assessments эта оценка использует символы, Red и Yellow, который каждый соответствует их соответствующему цвету в определении перечислимого типа. Например, Expression поле для Red символ ссылается на Red член перечисления LightModeType перечисление - LightModeType.Red. Green символ появляется как неиспользованный символ, потому что он не используется, пока вы не реализуете Зеленый к Желтой оценке. Смотрите Создают Оценку Триггерного Ответа, чтобы Оценить Зеленый к Желтым Переходам.

Обратите внимание на то, что Визуальный предварительный просмотр Представления является пробелом, потому что это только доступно для оценок граничной проверки и триггерного ответа. Кроме того, поле пользовательского выражения собственной проверки должно следовать за синтаксическими правилами, описанными в Логических и Временных Условиях Оценки.

  1. Возвратитесь к Тестовому Браузеру, разделяют на области и расширяют раздел Logical и Temporal Assessments.

  2. Выберите Обе проверки безопасности световых сигналов.

  3. Повторно выполните тест.

  4. Чтобы просмотреть результаты, расширьте Результаты в Результатах, и Артефакты разделяют на области и выбирают New Test Case 1> Logical Temporal Assessments> Обе проверки безопасности световых сигналов.

Запустите триггерный ответ логическая оценка

Используйте триггерный ответ логическая оценка, чтобы оценить логику когда Light1 переходы от Yellow утвердите к Red состояние. Оценка инициировала когда Light1 вводит Yellow состояние. Как показано в диаграмме Stateflow, для after(YELLOWDELAY,sec) переходы в каждой атомарной субдиаграмме, состояние переключается от Yellow к Red после фиксированной задержки YELLOWDELAY секунды. Удовлетворять требования, YELLOWDELAY значение настроено значением допуска, tol для оценки в коллбэке оценки.

  1. Под Логическими и Временными Оценками включите оценку Перехода Light1 YellowToRed.

  2. Проверьте его сводные данные логики Оценки.

  3. Расширьте сводные данные и триггерный раздел и установите привязку по времени к rising edge of trigger.

  4. Запустите тест.

  5. В панели Результатов и Артефактов нажмите New Test Case 1> Logical and Temporal Assessments> Light1 YellowToRed Transition.

  6. Заметьте, что оценка перестала работать.

Ожидаемое Поведение и Фактические графики Результата показывают отказы оценки, и раздел Explanation описывает отказы. Отказы происходят в четырех точках, когда оценка инициировала. По ошибке 1 из 4, триггерное условие становится верным в t = 132.1 и раздел Explanation объясняет, что тест ожидал условие ответа быть верным в 132,1 секунды. Этот результат противоречит требованию что легкое пребывание, желтое для фиксированного количества времени прежде, чем превратиться в красный. Оценка перестала работать, потому что оценка ответа в возрастающем ребре триггера. Light1 == Red ответ не должен быть оценен, пока триггер не ложный.

В Тестовой панели Браузера настройте привязку по времени к falling edge of trigger. Эта установка гарантирует что Light1 == Red ответ оценивает только когда Light1 является более не желтым.

Повторно выполните тест. Теперь оценка передает в четырех точках симуляции где Light1 желтые повороты. Кроме того, существует точка, отмеченная в t = 984.5, который соответствует точке, после которой больше не может оцениваться оценка. Логика указывает, что триггерное условие должно остаться верным для большей части YellowDelayWithTol секунды или 15,5 секунд. После t = 984.5, существует недостаточно времени, оставленного в симуляции точно оценить логику. Вы можете заметить подобное поведение для других оценок на основе параметров синхронизации, предоставленных триггеру.

Создайте оценку триггерного ответа, чтобы оценить зеленый к желтым переходам

Эта оценка оценивает Light1 переходы от Green к Yellow во время первой половины симуляции. Оценка инициировала, когда свет изменяется от Red к Green. Как описано в Синхронизации Светофора (Stateflow), переход от Green к Yellow происходит в фиксированном окне времени на основе greenLightRequested параметр. Настраивать параметры и использовать встроенный символ t чтобы ограничить оценку первой половиной симуляции, создайте коллбэк оценки.

Настройте параметры

  1. В менеджере по Тесту расширьте раздел Logical и Temporal Assessments.

  2. Нажмите Add Assessment и выберите Trigger-response.

  3. Дважды щелкните по Полю имени. Переименуйте оценку Light1 GreenToYellow.

  4. Установите триггерное условие. Кликните по выпадающему рядом с триггерным полем и выберите becomes true and stays true for between. Эта логика требуется, потому что свет должен остаться зеленым прежде, чем переключиться на желтый. После того, как вы выберете триггерный тип, условие, разовое min (секунда), макс. разовая (секунда), и поля привязки по времени становятся видимыми.

  5. Для условия введите t<500 & Light1 == Green. Оценка использует встроенный символ t инициировать проверку когда Light1 становится Green в течение первых 500 секунд после симуляции.

  6. Для разового min (секунда) введите GreenMin.

  7. Для макс. разового (секунда) введите GreenMax. Обратите внимание на то, что GreenMin и GreenMax еще не заданы и появляются как Неразрешенные символы в панели Символов.

  8. Установите привязка по времени к falling edge of trigger, который гарантирует что ответ когда Light1 становится желтым, оценен только, когда Light1 является более не зеленым.

  9. Оставьте задержку как with no delay.

  10. Установите ответ на must be true. Эта опция оценивает один экземпляр времени и получает ли переход к Yellow происходит. После выбора типа ответа поле условия становится видимым.

  11. Для условия введите Light1 == Yellow.

  12. Разрешите GreenMin и GreenMax символы, путем добавления этого кода коллбэка оценки в существующий код в Коллбэке Оценки. Коллбэк извлекает параметры Stateflow, которые соответствуют Green переход, затем настраивает их значением допуска, заданным в требованиях, чтобы подготовить их к min-time и max-time инициируйте поля.

greenMin = maskObj.getParameter('MINGREENDELAY');
greenMin = str2double(greenMin.Value);
greenMinAdj = greenMin - tol;

greenMax = maskObj.getParameter('GREENDELAY');
greenMax = str2double(greenMax.Value);
greenMaxAdj = greenMax + tol;

13. В Символах щелкните правой кнопкой по имени символа GreenMin и выберите Map to expression.

14. В поле Expression введите имя переменной greenMinAdj.

15. Разрешите символ GreenMax путем повторения шагов 13 и 14 при помощи greenMaxAdj для выражения.

Просмотрите логику Light1 GreenToYellow

Сверните оценку, чтобы считать сводные данные ее логики:

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

Запустите оценку и просмотрите результаты

Запустите оценку.

В панели Результатов и Артефактов расширьте Новый Тест 1> Логические и Временные Оценки. Выберите Light1 GreenToYellow и заметьте, что оценка инициировала дважды в первой половине симуляции. Триггерные времена выравнивают с начальным Инспектором Данных моделирования результаты когда Light1 вводит Green состояние в t = 12.1 и t = 282.2.

Похожие темы