mdlUpdate
Update a block's states
Required
No
Languages
C, C++
Syntax
#define MDL_UPDATE
void mdlUpdate(SimStruct *S, int_T tid)
Arguments
S
SimStruct representing an S-Function block.
tid
Task ID.
Description
The Simulink® engine invokes this optional method at each major simulation time step. The method should compute the S-function's states at the current time step and store the states in the S-function's state vector. The method can also perform any other tasks that the S-function needs to perform at each major time step.
Use this code if your S-function has one or more discrete states or does not have direct feedthrough.
If your C MEX S-function needs to have its mdlUpdate
routine called
and it does not satisfy either of the above two conditions, specify that it has a discrete
state, using the ssSetNumDiscStates
macro in the
mdlInitializeSizes
function.
In C MEX S-functions, the tid
(task ID) argument specifies the task
running when the mdlOutputs
routine is invoked. You can use this argument
in the mdlUpdate
routine of a multirate S-Function block to encapsulate
task-specific blocks of code (see Multirate S-Function Blocks).
Use the UNUSED_ARG
macro if your C MEX S-function does not contain
task-specific blocks of code to indicate that the tid
input argument is
required but not used in the body of the callback. To do this, insert the line
UNUSED_ARG(tid)
after the declarations in mdlUpdate
.
Note
If you have Simulink
Coder™, when generating code for a noninlined C MEX S-function that contains this
method, make sure the method is not wrapped in a #if
defined(MATLAB_MEX_FILE)
statement. For example:
#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
statement makes the mdlUpdate
method
available only to a MATLAB® MEX file. If the S-function is not inlined, Simulink
Coder cannot use this method, resulting in link or run-time errors.
Examples
For an example that uses this function to update discrete states, see dsfunc.c
. For an example
that uses this function to update the transfer function coefficients of a time-varying
continuous transfer function, see stvctf.c
.
See Also
Version History
Introduced before R2006a