21
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

MY S-Function prest.ppt

Embed Size (px)

DESCRIPTION

S-function utilisation for co-simulation between modelsim and simulink matlab.

Citation preview

Page 1: MY S-Function prest.ppt

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

Page 2: MY S-Function prest.ppt

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

Page 3: MY S-Function prest.ppt

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

Page 4: MY S-Function prest.ppt

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

Page 5: MY S-Function prest.ppt

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

Page 6: MY S-Function prest.ppt

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

Page 7: MY S-Function prest.ppt

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

Page 8: MY S-Function prest.ppt

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…

Page 9: MY S-Function prest.ppt

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

slicer.c´test_slicer.exe

//test_slicer.cmain(){ for(){ slicer(); }}

//slicer.cslicer(){ return;}

t

Page 10: MY S-Function prest.ppt

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

Page 11: MY S-Function prest.ppt

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

Page 12: MY S-Function prest.ppt

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;}

Page 13: MY S-Function prest.ppt

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)

Page 14: MY S-Function prest.ppt

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)

Page 15: MY S-Function prest.ppt

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”

Page 16: MY S-Function prest.ppt

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

Page 17: MY S-Function prest.ppt

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

Page 18: MY S-Function prest.ppt

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

Page 19: MY S-Function prest.ppt

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

Page 20: MY S-Function prest.ppt

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

Page 21: MY S-Function prest.ppt

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