exponenta event banner

mdlProcessParameters

Обработка параметров S-функции C MEX

Необходимый

Нет

Языки

C, C++

Синтаксис

#define MDL_PROCESS_PARAMETERS
void mdlProcessParameters(SimStruct *S)

Аргументы

S

SimStruct представляет S-функциональный блок.

Описание

Это необязательная процедура, которую модуль Simulink ® вызывает послеmdlCheckParameters изменяет и проверяет параметры. Обработка выполняется в верхней части цикла моделирования, когда можно безопасно обработать измененные параметры. Эта функция действительна только для моделирования. S-функции C MEX должны включать метод в #if defined(MATLAB_MEX_FILE) заявление.

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

Пример

В этом примере обрабатывается параметр символьного вектора, mdlCheckParameters удостоверился, что имеет форму '+++' (где может быть любое количество '+' или '-' персонажи.

#define MDL_PROCESS_PARAMETERS   /* Change to #undef to remove function */
#if defined(MDL_PROCESS_PARAMETERS) && defined(MATLAB_MEX_FILE)
static void mdlProcessParameters(SimStruct *S)
  {
    int_T  i;
    char_T *plusMinusStr;
    int_T  nInputPorts = ssGetNumInputPorts(S);
    int_T  *iwork      = ssGetIWork(S);
    if ((plusMinusStr=(char_T*)malloc(nInputPorts+1)) == NULL) {
        ssSetErrorStatus(S,"Memory allocation error in mdlStart");
        return;
    }
    if (mxGetString(SIGNS_PARAM(S),plusMinusStr,nInputPorts+1) != 0) {
        free(plusMinusStr);
        ssSetErrorStatus(S,"mxGetString error in mdlStart");
        return;
    }
    for (i = 0; i < nInputPorts; i++) {
        iwork[i] = plusMinusStr[i] == '+'? 1: -1;
    }
    free(plusMinusStr);
      
  }
#endif /* MDL_PROCESS_PARAMETERS */

mdlProcessParameters вызывается из mdlStart для загрузки символьного вектора знаков перед началом цикла моделирования.

#define MDL_START
#if defined(MDL_START)
static void mdlStart(SimStruct *S)
{
    mdlProcessParameters(S);
}
#endif /* MDL_START */
Представлен до R2006a