Обновите состояния блока
Нет
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
c. Для примера, который использует эту функцию, чтобы обновить коэффициенты передаточной функции изменяющейся во времени непрерывной передаточной функции, смотрите stvctf.c
c.