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