mdlUpdate

Обновите состояния блока

Необходимый

Нет

Языки

C, C++

Синтаксис

#define MDL_UPDATE
void mdlUpdate(SimStruct *S, int_T tid)

Аргументы

S

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

tid

ID задачи.

Описание

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

Используйте этот код, если ваша S-функция имеет одно или несколько дискретных состояний или не имеет прямого сквозного соединения.

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

Если вашей S-функции MEX C нужно было вызвать ее стандартную программу mdlUpdate, и она не удовлетворяет ни одно из вышеупомянутых двух условий, указывает, что имеет дискретное состояние, с помощью макроса ssSetNumDiscStates в функции mdlInitializeSizes.

В S-функциях MEX C tid (ID задачи) аргумент задает выполнение задачи, когда стандартная программа mdlOutputs вызывается. Можно использовать этот аргумент в стандартной программе mdlUpdate многоскоростного Блока s-function, чтобы инкапсулировать специфичные для задачи блоки кода (см. Многоскоростные Блоки s-function).

Используйте макрос UNUSED_ARG, если ваша S-функция MEX C не содержит специфичные для задачи блоки кода, чтобы указать, что входной параметр tid требуется, но не используется в теле коллбэка. Для этого вставьте строку

UNUSED_ARG(tid)

после объявлений в mdlUpdate.

Примечание

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

#define MDL_UPDATE 
#if defined(MDL_UPDATE) && defined(MATLAB_MEX_FILE) 
static void mdlUpdate(SimStruct *S, int_T tid) 
{ 
   /* Add mdlUpdate code here *
} 
#endif 

Оператор define делает метод mdlUpdate доступным только для файла MEX MATLAB®. Если S-функция не встраивается, Simulink Coder не может использовать этот метод, приводящий к ссылке или ошибкам времени выполнения.

Пример

Для примера, который использует эту функцию, чтобы обновить дискретные состояния, смотрите dsfunc.c. Для примера, который использует эту функцию, чтобы обновить коэффициенты передаточной функции изменяющейся во времени непрерывной передаточной функции, смотрите stvctf.c.

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