Products & Services Solutions Academia Support User Community Company

Learn more about Simulink   

S-Function Examples

Overview of Examples

To run an example:

  1. Enter sfundemos at the MATLAB command prompt.

    The S-function demo library opens.

    Each block represents a category of S-function examples.

  2. Double-click a category to display the examples that it includes.

  3. Double-click a block to open and run the example that it represents.

It might be helpful to examine some sample S-functions as you read the next chapters. Code for the examples is stored in the following subdirectories under the MATLAB root directory.

M-files

toolbox/simulink/simdemos/simfeatures

C, C++, and Fortran

toolbox/simulink/simdemos/simfeatures/src

Level-2 M-File S-Function Examples

The matlabroot/toolbox/simulink/simdemos/simfeatures directory contains many Level-2 M-file S-functions. Consider starting off by looking at these files.

FilenameModel NameDescription
msfcn_dsc.mmsfcndemo_sfundsc1.mdlImplement an S-function with an inherited sample time.
msfcn_limintm.mmsfcndemo_limintm.mdlImplement a continuous limited integrator where the output is bounded by lower and upper bounds and includes initial conditions.
msfcn_multirate.mmsfcndemo_multirate.mdlImplement a multirate system.
msfcn_times_two.mmsfcndemo_timestwo.mdlImplement an S-function that doubles its input.
msfcn_unit_delay.mmsfcndemo_sfundsc2.mdlImplement a unit delay.
msfcn_varpulse.mmsfcndemo_varpulse.mdlImplement a variable pulse width generator by calling set_param from within a Level-2 M-file S-function. Also demonstrates how to use custom set and get methods for the block SimState.
msfcn_vs.mmsfcndemo_vsfunc.mdlImplement a variable sample time block in which the first input is delayed by an amount of time determined by the second input.

Level-1 M-File S-Function Examples

The matlabroot/toolbox/simulink/simdemos/simfeatures directory also contains many Level-1 M-file S-functions, provided as reference for legacy models. Most of these Level-1 M-file S-functions do not have associated demo models.

Filename

Description

csfunc.m

Define a continuous system in state-space format.

dsfunc.m

Define a discrete system in state-space 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 S-function that shows how to use the MATLAB command varargin.

simom.m

Implement a system in state-space format with internal A, B, C, and D matrices, using the equations

dx/dt = Ax + By
y = Cx + Du

where x is the state vector, u is the input vector, and y is the output vector. The A, B, C, and D matrices are embedded in the M-file S-function.

simom2.m

Implement a system in state-space format with external A, B, C, and D matrices. The state-space structure is the same as in simom.m, but the A, B, C, and D matrices are provided externally as parameters to this S-function.

vdlmintm.m

Implement a discrete limited integrator. This example is identical to vlimintm.m, except that the limited integrator is discrete.

vdpm.m

Implement the Van der Pol equation (similar to the demo model, vdp).

vlimintm.m

Implement a continuous limited integrator. This S-function illustrates how to build an S-function that can accommodate a dynamic input and state width.

vsfunc.m

Illustrate how to create a variable sample time block. This S-function implements a variable step delay in which the first input is delayed by an amount of time determined by the second input.

C S-Function Examples

The matlabroot/toolbox/simulink/simdemos/simfeatures/src directory contains examples of C MEX S-functions, many of which have an M-file S-function counterpart. The C MEX S-functions are listed in the following table.

Filename

Model Name

Description

barplot.c

sfcndemo_barplot.mdl

Access Simulink signals without using the standard block inputs.

csfunc.c

sfcndemo_csfunc.mdl

Implement a continuous system.

dlimintc.c

No model available

Implement a discrete-time limited integrator.

dsfunc.c

sfcndemo_dsfunc.mdl

Implement a discrete system.

limintc.c

No model available

Implement a limited integrator.

mixedm.c

sfcndemo_mixedm.mdl

Implement a hybrid dynamic system consisting of a continuous integrator (1/s) in series with a unit delay (1/z).

mixedmex.c

sfcndemo_mixedmex.mdl

Implement a hybrid dynamic system with a single output and two inputs.

quantize.c

sfcndemo_sfun_quantize.mdl

Implement a vectorized quantizer. Quantizes the input into steps as specified by the quantization interval parameter, q.

sdotproduct.c

sfcndemo_sdotproduct.mdl

Compute dot product (multiply-accumulate) of two real or complex vectors.

sfbuilder_bususage.c

sfbuilder_bususage.mdl

Access S-Function Builder with a bus input and output.

sftable2.c

No model available

Implement a two-dimensional table lookup.

sfun_atol.c

sfcndemo_sfun_atol.mdl

Set different absolute tolerances for each continuous state.

sfun_cplx.c

sfcndemo_cplx.mdl

Add complex data for an S-function with one input port and one parameter.

sfun_directlook.c

No model available

Implement a direct 1-D lookup.

sfun_dtype_io.c

sfcndemo_dtype_io.mdl

Implement an S-function that uses Simulink data types for inputs and outputs.

sfun_dtype_param.c

sfcndemo_dtype_param.mdl

Implement an S-function that uses Simulink data types for parameters.

sfun_dynsize.c

sfcndemo_sfun_dynsize.mdl

Implements dynamically-sized outputs .

sfun_errhdl.c

sfcndemo_sfun_errhdl.mdl

Check parameters using the mdlCheckParameters S-function routine.

sfun_fcncall.c

sfcndemo_sfun_fcncall.mdl

Execute function-call subsystems on the first and second output elements.

sfun_frmad.c

sfcndemo_frame.mdl

Implement a frame-based A/D converter.

sfun_frmda.c

sfcndemo_frame.mdl

Implement a frame-based D/A converter.

sfun_frmdft.c

sfcndemo_frame.mdl

Implement a multichannel frame-based Discrete-Fourier transformation (and its inverse).

sfun_frmunbuff.c

sfcndemo_frame.mdl

Implement a frame-based unbuffer block.

sfun_multiport.c

sfcndemo_sfun_multiport.mdl

Configure multiple input and output ports.

sfun_manswitch.c

No model available

Implement a manual switch.

sfun_matadd.c

sfcndemo_matadd.mdl

Add matrices in an S-function with one input port, one output port, and one parameter.

sfun_multirate.c

sfcndemo_sfun_multirate.mdl

Demonstrate how to specify port-based sample times.

sfun_port_constant.csfcndemo_port_constant.mdlDemonstrate how to specify constant port-based sample times.
sfun_port_triggered.csfcndemo_port_triggered.mdlDemonstrate how to use port-based sample times in a triggered subsystem.

sfun_runtime1.c

sfcndemo_runtime.mdl

Implement run-time parameters for all tunable parameters.

sfun_runtime2.c

sfcndemo_runtime.mdl

Register individual run-time parameters.

sfun_runtime3.c

sfcndemo_runtime.mdlRegister dialog parameters as run-time parameters.

sfun_runtime4.c

sfcndemo_runtime.mdlImplement run-time parameters as a function of multiple dialog parameters.

sfun_simstate.c

sfcndemo_sfun_simstate.mdlDemonstrate the S-function API for saving and restoring the SimState.

sfun_zc.c

sfcndemo_sfun_simstate.mdl

Demonstrate use of nonsampled zero crossings to implement abs(u). This S-function is designed to be used with a variable-step solver.

sfun_zc_sat.c

sfcndemo_sfun_zc_sat.mdl

Demonstrate zero crossings with saturation.

sfunmem.c

sfcndemo_sfunmem.mdl

Implement a one-integration-step delay and hold memory function.

simomex.c

sfcndemo_simomex.mdl

Implement a single-input, two-output state-space dynamic system described by the state-space equations:

dx/dt = Ax + Bu
y = Cx + Du

where x is the state vector, u is vector of inputs, and y is the vector of outputs.

stspace.c

sfcndemo_stspace.mdl

Implement a set of state-space equations. You can turn this into a new block by using the S-Function block and mask facility. This example MEX-file performs the same function as the built-in State-Space 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.mdl

Implement a continuous-time 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.mdl

Implement a discrete-time transfer function whose transfer function polynomials are passed in via the input vector. This is useful for discrete-time adaptive control applications.

stvmgain.c

sfcndemo_stvmgain.mdl

Implement a time-varying matrix gain.

table3.c

No model available

Implement a 3-D lookup table.

timestwo.c

sfcndemo_timestwo.mdl

Implement a C MEX S-function that doubles its input.

vdlmintc.c

No model available

Implement a discrete-time vectorized limited integrator.

vdpmex.c

sfcndemo_vdpmex.mdl

Implement the Van der Pol equation.

vlimintc.c

No model available

Implement a vectorized limited integrator.

vsfunc.c

sfcndemo_vsfunc.mdl

Illustrate how to create a variable sample time block. This block implements a variable-step delay in which the first input is delayed by an amount of time determined by the second input.

Fortran S-Function Examples

The following table lists sample Fortran S-functions available in the matlabroot/toolbox/simulink/simdemos/simfeatures/src directory.

Filename

Model Name

Description

sfun_timestwo_for.F

sfcndemo_timestwo_for.mdl

Implement a Level-1 Fortran S-function that represents the timestwo.c S-function.

sfun_atmos.c
sfun_atmos_sub.F

sfcndemo_atmos.mdl

Calculate the 1976 standard atmosphere to 86 km using a Fortran subroutine.

simomexf.F

No model available

Implement a Level-1 Fortran S-function that represents the simomex.c S-function.

vdpmexf.F

No model available

Implement a Level-1 Fortran S-function that represents the vdpmex.c S-function.

C++ S-Function Examples

The following table lists sample C++ S-functions available in the matlabroot/toolbox/simulink/simdemos/simfeatures/src directory.

Filename

Model Name

Description

sfun_counter_cpp.cpp

sfcndemo_counter_cpp.mdl

Store a C++ object in the pointers vector PWork.

  


Related Products & Applications

Learn more about Simulink through this collection of videos, articles, technical literature and the Getting Started with Simulink Guide.

 © 1984-2009- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS