mdlCheckParameters

Проверяйте валидность параметров S-функции MEX на C

Необходимый

Нет

Языки

C, C++

Синтаксис

#define MDL_CHECK_PARAMETERS
void mdlCheckParameters(SimStruct *S)

Аргументы

S

SimStruct, представляющий блок S-Function.

Описание

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

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

Примечание

Вы не можете получить доступ к работе, состоянию, входу, выходу и другим векторам в этой стандартной программе. Используйте эту стандартную программу только для проверки параметров. Дополнительная обработка параметров должна осуществляться в mdlProcessParameters.

Пример

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

Примечание

Начиная с mdlCheckParameters является необязательным методом, #define MDL_CHECK_PARAMETERS оператор предшествует функции. Кроме того, поскольку продукт Simulink Coder не поддерживает генерацию кода для mdlCheckParameters, функция упакована в #if defined(MATLAB_MEX_FILE) оператор.

#define PARAM1(S) ssGetSFcnParam(S,0)
#define MDL_CHECK_PARAMETERS   /* Change to #undef to remove function */
#if defined(MDL_CHECK_PARAMETERS) && defined(MATLAB_MEX_FILE)
static void mdlCheckParameters(SimStruct *S)
{
  if (mxGetNumberOfElements(PARAM1(S)) != 1) {
    ssSetErrorStatus(S,"Parameter to S-function must be a scalar");
    return;
  } else if (mxGetPr(PARAM1(S))[0] < 0) {
    ssSetErrorStatus(S, "Parameter to S-function must be nonnegative");
    return;
  }
}
#endif /* MDL_CHECK_PARAMETERS */

В дополнение к предыдущей стандартной программе необходимо добавить вызов к этому методу из mdlInitializeSizes проверить параметры во время инициализации, потому что mdlCheckParameters вызывается только во время выполнения симуляции. Для этого после установки количества параметров, которые вы ожидаете в своей S-функции при помощи ssSetNumSFcnParams, используйте этот код в mdlInitializeSizes:

static void mdlInitializeSizes(SimStruct *S)
{
  ssSetNumSFcnParams(S, 1);  /* Number of expected parameters */ 
#if defined(MATLAB_MEX_FILE)
   if(ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S) {
     mdlCheckParameters(S);
     if(ssGetErrorStatus(S) != NULL) return;
   } else {
     return; /* The Simulink engine reports a mismatch error. */
   }
#endif
 ...  
}

Примечание

Макрос ssGetSFcnParamsCount возвращает фактическое количество параметров, введенных в диалоговом окне.

См. sfun_errhdl.c например, пример.

Представлено до R2006a