exponenta event banner

mdlUpdate

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

Необходимый

Нет

Языки

C, C++

Синтаксис

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

Аргументы

S

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

tid

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

Описание

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

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

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

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

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

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

UNUSED_ARG(tid)

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

Примечание

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