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

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

О примерах

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

Чтобы восстановить модель в ее исходном состоянии, удалите свою локальную копию модели и данных модели. Данные модели сохранены как PCG_Demo_#_data.mat.

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

Стороннее программное обеспечение

Некоторые примеры используют IDE Eclipse™ и компилятор Cygwin™/gcc. Инструкции установить и использовать Eclipse™ и Cygwin™/gcc доступны в Установке и Использовании Cygwin и Eclipse.

Изучите модель

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

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

  • Изучите, как подтвердить модель.

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

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

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

Изучите функциональный проект модели

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

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

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

Откройте модель в качестве примера.

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

  • Четыре подсистемы: 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.

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

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

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

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

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

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

Смотрите подсистемы

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

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

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

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

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

Открытый Pos_Command_Arbitration.

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

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

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

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

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

  • КПД выполнения

  • КПД ROM

  • КПД RAM

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

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

  • Отладка

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

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

Рисунок показывает, как установить приоритет на Execution efficiency > ROM efficiency > RAM efficiency. Чтобы открыть диалоговое окно, в диалоговом окне Configuration Parameters, выбирают панель Генерации кода. Затем нажмите цели Set.

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

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

Ручные параметры конфигурации

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

  • Решатель

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

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

Решатель

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

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

  • Размер Фиксированного шага параметра устанавливает базовую ставку системы. Установите параметр на наименьшее общее кратное уровней в системе.

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

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

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

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

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

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

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

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

Системный конечный файл

  • ert.tlc - "Основной" Embedded Coder®

  • grt.tlc - "Основывайте" Типовую Цель В реальном времени

  • Специфичные для оборудования цели

Make-файл

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

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

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

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

Параметры форматирования кода

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

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

  • Переменные соглашения о присвоении имен

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

  • C файлы

  • H файлы

  • Объектные файлы

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

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

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

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

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

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

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

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

Изучите тестовую среду симуляции

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

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

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

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

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

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

  • Модуль под тестом

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

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

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

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

Подсветите модуль под тестом.

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

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

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

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

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

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

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

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

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

В качестве альтернативы можно оценить данные моделирования после того, как симуляция завершит выполнение. Можно использовать или скрипты 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 обеспечивают гиперссылки между кодом и моделью.

В Model Explorer откройте Браузер КОДА 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 файл, который содержит определения типа структур данных Simulink® Coder™

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

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

Для следующего примера в этом ряду смотрите, Конфигурируют Интерфейс Данных в Сгенерированном коде.

Похожие темы