Sunteți pe pagina 1din 46

5892 Training

MATLABSFunctionfor
DynamicSystemSimulation
8Jun16
1

by Dr. Chao-Chung Peng

Simulink SFunction

5892 Training

WherecanwegetthemfileofSfuntion?

C:\ProgramFiles\MATLAB\R2009b\toolbox\simulink\blocks
sfuntmpl.m
function [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.
%
%ThegeneralformofanMFileSfunctionsyntaxis:
%[SYS,X0,STR,TS,SIMSTATECOMPLIANCE]=SFUNC(T,X,U,FLAG,P1,...,Pn)
%
%WhatisreturnedbySFUNCatagivenpointintime,T,dependsonthe
%valueoftheFLAG,thecurrentstatevector,X,andthecurrent
%inputvector,U.

Firstly,pleasecopythesfuntmpl.m filetoyourfolder!!

byDr.ChaoChungPeng

SimulinkSFunction

5892 Training

Thereare6mainfunctionsincludedintheSfunction

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
function sys=mdlDerivatives(t,x,u)
function sys=mdlUpdate(t,x,u)
function sys=mdlOutputs(t,x,u)
function sys=mdlGetTimeOfNextVarHit(t,x,u)
function sys=mdlTerminate(t,x,u)

Tosimulatecomplexsystemdynamicequation,onlytheabove
threefunctionsarerequired.

byDr.ChaoChungPeng

SimulinkSFunction

5892 Training

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%=============================================================================
%mdlInitializeSizes
%Returnthesizes,initialconditions,andsampletimesfortheSfunction.
%=============================================================================
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%callsimsizes forasizesstructure,fillitinandconvertittoa
%sizesarray.
%Notethatinthisexample,thevaluesarehardcoded.Thisisnota
%recommendedpracticeasthecharacteristicsoftheblockaretypically
%definedbytheSfunctionparameters.
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =0;
sizes.NumInputs =0;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[];

byDr.ChaoChungPeng

SimulinkSFunction

5892 Training

function sys=mdlDerivatives(t,x,u)
%=============================================================================
%mdlDerivatives
%Returnthederivativesforthecontinuousstates.
%=============================================================================
function sys=mdlDerivatives(t,x,u)
sys=[];
%endmdlUpdate

Thedynamicequationsaregoingtobebuiltinthisfunction.
Yourcontrolalgorithm,analysismethod&otherprocessesare
putinthisfunctionaswell.
Ofcourse,onecanjustconsideropenloopsystemsandbuild
anotherSfunctiondedicatedforcontrolalgorithm.

byDr.ChaoChungPeng

SimulinkSFunction

5892 Training

function sys=mdlOutputs(t,x,u)

%=============================================================================
%mdlOutputs
%Returntheblockoutputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
sys=[];
%endmdlOutputs

Thisfunctionisusedtoreturnsystemstateresponse,output
responseandotherinterestinginformation.

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

HowtointegratetheSfunctionintoMATLABSimulink

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

CreateanewSimulinkfileanddragtheSfunctionblockto
yourSimulinkfile.
ChangetheSfunctionname.
Notethatthenamemustbeexactlythesamewiththename
ofSfunctionmfile.

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

Moreover,wesuggestthatthefunctionnameintheSfunction
isequaltothefilename

function [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.

function [sys,x0,str,ts,simStateCompliance]=My_System(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

Dontforgettosetthepathtoyourfolder.
Thisisthefolderwhere
mysfunctionmfileislocated.

10

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

NowtheSimulinkcanrecognizeyourMy_System.
NextrefertotheSimulationoptionandclickthe
ConfigurationParameters,wecanselecttheODEsolver.

11

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

Thedefaultvaluesareshownasfollows

12

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

Sometimesweprefertousefixedstepsandsolvedby
ode4(RungeKutta).
Meanwhile,thefixedstepsizeisusuallyequaltoorsmaller
than0.0001sectosimulatethecontinuoustimesystem.

13

byDr.ChaoChungPeng

CreateaSFunction

5892 Training

Sofartheinitialsettingisfinished.
TrytoclickRUNbuttontocheckifanyerroroccurs

Ifnoanymessageappears,congratulations!!!

14

byDr.ChaoChungPeng

SimulinkSFunction

5892 Training

Ifthefollowingmessagepopsout,itindicatesthefilepathis
notsetyet.SotheSimulinkcannotrecognizeMy_System.

15

byDr.ChaoChungPeng

SFunctionSignalGeneration

5892 Training

Letstryafirstrun:useaSfunctiontogeneratesingleinput
andsingleoutputframeworkandcompiletheSimulink.
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =0;
sizes.NumInputs =0;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =1;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

16

After defining the number the


input & output, the I/O
channels on the block will be
generated automatically

byDr.ChaoChungPeng

SFunctionSignalGeneration

5892 Training

Nowusethisframeworktogeneratea10Hzsinewave.

%==============================================================
%mdlOutputs
%Returntheblockoutputs.
%==============================================================
function sys=mdlOutputs(t,x,u)
%%...uistheinputfromsimulink
sys=sin(2*pi*u*t);
%endmdlOutputs

17

byDr.ChaoChungPeng

SFunctionSignalGeneration

18

byDr.ChaoChungPeng

5892 Training

Dynamics|1st OrderSystem

5892 Training

Nowconsidera1st orderdynamicequationsubjecttoazero
forceandinitialcondition
x ax au , a 5

x 0 0
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =1;
sizes.NumDiscStates =0;
sizes.NumOutputs =1;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0];
function sys=mdlDerivatives(t,x,u)
a=5;
sys=a*x+a*u;

19

Number of state
defined in dynamic
equation
Initial value must be
given based on the
number of state

function sys=mdlOutputs(t,x,u)
%%...xisthe1storderstatedefinedin"functionsys=mdlDerivatives(t,x,u)"
sys=x;

byDr.ChaoChungPeng

Dynamics|1st OrderSystem

Thisinputissettobezero

20

byDr.ChaoChungPeng

5892 Training

Dynamics|1st OrderSystem

5892 Training

Consideragainthesamesystembutsubjecttoapulsetrain
andtheinitialconditionx(0)=1.

%initializetheinitialconditions
%
x0=[1];

NotethateverytimewhenmodifythecodeinSfunction,one
mustpresssave!
21

byDr.ChaoChungPeng

Dynamics|Standard2nd OrderSystem

5892 Training

Nowgenerateastandard2nd orderlineardynamicequation
subjecttostepinput
Y s
n2

2
U s s 2 2 n s n2
s

n2

1
2

x1 x2

2
2
x1 n x1 2 n x2 n u

s 1

function [sys,x0,str,ts,simStateCompliance]=Standard_2nd_Order_Dynamics(t,x,u,flag)

x1 0 0

x2 0 0

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

function sys=mdlDerivatives(t,x,u)
%%...sys(1)=dx1/dt
%%...sys(2)=dx2/dt
zeta=0.3;
wn =20;
sys(1)=x(2);
sys(2)=wn^2*x(1) 2*zeta*wn*x(2)+wn^2*u;

sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0;0];

22

function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]

byDr.ChaoChungPeng

Dynamics|Standard2nd OrderSystem

Theoutputisnowa2dimensionalvector

23

byDr.ChaoChungPeng

5892 Training

Dynamics|ServoMotor

5892 Training

Consideraservomotormechanicalequation:
m

dv
u Cmv Fc sign(v)

dt
friction

Wherev isvelocity,M issystemmass,Cm isviscouscoefficient,


Fc isCoulombfrictionandu isappliedforce.
Letx1andx2arepositionandvelocity,respectively.Onehas
x1 x2

x
u
C
x
F
sign
(
x
)
2
2
2
m
c

friction

x1 0 0

x2 0 0

whereasinusoidinputforceu=sin(2*pi*3*t)isapplied.
24

byDr.ChaoChungPeng

Dynamics|ServoMotor

25

5892 Training

byDr.ChaoChungPeng

Dynamics|ServoMotor

5892 Training

SFunctionCode

function [sys,x0,str,ts,simStateCompliance]=Servo_Motor_Dynamics(t,x,u,flag)

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;

function sys=mdlDerivatives(t,x,u)
%%...PendulumSystemParameters

sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

Cm=0.01;%%...viscousfriction(Nt/rad/sec)
Fc=0.5;%%...Coulumb friction(Nt)
M=1;%%...mass(Kg)
sys(1)=x(2);
sys(2)=1/M*(u (Cm*x(2)+Fc*sign(x(2))));

sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0;0];

26

function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]

byDr.ChaoChungPeng

Dynamics|PendulumwithFriction

Apendulumsubjecttofriction

5892 Training

I mg sin f u
I m 2
f Fc sign

Let

mg

1 ; 1 2 ;2

1 2

g sin 1 F sign u
2
2
c
2

m 2
friction

Initialvaluesandinputare

1 0 0.1

2 0 0
u 0

27

byDr.ChaoChungPeng

Dynamics|PendulumwithFriction

5892 Training

function [sys,x0,str,ts,simStateCompliance]=Pendulum_Dynamics(t,x,u,flag)
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0.1;0];
function sys=mdlDerivatives(t,x,u)
%%...PendulumSystemParameters
g=9.8;%%...m/sec^2
l=0.1;%%...length(m)
sigma=0.001;%%...viscousfriction(Nt/rad/sec)
Fc=0.005;%%...Coulumb friction(Nt)
m=1;%%...mass(Kg)
sys(1)=x(2);
sys(2)=g/l*sin(x(1)) (1/m/l^2)*(sigma*x(2)+Fc*sign(x(2)))+(1/m/l^2)*u;

28

function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]

byDr.ChaoChungPeng

Dynamics|ChuasChaoticDynamics

5892 Training

Ref: SYNCHRONIZATION BETWEEN CHUA AND MODIFIED CHUA


OSCILLATORS WITH PASSIVE CONTROL

29

byDr.ChaoChungPeng

Dynamics|ChuasChaoticDynamics

30

byDr.ChaoChungPeng

5892 Training

Dynamics|ChuasChaoticDynamics

5892 Training

SFunctionCode
function sys=mdlDerivatives(t,x,u)
alpha=10;
beta=100/7;
U=u;

function [sys,x0,str,ts]=Chua_Dynamics(t,x,u,flag)

function [sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;

sys(1)=alpha*(x(2)(2*x(1)^3x(1))/7);
sys(2)=x(1)x(2)+x(3);
sys(3)=beta*x(2)+U;

sizes.NumContStates =3;
sizes.NumDiscStates =0;
sizes.NumOutputs =3;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

function sys=mdlOutputs(t,x,u)

sys=simsizes(sizes);

sys=[x(1);x(2);x(3)];

%initializetheinitialconditions
x0=[0.3;0;0];

31

byDr.ChaoChungPeng

Dynamics|ChuasChaoticDynamics

32

byDr.ChaoChungPeng

5892 Training

Dynamics|ChuasChaoticDynamics

Logdatainworkspace

33

byDr.ChaoChungPeng

5892 Training

Dynamics|ChuasChaoticDynamics
plot3(x1,x2,x3)
grid
xlabel('x1')
ylabel('x2')
zlabel('x3')

Enhance simulation resolution

34

byDr.ChaoChungPeng

5892 Training

Dynamics|ThermalModel

5892 Training

A2nd orderheatingthermalmodel

Ref : 2012 Quadruple Adaptive Observer of the Core Temperature


in Cylindrical Li-ion Batteries and their Health Monitoring
35

byDr.ChaoChungPeng

Dynamics|ThermalModel

5892 Training

Sfunctioncode:

function [sys,x0,str,ts,simStateCompliance]=Thermal_Dynamics(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =2;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded

function sys=mdlDerivatives(t,x,u)
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;
Tc=x(1);
Ts =x(2);
U=u(1);
Tf =u(2);
sys(1)=U^2*Re/Cc+(TsTc)/(Rc*Cc);
sys(2)=(TfTs)/(Ru*Cs) (TsTc)/(Rc*Cs);

sys=simsizes(sizes);
%initializetheinitialconditions
x0=[2525];

36

function sys=mdlOutputs(t,x,u)
sys=x;

byDr.ChaoChungPeng

Dynamics|ThermalModel

Simulationresultsareshownasfollows:

37

byDr.ChaoChungPeng

5892 Training

Dynamics|ThermalModel

Twostagesheating
dynamicresponse

38

byDr.ChaoChungPeng

5892 Training

PassParameterstoSFunction

5892 Training

Actually,theparametersappliedinaSfunctioncanbedefined
byanexternalmfile.
Forexample,acomplexdynamicssystem,thereareusuallya
fewsystemparameters.Underthissituation,wesuggestto
organizetheseparametersbyusinganexternalmfile.
Themfileisfirstlycompiledandthenpassthoseparameters
toSimulinkSfunction.
clearall
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;

Thermal Dynamics Parameters.m

39

byDr.ChaoChungPeng

PassParameterstoSFunction

5892 Training

Sfunctionparametersmustbesetfordataconnection!!

40

byDr.ChaoChungPeng

PassParameterstoSFunction

5892 Training

Sfunctioncode:
function [sys,x0,str,ts,simStateCompliance]=Thermal_Dynamics_Para(t,x,u,flag,Cc,Cs,Re,Rc,Ru)
%SFUNTMPLGeneralMfileSfunctiontemplate
switch flag,
%Initialization%
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%Derivatives%
case 1,
sys=mdlDerivatives(t,x,u,Cc,Cs,Re,Rc,Ru);
%Update%
case 2,
sys=mdlUpdate(t,x,u);
%Outputs%
case 3,
sys=mdlOutputs(t,x,u,Cc,Cs,Re,Rc,Ru);
%GetTimeOfNextVarHit %
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%Terminate%
case 9,
sys=mdlTerminate(t,x,u);
%Unexpectedflags%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));
end

41

function sys=mdlDerivatives(t,x,u,Cc,Cs,Re,Rc,Ru)
%theparametersarenowimportedviamfile
Tc=x(1);
Ts =x(2);
U=u(1);
Tf =u(2);
sys(1)=U^2*Re/Cc+(TsTc)/(Rc*Cc);
sys(2)=(TfTs)/(Ru*Cs) (TsTc)/(Rc*Cs);
function sys=mdlOutputs(t,x,u,Cc,Cs,Re,Rc,Ru)
sys=x;
clearall
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;

Thermal Dynamics Parameters.m

byDr.ChaoChungPeng

ComplexDynamicsCodingStyle

5892 Training

Considerahigherorderlinearsystem
x A A x B B u Dd
y Cx

where,,and.
A n n B n m
C p n
D n m
Allthematricesneedtoberealizedinthesimulation
A=[
environment.
0.52021.51161.70731.60370.42132.62085.3981
ConsideraMIMOlinearsystem:
n=7(state),m=3(input),p=4(output)

0.88220.46070.18551.69070.40530.89291.5599
3.0000001.00001.00001.00002.0000
01.00001.0000002.00004.0000
0.85551.86751.30720.63820.06481.29432.6696
3.17282.96161.06353.22040.56810.96261.5332
0.21750.18340.21460.27470.04890.21940.2883];
B=[102;010;000;000;111;101;001];
C=[1001001;0100011;0000100;0100111];
[NN,MM]=size(B);
[PP,NN]=size(C);
dA=randn(NN,NN);
dB=randn(NN,MM);
dC=randn(PP,NN);

42

byDr.ChaoChungPeng

ComplexDynamicsCodingStyle

5892 Training

Becarefulabouttheinputoutputchannelmappingdefinedin
theSFunction.

x
u(1:3)

u(4:6)

43

byDr.ChaoChungPeng

ComplexDynamicsCodingStyle

5892 Training

Toavoidtediouscodingprocedure,hereappliesastraight
forwardformulationinSFunction

function [sys,x0,str,ts,simStateCompliance]=Complex_Dynamics(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate

x A A x B B u Dd
y Cx

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

A n n

sizes=simsizes;
sizes.NumContStates =7;
sizes.NumDiscStates =0;
sizes.NumOutputs =14;%7forsystemstate&4forsystemoutput&3fordisturbance
sizes.NumInputs =6;%3forcontrolinput&3forexternaldisturbance
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[1;2;3;4;5;6;7];

44

byDr.ChaoChungPeng

B n m
C p n
D n m

ComplexDynamicsCodingStyle
function sys=mdlDerivatives(t,x,u)
%%...systemmatrices
A=[0.52021.51161.70731.60370.42132.62085.3981
0.88220.46070.18551.69070.40530.89291.5599
3.0000001.00001.00001.00002.0000
01.00001.0000002.00004.0000
0.85551.86751.30720.63820.06481.29432.6696
3.17282.96161.06353.22040.56810.96261.5332
0.21750.18340.21460.27470.04890.21940.2883];
B=[102;010;000;000;111;101;001];
C=[1001001;0100011;0000100;0100111];
D=[001;010;000;000;101;101;001];
[NN,MM]=size(B);
[PP,NN]=size(C);
randn('seed',1);
dA =randn(NN,NN);
dB=randn(NN,MM);
dC =randn(PP,NN);
%%...decomposetheuvectorintocontrolinput&disturbance
U=u(1:3);
d=u(4:6);
dotX=(A+dA)*x+(B+dB)*U+D*d;

organize the output vector carefully!!

function sys=mdlOutputs(t,x,u)
%%...thesystemmustbegiveninthissectionagain
C=[1001001;0100011;0000100;0100111];
y=C*x;
d=u(4:6);
sys=[x;y;d];%%stateoutputdisturbance

sys(1)=dotX(1);
sys(2)=dotX(2);
sys(3)=dotX(3);
sys(4)=dotX(4);
sys(5)=dotX(5);
sys(6)=dotX(6);
sys(7)=dotX(7);

45

5892 Training

byDr.ChaoChungPeng

Homework

Findtwophysical(nonlinear)systemsandfinishtheopenloop
dynamicsimulations.Pleasefollowthetemplate~

5892 Training

FolderFormat:Model_SysName
SFunFormat:SysName_Dynamics
SimulinkFormat:SysName_Dynamics_Simulation

Alsoincludetherelevantreferences.
BasedonthestructureofSFunction,complicatemodel
simulationssuchasrobotics andquadrotorscanbeeasily
achieved.

46

byDr.ChaoChungPeng

S-ar putea să vă placă și