Осмотрите сгенерированный код для демонстрационной модели

Следующий пример показывает, как использовать диалоговое окно Simulink® Code Inspector™, чтобы выполнить ключевые задачи в рабочем процессе верификации кода. В этом примере, вас:

  • Подготовьте иерархию модели к генерации кода и инспекции кода.

  • Автоматически сгенерируйте код для иерархии модели.

  • Проверьте сгенерированный код независимо от инструмента генерации кода.

  • Намеренно введите ошибку в сгенерированный код и осмотрите для отказа.

Примечание

Пример slcidemo_intro иллюстрирует тот же рабочий процесс верификации кода с помощью команд MATLAB®.

  1. Откройте модель slcidemo_roll_orig в качестве примера с помощью следующей команды:

    >> slcidemo_roll_orig

    Сохраните копию модели, переименовав его к slcidemo_roll, и измените MATLAB текущая рабочая папка на местоположение сохраненной модели. Верхний уровень модели появляется можно следующим образом.

    Эта модель представляет основной автопилот продольной оси с двумя рабочими режимами: прокрутитесь отношение содержат, и заголовок содержат. Логика режима для этих режимов является внешней к этой модели. Архитектура модели представляет заголовок, содержат режим и основную функцию отношения списка как модели, на которые ссылаются. Модель включает:

    • Виртуальный RollAngleReference подсистемы, который реализует основное вычисление ссылки угла вращения. Генерация кода Embedded Coder® встраивает это вычисление непосредственно в основную функцию для slcidemo_roll.

    • HeadingMode блока Model, ссылаясь на отдельную модель, которая вычисляет команду списка, чтобы отследить заголовок.

    • BasicRollMode блока Model, ссылаясь на отдельную модель, которая вычисляет функцию управления ориентацией списком.

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

    Примечание

    Если вы пробуете этот пример моделью кроме slcidemo_roll, устанавливаете параметр модели AdvancedOptControl на значение '-SLCI'. Эта установка ограничивает оптимизацию кода, которую Embedded Coder использует для подмножества, которое совместимо с инспекцией кода. Когда вы используете эту установку, сгенерированный код может отличаться от кода, сгенерированного без установки '-SLCI'. Однако различия не влияют на поведение сгенерированного кода.

    С выбранным окном топ-модели дайте следующую команду:

    >> set_param(gcs, 'AdvancedOptControl', '-SLCI')

    1. Из окна топ-модели выберите Code> Simulink Code Inspector. Диалоговое окно Simulink Code Inspector открывается.

    2. Сконфигурируйте образцовые проверки совместимости. В данном примере выберите Inspect all referenced models и нажмите Apply. Эта установка включает модели, на которые ссылаются, в образцовую проверку совместимости, а также инспекцию кода. Диалоговое окно должно появиться можно следующим образом:

    3. Осуществите образцовые проверки совместимости путем нажатия на Check all models. Программа контроля совместимости отображает индикатор выполнения.

      Результаты появляются в командном окне и в окне сводного отчета HTML.

      • Окно Команды MATLAB отображает результаты, подобные следующему:

      • Окно сводного отчета HTML отображает результаты, подобные следующему.

        Примечание

        Этот отчет HTML также соединяется от результатов командного окна. Это сохранено как файл summaryReport.html в подпапке /slprj/modeladvisor под текущей рабочей папкой.

  3. Проверьте функциональность во время выполнения модели. В данном примере можно проверить функциональность во время выполнения путем симуляции модели. Перед продолжением инспекции кода ваша модель должна моделировать без ошибок.

  4. Сгенерируйте код для модели. Можно сгенерировать код неявно как часть инспекции кода (использующий опцию диалогового окна Simulink Code Inspector Generate code before code inspection) или выполнить генерацию кода и инспекцию кода как отдельные шаги. Этот пример разделяет шаг генерации кода от шага инспекции кода.

    1. В окне топ-модели выберите Simulation> Model Configuration Parameters, чтобы открыть диалоговое окно 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 и сохраняют образцовые изменения.

    2. В окне модели нажмите, Ctrl+B, чтобы сгенерировать Продвижение кода отображен в Окне Команды MATLAB.

    3. Генерация кода Embedded Coder отображает результаты в окне отчета HTML.

  5. Осмотрите сгенерированный код.

    1. Откройте диалоговое окно Simulink Code Inspector, если это не уже открыто, и исследуйте установки параметров инспекции кода. Параметр Code placement устанавливается на Embedded Coder default, который конфигурирует инспекцию кода, чтобы использовать структуру папок Embedded Coder по умолчанию, созданную генерацией кода.

    2. Опционально, можно изменить местоположение, к которому инспекция кода пишет отчет инспекции кода, с помощью параметра диалогового окна Report folder. Например, введите путь ./report и нажмите Apply.

    3. Чтобы осмотреть сгенерированный код, нажмите Inspect Code. Simulink Code Inspector отображает индикатор выполнения.

    4. Simulink Code Inspector отображает сводные данные в окне отчета HTML.

      Сводный отчет соединяется с подробными отчетами инспекции кода для топ-модели и каждой моделью, на которую ссылаются. Например, вот самый верхний фрагмент отчета инспекции кода для топ-модели, slcidemo_roll.

      Сводный отчет и подробные отчеты инспекции кода сохранены как файлы HTML в месте Report folder, которое вы задали.

  6. Вставьте ошибку в сгенерированный код и осмотрите для отказа.

    Чтобы показать не пройдено результат, этот пример вставляет намеренную ошибку в сгенерированный код. Блок Logical Operator в подсистеме RollAngleReference изменяется в сгенерированном коде от операции OR (||) к операции И (&&), с помощью служебной функции в качестве примера slcidemo_modifycode.

    1. Чтобы подсветить блок, для которого изменяется соответствующий код, дайте следующую команду:

      >> hilite_system('slcidemo_roll/RollAngleReference/Or');
    2. Чтобы изменить 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)) {
    3. Чтобы повторно осмотреть сгенерированный код, откройте диалоговое окно Simulink Code Inspector, если это не уже открыто, и нажмите Inspect code.

    4. Просмотрите отчеты инспекции кода.

      Сводный отчет отображает отказ для топ-модели.

      Отчет инспекции кода для топ-модели содержит несколько признаков относительно не пройдено сравнения между блоком Logical Operator и соответствующим кодом. Верхняя часть отчета показывает следующее.

      Далее вниз в отчете, под Code Verification Details> Model-to Code Verification, несоответствие между блоком и кодом отмечаются.

      Кроме того, под Traceability Details> Model-to Code Traceability, несоответствие между блоком и кодом отмечаются.

  7. Опционально, попытайтесь изменить модель или другие аспекты сгенерированного кода, чтобы видеть, как затронуты результаты инспекции кода.

Похожие темы