Многократно используемая функция подсистемы, вход или выход которой соединен с корневым блоком Inport или Outport ссылочной модели, может повлиять на повторное использование кода. Это может предотвратить повторное использование атомных подсистем в контексте ссылочной модели таким же образом, как и повторное использование подсистем в автономной модели.
В этом примере показано, как создать повторно используемый код, если в блоке модели имеется ссылка на повторно используемую подсистему.
1. Преобразуйте эти блоки в подсистему. Перетащите рамку, чтобы наметить подсистему, которую требуется создать. На вкладке «Несколько» на панели инструментов редактора Simulink выберите «Создать подсистему».

2. Внесите следующие изменения в параметры блока подсистемы:
Выберите Обработать как атомную единицу.
На закладке Создание кода установите для параметра Упаковка функций значение Reusable function.
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;
}