exponenta event banner

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

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

Понимание модели

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

  • Понимание функционального поведения примерной модели.

  • Узнайте, как проверить модель.

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

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

  • Создание кода из модели.

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

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

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

Проверка модели верхнего уровня

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

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

  • Четыре подсистемы: 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: PI_ctrl_1 и PI_ctrl_2. Подсистемы имеют идентичное содержимое и на данный момент используют идентичные данные. Позже с помощью подсистем можно узнать, как генератор кода может создавать многократно используемые функции.

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

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

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

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

Открытый Pos_Command_Arbitration.

Проверка параметров конфигурации модели для создания кода

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

Цели создания кода

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

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

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

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

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

  • Отслеживаемость

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

  • Отладка

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

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

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

Для проверки модели на основе заданных целей можно запустить помощник по созданию кода. Чтобы открыть помощник по созданию кода, на вкладке C Code щелкните C/C + + Code Advisor.

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

Опции настройки вручную

В диалоговом окне Параметры конфигурации модели (Model Configuration Parameters) эти панели имеют отношение к созданию кода:

  • Решающее устройство

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

  • Создание кода

Решающее устройство

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

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

  • Параметр Fixed-step size задает базовую скорость системы. Установите для параметра наименьшее общее кратное в системе.

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

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

Внедрение аппаратных средств

Откройте панель «Внедрение оборудования».

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

Создание кода

Откройте панель «Создание кода».

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

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

  • ert.tlc - «Базовый» встроенный кодер ®

  • 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);

Общие сведения о среде тестирования моделирования

Модель контроллера дроссельной заслонки тестируется в отдельной модели, называемой тестовым жгутом. Тестовый электрический жгут - это модель, которая оценивает алгоритм управления. Использование тестового электрического жгута:

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

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

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

Откройте тестовый жгут.

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

  • Испытываемый блок

  • Источник тестового вектора

  • Оценка и ведение журнала

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

  • Масштабирование ввода и вывода

Выделите тестируемый блок.

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

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

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

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

  • Для моделирования требуется меньше памяти. При добавлении нескольких экземпляров модели (несколько блоков модели) в памяти существует только одна копия скомпилированной модели.

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

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

Выделить проверку.

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

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

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

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

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

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

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

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

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

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

Выполнить тесты моделирования

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

Запустите тестовый жгут.

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

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

sim('rtwdemo_PCGEvalHarness')

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

Создать код

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

  • В модели нажмите клавиши CTRL + B.

  • На вкладке C Code выберите Build или Generate Code.

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

Создайте код для модели.

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

Проверка сгенерированного кода

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

В обозревателе моделей откройте обозреватель кодов HTML.

В созданном коде обратите внимание, что:

  • Код контроллера существует в одной функции, называемой 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, объявляющий структуру данных модели в реальном времени

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

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