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

Переиспользуемая функция подсистемы, которая имеет вход или выход, соединенный с корневым блоком Inport или Outport ссылочной модели, может повлиять на повторное использование кода. Это может помешать вам повторно использовать атомарные подсистемы в контексте образца модели таким же образом, как вы можете повторно использовать подсистемы в автономной модели.

В этом примере показано, как сгенерировать повторно используемый код, когда у вас есть повторно используемая подсистема, на которую ссылается внутри блока Model.

Сгенерируйте переиспользуемый код для подсистемы

1. Преобразуйте эти блоки в подсистему. Перетащите рамку, чтобы очертить подсистему, которую вы хотите создать. На вкладке «Несколько» панели инструментов Редактор выберите «Создать подсистему».

2. Внесите следующие изменения в параметры блоков Subsystem:

3. Создайте модель, которая включает три образцов предыдущей подсистемы.

4. Установите параметр конфигурации модели Поведение параметра по умолчанию равным Inlined.

5. Чтобы создать модель и сгенерировать код, нажмите Ctrl + B.

Генератор кода оптимизирует код, генерируя одну копию функции для повторно используемой подсистемы в model.c файл.

void ex_codeReuseThreeSubsys_Subsystem1(real_T rtu_In1,
  B_Subsystem1_ex_codeReuseThreeSubsys_T *localB)
{
  /* Gain: '<S1>/Gain' */
  localB->Gain = 3.0 * rtu_In1;
}

Сгенерируйте переиспользуемый код для подсистемы в ссылочных Моделях

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

2. Сгенерируйте код для верхней части. Генератор кода генерирует три различные сигнатуры функции в slprj папка.

/* Output and update for atomic system: '<Root>/Subsystem 1' */
void ex_codeReuseThreeSubsys_Subsystem1(const real_T *rtu_In1,
  B_Subsystem1_ex_codeReuseThreeSubsys_T *localB)
{
  /* Gain: '<S1>/Gain' */
  localB->Gain = 3.0 * *rtu_In1;
}

/* Output and update for atomic system: '<Root>/Subsystem 2' */
void ex_codeReuseThreeSubsys_Subsystem2(real_T rtu_In1,
  B_Subsystem2_ex_codeReuseThreeSubsys_T *localB)
{
  /* Gain: '<S2>/Gain' */
  localB->Gain = 3.0 * rtu_In1;
}

/* Output and update for atomic system: '<Root>/Subsystem 3' */
void ex_codeReuseThreeSubsys_Subsystem3(real_T rtu_In1, real_T *rty_Out1)
{
  /* Gain: '<S3>/Gain' */
  *rty_Out1 = 3.0 * rtu_In1;
}

3. Чтобы включить функции подсистемы для повторного использования кода, вставьте блоки Signal Conversion в модель-ссылку. Поместите один блок между Входным и Подсистемой 1 и другой блок между Подсистемой 3 и Выходным.

Если подсистема имеет блок Merge с начальными условиями, не добавляйте блок Signal Conversion. Вместо этого добавьте блок Bias, чтобы получить переиспользуемую функцию.

4. Выберите параметр конфигурации модели Передайте скалярные корневые входы фиксированного размера по значению для генерации кода.

5. Сгенерируйте код для верхней части. Генератор кода генерирует одну переиспользуемую функцию в slprj папка.

void ex_codeReuseSubsysSigConvert_Subsystem1(real_T rtu_In1,
  B_Subsystem1_ex_codeReuseSubsysSigConvert_T *localB,
  P_Subsystem1_ex_codeReuseSubsysSigConvert_T *localP)
{
  /* Gain: '<S1>/Gain' */
  localB->Gain = localP->Gain_Gain * rtu_In1;
}

Похожие темы