exponenta event banner

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

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

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

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

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

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

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. Создайте верхнюю модель с помощью блока «Модель», который ссылается на предыдущую модель и имеет три экземпляра повторно используемой подсистемы.

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

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

4. Выберите параметр конфигурации модели Pass fixed-size scalar root input by value для генерации кода.

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;
}

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