Функции модели быстрого прототипирования

Код быстрого прототипирования задает следующие функции, которые взаимодействуют через интерфейс с основной программой (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=f0(t,xc,xd,u)

Выходной y является функцией непрерывного состояния xc, дискретное состояние xd и вход u. Каждый блок написал свое определенное уравнение в разделе MdlOutputs.

xd+1=fu(t,xd,u)

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

x˙=fd(t,xc,u)

Производные x являются функцией текущего входа. Каждый блок, который имеет непрерывные состояния, предоставляет свои производные решателю (например, ode5) в model_Derivatives. Производные используются решателем, чтобы интегрировать непрерывное состояние, чтобы произвести следующее значение.

Выход, y, обычно пишется в структуру блока I/O. Блоки Выходного порта корневого уровня пишут во внешнюю выходную структуру. Непрерывные и дискретные состояния хранятся в структуре состояний. Вход, u, может произойти из выхода другого блока, который расположен в структуре блока I/O, внешний вход (расположенный во внешней входной структуре), или состояние. Эти структуры заданы в modelH файл, который генерирует программное обеспечение Simulink Coder™.

Следующий пример показывает общее содержимое стиля быстрого прототипирования кода С, записанного в modelC файл.

Этот рисунок показывает блок-схему, описывающую выполнение сгенерированного кода быстрого прототипирования.

Блок-схема выполнения быстрого прототипирования

Каждый блок помещает код в определенный Mdl стандартные программы согласно алгоритму, который это реализует. Блоки ввели, вывели, параметры, и состояния, а также другие общие элементы. Например, в целом, блокируйтесь, вводы и выводы записаны в структуру блока I/O (modelB). Блокируйтесь входные параметры могут также прибыть из внешней входной структуры (modelU) или структура состояния, когда соединено с портом состояния интегратора (modelX), или земля (rtGround) если несвязанный или основанный. Блокируйтесь выходные параметры могут также перейти к внешней структуре output (modelY). Этот рисунок показывает общее отображение между этими элементами.

Представление данных сгенерированного кода

Следующий список задает структуры, показанные в предыдущей фигуре:

  • Блокируйте структуру ввода-вывода (modelB): Эта структура состоит из персистентных выходных сигналов блока. Количество выходных сигналов блока является суммой ширин портов вывода данных невиртуальных блоков в вашей модели. Если вы активируете оптимизацию блока I/O, Simulink и продукты Simulink Coder уменьшают размер modelB структура

    • Многократное использование записей в modelB структура

    • Создание других локальных переменных записей

    Смотрите Как Хранилища Сгенерированного кода Внутренний Сигнал, состояние и Данные о Параметре (Simulink Coder) для получения дополнительной информации об этой оптимизации.

    Имена полей структуры определяются любой именем выходного сигнала блока (когда существующий) или именем блока и номером порта, когда выходной сигнал оставляют непомеченным.

  • Структуры состояний блока: непрерывная структура состояний (modelX) содержит непрерывную информацию состояния для блоков в вашей модели, которые имеют непрерывные состояния. Дискретные состояния хранятся в структуре данных, названной DWork vector (model_DWork).

  • Структура параметров блоков (modelP): Структура параметров содержит параметры блоков, которые могут быть изменены во время выполнения (например, параметр блока Gain).

  • Внешняя входная структура (modelU): Внешняя входная структура состоит из корневого уровня блоки-сигналы Inport. Имена полей определяются или именем выходного сигнала блока, когда существующий, или именем блока Inport, когда выходной сигнал оставляют непомеченным.

  • Внешняя выходная структура (modelY): Внешняя выходная структура состоит из блоков Выходного порта корневого уровня. Имена полей определяются именами блока Выходного порта корневого уровня в вашей модели.

  • Действительная работа, целочисленная работа и указатель работают структуры (model_RWork, model_IWork, model_PWork): Блоки могут иметь потребность в действительном, целочисленном, или рабочие области указателя. Например, Блок памяти использует действительный рабочий элемент в каждом сигнале. Эти области используются, чтобы сохранить внутренние состояния или подобную информацию.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте