SFunction Examples
Overview of Examples
To run an example:
In the MATLAB^{®} Command Window, enter
sfundemos
.The Sfunction example library opens.
Each block represents a category of Sfunction examples.
Doubleclick a category to display the examples that it includes. For example, click Cfiles.
Doubleclick a block to open and run the example that it represents.
It might be helpful to examine some sample Sfunctions as you read the next chapters. Code for the examples is stored in the following folder under the MATLAB root folder.
MATLAB code 

C, C++, and Fortran code 

Level2 MATLAB SFunction Examples
The
folder (open) contains many Level2 MATLAB Sfunctions. Consider starting off by looking at these
files.matlabroot
/toolbox/simulink/simdemos/simfeatures
Filename  Model Name  Description 

msfcn_dsc.m  msfcndemo_sfundsc1  Implement an Sfunction with an inherited sample time. 
msfcn_limintm.m  msfcndemo_limintm  Implement a continuous limited integrator where the output is bounded by lower and upper bounds and includes initial conditions. 
msfcn_multirate.m  msfcndemo_multirate  Implement a multirate system. 
msfcn_times_two.m  msfcndemo_timestwo  Implement an Sfunction that doubles its input. 
msfcn_unit_delay.m  msfcndemo_sfundsc2  Implement a unit delay. 
msfcn_varpulse.m  msfcndemo_varpulse  Implement a variable pulse width generator by calling
set_param from within a Level2 MATLAB Sfunction. Also
demonstrates how to use custom set and get methods for the block
SimState. 
msfcn_vs.m  msfcndemo_vsfunc  Implement a variable sample time block in which the first input is delayed by an amount of time determined by the second input. 
Level1 MATLAB SFunction Examples
The
folder (open) also contains many Level1 MATLAB Sfunctions, provided as reference for legacy models. Most
of these Level1 MATLAB Sfunctions do not
have associated example models.matlabroot
/toolbox/simulink/simdemos/simfeatures
Filename  Description 

csfunc.m  Define a continuous system in statespace format. 
dsfunc.m  Define a discrete system in statespace format. 
limintm.m  Implement a continuous limited integrator where the output is bounded by lower and upper bounds and includes initial conditions. 
mixedm.m  Implement a hybrid system consisting of a continuous integrator in series with a unit delay. 
sfun_varargm.m  Implement an Sfunction that shows how to use the MATLAB command varargin . 
vsfunc.m  Illustrate how to create a variable sample time block. This Sfunction implements a variable step delay in which the first input is delayed by an amount of time determined by the second input. 
C SFunction Examples
The
folder (open) contains examples of C MEX Sfunctions, many of which have a
MATLAB Sfunction counterpart. The C
MEX Sfunctions are listed in the following table.matlabroot
/toolbox/simulink/simdemos/simfeatures/src
Filename  Model Name  Description 

csfunc.c  sfcndemo_csfunc  Implement a continuous system. 
dlimintc.c  No model available  Implement a discretetime limited integrator. 
dsfunc.c  sfcndemo_dsfunc  Implement a discrete system. 
limintc.c  No model available  Implement a limited integrator. 
mixedm.c  sfcndemo_mixedm  Implement a hybrid dynamic system consisting of a continuous integrator (1/s) in series with a unit delay (1/z). 
mixedmex.c  sfcndemo_mixedmex  Implement a hybrid dynamic system with a single output and two inputs. 
slexQuantizeSFcn.c  sfcndemo_sfun_quantize  Implement a vectorized quantizer. Quantizes the input into steps
as specified by the quantization interval parameter,
q . 
sdotproduct.c  sfcndemo_sdotproduct  Compute dot product (multiplyaccumulate) of two real or complex vectors. 
sfbuilder_bususage.c  sfbuilder_bususage  Access SFunction Builder with a bus input and output. 
sfbuilder_movingAverage.c  sfbuilder_movingAverage  Implement simple time window moving average using Start and Terminate. 
sftable2.c  sfcndemo_sftable2  Implement a twodimensional table lookup. 
sfun_atol.c  sfcndemo_sfun_atol  Set different absolute tolerances for each continuous state. 
sfun_cplx.c  sfcndemo_cplx  Add complex data for an Sfunction with one input port and one parameter. 
sfun_directlook.c  No model available  Implement a direct 1D lookup. 
sfun_dtype_io.c  sfcndemo_dtype_io  Implement an Sfunction that uses Simulink^{®} data types for inputs and outputs. 
sfun_dtype_param.c  sfcndemo_dtype_param  Implement an Sfunction that uses Simulink data types for parameters. 
sfun_dynsize.c  sfcndemo_sfun_dynsize  Implements dynamicallysized outputs . 
sfun_errhdl.c  sfcndemo_sfun_errhdl  Check parameters using the mdlCheckParameters
Sfunction routine. 
sfun_fcncall.c  sfcndemo_sfun_fcncall  Execute functioncall subsystems on the first and second output elements. 
sfun_frmad.c  sfcndemo_frame  Implement a framebased A/D converter. 
sfun_frmda.c  sfcndemo_frame  Implement a framebased D/A converter. 
sfun_frmdft.c  sfcndemo_frame  Implement a multichannel framebased DiscreteFourier transformation (and its inverse). 
sfun_frmunbuff.c  sfcndemo_frame  Implement a framebased unbuffer block. 
sfun_multiport.c  sfcndemo_sfun_multiport  Configure multiple input and output ports. 
sfun_manswitch.c  No model available  Implement a manual switch. 
sfun_matadd.c  sfcndemo_matadd  Add matrices in an Sfunction with one input port, one output port, and one parameter. 
sfun_multirate.c  sfcndemo_sfun_multirate  Demonstrate how to specify portbased sample times. 
sfun_port_constant.c  sfcndemo_port_constant  Demonstrate how to specify constant portbased sample times. 
sfun_port_triggered.c  sfcndemo_port_triggered  Demonstrate how to use portbased sample times in a triggered subsystem. 
sfun_runtime1.c  sfcndemo_runtime  Implement runtime parameters for all tunable parameters. 
sfun_runtime2.c  sfcndemo_runtime  Register individual runtime parameters. 
sfun_runtime3.c  sfcndemo_runtime  Register dialog parameters as runtime parameters. 
sfun_runtime4.c  sfcndemo_runtime  Implement runtime parameters as a function of multiple dialog parameters. 
sfun_simstate.c  No model available  Demonstrate the Sfunction API for saving and restoring the SimState. 
sfun_zc.c  sfcndemo_sfun_zc  Demonstrate use of nonsampled zero crossings to implement
abs(u) . This Sfunction is designed to be
used with a variablestep solver. 
sfun_zc_sat.c  sfcndemo_sfun_zc_sat  Demonstrate zero crossings with saturation. 
sfun_zc_cstate_sat.c  sfcndemo_sfun_zc_cstate_sat  Implement a continuous integrator with saturation limits and zerocrossing detection. 
sfun_integrator_localsolver.c  sfcndemo_sfun_localsolver  Demonstrate a continuous integrator where the continuous states are solved using a separate local solver instead of that used by the model. 
sfun_angle_events.c  sfcndemo_angle_events  Implement a method for robust and efficient detection of a rotating body crossing specified angles. 
sfun_angle_events.c  No model available  Demonstrate angle detection and incorporate Stateflow^{®} to schedule function calls. 
sfunmem.c  sfcndemo_sfunmem  Implement a oneintegrationstep delay and hold memory function. 
simomex.c
 sfcndemo_simomex  Implement a singleinput, twooutput statespace dynamic system described by the statespace equations: dx/dt = Ax + Bu y = Cx + Du x is the state vector,
u is vector of inputs, and
y is the vector of outputs.

stspace.c
 sfcndemo_stspace  Implement a set of statespace equations. You can turn this into a new block by using the SFunction block and mask facility. This example MEX file performs the same function as the builtin StateSpace block. This is an example of a MEX file where the number of inputs, outputs, and states is dependent on the parameters passed in from the workspace. 
stvctf.c
 sfcndemo_stvctf  Implement a continuoustime transfer function whose transfer function polynomials are passed in via the input vector. This is useful for continuous time adaptive control applications. 
stvdtf.c  sfcndemo_stvdtf  Implement a discretetime transfer function whose transfer function polynomials are passed in via the input vector. This is useful for discretetime adaptive control applications. 
stvmgain.c  sfcndemo_stvmgain  Implement a timevarying matrix gain. 
table3.c  No model available  Implement a 3D lookup table. 
timestwo.c  sfcndemo_timestwo  Implement a C MEX Sfunction that doubles its input. 
vdlmintc.c  No model available  Implement a discretetime vectorized limited integrator. 
vdpmex.c  sfcndemo_vdpmex  Implement the Van der Pol equation. 
vlimintc.c
 No model available  Implement a vectorized limited integrator. 
vsfunc.c  sfcndemo_vsfunc  Illustrate how to create a variable sample time block. This block implements a variablestep delay in which the first input is delayed by an amount of time determined by the second input. 
sfun_pwm.c  sfcndemo_pwm  Illustrate how to create a controllable sample time block. 
sfun_d2c  sfcndemo_d2c  Illustrate how to convert a discrete input signal into a smooth continuous output signal 
Fortran SFunction Examples
The following table lists sample Fortran Sfunctions available in the
folder (open).matlabroot
/toolbox/simulink/simdemos/simfeatures/src
Filename  Model Name  Description 

sfun_atmos.c sfun_atmos_sub.F  sfcndemo_atmos  Calculate the 1976 standard atmosphere to 86 km using a Fortran subroutine. 
C++ SFunction Examples
The following table lists sample C++ Sfunctions available in the
folder (open).matlabroot
/toolbox/simulink/simdemos/simfeatures/src
Filename  Model Name  Description 

sfun_counter_cpp.cpp  sfcndemo_counter_cpp  Store a C++ object in the pointers vector
PWork . 
sfbuilder_permute.cpp  sfbuilder_permutation  Implement permutation by calling external C++ classes using Start and Terminate. 
sfbuilder_linfilt.cpp  sfbuilder_upsampling  Implement linear filtering with C++ STL algorithms for the upsampling of a sign wave. 
Organizing SFunction in a Project
The following example shows how to arrange Sfunction artifacts into a project. This project can be shared with others as a zip archive or as a MATLAB toolbox.
Filename  Description 

slexBlocksetDesignerExample  Organize Sfunction artifacts into a single project using Blockset Designer. 
See Also
Level2 MATLAB SFunction  SFunction Builder  SFunction  MATLAB Function