Upload
infodotz
View
60
Download
1
Embed Size (px)
DESCRIPTION
S-function utilisation for co-simulation between modelsim and simulink matlab.
Citation preview
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional
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
What S-Function Do?• 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• 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• Initialization – port widths, data types, sample time, memories allocation, execution order, evaluates block parameters• Simulation 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-functionM-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 Output of s-function x0 [ initial value vector of states] str not used [ ]
ts [sample time offset time]
M-file s-function templateExamples: <matlabroot>/toolbox/simulink/blocks/msfuntmpl.mSfundemos: >>sfundemos >> is matlab workspace prompt
<matlabroot>/toolbox/simulink/simdemosUser Manaul:
Advantage: Easy to write and compatibility with matlab toolbox functions
http://www.mathworks.com/access/helpdesk/help/pdf_doc/simulink/sfunction.pdf
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
S-function Builder
C-code S-functionCSimulink
M-code S-function
Caution: interpreted, not compiledMATLABSimulink
>> sim(‘mymodel’)SimulinkMATLAB
MEX
ActiveX/COM & DDECMATLAB
Engine or COM[x,y,t] = sim(‘mymodel’,u0)
SimulinkC
MATLAB Engine
ActiveX/COM & DDE
MATLAB Compiler & runtime
MATLABC
How?Call…From…
Structure of code to be imported: `main() and
slicer.c´test_slicer.exe
//test_slicer.cmain(){ for(){ slicer(); }}
//slicer.cslicer(){ return;}
t
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional
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 //wrap_slicer.cmdlOutputs(S){ slicer();}
//slicer.c//definition// of//slicer()
UNIX is a registered trademark of The Open Group
t
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional
mdlInitializeSizes()
mdlInitializeSampleTimes()
mdlOutputs()
mdlTerminate()
yt = f(t, ut)y = outputs, t = timeu = inputs
Done?n
y
The “S-function” DLL contains several methods
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...
– Computer science: “Re-entrant persistent storage”– Object-oriented: “property”– C++: “member variable”
• Different from…– static variables in C are persistent but shared, not
re-entrant– If a leaf contains static data it can only be
instantiated once
int always_one(void){ int y = 0; y = y + 1; return y;}
int up(void){ static int y = 0; y = y + 1; return y;}
int counter(int *z){ *z = *z + 1; return *z;}
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
statesxd, w
input u 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()
2) General structure or advanced needs – use full S-function– Leaf with output and update functions intermixed Use “work vectors” , update them in mdlOutputs()
yt = f(t, xt, ut), xt+ t = g(t, xt, ut)y = outputs, t = time, x = states, u = inputs
[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()
mdlTerminate()
xt+t = g(t, xt, ut)Done?
n
y
mdlUpdate()
yt = f(t, xt, ut)y = outputs, t = timex = states, u = inputs
“Division of labor is preferred”
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional
2) General leaf structure
mdlInitializeSizes()
mdlInitializeSampleTimes()
mdlOutputs()
mdlTerminate()
yt = f(t, wt, ut)wt+t = g(t, wt, ut)y = outputst = timew = work vecu = inputs
Done?n
y
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’, OK!
• 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
• 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*
• 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%
Ver 2.2.0Version 6Version 6.0
Ver 2.5.0Version 7Ver 7.1 Recommended
Real Time Workshop
MATLAB
Microsoft Visual C/C++
Windows
XPor
2000
98or2000
*MATLAB TECH NOTE 1601
F. Nagi Dep. Of Mech Eng. Universiti Tenaga Nasional
s-function use with Real Time WorkshopFor 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 compilationii) myadd - add matrix internally using array indexes,
MATLAB7iii) disc_stsp7 – Discrete state updates internally, MATLAB7iv) fnmat – use pointers and array index for internal and
external codes, MATLAB7v) 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