Обновить состояния блока
Нет
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.