SFunction Examples
These examples show you how to work with a variety of Sfunctions or programs that use Sfunctions, including C/C++ Sfunctions, Fortran Sfunctions, Sfunction Builder, Level 2 MATLAB^{®} Sfunctions, and Blockset Designer. Each section explains how to open the files and what is in them. These are good places to continue to develop an understanding of Sfunctions after learning the basics. These do not represent all the examples available for Sfunctions, but a relevant subsection.
Access SFunction Examples
Most of the Sfunction examples are run through sfundemos
.
This example library contains Sfunction models and is grouped by coding type, such
as C Sfunctions or C++ Sfunctions.
To run an example from sfundemos
:
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. For more
on Level2 MATLAB Sfunctions, see Write Level2 MATLAB SFunctions.matlabroot
/toolbox/simulink/sfuntemplates
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 the
set_param function within a Level2
MATLAB Sfunction. Also demonstrates how to use custom set
and get methods for the block operating point. 
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. 
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. For more on C Sfunctions, see C/C++ SFunction Basics and
Build SFunctions Automatically Using SFunction Builder.matlabroot
/toolbox/simulink/sfuntemplates/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_mode.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_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 
sfun_pulse_delay.c  sfcndemo_vco  Illustrate how to implement an algorithm to efficiently delay a discrete valued input signal by a variable amount using variable sample time. 
Fortran SFunction Examples
The following table lists sample Fortran^{®} Sfunctions available in the
folder (open). For more on Fortran Sfunctions, see Create Level2 Fortran SFunctions.matlabroot
/toolbox/simulink/sfuntemplates/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). For more on C++ Sfunctions, see C/C++ SFunction Basics and
Build SFunctions Automatically Using SFunction Builder.matlabroot
/toolbox/simulink/sfuntemplates/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 is accomplished using the Blockset Designer feature. For more on Blockset Designer, see Create a Blockset Project.
Filename  Description 

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