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

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

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

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

1. Преобразуйте эти блоки в подсистему. Перетащите поле, чтобы обрисовать в общих чертах подсистему, которую вы хотите создать. От вкладки Multiple на Редакторе Simulink панель инструментов выберите Create Subsystem.

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. Чтобы включить функции подсистемы для повторного использования кода, вставьте блоки Преобразования Сигнала в модель, на которую ссылаются. Поместите один блок между Inport и Subsystem 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;
}

Похожие темы