Подготовьте модель алгоритма управления для генерации кода C

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

Осмыслите модель

Этот пример показывает и описывает модель с поведенческой и структурной точек зрения. В примере также показано, как сконфигурировать модель для генерации кода и как сгенерировать код. Вы узнаете, как:

  • Осмыслите функциональное поведение примера модели.

  • Осмыслите, как проверить модель.

  • Ознакомьтесь с инструментами проверки модели.

  • Ознакомьтесь с опциями строения, которые влияют на генерацию кода.

  • Сгенерируйте код из модели.

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

Этот пример использует простую модель контроллера дросселя. Модель отличается избыточностью, которую обычно используют критически важные для безопасности приложения drive-by-wire. Модель подсвечивает стандартную структуру модели и набор базовых блоков в проекте алгоритма.

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

Смотрите модель верхнего уровня

Откройте пример модели.

Модель верхнего уровня состоит из:

  • Четыре подсистемы: PI_ctrl_1, PI_ctrl_2, Define_Throt_Param, и Pos_Command_Arbitration.

  • Входы верхнего уровня: pos_rqst, fbk_1, и fbk_2.

  • Выходы верхнего уровня: pos_cmd_one, pos_cmd_two, и ThrotComm.

  • Маршрутизация сигнала.

  • Нет трансформационных блоков. Преобразующие блоки изменяют значение сигнала, например, блоки Sum и Integrator.

На размещении показан архитектурный стиль базовой модели.

  • Отделение вычислений от маршрутизации сигналов (линии и шины)

  • Разбиение на подсистемы

Этот стиль подходит для многих типов моделей.

Осмотр подсистем

Две подсистемы представляют ПИ-контроллерам: PI_ctrl_1 и PI_ctrl_2. Подсистемы имеют идентичное содержимое и пока используют идентичные данные. Позже вы используете подсистемы, чтобы узнать, как генератор кода может создать переиспользуемые функции.

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

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

Откройте подсистему PI_ctrl_1.

Диаграмма Stateflow Pos_Command_Arbitration выполняет проверку основных ошибок по двум командным сигналам. Если командные сигналы находятся слишком далеко друг от друга, график устанавливает выход на fail_safe положение.

Откройте Pos_Command_Arbitration.

Смотрите настройки параметра конфигурации модели для генерации кода

Чтобы подготовить модель к генерации кода, откройте приложение Embedded Coder. Затем установите параметры конфигурации модели генерации кода. Параметры определяют метод, который генератор кода использует для генерации кода и полученного формата кода.

Цели генерации кода

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

Вы можете выбрать из следующих целей генерации кода высокого уровня:

  • Эффективность выполнения

  • Эффективность ПЗУ

  • Эффективность ОЗУ

  • Трассируемость

  • Меры безопасности

  • Отладка

Каждая цель проверяет текущие параметры конфигурации модели на соответствие рекомендуемым значениям целей. Каждая цель также включает набор проверок Генерация Кода Advisor. Можно использовать эти дополнительные проверки, чтобы убедиться, что параметры конфигурации модели настроены на создание кода, соответствующего целям.

Некоторые из рекомендаций, которые ставят цели в противоречие с проверками Генерация Кода Advisor. Порядок выбора целей определяет результат. Simulink ® решает конфликты, выполняя цели, которые имеют более высокий приоритет.

Рисунок показывает, как задать приоритет Execution efficiency > ROM efficiency > RAM efficiency. Чтобы открыть диалоговое окно, в диалоговом окне Параметры конфигурации выберите панель Генерация кода. Затем щелкните Задать цели.

Можно запустить Генерацию кода Advisor, чтобы проверить модель на основе заданных целей. Чтобы открыть Code Generation Advisor, на вкладке Код С, нажмите C/C + + Code Advisor.

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

Опции строения

В диалоговом окне Model Configuration Parameters эти панели имеют отношение к генерации кода:

  • Решатель

  • Аппаратная реализация

  • Генерация кода

Решатель

Откройте панель Решатель.

  • Чтобы сгенерировать код для модели, необходимо задать параметр конфигурации модели Type равным Fixed-step.

  • Параметр Fixed-step size устанавливает базовый тариф системы. Установите параметр на самое низкое общее множество скоростей в системе.

  • Parameter Solver управляет алгоритмами интегрирования, которые использует генератор кода.

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

Аппаратная реализация

Откройте панель Аппаратная реализация.

Используйте параметры аппаратной реализации, чтобы задать плату оборудования. Simulink ® настраивает другие настройки на панели, включая скрытые детали микропроцессорного устройства, на основе выбора вашей платы. Чтобы просмотреть или настроить настройки скрытых параметров, такие как размер слова и упорядоченное расположение байтов, нажмите Device details.

Генерация кода

Откройте панель Генерация кода.

Используйте панель Генерация кода, чтобы задать системный целевой файл и оптимизации. Этот пример использует целевой файл системы Embedded Coder ® (ert.tlc). Можно расширить этот системный целевой файл для создания настроенного строения. Некоторые из основных параметров на панели Генерация кода и его подпанелей включают:

Системный целевой файл

  • ert.tlc - «Базовый» Embedded Coder ®

  • grt.tlc - Универсальная цель в реальном времени «База»

  • Аппаратные целевые системы

Создание файла

Оптимизация кода

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

  • Управляйте, какие сигналы имеют явный код инициализации.

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

Опции форматирования кода

  • Использование круглых скобок

  • Информация о заголовочном файле

  • Соглашения о именовании переменных

Включение пользовательского кода

  • Файлы C

  • H файлов

  • Файлы объектов

  • Пути к папкам

Генерация файлов ASAP2

Сохраните параметры конфигурации модели

Можно сохранить значения параметров конфигурации модели как функцию MATLAB ®. В командной строке введите:

hCs = getActiveConfigSet('rtwdemo_PCG_Eval_P1');
hCs.saveAs('ConfiguredData');

Функция MATLAB ® сохраняет текстовое представление объекта параметра конфигурации. Можно использовать сгенерированный файл для архивирования или сравнения различных версий файлов с помощью традиционных инструментов diff. Можно также визуально просмотреть содержимое файла.

Можно запустить функцию, чтобы задать параметры конфигурации других моделей.

hCs2 = ConfiguredData;
attachConfigSet('myModel', hCs2, true);
setActiveConfigSet('myModel', hCs2.Name);

Осмыслите окружение проверки симуляции

Вы проверяете модели контроллеров дросселя в отдельной модели, называемой тестовой обвязкой. Тестовая обвязка является моделью, которая оценивает алгоритм управления. Использование тестовой обвязки:

  • Отделяет тестовые данные от алгоритма управления

  • Отделяет объект или модель обратной связи от алгоритма управления

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

Откройте тестовую обвязку.

Типичное окружение проверки симуляции состоит из следующих частей:

  • Модуль

  • Тестовый вектор

  • Оценка и логгирование

  • Объект или система обратной связи

  • Вход и выходных параметров

Выделите модуль.

Алгоритм управления является модулем. Алгоритм управления тестовой обвязки моделей-ссылок через блок Model. С помощью блоков Model можно повторно использовать компоненты. Блок Model ссылается на алгоритм управления по имени (rtwdemo_PCG_Eval_P1).

Блок Model позволяет включать (ссылаться) модель в другую модель в качестве скомпилированной функции. По умолчанию Simulink ® компилирует ссылочную модель при ее изменении. Скомпилированные функции имеют следующие преимущества перед библиотеками:

  • Большие модели моделируются быстрее.

  • Можно симулировать скомпилированные функции непосредственно.

  • Симуляция требует меньше памяти. Когда вы добавляете несколько образцов модели (несколько блоков Model), в памяти существует только одна копия скомпилированной модели.

Выделите источник тестовых векторов.

Модель использует блок Signal Builder в качестве источника тестовых векторов. Блок имеет данные, которые управляют симуляцией (pos_rqst) и ожидаемые результаты, которые использует Подсистема верификации. Этот пример использует только один набор тестовых данных, хотя в типичном приложении вы создаете тестовый набор, который полностью упражняет систему.

Подсветить верификацию.

Тестовая обвязка сравнивает результаты симуляции с золотыми данными, что является набором результатов тестирования, которые указывают на желаемое поведение модели. В этой модели блок V&V Assertion сравнивает смоделированное положение значения дросселя от объекта с золотым значением, которое обеспечивает тестовую обвязку. Если различие между этими двумя сигналами больше 5%, тест прекращает работать, и блок Assertion останавливает симуляцию.

Кроме того, можно вычислить данные моделирования после выполнения симуляции. Для выполнения оценки можно использовать скрипты MATLAB ® или сторонние программы. Оценка после поствыполнения обеспечивает большую гибкость в анализе данных, хотя вы должны дождаться завершения выполнения. Объединение двух методов может привести к высокогибкому и эффективному тестовому окружению.

load_system('rtwdemo_PCGEvalHarness')
open_system('rtwdemo_PCGEvalHarness/Verification')

Выделите объект/систему обратной связи.

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

Выделите масштабированные входные и выходные параметры.

Подсистемы, которые масштабируют вход и выход, выполняют эти первичные функции:

  • Выберите сигналы для маршрутизации к тестируемому модулю и к объекту.

  • Переформулируйте сигналы между инженерными модулями и модулями, которые требуются испытуемому модулю.

  • Переходы скорости указателя между объектом и тестируемым модулем.

Запуск симуляционных тестов

Чтобы запустить тестовую обвязку симуляции модели, нажмите кнопку Пуск или щелкните эту гиперссылку.

Запустите тестовую обвязку.

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

Когда симуляция модели завершена, Simulink ® отображает результаты на рисунке.

sim('rtwdemo_PCGEvalHarness')

Правый нижний график показывает различие между ожидаемым (золотым) положением дросселя и положением дросселя, которое рассчитало объект.

Сгенерируйте код

Чтобы сгенерировать код, откройте приложение Embedded Coder Затем, используя один из следующих методов:

  • В модели нажмите Ctrl + B.

  • На вкладке Кода С выберите Build или Generate Кода.

  • Щелкните эту гиперссылку:

Сгенерируйте код для модели.

Генератор кода производит несколько файлов. Полученный код, хотя и является вычислительно эффективным, еще не организован для интегрирования в производственное окружение.

Исследуйте сгенерированный код

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

В Model Explorer откройте HTML Кода Browser.

В сгенерированном коде наблюдайте, что:

  • Код контроллера существует в одной функции, вызываемой ModelName_step, который находится в файле rtwdemo_PCG_Eval_P1.c.

  • Генератор кода складывает операции нескольких блоков в один оператор кода.

  • Функция ModelName_initialize инициализирует переменные.

  • Структуры данных определяют данные модели (для примера, rtwdemo_PCG_Eval_P1_U.pos_rqst).

  • rtwdemo_PCG_Eval_P1.c: Файл C, который определяет функции шага и инициализации

  • ert_main.c: Пример Основной файл, который включает в себя простой планировщик

  • rtwdemo_PCG_Eval_P1.h: H файл, содержащий определения типов структур данных Coder™ Simulink ®

  • PCG_Eval_p1_private.h: Файл, который объявляет данные, которые использует только сгенерированный код

  • rtwdemo_PCG_Eval_P1_types.h: Файл H, который объявляет структуру данных модели реального времени

Следующий пример этой серии см. в разделе Настройка интерфейса данных в сгенерированном коде.

Похожие темы