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