mdlUpdate

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

Необходимый

Нет

Языки

C, C++

Синтаксис

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

Аргументы

S

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

tid

Идентификатор задачи.

Описание

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

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

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

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

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

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

UNUSED_ARG(tid)

после заявлений в mdlUpdate.

Примечание

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

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

Пример

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

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