exponenta event banner

Проверка сгенерированного кода для образца модели

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

  • Подготовка иерархии модели для создания кода и проверки кода.

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

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

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

Примечание

Пример Введение в Simulink Code Inspector демонстрирует тот же рабочий процесс проверки кода с помощью команд MATLAB ®.

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

    >> slcidemo_roll_orig

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

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

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

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

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

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

    Примечание

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

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

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

    1. В верхнем окне модели на вкладке Приложения выберите Инспектор кода. Откроется диалоговое окно Инспектор кода Simulink.

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

    3. Выполните проверки совместимости модели, щелкнув Проверить все модели (Check all models). В ходе проверки совместимости отображается индикатор выполнения.

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

      • В окне команд MATLAB отображаются результаты, аналогичные следующим:

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

        Примечание

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

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

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

    1. В верхнем окне модели на вкладке Моделирование (Modeling) выберите Параметры модели (Model Settings), чтобы открыть диалоговое окно Параметры конфигурации (Configuration Parameters). В области Создание кода > Отчет выберите опцию Открыть отчет автоматически. (Если попробовать этот пример с моделью, отличной от slcidemo_rollтакже выберите на панели «Отчет» функции «Код для модели», «Модель для кода», «Устраненные/виртуальные блоки», «Отслеживаемые блоки Simulink», «Отслеживаемые объекты Stateflow» и «Отслеживаемые MATLAB».) Щелкните Применить (Apply) и сохраните изменения модели.

    2. В окне модели нажмите клавиши CTRL + B, чтобы создать код Ход выполнения (Progress), отображаемый в окне команд MATLAB.

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

  5. Проверьте созданный код.

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

    2. При необходимости можно изменить местоположение, в которое при проверке кода записывается отчет по проверке кода, с помощью параметра диалогового окна Report folder. Например, введите путь ./report и нажмите «Применить».

    3. Чтобы проверить созданный код, щелкните Проверить код (Inspect Code). Инспектор кода Simulink отображает индикатор выполнения.

    4. Инспектор кода Simulink отображает сводку в окне отчета HTML.

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

      Сводный отчет и подробные отчеты по проверке кода сохраняются в виде HTML-файлов в указанной папке отчета.

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

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

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

      >> hilite_system('slcidemo_roll/RollAngleReference/Or');
    2. Чтобы изменить ИЛИ на И, выполните следующие команды:

      >> 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», если оно еще не открыто, и нажмите кнопку «Проверить код».

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

      В сводном отчете отображается сбой для модели верхнего уровня.

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

      Далее в отчете в разделе Сведения о проверке кода > Проверка от модели к коду отмечается несоответствие между блоком и кодом.

      Кроме того, в разделе Сведения об отслеживании (Traceability Details) > Прослеживаемость от модели к коду (Model-to Code Traceability) отмечается несоответствие между блоком и кодом.

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

Связанные темы