Передайте параметры диалога в S-функции

Сведения о параметрах диалога

Можно передать параметры в S-функцию в начале и во время симуляции, используя поле параметров S-функции диалогового окна Параметров блоков. Такие параметры называются параметрами диалогового окна, чтобы отличить их от параметров во время выполнения, созданных S-функцией для облегчения генерации кода (см. Создание и обновление параметров во время выполнения S-функции).

Примечание

Вы не можете использовать Model Explorer, диалоговое окно Блок S-function Parameters или маску, чтобы настроить параметры исходной S-функции, то есть S-функции, которая имеет выходы, но нет входов, во время симуляции. Для получения дополнительной информации смотрите Настройка и Эксперимент с Параметрами блоков значениями.

Использование параметров диалога C S-Function

Simulink® двигатель хранит значения параметров диалогового окна в S-функции SimStruct структура. Используйте методы и SimStruct коллбэка S-функции макросы для доступа и проверки параметров и использования их для вычисления выхода S-функции. Чтобы использовать параметры диалога в вашей S-функции C, выполните следующие шаги при создании S-функции:

  1. Определите порядок, в котором параметры должны быть заданы в диалоговом окне блока.

  2. В mdlInitializeSizes function, использовать ssSetNumSFcnParams макрос, чтобы сообщить движку Simulink, сколько параметров принимает S-функция. Задайте S как первый аргумент и количество параметров диалогового окна как второй аргумент. Если ваша S-функция реализует mdlCheckParameters метод, mdlInitializeSizes стандартная программа должна вызвать mdlCheckParameters для проверки валидности начальных значений параметров. Для примера, mdlInitializeSizes функция в sfun_runtime1.c начинается со следующего кода.

    ssSetNumSFcnParams(S, NPARAMS);  /* Number of expected parameters */
    #if defined(MATLAB_MEX_FILE)
        if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
            mdlCheckParameters(S);
            if (ssGetErrorStatus(S) != NULL) {
                return;
            }
        } else {
            return; /* Parameter mismatch reported by the Simulink engine*/
        }
    #endif
  3. Доступ к параметрам диалогового окна в S-функции с помощью ssGetSFcnParam макрос.

    Задайте S как первый аргумент и относительное положение параметра в списке, введенном в диалоговом окне (0 является первой позицией) в качестве второго аргумента. The ssGetSFcnParam макрос возвращает указатель на mxArray содержащего параметр. Вы можете использовать ssGetDTypeIdFromMxArray для получения типа данных параметра. Также можно использовать ssGetSFcnParamDataType чтобы получить тип данных параметра путем определения индекса параметра.

    Для примера, в sfun_runtime1.c, следующая #define операторы в начале S-функции задают порядок трех параметров диалогового окна и получают доступ к их значениям в диалоговом окне блока.

    #define SIGNS_IDX 0
    #define SIGNS_PARAM(S) ssGetSFcnParam(S,SIGNS_IDX) /* First parameter */
    
    #define GAIN_IDX  1
    #define GAIN_PARAM(S) ssGetSFcnParam(S,GAIN_IDX) /* Second parameter */
    
    #define OUT_IDX   2
    #define OUT_PARAM(S) ssGetSFcnParam(S,OUT_IDX) /* Third parameter */

При выполнении симуляции необходимо задать параметры в поле S-Function Parameters диалогового окна Блок S-function Parameters в том же порядке, в котором вы определили их на шаге 1. Вы можете ввести любой действительный MATLAB® выражение как значение параметра, включая буквальные значения, имена переменных рабочей области, вызовы функции или арифметические выражения. Механизм Simulink оценивает выражение и передает его значение S-функции.

В качестве другого примера следующий код является частью S-функции драйвера устройства. Используются четыре входных параметра: BASE_ADDRESS_PRM, GAIN_RANGE_PRM, PROG_GAIN_PRM, и NUM_OF_CHANNELS_PRM. Код использует #define операторы в верхней части S-функции, чтобы связать конкретные входные параметры с именами параметров.

/* Input Parameters */
#define BASE_ADDRESS_PRM(S)     ssGetSFcnParam(S, 0)
#define GAIN_RANGE_PRM(S)       ssGetSFcnParam(S, 1)
#define PROG_GAIN_PRM(S)        ssGetSFcnParam(S, 2)
#define NUM_OF_CHANNELS_PRM(S)  ssGetSFcnParam(S, 3)

При выполнении симуляции введите четыре имени или значения переменных в поле параметры диалогового окна Блок S-function Parameters. Первый соответствует первому ожидаемому параметру, BASE_ADDRESS_PRM(S). Второй соответствует следующему ожидаемому параметру и так далее.

The mdlInitializeSizes функция содержит этот оператор.

ssSetNumSFcnParams(S, 4);

Настраиваемые параметры

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

Примечание

Параметры диалогового окна настраиваются по умолчанию. Тем не менее, это хорошая методика программирования, чтобы задать настраиваемость каждого параметра, даже тех, которые настраиваются. Если вы включите S-function upgrades needed диагностики симуляции, механизм Simulink выдает диагностику каждый раз, когда он встречается с S-функцией, которая не задает настраиваемость всех ее параметров.

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

Необязательный mdlProcessParameters метод коллбэка позволяет S-функции обрабатывать изменения настраиваемых параметров. Механизм вызывает этот метод только в том случае, если на предыдущем временном шаге произошли допустимые изменения параметра. Типичным использованием этого метода является выполнение расчетов, которые зависят только от значений параметров и, следовательно, должны вычисляться только при изменении значений параметров. Метод может кэшировать результаты расчетов параметров в рабочих векторах или, предпочтительно, в качестве параметров во время выполнения (см. Создание и обновление параметров выполнения S-функции).

Использование настраиваемых параметров в S-функции на C

В функции C S используйте макрос ssSetSFcnParamTunable в mdlInitializeSizes для определения настраиваемости каждого параметра диалогового окна S-функции. Приведенный ниже код взят из mdlInitializeSizes функцию в примере sfun_runtime1.c. Код сначала устанавливает количество параметров диалогового окна S-функции в три перед вызовом mdlCheckParameters. Если проверка параметров прошла, задается настраиваемость трех параметров диалогового окна S-функции.

 ssSetNumSFcnParams(S, 3); /* Three dialog box parameters*/

 #if defined(MATLAB_MEX_FILE)
    if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
        mdlCheckParameters(S);
        if (ssGetErrorStatus(S) != NULL) {
            return;
        }
    } else {
        return; /* Parameter mismatch reported by the Simulink engine*/
    }
 #endif

 ssSetSFcnParamTunable(S,GAIN_IDX,true);   /* Tunable */
 ssSetSFcnParamTunable(S,SIGNS_IDX,false); /* Not tunable */
 ssSetSFcnParamTunable(S,OUT_IDX,false);   /* Not tunable */

Примечание

S-функция mdlInitializeSizes стандартная программа вызывает mdlCheckParameters метод, чтобы убедиться, что начальные значения параметров действительны.

Параметры настройки во режиме external mode

Когда вы настраиваете параметры во время симуляции, механизм Simulink вызывает S-функцию mdlCheckParameters метод для проверки изменений, а затем S-функций 'mdlProcessParameters метод, чтобы дать S-функции шанс обработать параметры каким-либо образом. Двигатель также вызывает эти методы при запуске во режиме external mode, но он передает необработанные изменения в цель S-функции. Таким образом, если важно, чтобы ваш S-function обработал изменение параметра, вам нужно создать файл Target Language Compiler (TLC), который вводит S-функцию, включая ее код обработки параметров, в процессе генерации кода. Для получения информации о встраивании S-функций смотрите «Встраивание S-функций» в документации Simulink Coder™ Target Language Compiler.

См. также

Похожие темы