Если для построения модели, имеющей ссылочные модели, требуется использовать пользовательский целевой файл системы, необходимо настроить пользовательский целевой файл системы для поддержки ссылок на модели.
Чтобы построить модель, которая ссылается на другие модели, выполните следующие действия.
Используйте пользовательский целевой системный файл, полученный из целевого системного файла GRT или ERT.
Целевой файл пользовательской системы должен объявлять соответствие ссылочной модели - см. Объявление соответствия ссылочной модели.
Файл создания шаблона должен определять некоторые сущности, поддерживающие ссылку на модель - см. раздел Предоставление поддержки ссылки на модель в TMF.
Чтобы объявить соответствие ссылочной модели для целевого объекта, необходимо реализовать функцию обратного вызова, которая устанавливает ModelReferenceCompliant флаг, а затем установите функцию обратного вызова в SelectCallback области rtwgensettings структура в целевом системном файле. Функция обратного вызова запускается всякий раз, когда пользователь выбирает целевой объект в обозревателе системных целевых файлов. Например, следующий код целевого файла системы устанавливает 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 и маркеры, которые будут развернуты при создании 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<|
Следующий фрагмент кода показывает, как расширяются маркеры makefile для ссылочной модели.
MODELREFS = MODELLIB = engine3200cc_rtwlib.a MODELREF_LINK_LIBS = MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = ../../.. MODELREF_TARGET_TYPE = RTW
На следующем рисунке показан процесс развертывания маркеров makefile для модели верхнего уровня, ссылающейся на ссылочную модель.
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
Примечание
Если файл создания шаблона связан с цепочкой инструментов, удалите $(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'; ...
Опция конфигурации Мой пользовательский параметр (My Custom Parameter) может отличаться ссылочной моделью и ее родительской моделью. См. раздел Настройка целевых системных файлов для получения информации о целевых системных файлах на основе TLC, а также раздел Сводка полей структуры rtwoptions для получения списка rtwoptions поля.
Файлы «hook» - это необязательные файлы программ TLC и MATLAB, которые вызываются на четко определенных этапах процесса построения. Файлы привязки позволяют настраивать процесс построения и передавать информацию между различными фазами процесса.
Если настраиваемый целевой объект адаптируется для обеспечения совместимости генерации кода с элементами ссылок на модели, рекомендуется добавить в файлы крючков проверки для обработки ссылочных моделей иначе, чем для верхних моделей, чтобы предотвратить конфликты ресурсов.
Например, попробуйте добавить следующую проверку :STF_make_rtw_hook.m file
% 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