Код быстрого прототипирования задает следующие функции, которые взаимодействуют через интерфейс с основной программой (main.c
или main.cpp
):
Model()
: Регистрационная функция модели. Эта функция инициализирует рабочие области (например, выделяя и устанавливая указатели на различные структуры данных) используемый моделью. Регистрационные вызовы функции модели MdlInitializeSizes
и MdlInitializeSampleTimes
функции. Эти две функции очень похожи на S-функцию mdlInitializeSizes
и mdlInitializeSampleTimes
методы.
MdlStart(void)
: После регистрационных функций модели MdlInitializeSizes
и MdlInitializeSampleTimes
выполнитесь, основная программа запускает выполнение путем вызова MdlStart
. Эта стандартная программа называется однажды при запуске.
Функция MdlStart
имеет четыре основных раздела:
Код, чтобы инициализировать состояния для каждого блока в корневой модели, которая имеет состояния. Вызов подпрограммы сделан к, “инициализируют состояния” стандартные программы условно выполняемых подсистем.
Код, сгенерированный одноразовой инициализацией, (запускает) функцию для каждого блока в модели.
Код, чтобы включить блоки в корневой модели, которые имеют, включает методы и блоки, внутри инициированные или подсистемы вызова функций, находящиеся в корневой модели. Блоки Simulink® могут иметь, включают и отключают методы. Разрешать метод называется непосредственно перед тем, как блок начинает выполняться, и запрещать метод называется сразу после того, как блок прекращает выполняться.
Код для каждого блока в модели, выходное значение которой является постоянным. Блочный код появляется в MdlStart
функционируйте, только если параметры блоков не являются настраиваемыми в сгенерированном коде и если генератор кода не может устранить блочный код посредством сворачивания констант.
MdlOutputs(int_T tid)
: MdlOutputs
обновляет выход блоков. tid
(идентификатор задачи) параметр идентифицирует задачу, которая в свою очередь сопоставляет, когда выполнить блоки, основанные на их шаге расчета. Эта стандартная программа вызывается основной программой во время главных и незначительных временных шагов. Главные временные шаги - когда основная программа берет фактический временной шаг (то есть, пора выполнить определенную задачу). Если ваша модель будет содержать непрерывные состояния, незначительные временные шаги будут взяты. Незначительные временные шаги - когда решатель генерирует этапы интегрирования, которые являются точками между основными выходными параметрами. Эти этапы интегрирования используются для расчета производные, используемые в усовершенствовании непрерывных состояний.
MdlUpdate(int_T tid)
: MdlUpdate
обновляет состояния, и работайте векторная информация состояния (то есть, состояния, которые не непрерывны и не дискретны), сохраненный в векторах работы. tid
(идентификатор задачи) параметр идентифицирует задачу, которая в свою очередь указывает, какие шаги расчета активны, позволяя вам условно обновить только состояния активных блоков. Эта стандартная программа вызывается интерфейсом после майора MdlOutputs
был выполнен. Решатель также называется, и
называется на мелких шагах со стороны решателя во время его этапов интегрирования. Все блоки, которые имеют непрерывные состояния, имеют идентичное количество производных. Эти блоки требуются, чтобы вычислять производные так, чтобы решатели могли интегрировать состояния.model
_Derivatives
MdlTerminate(void)
: MdlTerminate
содержит любой код завершения работы блока. MdlTerminate
вызван интерфейсом, как часть завершения программы в реальном времени.
Содержимое вышеупомянутых функций непосредственно связано с блоками в вашей модели. Блок Simulink может быть обобщен к следующей системе уравнений.
Выходной y является функцией непрерывного состояния xc, дискретное состояние xd и вход u. Каждый блок написал свое определенное уравнение в разделе MdlOutputs
.
Дискретные состояния xd являются функцией текущего состояния и входа. Каждый блок, который имеет дискретное состояние, обновляет свое состояние в MdlUpdate
.
Производные x являются функцией текущего входа. Каждый блок, который имеет непрерывные состояния, предоставляет свои производные решателю (например, ode5
\in
. Производные используются решателем, чтобы интегрировать непрерывное состояние, чтобы произвести следующее значение.model
_Derivatives
Выход, y, обычно пишется в структуру блока I/O. Блоки Выходного порта корневого уровня пишут во внешнюю выходную структуру. Непрерывные и дискретные состояния хранятся в структуре состояний. Вход, u, может произойти из выхода другого блока, который расположен в структуре блока I/O, внешний вход (расположенный во внешней входной структуре), или состояние. Эти структуры заданы в
файл, который генерирует программное обеспечение Simulink Coder™.model
H
Следующий пример показывает общее содержимое стиля быстрого прототипирования кода С, записанного в
файл.model
C
Этот рисунок показывает блок-схему, описывающую выполнение сгенерированного кода быстрого прототипирования.
Блок-схема выполнения быстрого прототипирования
Каждый блок помещает код в определенный Mdl
стандартные программы согласно алгоритму, который это реализует. Блоки ввели, вывели, параметры, и состояния, а также другие общие элементы. Например, в целом, блокируйтесь, вводы и выводы записаны в структуру блока I/O (
). Блокируйтесь входные параметры могут также прибыть из внешней входной структуры (model
B
) или структура состояния, когда соединено с портом состояния интегратора (model
U
), или земля (model
XrtGround
) если несвязанный или основанный. Блокируйтесь выходные параметры могут также перейти к внешней структуре output (
). Этот рисунок показывает общее отображение между этими элементами.model
Y
Представление данных сгенерированного кода
Следующий список задает структуры, показанные на предыдущем рисунке:
Блокируйте структуру ввода-вывода (
): Эта структура состоит из персистентных выходных сигналов блока. Количество выходных сигналов блока является суммой ширин портов вывода данных невиртуальных блоков в вашей модели. Если вы активируете оптимизацию блока I/O, Simulink и продукты Simulink Coder уменьшают размер model
B
структураmodel
B
Многократное использование записей в
структура model
B
Создание других локальных переменных записей
Смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре для получения дополнительной информации об этой оптимизации.
Имена полей структуры определяются любой именем выходного сигнала блока (когда существующий) или именем блока и номером порта, когда выходной сигнал оставляют непомеченным.
Структуры состояний блока: непрерывная структура состояний (
) содержит непрерывную информацию состояния для блоков в вашей модели, которые имеют непрерывные состояния. Дискретные состояния хранятся в структуре данных, названной model
X
.DWork vector
(model
_DWork)
Структура параметров блоков (
): Структура параметров содержит параметры блоков, которые могут быть изменены во время выполнения (например, параметр блока Gain).model
P
Внешняя входная структура (
): Внешняя входная структура состоит из корневого уровня блоки-сигналы Inport. Имена полей определяются или именем выходного сигнала блока, когда существующий, или именем блока Inport, когда выходной сигнал оставляют непомеченным.model
U
Внешняя выходная структура (
): Внешняя выходная структура состоит из блоков Выходного порта корневого уровня. Имена полей определяются именами блока Выходного порта корневого уровня в вашей модели.model
Y
Действительная работа, целочисленная работа и указатель работают структуры (
, model
_RWork
, model
_IWork
): Блоки могут иметь потребность в действительном, целочисленном, или рабочие области указателя. Например, Блок памяти использует действительный рабочий элемент для каждого сигнала. Эти области используются, чтобы сохранить внутренние состояния или подобную информацию.model
_PWork