Если вы хотите использовать пользовательский системный конечный файл для того, чтобы создать модель, которая сослалась на модели, необходимо сконфигурировать пользовательский системный конечный файл к ссылке модели поддержки.
Чтобы создать модель, которая ссылается на другие модели:
Используйте пользовательский системный конечный файл, который выведен от GRT или системного конечного файла ERT.
Пользовательский системный конечный файл должен объявить, что соответствие модели - ссылки – видит, что Объявление Модели Ссылается на Соответствие.
Make-файл шаблона должен задать некоторые сущности, что ссылка модели поддержки – видит, что Модель Оказания Ссылается на Поддержку в TMF.
Чтобы объявить соответствие модели - ссылки для вашей цели, необходимо реализовать функцию обратного вызова, которая устанавливает флаг ModelReferenceCompliant
, и затем установите функцию обратного вызова в поле SelectCallback
структуры rtwgensettings
в STF. Функция обратного вызова инициирована каждый раз, когда пользователь выбирает цель в Системном Браузере Конечного файла. Например, следующий код STF устанавливает функцию с именем SelectCallback
custom_select_callback_handler
:
rtwgensettings.SelectCallback = 'custom_select_callback_handler(hDlg,hSrc)';
Аргументы к функции SelectCallback
(hDlg
, hSrc
) являются указателями на частные данные, используемые API-функциями коллбэка. Эти указатели ограничиваются, чтобы использовать в функциях обратного вызова STF. Они должны быть переданы в без изменения.
Ваша функция обратного вызова должна установить флаг ModelReferenceCompliant
можно следующим образом:
slConfigUISetVal(hDlg,hSrc,'ModelReferenceCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ModelReferenceCompliant',false);
Если вы можете использовать цель, чтобы создать модели, содержащие иерархии ссылки большой модели, полагать, что конфигурирование цели, чтобы поддержать параллельные сборки, как обсуждено в Уменьшают Время изготовления для Моделей, на которые Ссылаются (Simulink Coder).
Чтобы сконфигурировать цель для параллельных сборок, ваша функция обратного вызова должна также установить флаг ParMdlRefBuildCompliant
можно следующим образом:
slConfigUISetVal(hDlg,hSrc,'ParMdlRefBuildCompliant','on'); slConfigUISetEnabled(hDlg,hSrc,'ParMdlRefBuildCompliant',false);
Для получения дополнительной информации о API коллбэка STF, смотрите 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 = archlib.a MODELREF_LINK_LIBS = engine3200cc_rtwlib.a transmission_rtwlib.a MODELREF_LINK_RSPFILE = RELATIVE_PATH_TO_ANCHOR = .. MODELREF_TARGET_TYPE = NONE
Если вы конфигурируете свою цель, чтобы поддержать параллельные сборки, как обсуждено в Уменьшают Время изготовления для Моделей, на которые Ссылаются (Simulink Coder), необходимо также добавить следующие маркерные определения 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
.
Если ваша цель поддерживает параллельные сборки для иерархий ссылки большой модели, можно дополнительно настроить автоматическую верификацию рабочих MATLAB Parallel Server™. Это обращается к возможности, что у параллельных рабочих могут быть различные настройки, некоторые из которых не могут быть совместимы с определенной целевой сборкой. Например, необходимый компилятор не может быть установлен в системе рабочего.
Генератор кода обеспечивает интерфейс программирования, который можно использовать, чтобы автоматически проверять настройку параллельных рабочих. Если параллельные рабочие не настраиваются как ожидалось, принимают меры, такие как возвращение к последовательным сборкам или бросок ошибки.
Чтобы настроить автоматическую верификацию рабочих, необходимо задать параллельную функцию с именем проверки настройки
, где STF_par_cfg_chk
определяет системное имя конечного файла. Например, параллельной функцией проверки настройки для STF
ert.tlc
является ert_par_cfg_chk
.
Общий синтаксис для функции:
function varargout = STF_par_cfg_chk(action,varargin)
Количество выходных аргументов и входных параметров отличается согласно
, заданному, и согласно типам информации вы принимаете решение скоординировать между клиентом и рабочими. Функция должна поддержать следующую общую последовательность параллельных вызовов настройки настройки, дифференцируемый первым аргументом передал в:action
Вызовите синтаксис | Обращенный: | Действие |
---|---|---|
| Клиент | Возвратите структуру, представляющую предпочтительную настройку для рабочих MATLAB Parallel Server. |
| Рабочие | Каждый рабочий передается предпочтительная настройка клиента MATLAB Parallel Server. Возвратите true, если рабочий может поддержать предпочтительную настройку; в противном случае возвратите false наряду со структурой, представляющей настройку, которую может поддержать рабочий. Информация, возвращенная каждым рабочим, добавляется к массиву ячеек настроек. |
| Клиент | Клиент передается массив ячеек настроек рабочего. Если применимая общая настройка существует, возвратите true и возвратите общую настройку, чтобы установить для всех систем. Если общая настройка не может быть установлена, возвратить false или принять некоторые меры, такие как возвращение к последовательным сборкам или бросок ошибки. |
| Рабочие и клиент | Каждая система передается общая настройка, чтобы использовать. Настройте общую настройку и, в случае успеха, возвратите true. Если ошибки или проблемы происходят, возвращают false или принимают некоторые меры, такие как возвращение к последовательным сборкам или бросок ошибки. |
| Рабочие и клиент | Вымойтесь после завершения параллельной сборки. |
Параллельные функции проверки настройки для MathWorks®, если цели реализованы как обертка, функционируют, которые вызывают функцию с именем parallelMdlRefHostConfigCheckFcn
. Например, смотрите функцию проверки настройки параллели ERT в файле
и функция, это вызывает в файле matlabroot/toolbox/rtw/rtw/ert_par_cfg_chk.m
. Функция matlabroot/toolbox/simulink/simulink/+Simulink/parallelMdlRefHostConfigCheckFcn.m
parallelMdlRefHostConfigCheckFcn
пытается установить общий компилятор через клиент MATLAB Parallel Server и рабочих.
Для получения дополнительной информации о параллельных сборках, смотрите, Уменьшают Время изготовления для Моделей, на которые Ссылаются (Simulink Coder).
Сцепитесь файлы являются дополнительным 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