exponenta event banner

Структуры данных в сгенерированном коде

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

Модель в реальном времени (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

Описание

rtmGetdX(rtm)

Получение производных непрерывных состояний блоков

rtmGetOffsetTimePtr(RT_MDL rtM)

Возврат указателя к вектору, в котором хранятся отсчеты временных смещений модели, связанной с rtM

rtmGetNumSampleTimes(RT_MDL rtM)

Получение количества образцов блоков

rtmGetPerTaskSampleHitsPtr(RT_MDL)

Возврат указателя на NumSampleTime × NumSampleTime матрица

rtmGetRTWExtModeInfo(RT_MDL rtM)

Возврат информационной структуры данных внешнего режима модели (используется генератором кода только для внешнего режима)

rtmGetRTWLogInfo(RT_MDL)

Возвращает структуру данных, используемую при регистрации генератора кода (используется только генератором кода)

rtmGetRTWRTModelMethodsInfo(RT_MDL)

Возврат информации о структуре данных методов модели в реальном времени (используется только генератором кода)

rtmGetRTWSolverInfo(RT_MDL)

Возвращаемая структура данных, содержащая информацию о решателе модели (используется только генератором кода)

rtmGetSampleHitPtr(RT_MDL)

Возврат указателя на вектор флага Sample Hit

rtmGetSampleTime(RT_MDL rtM, int TID)

Получение времени образца задачи

rtmGetSampleTimePtr(RT_MDL rtM)

Получить указатель на время образца задачи

rtmGetSampleTimeTaskIDPtr(RT_MDL rtM)

Получить указатель на идентификатор задачи

rtmGetSimTimeStep(RT_MDL)

Возвращаемый идентификатор шага моделирования (MINOR_TIME_STEP, MAJOR_TIME_STEP)

rtmGetStepSize(RT_MDL)

Возврат базового размера шага модели

rtmGetT(RT_MDL,t)

Получение текущего времени моделирования

rtmSetT(RT_MDL,t)

Установка времени следующего попадания пробы

rtmGetTaskTime(RT_MDL,tid)

Получение текущего времени для текущей задачи

rtmGetTFinal(RT_MDL)

Получение времени остановки моделирования

rtmSetTFinal(RT_MDL,finalT)

Установка времени остановки моделирования

rtmGetTimingData(RT_MDL)

Возвращает структуру данных, используемую механизмом синхронизации модели (используется только генератором кода)

rtmGetTPtr(RT_MDL)

Возврат указателя на текущее время

rtmGetTStart(RT_MDL)

Получение времени начала моделирования

rtmIsContinuousTask(rtm)

Определение того, является ли задача непрерывной

rtmIsMajorTimeStep(rtm)

Определение того, находится ли моделирование на основном этапе

rtmIsSampleHit(RT_MDL,tid)

Определение совпадения времени выборки

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, перечисленные по использованию.

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