exponenta event banner

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

Существует несколько библиотечных функций, обеспечивающих доступ к входам блоков, выводам, параметрам, времени выборки и другой информации. Рекомендуется использовать эти библиотечные функции для доступа ко многим парам имен параметров/значений параметров в записи блока, а не к парам имен параметров/значений параметров непосредственно из кода TLC блока. Дополнительные сведения об использовании этих функций (рекомендуемый метод доступа model.rtw), см. раздел Обзор функций библиотеки компилятора целевого языка.

Исключением из использования этих функций является доступ к настройкам параметров блока. Параметры настройки могут быть записаны с помощью mdlRTW функции S-функции C MEX. Они могут содержать данные в виде строк, скалярных значений, векторов и матриц. Они могут использоваться для передачи фиксированных значений и информации, которая используется для изменения сгенерированного кода для блока или непосредственно как значения в результирующем коде блока.

Пример исключения из использования библиотечных функций

Следующий пример демонстрирует доступ к параметрам для блока с помощью mdlRTW функции S-функции C MEX. Дополнительные сведения об использовании настроек параметров см. в разделе Встраивание S-функций.

Функция mdlRTW в коде S-функции C MEX

static void mdlRTW(SimStruct *S)
{
    if (!ssWriteRTWParamSettings( S, 1, SSWRITE_VALUE_QSTR, "Operator", "AND"))
    {
        ssSetErrorStatus(S,"Error writing parameter data to .rtw file");
        return;
    }
}

Результирующая запись блока в model.rtw Файл

Block {
      Type    "S-Function"
      Name    "<Root>/S-Function"

      ...

      SFcnParamSettings {
        Operator    "AND"
      }
    }

Код TLC для доступа к настройкам параметров

%function Outputs(block, system) Output
  %%
  %% Select Operator
  %switch(SFcnParamSettings.Operator)
    %case "AND"
      %assign LogicOp        = "&"
      %break
    ...
  %endswitch
%endfunction

Предостережение от прямого доступа к полям записей

При вызове функций в целевом файле блока они передаются блоку и системным записям для этого экземпляра в качестве аргументов. Первый аргумент, block, находится в области действия, что означает, что имена переменных внутри блочной записи этого экземпляра доступны по имени. Например:

%assign fast = SFcnParamSetting.Fast

Целевые файлы блоков могут генерировать код для данного блока путем непосредственного использования полей в записи блока. Этот процесс не рекомендуется по двум причинам:

  • Содержание model.rtw файл может изменяться от версии к версии. Это может привести к блокированию файлов TLC, имеющих доступ к model.rtw непосредственно для прекращения работы.

  • Предусмотрены функции библиотеки TLC, которые существенно уменьшают количество кода TLC для реализации блока при обработке различных конфигураций (ширины, типы данных и т.д.), которые может иметь блок. Эти библиотечные функции предоставляются целевыми файлами системы для обеспечения доступа к входам, выходам, параметрам и т.д. Использование этих функций в скрипте TLC делает его достаточно гибким для создания кода для нескольких экземпляров или конфигураций блока, а также для всех версий. Однако исключения возникают, например, при необходимости прямого доступа к полю в записи блока. Это происходит с настройками параметров, как описано в TLC Code to Access the Parameter Settings.

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