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

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

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

Стандартные структуры данных

В модели блоки Inport и Outport корневого уровня представляют первичные входные параметры и выходы алгоритма блока. По умолчанию генератор кода агрегирует эти блоки в стандартные структуры, которые хранят входные и выходные данные.

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

Таблица показывает некоторые общие структуры данных в сгенерированном коде. Имя типа структуры и, если применимо, структурной переменной в коде, который вы генерируете из модели, зависит от настроек модели. Независимо от параметров, имя типа структуры в коде содержит краткое имя из столбца Short Name of Structure Type в таблице.

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

Краткое имя типа структурыДанные, представленные в структуре
ExtU

Данные из корневых блоков Inport

ExtY

Данные из корневых блоков Outport

B

Блочные выходные сигналы

ConstB

Выходы блоков с постоянными значениями

P

Параметры блоков

ConstP

Постоянные параметры

DW

Дискретные состояния блока

XDis

Состояние включенных подсистем

InstP

Аргументы параметра

SharedDSMОбщие локальные хранилища данных

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

  • Непосредственное применение классов памяти. Для примера можно использовать классы памяти, чтобы представлять сигналы, настраиваемые параметры и состояния как индивидуум глобальные переменные. Для получения дополнительной информации смотрите Строение Генерации кода C для Элементов Интерфейса Модели.

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

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

Для доступа к полям структуры данных моделирования S-функции (SimStruct), программное обеспечение Simulink обеспечивает набор функций. Генератор кода заменяет SimStruct с оптимизированной моделью реального времени (rtModel) структура данных.

Генерация кода при помощи целевых файлов системы GRT и ERT использует структуру данных модели реального времени (rtModel). Эта структура инкапсулирует специфическую для модели информацию в гораздо более компактной форме, чем структура симуляции SimStruct. В зависимости от модели информация о модели включает в себя данные, такие как внутренние данные для переиспользуемых функций и состояние ошибки.

Когда вы устанавливаете упаковку интерфейса кода в Reusable functionгенератор кода упаковывает данные модели (такие как блок ввода-вывода, Dwork и параметры) в структуру данных модели реального времени. Генератор кода передает структуру модели реального времени путем ссылки на сгенерированные функции точки входа модели. Если вы задаете Pass root-level ввод-вывод как Part of model data structureгенератор кода упаковывает входные входы и выходы модели корневого уровня в структуру данных модели реального времени.

Эффективные возможности сгенерированного кода зависят от генерации rtModel а не SimStruct, включая:

  • Целочисленные абсолютные и прошедшие услуги синхронизации

  • Независимые таймеры для асинхронных задач

  • Генерация улучшенного кода C API для контроля сигнала, состояния и параметра

  • Обрезка структуры данных для минимизации ее размера (только производные от ERT системные целевые файлы)

Структура данных модели реального времени определена в main.c или main.cpp файл, который генерируется при сборке модели. Для моделей ERT, если вы очистите параметр конфигурации модели Сгенерируйте пример основной программы, rtModel.h файл сгенерирован. The rtModel.h файл содержит #include директивы, требуемые rt_main.c или rt_cppclass_main.cpp статический основной программный модуль. The 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)

Верните структуру данных о режиме external mode модели (используется генератором кода только для режима external mode)

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 и Функции, перечисленные в разделе Использование.

Похожие темы