Anda di halaman 1dari 21

What is S-Function?

S-Functions is computer language description of Simulink block If written in MATLAB programming environment it is called M-file s-function If written in C/C++ programming environment it is called C Mex s-function

Allows you to add your own code to simulink model or environment Code can be written for continuous, discrete or hybrid system Can be use with Real Time Workshop

What S-Function Do?

Real Time workshop generates code for Simulink/s-function to run in real time ..faster

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

How S-function Works


Mathematically simulink block consist of a set of inputs u, a set of states x, and set of outputs y

Simulation Stages
Simulation

Initialization

port widths, data types, sample time, memories allocation, execution order, evaluates block parameters loop Execute block determined during initialization, computes/updates blocks states, derivatives and outputs during a sample time
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

M-file S-function
M-files s-function is a matlab function [sys,x0,str,ts] = f(t,x,u,flag,p1,p2,) Inputs f s-function name t is the current time x is the state vector flag indicates the task to be performed p1, p2 are block parameter to be changed externally
Outputs sys x0 str ts Output of s-function [ initial value vector of states] not used [ ] [sample time offset time]

M-file s-function template Examples: <matlabroot>/toolbox/simulink/blocks/msfuntmpl.m Sfundemos: >>sfundemos >> is matlab workspace prompt <matlabroot>/toolbox/simulink/simdemos User Manaul:
http://www.mathworks.com/access/helpdesk/help/pdf_doc/simulink/sfunction.pdf

Advantage: Easy to write and compatibility with matlab toolbox functions


F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

C MEX s-function

Mex s-function are written in C or C++, Fortran, Adao C Mex files can modify data structure of Simulink SimStruct which is used for housekeeping Can handle multiple data types and matrix signals Used with Real Time Workshop , wrapper s-function
How to build C Mex s-function Simulink specific naming convention and housekeeping (SimStruct) standards should be followed by C Mex files Template and examples in <matlabroot> / simulink /src sfuntmpl_basic.c >> mex setup should be run a priori to setup the compiler C Mex files are compiled in MATLAB with mex command Matlab Executable (mex) creates xxx.dll, dynamically loadable file excutable for simulink S- function Builder
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

S-Function Builder Easiest way to embed your C code in Simulink model S-function builder is a Simulink block Act as calling program (wrapper) to C source code from Simulink providing necessary interfacing options S-function builder generates its own: builder-name.c Have standard code representation

similar to sfuntmpl_basic.c builder-name_wrapper.c Customized interfacing options entered in builder builder-name.tlc Permit code generated to run in accelerated and real time Workshop builder-name.dll Simulink executable dll file

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

Importing C code into Simulink for Signal Processing Applications


From C Call MATLAB How?
MATLAB Engine ActiveX/COM & DDE MATLAB Compiler & runtime Engine or COM [x,y,t] = sim(mymodel,u0) MEX ActiveX/COM & DDE

C MATLAB MATLAB Simulink Simulink

Simulink C Simulink MATLAB C


F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

>> sim(mymodel)
M-code S-function Caution: interpreted, not compiled

S-function Builder C-code S-function

Structure of code to be imported: `main() and slicer.c


test_slicer.exe
//test_slicer.c main() { for(){ slicer(); } } //slicer.c slicer() { return; } t

Structure of code after import: `wrapped slicer.c


Call your `slicer.c code from a wrapper to interface with Simulink Compile both and link .dll Simulink calls the DLL using several functions (methods)
wrap_slicer.dll
Simulink t
//wrap_slicer.c mdlOutputs(S) { slicer(); }

//slicer.c //definition // of //slicer()

UNIX is a registered trademark of The Open Group

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

The S-function DLL contains several methods


mdlInitializeSizes()

mdlInitializeSampleTimes()

mdlOutputs()

yt = f(t, ut) y = outputs, t = time u = inputs

Done? y

mdlTerminate()

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

What about leaf functions with states?


States preserved across time steps Independent set of states per instance FIR, IIR, coders, decoders Also known as... int up(void) { Computer science: Re-entrant persistent storage static int Object-oriented: property y = y + 1; return y; C++: member variable }
int always_one(void) { int y = 0; y = y + 1; return y; }

y = 0;

Different from static variables in C are persistent but shared, If a leaf contains static data it can only be instantiated once

int counter(int *z) { *z = *z + 1; return *z; } not re-entrant

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

Two main types of state available in Simulink


Discrete states, xd Read-only (const) in the mdlOutput() method Available in S-Function Builder block and full S-function Work vectors, w Read-write in mdlOutput() Presently only accessible from full S-function API

input u

states xd, w

output y=f(t,xd,w,u)

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

Approach depends on code structure


1) Output-update structure use S-function Builder block Leaf with separate output and update functions Use discrete states, update them in mdlUpdate()

yt = f(t, xt, ut), xt+ t = g(t, xt, ut) y = outputs, t = time, x = states, u = inputs
2) General structure or advanced needs use full S-function Leaf with output and update functions intermixed Use work vectors , update them in mdlOutputs()

[xt+ t , yt]= f(t, xt, ut)

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

1) Output-update function.c structure


mdlInitializeSizes() mdlInitializeSampleTimes()

mdlOutputs() mdlUpdate()
n Done? y

yt = f(t, xt, ut) y = outputs, t = time x = states, u = inputs


Division of labor is preferred

xt+t = g(t, xt, ut)

mdlTerminate()

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

2) General leaf structure


mdlInitializeSizes()

mdlInitializeSampleTimes()

mdlOutputs()

Done?
y

yt = f(t, wt, ut) wt+t = g(t, wt, ut) y = outputs t = time w = work vec u = inputs

mdlTerminate()

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

Demonstrations
Examples of S-function builder
S-function Builder block features Slicer: a memoryless block IIR Filter: a block with memory Output-update structure S-function Builder A Discrete state Output in mdlOutputs()and update in mdlUpdate() General structure Full S-function 1-element Work vector Output and update in mdlOutputs() Using the sample code as a resource Tour of the S-function reference material

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

Debugging s-function.dll in MSVC


Open sfunc_name.dll file built by S-builder for e.g. simfunc_name.mdl in MSVC

Setup breakpoint in sfunction.c using Right Mouse button Click Right mouse button on sfunc_name.dll open setting dialouge box, select

debug tab, under executable field enter C:\MATLAB6p5\bin\win32\matlab.exe,


load sfunction.c in MSVC on the desired line enabled Choose build option from main menu and select start debug and Go! MATLAB will start under debugging mode

OK!

Open simfunc_name.mdl for degguer MATLAB


Run the file Watch the stop sign in MSVC sfunction.c file, the program should stop with arrow Select view from main menu and select debug Windows memory, variable,

registers
use F11 or steps increment icons from the MSVC toolbar to step to next line in sfunction.c

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

S-function compilation issue*


Microsoft Visual MATLAB C/C++ Ver 7.1 Version 7 Recommended Version 6.0 Version 6 Real Time Windows Workshop Ver 2.5.0
XP or 2000 98 or 2000

Ver 2.2.0

*MATLAB TECH NOTE 1601

Always set MATLAB Command Window directory to the directory where source files are stored >> mex setup % At matlab startup % >> rtwintgt install % At startup % >> mex g sfun_name.c % s-function debugging%
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

s-function use with Real Time Workshop For Real Time Window Target Real time Workshop (RTW) generates portable , customize standalone C/C++ code of simulink model which operates in Real time Target Language Compiler (TLC) transform Simulink Block into C/C++ Simulink external mode enables communication between simulink and external process Real Time Window Target (RTWT) is a component of RTW RTWT helps to connect simulink model with external actuators and sensor for control and monitoring of Physical process
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional

s-function examples using s-function builder and MSVC 6.0 Debugging


slicer.c and iir_general.c Webinar http://www.mathworks.com/cmspro/req4858.html <%matlabroot>/extern/examples/mex/ <%matlabroot>/toolbox/simulink/blocks/ i) fnpointer - use pointers to pass simulink matrix data to and from external source in C. MATLAB7, RTWT compilation ii) myadd - add matrix internally using array indexes, MATLAB7 iii) disc_stsp7 Discrete state updates internally, MATLAB7 iv) fnmat use pointers and array index for internal and external codes, MATLAB7 v) ludlub Linear system equation solver, using C source code from Numerical Recipes in C ludcmp.c & lubksb.c, MATLAB 6.5 vi) mylms Least mean square , MATLAB7, RTWT

F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional