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

О диалоговых параметрах

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

Примечание

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

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

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

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

  2. В mdlInitializeSizes функция, используйте 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, первое положение) в качестве второго аргумента. 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-параметров-функции диалогового окна S-Function Block 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-параметров-функции диалогового окна S-Function Block Parameters. Первое соответствует первому ожидаемому параметру, BASE_ADDRESS_PRM(S). Второе соответствует следующему ожидаемому параметру и так далее.

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

ssSetNumSFcnParams(S, 4);

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

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

Примечание

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

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

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

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

В S-функции C используйте макрос 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-function mdlCheckParameters метод, чтобы подтвердить изменения и затем mdlProcessParameters S-функций метод, чтобы дать S-функции шанс обработать параметры в некотором роде. Механизм также вызывает эти методы при выполнении в режиме external mode, но это передает необработанные изменения в цели S-функции. Таким образом, если важно, чтобы ваш параметр процесса S-функции изменился, необходимо создать файл Компилятора выходного языка (TLC), который встраивает S-функцию, включая ее код обработки параметра, во время процесса генерации кода. Для получения информации о встраивании S-функций см. “S-функции Встраивания” в документации Компилятора Выходного языка Simulink Coder™.

Смотрите также

Похожие темы