Сгенерируйте код для модели алгоритма управления, интегрируйте сгенерированный код с существующей системой и подтвердите симуляцию и исполняемые результаты.
Каждый пример в этом ряду фокусируется на определенном аспекте генерации кода или интегрирования. Для большинства задач можно выполнить задачу самостоятельно путем следования инструкциям или выполнения скрипта путем нажатия на гиперссылку. Некоторые скрипты занимают время, чтобы запуститься. Когда соответствующая задача закончена, эти скрипты генерируют диалоговое окно.
Каждый пример имеет уникальный образцовый и набор данных так, чтобы примеры были независимы. Вы не должны запускать примеры в определенном порядке. Когда вы переходите между примерами, текущая модель сохранена локально так, чтобы каждый пример получил ваши модификации к модели и данным модели.
Чтобы восстановить модель в ее исходном состоянии, удалите локальную копию модели и данных модели. Данные модели сохранены как PCG_Demo_#_data.mat
.
Используйте эти гиперссылки, чтобы перейти к другим примерам в ряду.
Некоторые примеры используют IDE Eclipse™ и компилятор Cygwin™/gcc. Инструкции установить и использовать Eclipse™ и Cygwin™/gcc в конце этих примеров.
Этот пример показывает и описывает модель с поведенческих и структурных точек зрения. Пример также показывает, как сконфигурировать модель для генерации кода и как сгенерировать код. Вы учитесь как:
Поймите функциональное поведение модели в качестве примера.
Поймите, как подтвердить модель.
Познакомьтесь с проверяющими модель инструментами.
Познакомьтесь с параметрами конфигурации, которые влияют на генерацию кода.
Сгенерируйте код из модели.
Этот пример использует простую модель контроллера дросселя. Сокращение особенностей модели, который критический по отношению к безопасности, приложения сервопривода обычно используют. Модель подсвечивает стандартную образцовую структуру и набор базисных блоков в проекте алгоритма.
В текущей настройке код, который генерирует модель, не сконфигурирован для системы производственной платформы. В этом примере вы изменяете целевую настройку и наблюдаете получившиеся изменения в формате сгенерированного кода.
Откройте модель в качестве примера.
Модель верхнего уровня состоит из:
Четыре подсистемы: 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: PI_ctrl_1
и PI_ctrl_2
. Подсистемы имеют идентичное содержимое и, на данный момент, используют идентичные данные. Позже, вы используете подсистемы, чтобы изучить, как генератор кода может создать допускающие повторное использование функции.
Контроллеры PI приезжают из библиотеки, которая является группой связанных блоков или моделей, которые вы намереваетесь снова использовать. Библиотеки предоставляют один из двух методов для включения и многократного использования моделей. Вы видите второй метод, образцовую ссылку, позже в этом ряду.
Когда вы используете блок библиотеки в модели, вы не можете отредактировать экземпляр блока в модели. Вместо этого отредактируйте определение блока в библиотеке. Затем экземпляры блока в различных моделях остаются сопоставимыми.
Откройте подсистему PI_ctrl_1
.
График Stateflow® Pos_Command_Arbitration
выполняет основную проверку ошибок на двух сигналах команды. Если сигналы команды слишком далеко друг от друга, график устанавливает вывод на положение fail_safe
.
Открытый Pos_Command_Arbitration
.
Чтобы подготовить модель к генерации кода, сначала установите образцовые параметры конфигурации. Параметры конфигурации определяют метод что использование генератора кода, чтобы сгенерировать код и получившийся формат кода.
Цели генерации кода
Можно вручную сконфигурировать образцовые параметры конфигурации. Также можно выбрать из предопределенных целей автоматически сконфигурировать образцовые параметры конфигурации.
Можно выбрать из этих высокоуровневых целей генерации кода:
Эффективность выполнения
Эффективность ROM
Эффективность RAM
Трассируемость
Меры безопасности
Отладка
Каждая цель проверяет параметры конфигурации текущей модели по рекомендуемым значениям целей. Каждая цель также включает группу Советника Генерации кода проверки. Можно использовать эти дополнительные проверки, чтобы проверить, что образцовые параметры конфигурации собираются создать код, который достигает целей.
Некоторые рекомендации, что цели делают конфликт с Советником Генерации кода проверками. Порядок, в котором вы выбираете цели, определяет результат. Simulink® разрешает конфликты удовлетворяющими целями, которые имеют более высокий приоритет.
Данные показывают, как установить приоритет на Execution efficiency
> ROM efficiency
> RAM efficiency
. Чтобы открыть диалоговое окно, в диалоговом окне Configuration Parameters, выбирают панель Генерации кода. Затем нажмите цели Set.
Можно запустить Советника Генерации кода, чтобы проверять основанное на модели на заданных целях. Запустить Советника Генерации кода, в диалоговом окне Configuration Parameters, на панели Генерации кода, модели Check нажатия кнопки.
Советник Генерации кода создает список проверок на основе целей, которые вы выбираете. Первая проверка рассматривает текущие значения параметров конфигурации и предлагает альтернативные значения на основе целей. Проверка предоставляет автоматизированный метод для установки параметров на рекомендуемые значения.
Ручные параметры конфигурации
В диалоговом окне Model Configuration Parameters эти панели относятся к генерации кода:
Решатель
Аппаратная реализация
Генерация кода
Решатель
Чтобы сгенерировать код для модели, необходимо сконфигурировать модель, чтобы использовать решатель фиксированного шага. Запуск и время остановки не влияют на сгенерированный код.
Параметр: Время начала, Необходимая Установка: Любой, Эффект на Код: Никакой эффект
Параметр: Время остановки, Необходимая Установка: Любой, Эффект на Код: Никакой эффект
Параметр: Введите, Необходимая Установка: фиксированный шаг, Эффект на Код: не Может сгенерировать код, если не установлено в Фиксированный шаг
Параметр: Решатель, Необходимая Установка: Любой, Эффект на Код: Средства управления s избранный алгоритмами интегрирования
Параметр: размер фиксированного шага, Необходимая Установка: Наименьшее общее кратное уровней в системе, Эффекте на Код: базовая ставка Наборов системы
Параметр: Обработайте каждый дискретный уровень как отдельную задачу, Необходимую Установку: Любой, Эффект на Код: Если выбрано, генерирует функцию точки входа для каждого уровня в системе
Оптимизация
Панель Оптимизации содержит параметры, которые управляют этими настройками:
Удалите неиспользованные ответвления из кода и управляйте созданием временных переменных.
управляйте, какие сигналы имеют явный код инициализации.
Включает и отключает использование переполнения и кода защиты деления на нуль.
Аппаратная реализация
Откройте панель Аппаратной реализации.
Используйте параметры аппаратной реализации, чтобы задать аппаратную плату. Simulink® настраивает другие настройки на панели, включая скрытые детали устройства микропроцессора, на основе вашего выбора платы. Чтобы просмотреть или настроить скрытые установки параметров, такие как размер слова и порядок байтов, нажимают детали Device.
Генерация кода
Откройте панель Генерации кода.
Используйте панель Генерации кода, чтобы задать системный конечный файл (STF). Этот пример использует Embedded Coder® STF (ert.tlc
). Можно расширить этот STF, чтобы создать индивидуально настраиваемую настройку. Некоторые опции базовой конфигурации на этой панели включают:
1. Цель генератора кода:
ert.tlc - "Основной" Embedded Coder®
grt.tlc - "Основывайте" Типичную Цель В реальном времени
Специфичные для оборудования цели
2. Make-файл
3. Параметры форматирования кода
Использование круглых скобок
Информация о заголовочном файле
Переменные соглашения о присвоении имен
4. Включение пользовательского кода:
C файлы
H файлы
Объектные файлы
Пути к папкам
5. Генерация файлов 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')
Нижний правый график показывает различие между ожидаемым (золотым) положением дросселя и положением дросселя что вычисленный объект.
Сгенерируйте код из модели при помощи одного из этих методов:
В модели нажмите Ctrl+B.
В модели выберите Code> C/C ++ Code> Build Model.
Кликните по этой гиперссылке:
Simulink® Coder™ генерирует несколько файлов. Получившийся код, хотя в вычислительном отношении эффективный, еще не организован для интегрирования в производственную среду.
Процесс генерации кода создает несколько файлов, которые можно просмотреть от Model Explorer. В дополнение к стандарту C и файлам H, генератор кода создает набор файлов HTML. Файлы HTML обеспечивают гиперссылки между кодом и моделью.
В Model Explorer откройте Браузер КОДА HTML.
В сгенерированном коде заметьте что:
Весь код контроллера существует в одной функции под названием ModelName_step
, который находится в файле rtwdemo_PCG_Eval_P1.c
.
Генератор кода сворачивает операции нескольких блоков в один оператор кода.
Функциональный ModelName_initialize
инициализирует переменные.
Структуры данных Simulink® Coder™ задают все данные (например, 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 файл, который объявляет структуру данных модели реального времени
Для следующего примера в этом ряду смотрите, Конфигурируют Интерфейс Данных в Сгенерированном коде.