Повторно используемая библиотечная подсистема - это подсистема, входящая в состав библиотеки, которая настроена для повторного использования. Необходимо определить подсистему в библиотеке и настроить ее для повторного использования в моделях.
Для повторного использования общих функциональных возможностей можно включить несколько экземпляров подсистемы:
Внутри одной модели, которая является верхней моделью или частью иерархии привязок модели
В нескольких ссылочных моделях в иерархии привязок моделей
В нескольких верхних моделях, содержащих блоки модели
В нескольких верхних моделях, не включающих блоки модели
Генератор кода использует контрольные суммы для определения возможности повторного использования. Бывают случаи, когда генератор кода не может повторно использовать код подсистемы.
При создании инкрементного кода, если повторно используемая библиотечная подсистема изменяется, происходит перестроение ее самой и ее родителей. При построении, если соответствующая функция не найдена, в папку общих утилит создается новый экземпляр повторно используемой функции. Если из предыдущих построений найдена другая совпадающая функция, эта функция используется, и новая повторно используемая функция не выводится.
При последующих построениях неиспользуемые файлы не заменяются и не удаляются из папки. Во время разработки модели, когда в папке общих утилит существует много устаревших общих функций, можно удалить папку и регенерировать код. Если все экземпляры повторно используемой библиотечной подсистемы удалены из иерархии ссылок на модель и код регенерирован, устаревшие общие функции остаются в папке общих утилит до их удаления.
Если модель изменяется таким образом, что изменение может вызвать другой сгенерированный код для подсистемы, генерируется новая повторно используемая функция. Например, параметры конфигурации модели, изменяющие комментарии к коду, могут вызывать различные генерируемые коды для подсистемы, даже если повторно используемая библиотечная подсистема не изменилась.
Пользователи встроенного кодера могут создавать код из библиотеки, содержащей подсистемы, настроенные для повторного использования. Дополнительные сведения см. в разделе Создание библиотечного кода для повторно используемых библиотечных подсистем (встроенный кодер).
Сгенерированный код повторно используемой библиотечной подсистемы не зависит от сгенерированного кода модели. Код для повторно используемой библиотечной подсистемы создается в общей папке утилит, slprj/, вместо папок ссылочной иерархии модели. Созданный код для поддерживающих типов, которые создаются для target/_sharedutils.h , также находятся в папке общих утилит.
Для уникального именования имена повторно используемых функций имеют контрольную сумму, добавляемую к имени повторно используемой библиотечной подсистемы. Например, код и файлы для подсистемы, SS1, которая ссылается на повторно используемую библиотечную подсистему, RLS, может быть:
Имя функции: RLS_mgdjlngd
Имя файла: RLS_mgdjlnd.c и RLS_mgdjlnd.h
Установите следующие параметры подсистемы:
Выберите Обработать как атомную единицу.
На вкладке Создание кода:
Установить упаковку функций в Reusable function.
Задать параметры имени функции
и Параметры параметров имени файла для одной из следующих комбинаций:
Задайте для параметров Имя функции (Function name) и Имя файла (File name) значение Auto.
Задайте для параметров имени функции значение Use subsystem name и Параметры имени файла для Use function name.
Задайте для параметров имени функции значение User specified и Параметры имени файла для Auto или Use function name.
Задайте для параметров имени функции значение User specified и Параметры имени файла для User specified. Установите одинаковое значение для параметров Имя функции (Function name) и Имя файла (File name).
В иерархии ссылок на модель, если экземпляр многоразовой библиотечной подсистемы находится в верхней части модели, то на панели Привязка модели (Model Referencing) диалогового окна Параметры конфигурации (Configuration Parameters) необходимо выбрать скалярный корневой ввод с фиксированным размером по значению для параметра генерации кода. Если параметр не выбран, для экземпляра повторно используемой библиотечной подсистемы в верхней модели создается отдельная общая функция, а для экземпляров в ссылочных моделях - повторно используемая функция.
Если повторно используемая библиотечная подсистема подключена к корневому исходящему порту, повторное использование не происходит с идентичными подсистемами, которые не подключены к корневому исходящему порту. Тем не менее, можно установить Pass reusable system outputs как Individual arguments на панели «Оптимизации» для проверки повторного использования между этими подсистемами. Для этого параметра требуется лицензия Embedded Coder ®.
Дополнительные сведения о создании библиотеки см. в разделе Пользовательские библиотеки. Пример создания многоразовой библиотечной подсистемы см. в разделе Создание многоразового кода для подсистем, совместно используемых в разных моделях.
Чтобы модель могла использовать библиотечную подсистему многократного использования, необходимо настроить модель по-разному в зависимости от того, является ли модель ссылочной моделью или моделью верхнего уровня. Если подсистема находится в ссылочной иерархии модели, задайте для параметра конфигурации Размещение общего кода (Shared code placement) значение Auto. В противном случае для каждой модели, использующей подсистему, задайте для параметра конфигурации модели Shared code placement значение Shared location.
Если повторно используемая библиотечная подсистема использует общее локальное хранилище данных и настраивается сопоставление по умолчанию для элементов данных модели, оставьте для категории Общие локальные хранилища данных значение По умолчанию.
В этом примере показано, как настроить повторно используемую библиотечную подсистему и создать повторно используемую функцию для подсистемы, общей для ссылочных моделей. Результатом является многократно используемый код для подсистемы, который генерируется в общей папке утилиты (slprj/).target/_sharedutils
В редакторе Simulink на вкладке «Моделирование» выберите «Создать» > «Библиотека». Выберите Пустая библиотека (Blank Library) в окне Начальная страница Simulink (Simulink Start Page). Открытый rtwdemo_ssreuse для копирования и вставки подсистемы SS1 в редактор библиотеки. Это действие загружает переменные для SS1 в базовое рабочее пространство. Переименование блока подсистемы в RLS.

Щелкните блок «Подсистема» и нажмите Ctrl + U для просмотра содержимого подсистемы.RLS.

Чтобы настроить подсистему, в редакторе библиотеки щелкните правой кнопкой мыши RLS. В контекстном меню выберите «Параметры блока (подсистема)». В диалоговом окне «Параметры подсистемы» выберите следующие параметры:
Выберите Обработать как атомную единицу.
На вкладке Создание кода:
Установить упаковку функций в Reusable function.
Задайте для параметров имени функции значение User specified и убедитесь, что для имени функции установлено значение myfun.
Задать для параметров имени файла значение Auto.
Нажмите «Применить» и «ОК».
Сохранить повторно используемую библиотечную подсистему как ssreuselib, который создает файл, ssreuselib.slx.
Создание модели, включающей один экземпляр RLS от ssreuselib. Назовите эту подсистему SS1. Добавьте другую подсистему и присвойте ей имя SS2. Назовите модель ex_model1.

Создать другую модель, включающую один экземпляр RLS от ssreuselib. Назовите эту подсистему SS1. Добавьте другую подсистему и присвойте ей имя SS3. Назовите модель ex_model2.

Создание модели верхнего уровня с двумя блоками модели, которые ссылаются на ex_model1 и ex_model2. Сохранить верхнюю модель как ex_mdlref_ssreuse.

С моделью ex_mdlref_ssreuse открыть в редакторе Simulink, на вкладке C Code нажмите кнопку Settings, чтобы открыть диалоговое окно Configuration Parameters.
На панели «Решатель» укажите тип как Fixed-step.
На панели Ссылка на модель (Model Referencing) выберите для создания кода значение Передать скалярные входные значения корня фиксированного размера по значению (Pass fixed-size scalar root input by value)
На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.
На панели «Создание кода» > «Интерфейс» установите для параметра «Общий код» значение Shared location.
На панели «Создание кода» > «Идентификаторы» задайте для параметра «Максимальная длина идентификатора» значение 256. Этот шаг необязателен.
Нажмите «Применить» и «ОК».
В редакторе Simulink на вкладке Моделирование (Modeling) щелкните Обозреватель моделей (Model Explorer), чтобы открыть Обозреватель моделей (Model Explorer). В левом столбце навигации Обозревателя моделей разверните вкладку ex_mdlref_ssreuse узел.
Выберите узел Конфигурации под ex_mdlref_ssreuse узел. На панели «Содержимое» щелкните правой кнопкой мыши «Конфигурация» и выберите Convert to Configuration Reference.
В диалоговом окне Преобразовать активную конфигурацию в ссылку нажмите кнопку OK. Это действие преобразует набор конфигурации модели в ссылку на конфигурацию. Simulink.ConfigSetRefи создает объект ссылки на конфигурацию, configSetObj, в базовом рабочем пространстве.
В левом столбце навигации щелкните правой кнопкой мыши ссылку (активная) и выберите Propagate to Referenced Models.
В диалоговом окне Распространение привязки конфигурации на ссылочные модели (Configuration Reference Propagation to Referenced Models) выберите ссылочные модели в списке. Щелкните Распространить (Propagate).
Теперь верхняя модель и ссылочные модели используют одну и ту же ссылку на конфигурацию, Reference (Active), который указывает на объект привязки конфигурации модели, configSetObj, в базовом рабочем пространстве. При сохранении модели также необходимо экспортировать configSetObj в MAT-файл.
Чтобы создать код, в редакторе Simulink нажмите клавиши Ctrl + B. После создания кода открывается отчет о создании кода.
Чтобы просмотреть отчет о создании кода для ссылочной модели, на левой панели навигации в разделе Ссылочные модели выберите ex_model1. В отчете о создании кода отображаются созданные файлы для ex_model1.
На левой панели навигации разверните раздел Общие файлы. Генератор кода использует имя повторно используемой библиотечной подсистемы. Код подсистемы SS1 находится в myfun.c и myfun.h.

Нажмите кнопку Назад и перейдите к ex_model2 отчет о создании кода. ex_model2 использует тот же исходный код, myfun.c и myfun.h, в качестве кода для ex_model1. Функции подсистемы и имена файлов будут отличаться.