В этом примере показано, как использовать логические и временные оценки, чтобы протестировать логику сигнала на 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)
. Для получения дополнительной информации о требованиях типа данных, смотрите Типы данных в Условиях Оценки.
В менеджере по Тесту нажмите New Test Case 1
в Тестовой панели Браузера.
Расширьте раздел Logical и Temporal Assessments менеджера по Тесту
Выберите Waiting Cars в таблице и проверьте, что ее логика Оценки правильна.
В верхнем правом углу Визуальной панели Представления кликните по Исследовать значку Шаблона, чтобы открыть Проводник Шаблона.
Просмотрите Передачу и Сбой Примеров. Это изображение показывает передающий пример:
6. С автомобильной выбранной оценкой Ожидания запустите тест.
7. Чтобы просмотреть результаты, расширьте Результаты в панели Результатов и Артефактов.
8. Выберите New Test Case 1> Logical and Temporal Assessments> автомобили Waiting
.
Сравните состояния обоих световых сигналов на всех временных шагах при помощи пользовательской логической оценки.
Из соображений безопасности, ни в каком смысле вовремя должен оба световых сигналов быть зеленым. Кроме того, другие настройки являются нежелательным, таким как один зеленый свет и один желтый свет или два желтых световых сигналов. Оценка проверяет, что одни из световых сигналов являются всегда красными.
В разделе Logical и Temporal Assessments эта оценка использует символы, Red
и Yellow
, который каждый соответствует их соответствующему цвету в определении перечислимого типа. Например, Expression
поле для Red
символ ссылается на Red
член перечисления LightModeType
перечисление - LightModeType.Red
. Green
символ появляется как неиспользованный символ, потому что он не используется, пока вы не реализуете Зеленый к Желтой оценке. Смотрите Создают Оценку Триггерного Ответа, чтобы Оценить Зеленый к Желтым Переходам.
Обратите внимание на то, что Визуальный предварительный просмотр Представления является пробелом, потому что это только доступно для оценок граничной проверки и триггерного ответа. Кроме того, поле пользовательского выражения собственной проверки должно следовать за синтаксическими правилами, описанными в Логических и Временных Условиях Оценки.
Возвратитесь к Тестовому Браузеру, разделяют на области и расширяют раздел Logical и Temporal Assessments.
Выберите Обе проверки безопасности световых сигналов.
Повторно выполните тест.
Чтобы просмотреть результаты, расширьте Результаты в Результатах, и Артефакты разделяют на области и выбирают New Test Case 1> Logical Temporal Assessments> Обе проверки безопасности световых сигналов.
Используйте триггерный ответ логическая оценка, чтобы оценить логику когда Light1
переходы от Yellow
утвердите к Red
состояние. Оценка инициировала когда Light1
вводит Yellow
состояние. Как показано в диаграмме Stateflow, для after(YELLOWDELAY,sec)
переходы в каждой атомарной субдиаграмме, состояние переключается от Yellow
к Red
после фиксированной задержки YELLOWDELAY
секунды. Удовлетворять требования, YELLOWDELAY
значение настроено значением допуска, tol
для оценки в коллбэке оценки.
Под Логическими и Временными Оценками включите оценку Перехода Light1 YellowToRed.
Проверьте его сводные данные логики Оценки.
Расширьте сводные данные и триггерный раздел и установите привязку по времени к rising edge of trigger
.
Запустите тест.
В панели Результатов и Артефактов нажмите New Test Case 1> Logical and Temporal Assessments> Light1 YellowToRed Transition.
Заметьте, что оценка перестала работать.
Ожидаемое Поведение и Фактические графики Результата показывают отказы оценки, и раздел 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
чтобы ограничить оценку первой половиной симуляции, создайте коллбэк оценки.
В менеджере по Тесту расширьте раздел Logical и Temporal Assessments.
Нажмите Add Assessment и выберите Trigger-response.
Дважды щелкните по Полю имени. Переименуйте оценку Light1 GreenToYellow
.
Установите триггерное условие. Кликните по выпадающему рядом с триггерным полем и выберите becomes true and stays true for between
. Эта логика требуется, потому что свет должен остаться зеленым прежде, чем переключиться на желтый. После того, как вы выберете триггерный тип, условие, разовое min (секунда), макс. разовая (секунда), и поля привязки по времени становятся видимыми.
Для условия введите t<500 & Light1 == Green
. Оценка использует встроенный символ t
инициировать проверку когда Light1
становится Green
в течение первых 500 секунд после симуляции.
Для разового min (секунда) введите GreenMin
.
Для макс. разового (секунда) введите GreenMax
. Обратите внимание на то, что GreenMin
и GreenMax
еще не заданы и появляются как Неразрешенные символы в панели Символов.
Установите
привязка по времени к falling edge of trigger
, который гарантирует что ответ когда Light1
становится желтым, оценен только, когда Light1 является более не зеленым.
Оставьте задержку как with no delay
.
Установите ответ на must be true
. Эта опция оценивает один экземпляр времени и получает ли переход к Yellow
происходит. После выбора типа ответа поле условия становится видимым.
Для условия введите Light1 == Yellow
.
Разрешите 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
зеленые повороты, это должно остаться зеленым сроком на время в течение минимальных и максимальных времен. Когда Light1
триггер является ложным, и свет является более не зеленым, Light1
триггер верен и легкие изменения в желтом.
Запустите оценку.
В панели Результатов и Артефактов расширьте Новый Тест 1> Логические и Временные Оценки. Выберите Light1 GreenToYellow и заметьте, что оценка инициировала дважды в первой половине симуляции. Триггерные времена выравнивают с начальным Инспектором Данных моделирования результаты когда Light1
вводит Green
состояние в t = 12.1
и t = 282.2
.