Генератор кода организует данные, используемые моделью в структурах данных. Для каждой модели генератор кода сохраняет данные, такие как сигналы и состояния, в глобальных структурах, которые также называются стандартными структурами данных. Эти структуры данных используются для доступа к данным в сгенерированном коде.
Модель в реальном времени (rtModel) структура данных - это структура данных верхнего уровня, содержащая специфичные для экземпляра данные, которая используется моделью для многократно используемых функций. Генератор кода использует эту структуру данных только для генерации многоэкземплярного кода.
В модели блоки корневого уровня Inport и Outport представляют первичные входы и выходы блочного алгоритма. По умолчанию генератор кода агрегирует эти блоки в стандартные структуры, в которых хранятся входные и выходные данные.
Сигнальные линии, параметры блоков, состояния и другие данные модели отображаются в сгенерированном коде как поля стандартных структур. Общие сведения см. в разделе Как сгенерированный код хранит внутренний сигнал, состояние и данные параметров.
В таблице показаны некоторые общие структуры данных в сгенерированном коде. Имя типа структуры и, если применимо, структурная переменная в коде, создаваемом из модели, зависит от настроек модели. Независимо от настроек, имя типа структуры в коде содержит краткое имя из столбца «Краткое имя типа структуры» в таблице.
Структуры данных, созданные для модели
| Краткое имя типа структуры | Данные, представленные в структуре |
|---|---|
ExtU | Данные из корневых блоков ввода |
ExtY | Данные из корневых блоков исходящего порта |
B | Блочные выходные сигналы |
ConstB | Блокировать выходы, имеющие постоянные значения |
P | Параметры блока |
ConstP | Постоянные параметры |
DW | Состояния дискретных блоков |
XDis | Состояние включенных подсистем |
InstP | Аргументы параметра |
SharedDSM | Общие локальные хранилища данных |
Можно исключить данные из отображения в этих структурах с помощью:
Прямое применение классов хранения. Например, классы хранения можно использовать для представления сигналов, настраиваемых параметров и состояний в виде отдельных глобальных переменных. Дополнительные сведения см. в разделе Конфигурация генерации кода C для элементов интерфейса модели.
Параметры конфигурации, например, на панели Оптимизация (Optimization) в диалоговом окне Параметры конфигурации (Configuration Parameters). Эти параметры конфигурации можно настроить для управления представлением данных по умолчанию. Дополнительные сведения см. в разделе Параметры конфигурации модели: оптимизация генерации кода.
Для доступа к полям структуры данных моделирования S-функции (SimStruct), программное обеспечение Simulink предоставляет набор функций. Генератор кода заменяет SimStruct с оптимизированной моделью в реальном времени (rtModel) структура данных.
Создание кода с использованием целевых файлов системы GRT и ERT использует структуру данных модели в реальном времени (rtModel). Эта структура инкапсулирует специфичную для модели информацию в гораздо более компактной форме, чем структура моделирования. SimStruct. В зависимости от модели специфичная для модели информация включает такие данные, как внутренние данные для многократно используемых функций и состояние ошибки.
При установке для упаковки интерфейса кода значения Reusable functionгенератор кода упаковывает данные модели (такие как блок ввода-вывода, Dwork и параметры) в структуру данных модели в реальном времени. Генератор кода передает структуру модели в реальном времени посредством ссылки на сгенерированные функции точки входа модели. Если для параметра Pass root-level I/O установлено значение Part of model data structureгенератор кода упаковывает входные и выходные данные модели корневого уровня в структуру данных модели в реальном времени.
Эффективные возможности генерируемого кода зависят от генерации rtModel вместо SimStruct, в том числе:
Целочисленные абсолютные и истекшие услуги синхронизации
Независимые таймеры для асинхронных задач
Создание улучшенного кода C API для мониторинга сигналов, состояний и параметров
Сокращение структуры данных для минимизации ее размера (только целевые системные файлы, полученные из ERT)
Структура данных модели в реальном времени определена в main.c или main.cpp который создается при построении модели. Для моделей ERT, если очистить параметр конфигурации модели Создать пример основной программы, rtModel.h создается файл. rtModel.h файл содержит #include директивы, требуемые rt_main.c или rt_cppclass_main.cpp статический основной программный модуль. rt_main.c или rt_cppclass_main.cpp включает rtModel.h для доступа к специфичным для модели структурам данных и точкам входа, поскольку статический основной программный модуль не создается во время генерации кода.
Генератор кода предоставляет набор макросов для доступа к rtModel структура данных. Эти макросы аналогичны ssSetxxx и ssGetxxx макросы, используемые S-функциями для доступа SimStruct данные, включая неинлинные S-функции, скомпилированные генератором кода.
Использовать набор макросов rtmGetxxx и rtmSetxxx для доступа к структуре данных модели в реальном времени. Эти макросы используются в сгенерированном коде, а также в main.c или main.cpp модуль вашего внешнего кода. При настройке main.c или main.cpp (статический или сгенерированный файл), используйте rtmGetxxx и rtmSetxxx вместо ssSetxxx и ssGetxxx макросы.
Использование rtmGetxxx и rtmSetxxx макросы такие же, как для ssSetxxx и ssGetxxx версии, за исключением замены SimStruct S по структуре данных модели в реальном времени rtM. В этой таблице перечислены rtmGetxxx и rtmSetxxx макросы, используемые в grt_main.c и grt_main.cpp.
Макросы для доступа к структуре данных модели в реальном времени
Синтаксис макроса RTM | Описание |
|---|---|
| Получение производных непрерывных состояний блоков |
| Возврат указателя к вектору, в котором хранятся отсчеты временных смещений модели, связанной с rtM |
| Получение количества образцов блоков |
| Возврат указателя на |
| Возврат информационной структуры данных внешнего режима модели (используется генератором кода только для внешнего режима) |
| Возвращает структуру данных, используемую при регистрации генератора кода (используется только генератором кода) |
| Возврат информации о структуре данных методов модели в реальном времени (используется только генератором кода) |
| Возвращаемая структура данных, содержащая информацию о решателе модели (используется только генератором кода) |
| Возврат указателя на вектор флага Sample Hit |
| Получение времени образца задачи |
| Получить указатель на время образца задачи |
| Получить указатель на идентификатор задачи |
| Возвращаемый идентификатор шага моделирования ( |
| Возврат базового размера шага модели |
| Получение текущего времени моделирования |
| Установка времени следующего попадания пробы |
| Получение текущего времени для текущей задачи |
| Получение времени остановки моделирования |
| Установка времени остановки моделирования |
| Возвращает структуру данных, используемую механизмом синхронизации модели (используется только генератором кода) |
| Возврат указателя на текущее время |
| Получение времени начала моделирования |
| Определение того, является ли задача непрерывной |
| Определение того, находится ли моделирование на основном этапе |
| Определение совпадения времени выборки |
rtmGetErrorStatus(rtm) | Получение текущего состояния ошибки |
rtmSetErrorStatus(rtm,val) | Установка текущего состояния ошибки |
rtmGetErrorStatusPointer(rtm) | Возврат указателя на текущее состояние ошибки |
rtmGetStopRequested(rtm) | Возврат запроса на остановку |
rtmGetBlockIO(rtm) | Получение блочной структуры данных ввода-вывода |
rtmSetBlockIO(rtm,val) | Установка блочной структуры данных ввода-вывода |
rtmGetContStates(rtm) | Получение структуры данных о непрерывных состояниях |
rtmSetContStates(rtm,val) | Установка структуры данных непрерывных состояний |
rtmGetDefaultParam(rtm) | Получение структуры данных параметров по умолчанию |
rtmSetDefaultParam(rtm,val) | Установка структуры данных параметров по умолчанию |
rtmGetPrevZCSigState(rtm) | Получение предыдущей структуры данных о состоянии сигнала пересечения нуля |
rtmSetPrevZCSigState(rtm,val) | Установка предыдущей структуры данных о состоянии сигнала пересечения нуля |
rtmGetRootDWork(rtm) | Получение структуры данных DWork |
rtmSetRootDWork(rtm,val) | Установка структуры данных DWork |
rtmGetU(rtm) | Получение корневой структуры входных данных (когда корневые входные данные передаются как часть структуры данных модели) |
rtmSetU(rtm,val) | Установка корневой структуры входных данных (когда корневые входные данные передаются как часть структуры данных модели) |
rtmGetY(rtm) | Получить структуру данных корневых выходов (когда корневые выходы передаются как часть структуры данных модели) |
rtmSetY(rtm,val) | Установка структуры данных корневых выходов (когда корневые выходы передаются как часть структуры данных модели) |
Дополнительные сведения см. в разделе Макросы и функции SimStruct, перечисленные по использованию.