Documente Academic
Documente Profesional
Documente Cultură
function [sys,x0]=S_functie(t,x,u,flag)
%functia S-Function : codul sursa in limbaj matlab
% M-file
switch(flag)
end.
59
1
1,2 0
0
0
1 1 0
A= 2
0,1 0.2 ; B = 1 ; C =
; D = ; X 0 = (1 0 2 )
0
1 2 0
2
0
0
1
(8.1)
ceea ce nseamn c sistemul are trei stri continue, 0 discrete, dou ieiri, o
intrare, 0 rdcini discontinue, 0 bucle directe de la intrare la ieire i un singur
vector pentru timpul de simulare, iar starea iniial a celor trei stri este x0.
Numrul buclelor directe de la intrare la ieire este dat de matricea D.
Observaie: Aceste apeluri de funcii sunt fcute intern de simulink n timpul
simulrii, iar interaciunea utilizatorului cu S-Function se face de obicei prin
construcia lor, scrierea codului surs i integrarea lui ntr-o schem de simulare.
2.1. Scrierea unei S-Function folosind limbajul Matlab (M-files):
O funcie de acest tip, care definete un bloc S-Function, trebuie s ofere
diferite informaii necesare (cerute) de mediul Simulink n timpul simulrii.
Matlab are n directorul toolbox\simulink\blocks un fiier ajuttor generalizat
sfuntmpl pentru realizarea unei S-Function. n lucrarea de laborator se vor
60
(8.2)
matricile de sistem
61
1
1
0
0.1
1.2 0
0
0.1 0.2
0
2
1 1 0.1
A=
;B =
;
0
1
0.5
0 1
0
1
0
.
2
0
0
0
.
2
0
0
.
8
0
1
0
0
0
0
0
0
C =
; D =
0
1
0
1
0
.
2
0
1
(8.3)
Din analiza acestor matrici se observ c sistemul are 4 stri continue, trei
intrri, dou ieiri i o bucl direct intrare-ieire (matricea D nu este nul)
rezultnd pentru apel flag=0, un vector de forma:
sys = [4 0 2 3 1 1];
Sistemul fiind dinamic, dat prin model ISO, la apelul intern al funciei de
ctre mediul Simulink cu flag=1 trebuie s returneze cu sistemul de ecuaii
difereniale. Deci:
sys=A*x+B*u;
iar la apel intern cu flag=3 s determine rspunsul sistemului, care pentru
modelul intrare-stare-ieire este:
sys=C*x+D*u;
Celelalte valori flag=2,4,9 nefiind necesare, la apelul S-Function se va
returna o matrice goal:
sys=[];
Respectnd aceste reguli codul surs detaliat pentru funcie va fi:
function [sys,x0]=ex1(t,x,u,flag)
%MATRICILE DE SISTEM
A=[-1.2 0 1 -0.1; 2 0.1 -0.2 0; -1 0 1 0.5; 0.2 0 0
0.2];
B=[0 1 0; 1 -1 0.1; 0 -1 0; 0 -0.8 0];
C=[1 0 0 0; -1 0.2 0 -1];
D=[0 0 0;0 1 0];
%rutinele ]n functie de valoarea flag
if flag ==1
sys=A*x+B*u; % calculul derivatelor
elseif flag ==3
sys=C*x+D*u; % calculul iesirilor
elseif flag ==0
%initializare dimensiunilor
62
sys = [4 0 2 3 1 1];
%starea initiala
x0 = [-1 0 0.1 0.1]';
else
sys=[]; % 2,4,9 flag-uri nefolosite
end
Testarea S-Function se va face cu schem Simulink din figura 8.3.
(8.4)
x1 = x1 (1 x 22 ) x 2
x 2 = x1
(8.5)
Fig. 8.5. Schema de test pentru ecuaia Van der Pol (S-Function ex2)
if flag ==1
sys(1)=x(1).*(1-x(2).^2)-x(2); % calculul
derivatelor
sys(2)=x(1);
elseif flag==3
sys(1)=x(1);
sys(2)=x(2);
elseif flag ==0
%initializare dimensiunilor
sys = [2 0 2 0 0 0];
%starea initiala
x0 = [0.25 0.25]';
else
sys=[]; % 2,4,9 flaguri nefolosite
end
4. Tem
a) S se studieze principiul de construcie a unei S-Function i rutinele
standard din exemplul Matlab sfuntmpl.m din directorul toolbox\simulink\
blocks.
b) S se descrie un sistem ISO cu S-Function care s conin trei stri,
dou intrri i o ieire.
c) S se realizeze exemplele de la punctele 3.1 i 3.2 cu ajutorul
componentelor Simulink. Se vor compara rezultatele cu cele din lucrare.
d) S se refac codurile surs din lucrare folosind modelul ajuttor Matlab
sfuntmpl.m.
e) Se va rspunde la ntrebarea: Ce justificare are descrierea unui sistem
sau a unei ecuaii prin cod surs (S-Function) ?
65