exponenta event banner

Ссылка на модель поддержки

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

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

Чтобы построить модель, которая ссылается на другие модели, выполните следующие действия.

Объявление модели, ссылающейся на соответствие

Чтобы объявить соответствие ссылочной модели для целевого объекта, необходимо реализовать функцию обратного вызова, которая устанавливает 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 страницы ссылок на функции.

Обеспечение ссылочной поддержки модели в 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<|

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

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

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

    • RTW: Построение целевого объекта ссылки на модель

    • SIMСоздание цели моделирования ссылочной модели

    При настройке целевого объекта для поддержки параллельных построений, как описано в разделе Сокращение времени построения ссылочных моделей с помощью параллельных построений, необходимо также добавить в 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

    Примечание

    Если файл создания шаблона связан с цепочкой инструментов, удалите $(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 в файл 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

Связанные темы