Если вы хотите использовать пользовательский системный конечный файл для создавания модели, которая сослалась на модели, необходимо сконфигурировать пользовательский системный конечный файл к ссылке модели поддержки.
Чтобы создать модель, которая ссылается на другие модели:
Используйте пользовательский системный конечный файл, который выведен из GRT или системного конечного файла ERT.
Пользовательский системный конечный файл должен объявить, что податливость модели - ссылки – видит, что Объявление Модели Ссылается на Податливость.
Make-файл шаблона должен задать некоторые сущности, что ссылка модели поддержки – видит, что Модель Оказания Ссылается на Поддержку в TMF.
Чтобы объявить податливость модели - ссылки для вашей цели, необходимо реализовать функцию обратного вызова, которая устанавливает ModelReferenceCompliant
отметьте, и затем установите функцию обратного вызова в SelectCallback
поле rtwgensettings
структура в вашем системном конечном файле. Функция обратного вызова инициирована каждый раз, когда пользователь выбирает цель в Системном Браузере Конечного файла. Например, следующий системный код конечного файла устанавливает a SelectCallback
функция с именем custom_select_callback_handler
:
rtwgensettings.SelectCallback = 'custom_select_callback_handler(hDlg,hSrc)';
Аргументы к SelectCallback
функция (hDlg
, hSrc
) указатели на частные данные, используемые API-функциями коллбэка. Эти указатели ограничиваются, чтобы использовать в системных функциях обратного вызова конечного файла. Они должны быть переданы в без изменения.
Ваша функция обратного вызова должна установить ModelReferenceCompliant
отметьте можно следующим образом:
slConfigUISetVal(hDlg,hSrc,'ModelReferenceCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ModelReferenceCompliant',false); hSrc.refreshDialog;
Если вы можете использовать цель, чтобы создать модели, содержащие иерархии ссылки большой модели, полагать, что конфигурирование цели, чтобы поддержать параллельные сборки, как обсуждено в Уменьшают Время сборки для Моделей, на которые Ссылаются, при помощи Параллельных Сборок.
Чтобы сконфигурировать цель для параллельных сборок, ваша функция обратного вызова должна также установить ParMdlRefBuildCompliant
отметьте можно следующим образом:
slConfigUISetVal(hDlg,hSrc,'ParMdlRefBuildCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ParMdlRefBuildCompliant',false); hSrc.refreshDialog;
Для получения дополнительной информации о системном API коллбэка конечного файла, смотрите slConfigUIGetVal
, slConfigUISetEnabled
, и slConfigUISetVal
страницы ссылки на функцию.
Сконфигурировать make-файл шаблона (TMF) для ссылки модели:
Добавьте, что следующее делает переменные и лексемы, которые будут расширены, когда make-файл сгенерирован:
MODELREFS = |>MODELREFS<| MODELLIB = |>MODELLIB<| MODELREF_LINK_LIBS = |>MODELREF_LINK_LIBS<| MODELREF_LINK_RSPFILE = |>MODELREF_LINK_RSPFILE_NAME<| RELATIVE_PATH_TO_ANCHOR = |>RELATIVE_PATH_TO_ANCHOR<| MODELREF_TARGET_TYPE = |>MODELREF_TARGET_TYPE<|
Следующая выборка кода показывает, как лексемы make-файла расширены для модели, на которую ссылаются.
MODELREFS = MODELLIB = engine3200cc_rtwlib.a MODELREF_LINK_LIBS = MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ../../.. MODELREF_TARGET_TYPE = RTW
Следующая выборка кода показывает, как лексемы make-файла расширены для топ-модели, которая ссылается на модель, на которую ссылаются.
MODELREFS = engine3200cc transmission MODELLIB = MODELREF_LINK_LIBS = engine3200cc_rtwlib.a transmission_rtwlib.a MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = .. MODELREF_TARGET_TYPE = NONE
Лексема | Расширяется до |
---|---|
MODELREFS для топ-модели | Список имен модели, на которые ссылаются. |
MODELLIB | Имя библиотеки сгенерировано для модели. |
MODELREF_LINK_LIBS лексема для топ-модели | Список библиотек модели, на которые ссылаются, против которых соединяется топ-модель. |
MODELREF_LINK_RSPFILE лексема для топ-модели | Имя файла ответа, против которого соединяется топ-модель. Эта лексема допустима только для сред сборки, которые поддерживают файлы ответа компоновщика. Для примера его использования смотрите . |
RELATIVE_PATH_TO_ANCHOR | Относительный путь, от местоположения сгенерированного make-файла, к MATLAB® рабочая папка. |
MODELREF_TARGET_TYPE | Показывает тип создаваемой цели. Возможные значения
|
Если вы конфигурируете свою цель, чтобы поддержать параллельные сборки, как обсуждено в Уменьшают Время сборки для Моделей, на которые Ссылаются, при помощи Параллельных Сборок, необходимо также добавить следующие маркерные определения TMF:
START_DIR = |>START_DIR<| MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
Лексема | Расширяется до |
---|---|
START_DIR | Текущая папка работы (pwd ) в то время запущенная сборка. |
MASTER_ANCHOR_DIR | Текущая папка работы (pwd ) в то время запущенная сборка. |
Добавьте RELATIVE_PATH_TO_ANCHOR
включайте путь к полному INCLUDES
переменная.
INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(ADD_INCLUDES) \ $(USER_INCLUDES) $(SHARED_INCLUDES)
Измените SRCS
переменная в вашем TMF так, чтобы это первоначально перечислило только общие модули. Дополнительные модули затем добавлены условно, как описано в следующем шаге. Например, изменение
SRCS = $(MODEL).c $(MODULES) ert_main.c $(ADD_SRCS) $(EXT_SRC)
к
SRCS = $(MODULES)
Создайте переменные, чтобы задать итоговую цель make-файла. Можно удалить переменные, которые, возможно, существовали для определения итоговой цели. Например, удалить
PROGRAM = ../$(MODEL)
и замените его на
ifeq ($(MODELREF_TARGET_TYPE), NONE) # Top model for RTW PRODUCT = $(RELATIVE_PATH_TO_ANCHOR)/$(MODEL) BIN_SETTING = $(LD) $(LDFLAGS) -o $(PRODUCT) $(SYSLIBS) BUILD_PRODUCT_TYPE = "executable" # ERT based targets SRCS += $(MODEL).c ert_main.c $(EXT_SRC) # GRT based targets # SRCS += $(MODEL).c grt_main.c rt_sim.c $(EXT_SRC) $(SOLVER) else # sub-model for RTW PRODUCT = $(MODELLIB) BUILD_PRODUCT_TYPE = "library" endif
Примечание
Если make-файл шаблона сопоставлен с набором инструментальных средств, удалите $(MODEL).c
или $(MODEL).$(TARGET_LANG_EXT)
от SRCS
список.
Создайте правила для итоговой цели make-файла (замените существующие итоговые целевые правила). Например:
ifeq ($(MODELREF_TARGET_TYPE),NONE) # Top model for RTW $(PRODUCT) : $(OBJS) $(LIBS) $(MODELREF_LINK_LIBS) $(BIN_SETTING) $(LINK_OBJS) $(MODELREF_LINK_LIBS) $(LIBS) @echo "### Created $(BUILD_PRODUCT_TYPE): $@" else # sub-model for RTW $(PRODUCT) : $(OBJS) $(LIBS) @rm -f $(MODELLIB) $(ar) ruvs $(MODELLIB) $(LINK_OBJS) @echo "### Created $(MODELLIB)" @echo "### Created $(BUILD_PRODUCT_TYPE): $@" endif
Создайте правило позволить моделям, на которые ссылаются, компилировать файлы, которые находятся в MATLAB рабочая папка (pwd
).
%.o : $(RELATIVE_PATH_TO_ANCHOR)/%.c $(CC) -c $(CFLAGS) $<
Примечание
Если вы используете TMF без переменной MODELREFS
, файл может использоваться с предыдущим релизом программного обеспечения Simulink®. Если вы хотите свой TMF к ссылке модели поддержки, добавьте любую переменную MODELREFS
к make-файлу.
По умолчанию значение параметра конфигурации, заданного в системном конечном файле для основанной на TLC пользовательской цели, должно быть тем же самым в модели, на которую ссылаются, и ее родительской модели. Чтобы ослабить это требование, включайте modelReferenceParameterCheck
поле в rtwoptions
элемент структуры, который задает параметр конфигурации и устанавливает значение поля к 'off'
. Например:
rtwoptions(2).prompt = 'My Custom Parameter'; rtwoptions(2).type = 'Checkbox'; rtwoptions(2).default = 'on'; rtwoptions(2).modelReferenceParameterCheck = 'on'; rtwoptions(2).tlcvariable = 'mytlcvariable'; ...
Параметр конфигурации Мой Пользовательский Параметр может отличаться по модели, на которую ссылаются, и ее родительской модели. Смотрите Настраивают Системные Конечные файлы для получения информации об основанных на TLC системных конечных файлах и rtwoptions Полевые Сводные данные Структуры для списка rtwoptions
поля .
Сцепитесь файлы являются дополнительным TLC и файлами программы MATLAB, которые вызываются на четко определенных этапах процесса сборки. Сцепитесь файлы позволяют вам настроить процесс сборки и передать информацию между различными фазами процесса.
Если вы адаптируете свою пользовательскую цель к совместимости генерации кода с функциями модели - ссылки, полагаете, что добавляющие проверки к вашим файлам рычага для обработки моделей, на которые ссылаются, по-другому, чем топ-модели предотвращают конфликты ресурса.
Например, рассмотрите добавление следующей проверки к вашему
:STF
Файл _make_rtw_hook.m
% Check if this is a referenced model mdlRefTargetType = get_param(codeGenModelName,`ModelReferenceTargetType'); isNotModelRefTarget = strcmp(mdlRefTargetType, `NONE'); % NONE, SIM, or RTW if isNotModelRefTarget % code that is specific to the top model else % code that is specific to the referenced model end
Вы, возможно, должны сделать подобную регистрацию вашего кода TLC.
%if !IsModelReferenceTarget() %% code that is specific to the top model %else %% code that is specific to the referenced model %endif