exponenta event banner

Создать повторно вводимый многоинстанционный код

В этом примере показано, как настроить модель для повторного создания многоэкземплярного кода. Несколько программ могут использовать повторный ввод кода одновременно. При настройке модели для повторного входа функция начального уровня выполнения (шаг) использует входные и выходные аргументы корневого уровня вместо глобальных структур данных. После проверки настроек конфигурации создайте и просмотрите созданный код.

Открытие модели

Открытие модели rtwdemo_reusable. Модель содержит два корневых блока Inport и корневой блок Outport.

model='rtwdemo_reusable';
open_system(model);

Сохраните копию модели в доступном для записи расположении.

currentDir=pwd;
[~,cgDir] = rtwdemodir();

Проверка соответствующих настроек параметров конфигурации модели

1. Откройте приложение Embedded Coder.

2. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters).

3. Параметр конфигурации модели Системный целевой файл имеет значение ert.tlc. Несмотря на то, что для модели, для которой задано значение Системный целевой файл (System target file), можно создать код повторного ввода. grt.tlc, целевые системные файлы на основе ERT и ERT обеспечивают больший контроль над тем, как код проходит корневой уровень ввода-вывода.

4. Откройте панель Создание кода (Code Generation) > Интерфейс (Interface) и изучите соответствующие настройки параметров конфигурации модели.

  • Для упаковки интерфейса кода установлено значение Reusable function. Эта настройка параметров дает генератору кода команду на создание многоэкземплярного многоэкземплярного кода.

  • Настройка Reusable function отображает параметр Диагностика ошибок кода нескольких экземпляров. Этот параметр имеет значение Error, указывающее, что генератор кода прекращает работу, если модель нарушает требования для создания кода с несколькими экземплярами.

  • Передача ввода-вывода на корневом уровне, если установлено значение Part of model data structure. Этот параметр упаковывает входные и выходные данные модели корневого уровня в структуру данных модели в реальном времени (rtModel), которая представляет собой оптимизированную структуру данных, заменяющую SimStruct в качестве структуры данных верхнего уровня для модели.

  • Выбрано поле удаления состояния ошибки в структуре данных модели в реальном времени. Этот параметр уменьшает использование памяти за счет исключения поля состояния ошибки из созданной структуры данных модели в реальном времени.

Создание и проверка кода

slbuild(model);
### Starting build procedure for: rtwdemo_reusable
### Successful completion of build procedure for: rtwdemo_reusable

Build Summary

Top model targets built:

Model             Action                       Rebuild Reason                                    
=================================================================================================
rtwdemo_reusable  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.3529s

Просмотрите созданный код.

  • ert_main.c является примером основной программы (инфраструктуры выполнения) для модели. Этот код управляет выполнением кода модели путем вызова функции точки входа rtwdemo_reusable_step. Используйте этот файл в качестве отправной точки для кодирования среды выполнения.

  • rtwdemo_reusable.c содержит точки входа для кода, реализующего алгоритм модели. Этот файл содержит код планирования скорости.

  • rtwdemo_reusable.h объявить структуры данных модели и открытый интерфейс с точками входа модели и структурами данных.

  • rtwtypes.h определяет типы данных, структуры и макросы, необходимые для созданного кода.

Интерфейс кода

Откройте и просмотрите отчет по кодовому интерфейсу. Используйте информацию в этом отчете для написания кода интерфейса для среды выполнения.

1. Включить созданный файл заголовка путем добавления директивы #include rtwdemo_reusable.h.

2. Запись входных данных в созданный код для блоков ввода модели.

3. Вызовите сгенерированные функции точки входа.

4. Считывание данных из созданного кода для блока Outport модели.

Входные порты:

  • <Root>/In1 данных real_T с размером 1

  • <Root>/In2 данных real_T с размером 1

Функции точки входа:

  • Инициализация функции начальной точки, void rtwdemo_reusable_initialize(RT_MODEL *const rtM). При запуске вызовите эту функцию один раз.

  • Вывод и обновление (шаг) функции начальной точки, void rtwdemo_reusable_step(RT_MODEL *const rtM). Периодически вызывайте эту функцию с самой высокой скоростью в модели. Для этой модели вызовите функцию каждую секунду. Чтобы обеспечить выполнение в реальном времени, подключите эту функцию к таймеру.

Выходной порт:

  • <Root>/Out1 типа данных real_T с размером 1

Проверка функции шага

Examine the |rtwdemo_reusable_step| function code in |rtwdemo_reusable.c|.
cfile = fullfile(cgDir,'rtwdemo_reusable_ert_rtw','rtwdemo_reusable.c');
rtwdemodbtype(cfile,'/* Model step function', '/* Model initialize function ', 1, 0);
/* Model step function */
void rtwdemo_reusable_step(RT_MODEL *const rtM)
{
  D_Work *rtDWork = rtM->dwork;
  ExternalInputs *rtU = (ExternalInputs *) rtM->inputs;
  ExternalOutputs *rtY = (ExternalOutputs *) rtM->outputs;

  /* Outport: '<Root>/Out1' incorporates:
   *  UnitDelay: '<Root>/Delay'
   */
  rtY->Out1 = rtDWork->Delay_DSTATE;

  /* Gain: '<Root>/Gain' incorporates:
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Sum: '<Root>/Sum'
   *  UnitDelay: '<Root>/Delay'
   */
  rtDWork->Delay_DSTATE = (rtU->In1 + rtU->In2) * rtP.k1;
}

Генератор кода передает данные модели в rtwdemo_reusable_step функционирует как часть структуры данных модели в реальном времени. Попробуйте использовать различные настройки для параметров конфигурации модели Кодовая упаковка интерфейса и Пройти корневой уровень ввода-вывода и регенерировать код. Наблюдайте за изменением прототипа функции.

Закрыть модель и отчет

Закройте модель и отчет о создании кода.

bdclose(model)
rtwdemoclean;
cd(currentDir)

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