mdlCheckParameters

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

Необходимый

Нет

Языки

C, C++

Синтаксис

#define MDL_CHECK_PARAMETERS
void mdlCheckParameters(SimStruct *S)

Аргументы

S

SimStruct, представляющий Блок s-function.

Описание

Проверяет новые установки параметров каждый раз, когда параметры изменяются или переоценены во время моделирования. Если у вас есть Simulink® Coder™ для S-функций MEX C, этот метод только допустим для моделирования и должен быть заключен в оператор #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

Была ли эта тема полезной?