Professional Documents
Culture Documents
(10.1)
unde y(t) este semnalul de ieire, u(t) semnalul de control, m i n sunt
dimensiunile modelului iar d este timpul mort. Aceast form de
reprezentare este convenabil din punct de vedere a implementrii.
Modificai proprietatea Color a formularului alegnd clWhite.
Depunei trei etichete (Label) n stnga fiecrei casete de editare i
alegei pentru proprietile Caption: n= , m= , d=. Depunei dou
butoane pe formular i alegei pentru proprietatea Caption: &Ok
respectiv &Cancel.
Aceste dou butoane vor putea nchide formularul 2 dac
proprietatea ModalResult a butonului se alege mrOk respectiv mrCancel.
201
else ShowMessage('Eroare');
end;
Executai programul. Se va afia mai nti un mesaj care ne
informeaz c formularul 1 face referire la formularul 2, acesta nefiind
declarat n lista Uses; suntem ntrebai dac acceptm ca Delphi s fac
declaraia respectiv n locul nostru. Evident c acceptm acest ajutor.
Relum execuia. Dac selectm Parametri/Dimensiune Model,
se va afia eroarea (operaie nepermis): Cannot make a visible form
modal. Motivul este c n instruciunea:
Raspuns:=Form1.ShowModal;
n loc de Form2 s-a scris Form1. Corectai i executai din nou
programul. n aceast etap de realizare a programului, n faza de
execuie, ferestrele formularelor pot arta ca n fig. 10.4.
n:=StrToInt(Edit_n.Text);
m:=StrToInt(Edit_m.Text);
d:=StrToInt(Edit_d.Text);
end;
Executai programul. Vom avea o eroare n Unit2, respectiv
variabila n nu este declarat. Dei variabilele n, m, d au fost declarate n
Unit1 ca variabile globale, n Unit2 ele nu sunt vzute ca atare. Trebuie
adugat urmtoarea declaraie n Unit2:
uses Unit1;
dup:
implementation
Executai programul i selectai meniul Parametri / Dimensiune
Model. Observai ce date putei introduce i cum sunt preluate. Remarcai
faptul c dup introducerea unui set de date, la o nou deschidere a
ferestrei formularului 2, sunt afiate datele introduse anterior. De ce?
Revenii apoi la formularul 1 i modificai culoarea alegnd clWhite.
De asemenea introducei instruciunile necesare pentru
iniializarea variabilelor la activarea Form1 respectiv se utilizeaz
evenimentul OnActivate al formularului:
procedure TForm1.FormActivate(Sender: TObject);
begin
n:=4; m:=3; d:=1;
end;
Reluai execuia programului i urmrii faptul c variabilele n, m,
d primesc valorile de mai sus.
Deschidei un nou formular Form3 utiliznd File/New/Form.
Aceast formular va fi inserat n interiorul formularului principal Form1.
Utilizatorul va putea deschide Form3 (i alte formulare) n interiorul
acestui formular principal. Scopul este vizualizarea evoluiei mai multor
semnale din proces, ce au o legtur logic ntre ele. Denumii noul
formular: Evoluia semnalului de referin i a ieirii (proprietatea
Caption a formularului). Fereastra principal se numete fereastr
printe. Ferestrele secundare ce vor fi deschise n interiorul ferestrei
principale se numesc ferestre copil.
O astfel de aplicaie se numete Multiple Document Interface
(MDI) adic interfa multidocument. Formularul principal Form1 va
204
210
end;
end;
Ce constatai? Pentru a nu atepta prea mult timp, este
recomandabil s utilizai timer-ul setat pe valoare foarte mic. ncercai
s nchidei i apoi s redeschidei fereastra chart-ului. Dup un timp vei
constata c apar unele ciudenii. De ce?
S modificm caracteristicile chart-ului astfel nct dimensiunile
pe axe s nu se modifice adic s fie fixe. Este un mod mai comod de
lucru. Alegei proprietatea BottomAxis a chart-ului. Are un semn + n
fa. Acesta semnific faptul c dac se d clic pe + se vor deschide alte
proprieti. Dai clic. La proprietatea Automatic alegei False. Vei
constata c se modific automat i proprietile AutomaticMaximum i
AutomaticMinimum. Modificm i proprietile Maximum respectiv
Minimum. Alegei 200 respectiv 0.
n mod similar modificm caracteristicile pentru LeftAxis.
Alegem Automatic=False, Maximum=250, Minimum=0. Toate aceste
modificri fixeaz dimensiunile vizibile ale celor dou axe ceea ce face
ca evoluia graficelor s poat fi mai uor urmrit. Evident c, dac se
impune, din cnd n cnd dimensiunile vizibile ale celor dou axe pot fi
modificate. Rulai din nou programul i observai modificrile. Avei
rbdare dup ce chart-ul se umple o dat cu date. De ce se ntmpl ceea
ce se ntmpl?
Introducei acum urmtoarea secven la nceputul procedurii
TForm3.Pasgrafic:
Chart1.BottomAxis.Maximum:=npuncte*(1+indm div npuncte);
Chart1.BottomAxis.Minimum:=npuncte*(indm div npuncte);
Vei observa c dup 200 de pai se modific automat etichetele
pe axa orizontal de la 0..200 la 200..400. Totui dup pasul 400 se
genereaz eroarea: Axis Maximum value must be >= Minimum. Motivul
este c variabila indm ce indic dimensiunea vectorului de memorare a
datelor ce sunt afiate, este limitat prin program la valoarea nmem=400
(evident c aceste constante pot fi modificate de programator).
Prin urmare, dup ce prin program se execut indm=0 (n
procedura TForm3.PasGrafic), la urmtorul apel al procedurii se
genereaz eroarea de mai sus. O soluie este inversarea ordinii de
execuie a celor dou instruciuni de mai sus n care se calculeaz
212
Tile;
end;
Executai din nou programul. Dup ce activai cele dou ferestre
copil, dac dai clic pe Aranjare Orizontal, cele dou ferestre copil vor
ocupa frete tot spaiul disponibil. Modificai proprietatea
WindowState a formularului principal n wsMaximized. n execuie,
formularul principal va ocupa tot ecranul. Verificai acest lucru.
Modificai proprietatea Interval a timerului (n formularele 3 i 4)
la valoarea 100. n desenarea graficelor apare o surs de eroare datorit
faptului c variabila indm ce specific indicele valorii ce se introduce n
grafic, este incrementat att n Unit3 ct i n Unit4.
Pentru a sincroniza cele dou uniti vom muta incrementarea
acestei variabile n Unit1. Deci vom elimina din procedurile PasGrafic
din Unit3 respectiv Unit 4 secvenele:
indm:=indm+1;
if indm > nmem then
begin
indm:=0;
for i:=0 to nmem do
begin
date_y[i]:=random(250);
date_yr[i]:=random(250);
end;
end;
i n formularul 1 depunem un timer i alegem proprietatea Interval egal
cu 10000. Pentru evenimentul OnTimer introducem secvena eliminat
din procedurile PasGrafic. Executai programul. Se va genera o eroare
Undeclared identifier. Dup ce o eliminai, vei constata faptul c o
dat la 10 secunde cele dou grafice sunt remprosptate. Dar ntre dou
apeluri la 10 secunde, procedurile PasGrafic sunt apelate la fiecare
interval dat de proprietile Interval ale timerelor formularelor 3 i 4.
Putei verifica acest lucru! Putei utiliza n acest scop cte o etichet pe
formularele 3 i 4; n etichet putei scrie numrul apelului. De exemplu
n procedura TForm3.PasGrafic introducei temporar urmtoarele
instruciuni:
test:=test+1; {nu uitai declararea variabilei test de tip integer}
216
Label1.Caption:=Test +IntToStr(test);
Practic acest apel este inutil, ncarc programul (De ce?). Soluia
este validarea din formularul principal a timerelor din formularele 3 i 4.
Introducem n formularul principal n seciunea var declaraia:
ceas3,ceas4:boolean; {variabile pentru validare timere formulare}
De asemenea n procedura TForm1.FormActivate vom introduce
instruciunile:
ceas3:=false;ceas4:=false;{init. variabile pt.validare timere formular}
n procedura TForm1.Timer1Timer introducem instruciunile:
Ceas3:=True; Ceas4:=True;
n procedurile TForm3.Timer1Timer respectiv TForm4.Timer1Timer
apelul procedurii PasGrafic se modific astfel:
procedure TForm3.Timer1Timer(Sender: TObject);
begin
if ceas3 then {similar si pentru formularul 4}
begin
PasGrafic;
ceas3:=false;
end;
end;
Ca urmare, n formularul principal, cnd trece timpul dictat de
timer1 (fixai timer1.interval=1000), se activeaz procedura asociat n
care se valideaz ceas3 respectiv ceas4. Dup terminarea aciunilor din
unit1, se vor executa aciunile asociate din unit3 respectiv unit4.
Deoarece timerele sunt validate (fixai timer1.interval=100 n ambele
uniti), se vor executa aciunile asociate timerelor. Trebuie precizat
faptul c cele dou grafice asociate formularelor 3 i 4 trebuie s lucreze
simultan. Dac executm programul vom observa faptul c graficele sunt
desenate doar din momentul n care deschidem ferestrele asociate.
Mediul Delphi ofer numeroase soluii pentru realizarea unor aciuni.
Putei studia dac nu se poate renuna la variabilele ceas3, ceas4 prin
utilizarea proprietilor enabled ale timerelor.
217
if alg_on=true then
begin
indm:=indm+1;
if indm > nmem then
begin
indm:=0;
for i:=0 to nmem do
begin
date_y[i]:=random(250);
date_yr[i]:=random(250);
date_u[i]:=random(250);
end;
end;
Ceas3:=True; Ceas4:=True;
end;
end;
n plus, n procedura TForm1.FormActivate, n ciclul for, introducei
instruciunea:
date_u[i]:=random(250);
De asemenea trebuie declarat date_u ca variabil global iar n
formularul 4 se va afia doar date_u. Pstrai la afiare n procedura
pasgrafic din Unit4 doar:
{afisare}
series1.addxy(indm,date_u[indm],'',clred);
Executai acum programul. Vei constata c dup ce nchidem o
fereastr, dac o redeschidem ea va afia doar o poriune din semnal.
Similar, dac n momentul validrii algoritmului ferestrele nu sunt
deschise, la deschidere ele vor afia semnalul trunchiat. Concluzia este c
la activarea formularului ce conine un chart, graficul trebuie redesenat n
totalitate nu numai
ultimul
punct. Modificai
procedura
TForm3.FormActivate astfel:
procedure TForm3.FormActivate(Sender: TObject);
var i:integer;
begin
219
IesiresiReferinta1.GroupIndex:=1;
Chart1.BottomAxis.Maximum:=npuncte;
if indm>0 then
begin
for i:=Round(Chart1.BottomAxis.Minimum) to indm-1 do
begin
series1.addxy(i,date_yr[i],'',clblue);
series2.addxy(i,date_y[i],'',clred);
end;
series1.active:=true;
series2.active:=true;
end;
end;
Similar pentru TForm4.FormActivate:
procedure TForm4.FormActivate(Sender: TObject);
var i:integer;
begin
Semnaldecontrol1.GroupIndex:=1;
Chart1.BottomAxis.Maximum:=npuncte;
if indm>0 then
begin
for i:=Round(Chart1.BottomAxis.Minimum) to indm-1 do
series1.addxy(i,date_u[i],'',clred);
series1.active:=true;
end;
end;
Se mai observ faptul c graficele nu pornesc din origine. Dac nchidem
i apoi redeschidem ferestrele ce conin chart-urile, graficele sun afiate
corect. De ce se ntmpl acest lucru? Modificai instruciunile indm:=0;
din Unit1 n indm:=-1; De ce funcioneaz acum corect?
Selectai formularul principal i MenuDesigner. Selectai
Algoritm i apoi dai dublu clic pe Dezactivare. Se deschide o procedur
n care completai:
procedure TForm1.Dezactivare1Click(Sender: TObject);
begin
220
alg_on:=False;
Activare1.Enabled:=True;
Dezactivare1.Enabled:=False;
end;
Vei constata faptul c algoritmul poate fi activat/dezactivat de utilizator.
n practic se face o distincie ntre datele referitoare la procesul
urmrit sau/i condus i datele privitoare la modelul matematic al
procesului. Totdeauna vor exista diferene mai mici sau mai mari ntre
datele furnizate de procesul real i datele furnizate de modelul procesului.
Din acest motiv, n simulri se utilizeaz dou categorii de date: cele
referitoare la procesul real condus i cele referitoare la modelul acestui
proces. De cele mai multe ori tocmai efectele acestei diferene ntre
proces i model este studiat prin simulare. Pentru a nu obine rezultate i
concluzii false trebuie realizat o separaie clar ntre datele ce privesc
procesul real i datele ce privesc modelul procesului.
Vom modifica n procedura TForm1.FormActivate iniializrile
prin nlocuirea secvenei de program:
for i:=0 to nmem do
begin
date_y[i]:=random(250);
date_yr[i]:=random(250);
date_u[i]:=random(250);
end;
cu:
np:=4; mp:=3;dp:=1; {dimensiuni proces}
for i:=0 to nmem do
begin
date_y[i]:=0;
date_yr[i]:=0;
date_u[i]:=0;
end;
ap[1]:=-2.434927; ap[2]:=1.976289; ap[3]:=-0.5346799;
bp[1]:=0.000948003; bp[2]:=0.004438182; bp[3]:=0.001296496;
yr[0]:=200;
u[0]:=200;
221
222
(10.2)
(10.3)
226
227
kp:=StrToFloat(Form5.Edit1.Text);
ki:=StrToFloat(Form5.Edit2.Text);
kd:=StrToFloat(Form5.Edit3.Text);
end;
end;
Comentai i instruciunea if indm=5 then u[0]:=200; din
procedura TForm1.Timer1Timer. Executai programul. Vei constata c
valoarea semnalului de control i implicit a ieirii nu se modific.
Modificai kp=1 pstrnd ki=0, kd=0 i urmrii efectul. Executai
programul. Vei constata c att semnalul de control ct i cel de ieire
vor crete rapid i vor depi valorile maxime admise n Chart-uri.
n aceast etap se pot aduga etichete n care s se afieze
valoarea actual a semnalelor de referin, ieire, control (rmne ca
exerciiu pentru cititor). Un motiv este faptul c semnalul de referin nu
este deplasat n timp, ceea ce conduce la un calcul greit a semnalului de
control. Trebuie introdus instruciunea:
for i:=np+dp downto 1 do yr[i]:=yr[i-1];
nainte de sfritul procedurii PasConducere. Un alt motiv este faptul c
n realitate semnalul de control poate lua valori limitate. De aceea trebuie
introduse instruciunile:
if u[0]>umax then u[0]:=umax; if u[0]<umin then u[0]:=umin;
Urmrii ce se ntmpl dac se alege kp=1. Putei alege i alte valori.
Se observ c utiliznd doar componenta P a controlerului PID,
exist o eroare staionar. De asemenea se observ c pentru acest tip de
algoritm PID, n cazul n care ki=0 i kd=0, modificarea coeficientului kp
va avea efect doar dac se modific referina.
Pentru a urmri mai uor efectul modificrii parametrului kp i ulterior a
parametrilor ki i kd este util ca semnalul de referin s fie de tip
dreptunghiular. Vom alege ca la fiecare 75 de perioade de eantionare,
semnalul de referin s se modifice. Procedura PasConducere este:
procedure TForm1.PasConducere();
var i:integer;
begin
{deplasare semnale in timp}
230
kp:=StrToFloat(Form5.Edit1.Text);
ki:=StrToFloat(Form5.Edit2.Text);
kd:=StrToFloat(Form5.Edit3.Text);
kp1:=kp; ki1:=ki; kd1:=kd; ScrollBar1.Position:=100;
ScrollBar2.Position:=100;ScrollBar3.Position:=100;
end;
Putei ncerca urmtoarele puncte de pornire: (kp=1.15, ki=0.08,
kd=2), (kp=0.805, ki=0.0688, kd=1.867). Vei constata c valorile
parametrilor influeneaz suprareglajul, timpul de cretere etc.(fig.10.12).
Evident c parametrii kp, ki, kd pot fi modificai utiliznd doar
casetele de editare (e o variant mai greoaie), dar se pot imagina i alte
variante de modificare a acestor parametri.
Prin urmare alegerea optim a lor depinde i de performanele
impuse sistemului de control. Pentru a evita saturarea semnalului de
control, modificai semnalul de referin astfel:
if indm mod 150 =0 then yr[0]:=100
else if indm mod 75 =0 then yr[0]:=150;
Acordarea controlerului se poate face prin utilizarea metodei
experimentale Ziegler-Nichols. O alt variant mult mai eficient n
condiiile utilizrii tehnicii de calcul este definirea unui indice de
performan i utilizarea unei metode de optimizare. Se poate utiliza o
metod de grid. Se alege domeniul de variaie pentru cei trei parametri i
se mparte fiecare domeniu de variaie n n pri egale. Se calculeaz
pentru fiecare triplet al parametrilor valoarea unei funcii de performan
i se alege acel triplet ce minimizeaz funcia de performan. Metoda
este ineficient din punct de vedere al timpului de calcul, dar, spre
deosebire de cazul altor metode, ansele de a gsi minimul global sunt
mult mai mari. Se utilizeaz un buton suplimentar ce are Caption-ul
Optimizare. Ca urmare formularul 5 ce permite modificarea parametrilor
controlerului are aspectul din fig. 10.13.
232
exemplu, pentru parametrul kp, valorile ce vor fi testate sunt ntre kp/2 i
2*kp. Acest interval se mparte n n puncte, aici s-a ales n=100. Similar sa procedat pentru parametrii ki i kd. Se obin astfel paii de deplasare pe
cele trei direcii de cutare. Dup cum se observ, pentru a nu complica
programul, att pentru definirea spaiului de cutare i a pailor dar i
ulterior, s-au utilizat unele constante ce ar putea fi alese de utilizator
(programul poate fi dezvoltat de cititor).
Dup ce se iniializeaz variabila minsuma cu o valoare foarte
mare (sunt i alte posibiliti, de exemplu minsuma:=maxlongint) se
intr n ciclul triplu n care are loc cutarea tripletului (kp,ki,kd) optim.
Pentru un triplet (kp,ki,kd) se calculeaz o funcie de performan
(funcie de cost). n program s-a ales calculul ponderat a ariei absolute a
abaterii. Pentru acest calcul se realizeaz mai nti fixarea condiiilor
iniiale respectiv att ieirea, referina ct i semnalul de intrare au
valoarea 100, procesul aflndu-se n regim staionar, apoi se alege noua
valoare de referin avnd valoarea 150. Apoi, utiliznd un ciclu while se
simuleaz rspunsul sistemului pentru 75 de pai i se calculeaz funcia
de cost.
Pot fi fcute unele observaii. Prima observaie este legat de
modul de alegere a funciei de cost. Se utilizeaz calculul ponderat a ariei
abaterii; din modul de calcul se observ c eantioanele mai apropiate de
regimul staionar au o pondere mai mare respectiv sunt nmulite cu
numrul eantionului (i1). n acest fel se penalizeaz puternic existena
unei erori staionare.
A doua observaie se refer la penalizarea cazului n care la un
moment dat n simulare trebuie limitat semnalul de control rezultat.
Explicaia este urmtoare: prin limitarea semnalului de control s-ar putea
s obinem un triplet optim (kp,ki,kd) care n alte condiii de funcionare
(de exemplu alt valoare de referin) s funcioneze departe de optim.
A treia observaie se refer la alegerea utilizrii unui ciclu while
(i nu a unui ciclu for). Motivul este urmtorul: este posibil s nu fie
nevoie s simulm comportarea procesului pe toi cei 75 de pai deoarece
la un moment dat s-ar putea ca funcia de cost s aib o valoare mai mare
dect funcia de cost gsit optim pn la acel moment
(suma>minsuma). Abandonarea simulrii pentru respectivul triplet va
conduce la scderea timpului de calcul care oricum poate fi mare, de
ordinul zecilor de secunde.
n fig.10.14 se prezint rezultatele obinute pornind de la valorile
iniiale (kp=1.15, ki=0.08, kd=2). Menionm c procedura de optimizare
235
237
t t 1
a( t )P t 2 t d
t a t t d T P t 2 t d
y t t d
t 1
(10.4)
P t 1
a t P t 2 t d t d T P t 2
1
P t 2
t
t a t t d T P t 2 t d
(10.5)
Se observ c vectorul parametrilor modelului la momentul actual
este egal cu vectorul parametrilor modelului la momentul precedent plus
un factor de corecie ce depinde de diferena ntre ieirea actual i
ieirea estimat la momentul precedent pentru momentul actual. n
algoritm este utilizat i o matrice P, numit matricea de covarian, care
se calculeaz iterativ cu cea de a doua relaie. Nu insistm aici asupra
aspectelor teoretice pe baza crora s-au obinut relaiile de mai sus,
informaii complete se pot gsi n [10], [30]. n implementarea relaiilor
de mai sus s-a notat delta y t t d T t 1 .
Procedura ce realizeaz etapa de identificare este urmtoarea:
procedure TForm1.Identificare_cmmp(var theta:vector; fi:vector;
var pp:matrice;n,m:integer;delta,aa,lambda:real);
var i,j,k1,nab:integer;
temp,temp1:array[0..20 , 0..20] of real ;
ppfi:array[0..20] of real;
temp0:real;
begin
// modul identificare
nab:=n+m;
//Calculam produsul P(t)*Fi(t)
for i:=1 to nab-1 do
begin
ppfi[i]:=0;
for j:=1 to nab-1 do ppfi[i]:=ppfi[i]+pp[i][j]*fi[j];
end;
//Calculam produsul Fi(transpus)*P(t)*Fi(t)
temp0:=0;
for i:=1 to nab-1 do temp0:=temp0+fi[i]*ppfi[i];
temp0:=lambda+aa*temp0; // am calculat numitorul
238
lambda:=0.98;aa:=1;y_masurat:=0;
Pentru afiarea diferenei ntre semnalul de ieire la momentul
actual calculat pe baza ecuaiei procesului real i valoarea estimat a
semnalului de ieire la momentul actual, estimaie bazat pe ecuaia
modelului procesului i a parametrilor acestei ecuaii, n formularul 3
depunem o etichet. n aceast etichet vom nscrie aceast diferen;
aceast operaie va fi ultima instruciune din procedura Timer1Timer din
formularul 3. Instruciunea este:
Label1.Caption:='Eroarea de predicie este: +
FloatToStrF(delta,ffGeneral,4,4);
n cazul n care procesul de identificare se desfoar cu succes, aceast
diferen va tinde la 0.
Proiecte propuse
1. Afiai sub form grafic componentele vectorilor A i B, att n cazul
procesului real ct i n cazul modelului procesului (de preferin
utiliznd dou componente Chart dar i sub form numeric). Eventual
utilizai noi elemente de meniu n meniul principal.
2. Pentru meniul Parametri/Parametri_CMMP, facei operaiile necesare
astfel nct utilizatorul s poat introduce parametrii a t , t (notai
n listing cu aa respectiv lambda).
3. Ce se ntmpl dac procesul i modelul nu au aceiai structur
respectiv tripletele (np,mp,dp) i (n,m,d) difer?
4. n practic semnalele sunt afectate de zgomote; n plus apar probleme
legate de liniaritate. Simulai astfel de cazuri i urmrii cum lucreaz
algoritmul de identificare. Putei simula zgomotul utiliznd o instruciune
de tipul: y_masurat:=(250*y_masurat+random(100))/250;
10.5 Algoritmi de control adaptiv-predictiv. Utilizarea simulrii
on-line i a controlului bazat pe reguli.
Metoda de control adaptiv predictiv bazat pe model este din ce n
ce mai utilizat n special n conducerea proceselor lente neliniare sau/i
cu timp mort semnificativ. Comparativ cu alte metode de control, metoda
permite realizarea unor performane de control mult mai bune.
Dezavantajul potenial major este legat de timpul de calcul necesar
241
(10.6)
unde: u(.) este semnalul de control, t este timpul discret, N este orizontul
ieirii. Avantaje ale algoritmului propus: mod simplu de calcul (alte
metode necesit de exemplu inversarea unei matrice), uor de aplicat n
cazul proceselor ce au un model neliniar sau exist constrngeri, minimul
obinut este global.
242
(10.7)
unde umin respectiv umax sunt valorile extreme acceptate ale semnalului de
control. Secvenele sunt utilizeaz pentru a simula n viitor comportarea
sistemului de control. n urma simulrii on-line, rezult patru secvene
ale semnalului de ieire y1(t), y2(t), y3(t), y4(t) (fig. 10.15). Pe figur,
secvenele de ieire sunt marcate cu numrul i al secvenei de intrare (ui,
i=1..4). Notaii: d este timpul mort, t0 este momentul actual, t1=N este
orizontul ieirii, yr este referina, ymax0, ymax1, ymin0, ymin1 sunt valorile
extreme prezise ale semnalului de ieire. Semnalul de control se poate
obine prin utilizarea unui set de reguli:
Regula 1: Dac:
ymax0<yr (corespunztor secvenei u1(t))
ymax1>yr (corespunztor secvenei u2(t))
Atunci:
u( t )
u max u min
u y
u max y max 0
y r min max 1
y max 1 y max 0
y max 1 y max 0
Regula 2: Dac:
ymin0<yr (corespunztor secvenei u3(t) )
ymin1>yr (corespunztor secvenei u4(t))
Atunci:
u t
u max u min
u y
u max y min 0
y r min min 1
y min 1 y min 0
y min 1 y min 0
(10.8)
(10.9)
(10.10)
(10.11)
Regula 3: Dac:
ymax0>yr (corespunztor secvenei u1(t))
Atunci: u(t0)=umin
Regula 4: Dac:
ymax1<yr (corespunztor secvenei u2(t))
243
(10.12)
(10.13)
(10.14)
Atunci: u(t0)=umax
(10.15)
(10.16)
i e4(t0+d+1)>0 atunci
t 0 d t t1
u(t)=umaxst(t).
(10.19)
Regula 4: Dac secvena u1(t) conduce la:
max 0 max e1 t , max 0
t 0 d t t1
e1(t0+d+1)<0
atunci
u(t)=uminst(t).
(10.20)
244
procedure TForm1.CalculComanda;
245
then uminst:=round((1.5*u[0]-umaxst/2));
//limitam umaxst, uminst
if umaxst>umax then umaxst:=umax;
if uminst<umin then uminst:=umin;
//pentru testalg >=5 suntem in regim stationar si ca urmare putem
//limita variatia semnalului de control
if (testalg>=5) then //filtrare suplimentara u(t)
u[0]:=(0.5*u[0]+(1-0.5)*umediu);
end;
Pentru a testa acest algoritm s-a utilizat acelai proces ca i cel
din aplicaia precedent, n condiiile n care parametrii procesului se
consider necunoscui i sunt identificai prin utilizarea algoritmului
celor mai mici ptrate. Se modific ns modul de calcul al semnalului de
control, respectiv instruciunea ce implementeaz algoritmul PID este
nlocuit cu apelul procedurii CalculComanda ce implementeaz
algoritmul de mai sus. De asemenea se utilizeaz un semnal de referin
trapezoidal. Evident c timpul de calcul va crete dar vor crete i
performanele sistemului de control. n fig. 10.18 se prezint evoluia
semnalelor de control i de ieire pentru 200 intervale de eantionare.
Proiecte propuse
1. Afiai evoluia identificrii parametrilor modelului procesului. Se vor
utiliza dou ferestre separate pentru coeficienii polinoamelor A i B
(ecuaia 10.1, vezi i fig. 10.19). Dac este necesar se pot afia i
parametrii procesului. Afiai i evoluia erorii de model respectiv
diferena ntre valoarea ieirii furnizate de model i valoarea ieirii
msurate.
2. Afiai numeric valorile parametrilor procesului i respectiv valorile
parametrilor modelului. Gsii modaliti simple prin care s putei
modifica parametrii procesului, n timpul simulrii. Urmrii n acest caz
modul n care lucreaz algoritmul de identificare.
3. n fereastra n care se afieaz semnalul de control, afiai i evoluiile
semnalelor umaxst respectiv uminst (vezi i fig. 10.19).
4. n fereastra n care se afieaz valorile semnalelor de referin i de
ieire afiai i prediciile calculate pentru cele patru iruri de control
utilizate n simulare (vezi i fig. 10.19).
251
1
s ( s 1)
Acest sistem este instabil n bucl deschis deoarece are un pol a crui
parte real este pozitiv. Utiliznd T=0.1s (perioada de eantionare), se
poate calcula funcia de transfer n z (de exemplu utiliznd funcii
Matlab [34]):
H ( z)
0.0051709( z 1.034)
( z 1.105)( z 1)
254
K s z
(s p)