Main Content

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.

Version History

Introduced before R2006a