Следующий пример показывает, как использовать диалоговое окно Simulink® Code Inspector™, чтобы выполнить ключевые задачи в рабочем процессе верификации кода. В этом примере, вас:
Подготовьте иерархию модели к генерации кода и инспекции кода.
Автоматически сгенерируйте код для иерархии модели.
Проверьте сгенерированный код независимо от инструмента генерации кода.
Намеренно введите ошибку в сгенерированный код и смотрите для отказа.
Примечание
Введение в качестве примера в Simulink Code Inspector демонстрирует тот же рабочий процесс верификации кода с помощью команд MATLAB®.
Откройте модель slcidemo_roll_orig
в качестве примера используя следующую команду:
>> slcidemo_roll_orig
Сохраните копию модели, переименовав его в slcidemo_roll
, и измените MATLAB текущая рабочая папка в местоположение сохраненной модели. Верхний уровень модели появляется следующим.
Эта модель представляет основной автопилот продольной оси двумя рабочими режимами: прокрутитесь отношение содержат, и заголовок содержат. Логика режима для этих режимов является внешней к этой модели. Архитектура модели представляет заголовок, содержат режим и основную функцию отношения крена как модели, на которые ссылаются. Модель включает:
Виртуальная подсистема RollAngleReference
, который реализует основное вычисление ссылки угла вращения. Генерация кода Embedded Coder® встраивает это вычисление непосредственно в основную функцию для slcidemo_roll
.
Блок Model HeadingMode
, ссылка на отдельную модель, которая вычисляет команду крена, чтобы отследить заголовок.
Блок Model BasicRollMode
, ссылка на отдельную модель, которая вычисляет функцию управления ориентацией креном.
Подготовьте модель к генерации кода и инспекции кода.
Примечание
Если вы пробуете этот пример моделью кроме slcidemo_roll
, установите параметр модели AdvancedOptControl
к значению '-SLCI'
. Эта установка ограничивает оптимизацию кода, которую Embedded Coder использует для подмножества, которое совместимо с инспекцией кода. Когда вы используете эту установку, сгенерированный код может отличаться от кода, сгенерированного без '-SLCI'
установка. Однако различия не влияют на поведение сгенерированного кода.
С выбранным окном топ-модели дайте следующую команду:
>> set_param(gcs, 'AdvancedOptControl', '-SLCI')
Из окна топ-модели, на вкладке Apps, выбирают Code Inspector. Диалоговое окно Simulink Code Inspector открывается.
Сконфигурируйте проверки совместимости модели. В данном примере выберите Inspect all referenced models и нажмите Apply. Эта установка включает модели, на которые ссылаются, в проверку совместимости модели, а также инспекцию кода. Диалоговое окно должно появиться следующим:
Осуществите проверки совместимости модели путем нажатия на Check all models. Программа контроля совместимости отображает индикатор выполнения.
Результаты появляются в командном окне и в окне сводного отчета HTML.
Командное окно MATLAB отображает результаты, похожие на следующее:
Окно сводного отчета HTML отображает результаты, похожие на следующее.
Примечание
Этот отчет HTML также соединяется от результатов командного окна. Это сохранено как файл summaryReport.html
в подпапке /slprj/modeladvisor
под текущей рабочей папкой.
Проверьте функциональность во время выполнения модели. В данном примере можно проверить функциональность во время выполнения путем симуляции модели. Перед продолжением инспекции кода ваша модель должна симулировать без ошибок.
Сгенерируйте код для модели. Можно сгенерировать код неявно как часть инспекции кода (использующий опцию диалогового окна Simulink Code Inspector Generate code before code inspection) или выполнить генерацию кода и инспекцию кода как отдельные шаги. Этот пример разделяет шаг генерации кода от шага инспекции кода.
В окне топ-модели, на вкладке Modeling, выбирают Model Settings, чтобы открыть диалоговое окно Configuration Parameters. В Code Generation> панель Report, выберите опцию Open report automatically. (Если вы пробуете этот пример моделью кроме slcidemo_roll
, также выберите Code-to-model, Model-to-code, Eliminated / virtual blocks, Traceable Simulink blocks, Traceable Stateflow objects и Traceable MATLAB functions в панели Report.) Нажимают Apply и сохраняют изменения модели.
В окне модели нажмите, Ctrl+B, чтобы сгенерировать Прогресс кода отображен в командном окне MATLAB.
Генерация кода Embedded Coder отображает результаты в окне отчета HTML.
Смотрите сгенерированный код.
Откройте диалоговое окно Simulink Code Inspector, если это не уже открыто, и исследуйте установки параметров инспекции кода. Параметр Code placement устанавливается на Embedded Coder default
, который конфигурирует инспекцию кода, чтобы использовать структуру папок Embedded Coder по умолчанию, созданную генерацией кода.
Опционально, можно изменить местоположение, к которому инспекция кода пишет отчет инспекции кода, с помощью параметра диалогового окна Report folder. Например, введите путь ./report
и нажмите Apply.
Чтобы смотреть сгенерированный код, нажмите Inspect Code. Simulink Code Inspector отображает индикатор выполнения.
Simulink Code Inspector отображает сводные данные в окне отчета HTML.
Сводный отчет соединяется с подробными отчетами инспекции кода для топ-модели и каждой моделью, на которую ссылаются. Например, вот самый верхний фрагмент отчета инспекции кода для топ-модели, slcidemo_roll
.
Сводный отчет и подробные отчеты инспекции кода сохранены как файлы HTML в месте Report folder, которое вы задали.
Вставьте ошибку в сгенерированный код и смотрите для отказа.
Чтобы показать не пройдено результат, этот пример вставляет намеренную ошибку в сгенерированный код. Блок Logical Operator в RollAngleReference
подсистема изменяется в сгенерированном коде от операции OR (||
) к операции И (&&
), с помощью служебной функции в качестве примера slcidemo_modifycode
.
Чтобы подсветить блок, для которого изменяется соответствующий код, дайте следующую команду:
>> hilite_system('slcidemo_roll/RollAngleReference/Or');
Чтобы изменить OR к AND, дайте следующие команды:
>> cfile = fullfile('.','slcidemo_roll_ert_rtw','slcidemo_roll.c'); >> slcidemo_modifycode(cfile,'<S1>/Or','||','&&')
slcidemo_modifycode
служебная функция отображает следующий вывод:
Modified line 52 of file .\slcidemo_roll_ert_rtw\slcidemo_roll.c. Before: if ((rtU_Phi >= 6.0F) || (rtU_Phi <= -6.0F)) { After : if ((rtU_Phi >= 6.0F) && (rtU_Phi <= -6.0F)) {
Чтобы повторно смотреть сгенерированный код, откройте диалоговое окно Simulink Code Inspector, если это не уже открыто, и нажмите Inspect code.
Просмотрите отчеты инспекции кода.
Сводный отчет отображает отказ для топ-модели.
Отчет инспекции кода для топ-модели содержит несколько признаков относительно не пройдено сравнения между блоком Logical Operator и соответствующим кодом. Верхняя часть отчета показывает следующее.
Далее вниз в отчете, под Code Verification Details> Model-to Code Verification, несоответствие между блоком и кодом отмечаются.
Кроме того, под Traceability Details> Model-to Code Traceability, несоответствие между блоком и кодом отмечаются.
Опционально, попытайтесь изменить модель или другие аспекты сгенерированного кода, чтобы видеть, как затронуты результаты инспекции кода.