Поддержка ссылок на модели

Если вы хотите использовать пользовательский системный целевой файл для создания модели с ссылочными моделями, необходимо сконфигурировать пользовательский системный целевой файл, чтобы поддержать ссылки на модель.

Требования к ссылкам на модели с пользовательским системным целевым файлом

Чтобы создать модель, которая ссылается на другие модели:

Декларирование модели, ссылающейся на податливость

Чтобы объявить модель-ссылку податливости для вашего целевого устройства, необходимо реализовать функцию обратного вызова, которая устанавливает ModelReferenceCompliant флаг, а затем установите функцию обратного вызова в SelectCallback поле rtwgensettings структура в целевом файле системы. Функция обратного вызова запускается каждый раз, когда пользователь выбирает цель в System Target File Browser. Например, следующий системный код целевого файла устанавливает 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 function страниц с описанием.

Обеспечение поддержки Модели ссылок в TMF

Чтобы сконфигурировать шаблон make-файла (TMF) для ссылки на модель:

  1. Добавьте следующие переменные 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<|

    Следующий фрагмент кода показов, как лексемы 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 лексема для верхней модели Имя файла ответа, с которым связана верхняя модель. Эта лексема действительна только для окружений сборки, поддерживающих файлы отклика linker. Пример его использования см. в matlabroot/ toolbox/coder/compile/tmf/grt_vcx64.tmf.
    RELATIVE_PATH_TO_ANCHORОтносительный путь от местоположения сгенерированного make-файла к MATLAB® рабочая папка.
    MODELREF_TARGET_TYPE

    Указывает тип создаваемого целевого объекта. Возможные значения:

    • NONE: Автономная модель или верхняя часть, ссылающаяся на другие модели

    • RTW: Моделируйте эталонное целевое построение

    • SIM: Модель-ссылка построение целевого объекта симуляции

    Если вы конфигурируете цель для поддержки параллельных сборок, как обсуждается в разделе Сокращение времени сборки для ссылок на Модели при помощи Parallel Builds, необходимо также добавить следующие определения токенов к TMF:

    START_DIR = |>START_DIR<|
    MASTER_ANCHOR_DIR = |>MASTER_ANCHOR_DIR<|
    ЛексемаРасширяется до
    START_DIRТекущая рабочая папка (pwd) на момент запуска сборки.
    MASTER_ANCHOR_DIRТекущая рабочая папка (pwd) на момент запуска сборки.
  2. Добавьте RELATIVE_PATH_TO_ANCHOR включить путь к общей INCLUDES переменная.

    INCLUDES = -I. -I$(RELATIVE_PATH_TO_ANCHOR) $(ADD_INCLUDES) \
    	   $(USER_INCLUDES) $(SHARED_INCLUDES)
  3. Измените SRCS переменная в TMF, так что в ней первоначально перечислены только общие модули. Затем дополнительные модули добавляются условно, как описано на следующем этапе. Для примера измените

    SRCS  = $(MODEL).c $(MODULES) ert_main.c $(ADD_SRCS) $(EXT_SRC)

    кому

    SRCS = $(MODULES)
  4. Создайте переменные, чтобы определить конечную цель 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 список.

  5. Создайте правила для конечного целевого файла 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
  6. Создайте правило, позволяющее ссылочным моделям компилировать файлы, которые находятся в рабочей папке MATLAB (pwd).

    %.o : $(RELATIVE_PATH_TO_ANCHOR)/%.c
    	$(CC) -c $(CFLAGS) $<

Примечание

Если вы используете TMF без переменной MODELREFS, возможно, файл был использован в предыдущем релизе Simulink® программное обеспечение. Если вы хотите, чтобы ваш TMF поддерживал ссылки на модель, добавьте любую переменную MODELREFS в файл создания.

Управление соглашением о значении опции строения

По умолчанию значение опции строения, заданное в системном целевом файле для пользовательского целевого объекта на основе 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 Параметра может отличаться в модели-ссылке и ее родительской модели. Смотрите Настройте Системные Целевые Файлы для получения информации о системных целевых файлах на основе TLC и rtwoptions Structure Fields Summary для списка rtwoptions поля.

Предотвращение конфликтов ресурсов (необязательно)

Файлы hook являются необязательными программными файлами TLC и MATLAB, которые вызываются на четко определенных этапах процесса сборки. Файлы Hook позволяют вам настраивать процесс сборки и передавать информацию между различными фазами процесса.

Если вы адаптируете свой пользовательский целевой объект для совместимости генерации кода с моделью-ссылкой функций, рассмотрите добавление проверок в файлы hook для обработки ссылочных моделей по-другому, чем верхние модели, чтобы предотвратить конфликты ресурсов.

Например, рассмотрите добавление следующей проверки к вашему 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

Похожие темы