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 метод, доступный только для MATLAB® Файл MEX. Если S-функция не встраивается, Simulink Coder не может использовать этот метод, приводящий к ссылке или ошибкам времени выполнения.

Пример

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

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