Documente Academic
Documente Profesional
Documente Cultură
După cum s-a abservat din cele prezentate până în prezent, mediul
MATLAB/Simulink/RTW reprezintă un cadru propice pentru dezvoltarea unor aplicaţii de timp
real. Acest lucru nu înseamnă că MATLAB/Simulink/RTW este pretabil pentru comercializarea
unor aplicaţii industriale de timp real deoarece ar însemna ca beneficiarul să achiziţioneze
întregul mediu (cu un preţ de achiziţie destul de mare, aproximativ 12000 $) şi apoi să intre în
posesia aplicaţiei de timp real cu o interfaţă implementată în Simulink.
Ceea ce face acest mediu deosebit de atrăgător este faptul că, pentru prima oară, un inginer
automatist este pus în situaţia de a parcurge toate etapele corespunzătoare unui proces de
proiectare folosind un software unitar şi o placă de achiziţii de uz general. Se poate spune că
procesul de proiectare, implementare şi testare a unei bucle de reglare s-a standardizat.
Inginerul automatist porneşte de la formularea problemei de automatizare. Aceasta
presupune cunoaşterea modelului şi a parametrilor modelului părţii fixe. Dacă acesta nu este
cunoscut, folosindu-se placa de achiziţii şi Data Acquisition toolbox, Signal Processing toolbox,
Control system toolbox sau Identification toolbox, se poate determina un model aproximativ al
părţii fixe. Folosind-se acest model şi o serie de tehnici de proiectare se poate determina
regulatorul care conduce la performanţele dorite în bucla de reglare închisă. Acest algoritm de
reglare se poate testa fie sub formă continuală fie sub formă numerică (algoritm numeric de
reglare) folosindu-se mediul MATLAB/Simulink. În acest mediu se pot introduce o serie
întreagă de elemente neliniare (saturaţii, zone de insensibilitate, histerezis) precum şi blocuri de
întârziere care să facă simularea cât mai aproapiată de realitate.
În continuare, folosindu-se extensia RTW/Real-Time Windows Target sau alte extensii ale
mediului MATLAB/Simulink, se poate trece direct de la modelarea sistemului de reglare la
testarea comportamentului său în timp real, ajungându-se la implementarea aşa-numitului
Hardware-in-the loop: algoritmul numeric de reglare obţinut este compilat într-un executabil de
timp real care comunică cu exteriorul prin intermediul plăcii de achiziţii. Placa de achiziţii este
conectată la grupul (element de execuţie + instalaţia tehnologică + traductoare) ce formează
partea fixă propriu-zisă. Lansarea în execuţie a executabilului de timp real conduce la
posibilitatea testării în timp real, efectivă, a comportamentului sistemului de reglare şi la
posibilitatea de a concluziona dacă algoritmul proiectat este acceptabil sau nu.
Dacă rezultatele corespund cerinţelor de proiectare, atunci acest algoritm se validează şi se
trece la faza de implementare industrială a sa fie pe diverse automate programabile, fie pe
regulatoare numerice, fie pe diferite calculatoare de proces. Evident, modul de implementare
depinde tipul de echipament folosit precum şi de sotware-ul de proces adoptat.
Dacă rezultatele testării în timp real a sistemului de reglare nu sunt satisfăcătoare, se poate
relua procesul de proiectare prezentat anterior fie de la identificarea mai bună a părţii fixe
(modelul diferă prea mult de partea fixă reală), fie de la reproiectarea regulatorului.
Se implementează astfel un proces iterativ de proiectare-testare în timp real care conduce
în final la adoptarea celei mai bune soluţii într-un timp mult mai mic şi cu rezultate mult mai
bune decât în procesul clasic de proiectare a unui SRA.
Întregul proces de proiectare este reprezentat schematic în figura de mai jos (Fig. 1).
Distingem în schema din Fig. 1 trei medii distincte: MATLAB, Simulink precum şi
extensia de timp real a Simulink. Această extensie este, începând cu MATLAB Release 13,
Real-Time Windows Target. O serie întreagă de producători pot adăuga şi propriile extensii care
să le facă produsele mai accesibile din mediul MATLAB/Simulink.
Vom exemplifica acest lucru cu ajutorul mediului experimental produs de firma Quanser
Consulting (Canada).
124
Modelare
Model
Parte Fixă
Identificare
Testare în
Proiectare Simulink
Parte Fixă
Regulator a SRA
Reală
Element Model
Traductor Testare în Regulator
Execuţie
MATLAB
MATLAB Simulink
a SRA
C C
N A
A N
Hardware-in-the-loop
(testare în timp real)
Algoritm de RTW
Reglare Numeric în Real-Time Windows Target
timp real WinCon
125
În configuraţia locală, WinCon Client, executând codul de timp real, rulează pe aceeaşi
maşină şi în acelaşi timp cu WinCon Server (adică interfaţa grafică în mod utilizator, user-mode
graphical interface).
În configuraţia la distanţă, WinCon Client rulează pe o maşină separată de WinCon Server.
Cele două programe comunică întotdeauna folosind protocolul TCP/IP. Fiecare WinCon Server
poate comunica cu mai multe WinCon Clients, şi reciproc, fiecare WinCon Client poate
comunica cu mai multe WinCon Servers.
Configuraţia locală
Configuraţia locală este prezentată în Fig. 2.
127
Fig. 4. Diagrama bloc a ierarhiei software
În cazul în care se foloseşte unul dintre sistemele de operare Windows 98/Me/2000/XP atunci
sunt necesare următoarele drivere:
Configuraţia la distanţă
În această configuraţie cele două componente principale, WinCon Server şi WinCon Client
rulează pe două calculatoare diferite, comunicaţia făcându-se printr-un protocol de tip TCP/IP
(vezi Fig. 5).
O configuraţie la distanţă mai complexă este prezentată în Fig. 6. şi constă într-un server
care gestionează mai mulţi clienţi.
Calculatoarele pe care rulează clienţii sunt legate într-o reţea şi au posibilitatea de
comunicaţie prin intermediul acestei reţele
128
Fig. 5. Configuraţia la distanţă: arhitectura cu 2 PC-uri
WinCon Server
WinCon Server este o componentăsoftware care realizează următoarele funcţii:
Conversia unei diagrame Simulink în cod sursă C folosind Real-Time Workshop (RTW).
Compilarea şi link-editarea codului sursă generat, folosind mediul Microsoft Visual C++,
pentru a crea executabilul de timp real de tip WinCon Controller Library (*.wcl).
Download-area fişierului tip WinCon Controller Library (.wcl) către WinCon Client
pentru execuţie.
Pornirea şi oprirea codului de timp real de pe WinCon Client (de la distanţă, prin reţea, în
cazul unei configuraţii la distanţă configuration).
Menţinerea unei comunicaţii TCP/IP cu orice WinCon Client conectat.
Menţinerea unei comunicaţii cu Simulink pentru a realiza modificarea în timp real a
parametrilor regulatorului. De exemplu, dacă se modifică în Simulink valoarea unui bloc
de amplificare (Gain block), atunci WinCon Server transmite această informaţie către
WinCon Client şi schimbarea se operează imediat în controllerul (codul de timp real) care
rulează.
Efectuarea de schimbări în parametrii controllerului folosind panourile de control definite
de utilizator (user-defined Control Panels).
Afişarea fluxurilor de date care provin de la codul de timp real via WinCon Client.
Salvarea datelor de timp real pe disc sau/şi în MATLAB workspace.
129
WinCon Client
WinCon Client este o componentă software de timp real care rulează codul de timp real generat
dintr-o diagramă Simulink la frecvenţa de eşantionare specificată. Ea poate îndeplini următoarele
sarcini:
Recepţionarea codului controllerului în forma unui fişier de tip WinCon Controller
Library (.wcl) de la WinCon Server.
Rularea controllerului în timp real.
Menţinerea comunicaţiei cu orice WinCon Server conectat.
Trimiterea unui flux de date în timp real către orice WinCon Server(e) care cere (cer)
acest lucru.
Gestionarea timpilor de tranziţie definiţi de utilizatori pentru a controla cantitatea
maximă de CPU alocată codului de timp real
Sistemul de operare
Windows
Echipamente ale Drivere Taskuri în
sistemului de calcul echipamente foreground
Întrerupere
ne-prioritară Rutine tratare
întreruperi Nucleu de timp real
sistem (RTW, RTX)
Microprocesor (ne-prioritare)
Rutine tratare
întreruperi
Timp real
Întrerupere (prioritare)
prioritară
Task de timp real
Placa de achiziţii (Controller)
130
Putem să facem o distincţie între taskurile care se vor executa în prezenţa unei extensii de
timp real a SO Windows (care nu este un sistem de operare de timp real).
- taskurile obişnuite a căror execuţie este gestionată de către Windows se vor numi
foreground tasks. Execuţia lor nu are nici o legătură cu timpul real. Ele vor fi executate pe
rând de către Windows folosindu-se o partajare a timpului de execuţie a fiecărui task (time
sharing). Întreruperile utilizate de aceste taskuri sunt mai puţin prioritare, fiind de nivel
mai mare.
Taskurile de timp real sunt gestionate de către kernelul de timp real. Ele folosesc întreruperile
cele mai prioritare, de nivel imediat în jurul microprocesorului. Taskurile din foreground se vor
executa numai în timpul în care nu se tratează o întrerupere de timp real.
După cum se observă din Fig. 7, taskurile de timp real nu sunt executate de către Windows, ci
numai de către kernelul de timp real care este separat de sistemul de operare Windows. Din
această cauză există o serie de restricţii în ceea ce priveşte folosirea unor componente ale
sismului de operare Windows de către aplicaţiile de timp real.
Diagramele de timp din Fig. 8 ilustrează principiile operării în timp real. Sistemul sau
ceasul/timerul hardware generează întreruperi la intervale de timp fixe TS. TS este perioada de
eşantionare selectată de către utilizator.
Deoarece procesorul poate deservi şi alte întreruperi hardware sau cereri de acces direct la
memorie (direct memory access, DMA), o perioadă de timp nedeterminată va fi necesară pentru
ca procesorul să treacă la deservirea întreruperii venite de la controllerul implementat în forma
WinCon Client. Această durată de timp este referită drept perioadă de latenţă (latency period) TL.
Taskurile principale (foreground tasks, lansate de utilizator) afectează indirect această perioadă
de latenţă deoarece ele folosesc resurse hardware precum drivere video sau de harddisk. Chiar
dacă sub Windows NT/2000/XP toate operaţiile din foreground şi chiar operaţiile efectuate de
driverele de dispozitive rulează cu o prioritate mai mică decât codul de timp real, operaţiile
efectuate direct de către hardware, precum DMA, pot afecta perioada de latenţă. Se observă din
Fig. 8. cum latenţa (latecy) este variabilă.
La sfârşitul perioadei de latenţă, controllerul (executabilul de timp real implementat de
WinCon Client) efectuează calculele corespunzătoare momentului de eşantionare, calcule care
durează o perioadă TC. După ce controllerul completează toate calculele şi operaţiile de
131
intrare/ieşire, procesorul reia execuţia taskurilor din foreground (precum Simulink, LabVIEW,
etc.) până la apariţia unei noi întreruperi.
Perioada de eşantionare efectivă, TE, este intervalul de timp dintre două rutine de deservire a
întreruperilor (Interrupt Service Routines, ISR's) furnizate de către controller. Această perioadă
de eşantionare este variabilă şi depinde de timpul de latenţă (latency time).
Testele indică un timp de latenţă de ordinul zecilor de microsecunde sub Windows
NT/2000/XP, adică sub sistemele de operare sub care se execută mediul de timp real RTX.
Această valoare depinde de taskurile din foreground care rulează, de modul în care ele folosesc
resursele hardware ale calculatorului, precum şi de viteza sistemului (timpii de acces la memorie,
de transfer pe magistrală, de viteza microprocesorului precum şi a echipamentelor periferice).
Dacă se rulează o configuraţie la distanţă, deci dacă WinCon Client rulează pe un PC dedicat,
timpul de latenţă este sub 10 microsecunde. Întârzierile pentru efectuarea calculelor
(computational delay), TC, depind mai ales de complexitatea controllerului de timp real care
rulează. Scala de timp din Fig. 8 este oarecum exagerată de vreme ce controllere care să
consume mai mult de 50% din timpul procesorului şi care să conducă la asimetrii de execuţie
considerabile sunt rar întâlnite.
Un factor important de subliniat este că latenţa este relativ constantă, reflectând timpul
necesar pentru ca procesorul să recunoască o cerere de întrerupere cu bază de timp hardware (de
la untimer intern al PC-ului sau de la baza de timp a plăcii de achiziţii), pentru a încărca vectorul
de întrerupere şi pentru a invoca (CALL) rutina de deservire a întreruperii.
Deci, dacă latenţa este de aproximativ 10 sec pentru prima perioadă de eşantionare, va fi în
jurul acestei valori şi pentru celelalte momente de eşantionare. Din această cauză valoarea
actuală TE a perioadei de eşantionare va fi foarte aproape de perioada de eşantionare TS dorită şi
impusă de către noi. Eşantioanele sunt numai decalate cu intervalul de latenţă TL. Mai mult, cum
de obicei perioada de eşantionare este controlată de un timer hardware, perioada de eşantionare
medie va fi foarte precisă şi apropiată de cea dorită.
Alegerea perioadei de eşantionare
Determinarea celei mai mari frecvenţe de eşantionare (implicit a celei mai mici perioade de
eşantionare) depinde de cât de mare este puterea de calcul care este alocată taskurilor din
foreground. Spre exemplu un astfel de task este inclus în WinCon Server şi îl reprezintă afişarea
(plotarea în timp real) datelor de timp real furnizate de către controller (sub formă de cadre de
date, frames, pentru a spori viteza şi eficienţa). Timpul alocat acestor taskuri este (vezi Fig. 7)
TF = TE - TC.
De obicei se porneşte cu cea mai mică frecvenţă de eşantionare pentru procesul care se cere
controlat. Dacă se doreşte o frecvenţă mai mare se măreşte treptat această frecvenţă cu urmărirea
efectelor pe care le are această creştere de frecvenţă asupra taskurilor din foreground. Dacă
această frecvenţă de eşantionare creşte prea mult, atunci TE se micşorează corespunzător şi, la
fel, se micşorează şi TF. Rezultă mai puţin timp alocat de procesor pentru procesele din
foregriund, lucru vizibil prin încetinirea apreciabilă a vitezei mouse-ului sau a ploturilor de timp
real. Această degradare indică faptul că controllerul de timp real rulează prea repede pentru
resursele PC-ului folosit de către WinCon Client. Spunem acest lucru deoarece TC, timpul în care
controllerul face oparaţiile de intrare/ieşire şi calculele necesare, este dependent de viteza PC-
ului pa care rulează. Dacă PC-ul este mai performant, atunci TC se micşorează şi, implicit, TF se
măreşte. Fereastra WinCon Client oferă o statistică în ceea ce priveşte controllerul de timp real.
132
Fig. 10. Semnificaţia icoanelor din interfaţa WinCon Server
134
Setări RTW
Descriere
System target file Selectează fişierul Target Language Compiler wincon.tlc.
(Real-Time Workshop Tab) Fişierul wincon.tlc se găseşte în
C:\MATLAB6p5\rtw\c\Wincon\.
Template makefile - pentru a genera cod pentru WinCon Client ce rulează
(Real-Time Workshop Tab) sub Windows NT/2000/XP, alegem: nt_msvc.tmf
- pentru WinCon Client ce rulează sub Windows 98,
alegem: win_msvc.tmf.
Make command Se alege make_wc.
(Real-Time Workshop Tab)
Solver Fixed-Step Size Se setează la valoarea dorită a perioadei de eşantionare TS (în
(Solver Tab) secunde. De menţionat că se va reconstrui (rebuilt) codul de
timp real la fiecare modificare a valorii perioadei de
eşantionare.
Solver options Alegerea metodei de integrare depinde, în anumite cazuri, de
(Solver Tab) controllerul folosit. Sunt suportate numai metode de integrare
cu pas constant. În mod tipic se foloseşte metoda ode1 (Euler).
Solver Mode Se setează pe Single-tasking. (o singură perioadă de
(Solver tab) eşantionare)
135
Procedura Build generează un fişier de tip WinCon Controller Library (adică .wcl). Când
generarea de cod şi compilarea sunt complete, apare un mesaj în fereastra de comandă care
indică crearea cu succes a unui fişier . wcl. De exemplu, din modelul q_sine.mdl mesajul care
apare este:
### Created executable: q_sine.wcl
### Successful completion of Real-Time Workshop build procedure for
model: q_sine
După completarea cu succes a procedurii de construcţie (Build procedure), WinCon Server
transmite automat (automatically downloads) fişierul controller (cu extensia .wcl) către WinCon
Client, de unde poate fi executat.
136
c) Folosirea bibliotecilor cu legare dinamică în timp real
Bibliotecile cu legare dinamică (Win32 dynamic link libraries, DLLs) conţin cod executabil care
poate fi încărcat dinamic de către aplicaţiile care fac apel la astfel de funcţii. Cea mai mare parte
a sistemului de operare Windows este implementată sub formă de biblioteci cu legare dinamică.
Folosirea bibliotecilor cu legare dinamică permite ca mai mult decât o aplicaţie să partajeze
acelaşi cod precum codul funcţiilor din biblioteca C standard. Cum aceste biblioteci cu legare
dinamică sunt folosite foarte frecvent de cătrea o gamă largă de aplicaţii sub o formă partajată,
ele sunt incompatibile cu codul de timp real. Codul de timp real se compilează numai pentru
kernelul de timp real. Cum bibliotecile cu legare dinamică sunt în mod esenţial executabile pe 32
de biţi (Win32 executables), conţinând cod compilat pentru mediul Win32, ele nu pot fi
executate de către kernelul de timp real. Rezultă că bibliotecile cu legare dinamică nu se pot
folosi de către codul de timp real. Cum bibliotecile numerice folosite pentru compilare (third
party numerical libraries) sunt implementate ca biblioteci cu legare dinamică, la fel ca interfeţele
de programare a majorităţii driverelor de dispozitive, această restricţie este deosebit de
deranjantă. Dacă se pot obţine versiuni de biblioteci cu legare statică ale bibliotecilor cu legare
dinamică, această restricţie este depăşită (considerând că, la rândul lor, funcţiile din biblioteca cu
legare statică nu apelează altele cu legare dinamică).
d) Script-uri MATLAB
Programele MATLAB (MATLAB scripts, .m) se pot folosi pentru a controla WinCon, ele nu pot
fi folosite în codul de timp real. MATLAB este un limbaj interpretativ şi nu poate rula în timp
real. Mai mult, motorul MATLAB şi bibliotecile numerice nu au fost compilate pentru mediul de
timp real, deci nu este posibil să apelăm MATLAB din codul de timp real. În consecinţă, nu se
folosesc blocurile “MATLAB Fcn” din “Functions & Tables” într-o diagramă Simulink ce
va fi folosită pentru a genera cod de timp real.
e) Compilatorul MATLAB
MATLAB este un limbaj foarte convenabil pentru implementarea algoritmilor numerici. Este
deci foarte tentant să scriem S-funcţii folosind MATLAB în loc de C. Pentru a putea rula aceste
funcţii în timp real am putea crede că cea mai bună metodă este folosirea compilatorului de
MATLAB (MATLAB Compiler). Din păcate, nu este posibil. Codul generat de compilatorul
de MATLAB nu poate fi executat în timp real.
Problema nu constă în concepţia MATLAB ci în implementarea compilatorului de
MATLAB. Compilatorul MATLAB face uz intensiv de biblioteci cu legare dinamică pentru
implementarea rutinelor numerice de care are nevoie pentru a executa codul MATLAB ca pe un
program provenit din limbajul C. Din nefericire, folosirea Win32 dynamic link libraries nu este
permisă în mediul de timp real implementat în nucleu. Rezultă cum codul generat de
compilatorul MATLAB nu poate rula în timp real. Dacă MathWorks ar furniza bibliotecile cu
legare dinamică ca biblioteci cu legare statică, atunci s-ar crea posibilitatea ca MATLAB
Compiler să furnizeze cod C pentru generarea de cod de timp real. Până când MathWorks nu va
face această opţiune disponibilă, the MATLAB Compiler nu va putea fi suportat de WinCon sau
de orice alt target de timp real.
137
Comanda de la regulator (ieşirea plăcii de achiziţie) este amplificată în putere şi transmisă
servomotorului.
Grupul motor-reductor
138
Modul pendul-invers ROTPEN, cuplat la servomecanismul de acţionare
Fiecare dintre experimentele de mai sus dispune de traductoarele necesare pentru implementarea
sistemului de reglare. Astfel, în cazul instalaţiei SRV-02 dispunem de un traductor
potenţiometric de poziţie a braţului rotativ.
În cazul braţului flexibil deflecţia vârfului este măsurată cu ajutorul unei mărci tensiometrice iar
în cazul pendulului invers deviaţia pendulului de la verticală se măsoară cu ajutorul unui
traductor potenţiometric.
Pentru implementarea controllerului de timp real se foloseşte o diagramă Simulink prezentată şi
detaliată mai jos.
139
Implementarea blocului State Feedback
140
Procesul general de proiectare şi testare în timp real este prezentat în figura de mai sus. În cazul
particular al cercetărilor experimentale folosite în prima fază a contractului de cercetare, folosind
mediul hardware/software prezentat mai sus, se abordează următorul flux de proiectare :
1. Determinarea parametrilor modelelor asignate instalaţiilor tehnologice
(părţilor fixe).
2. Estimarea parametrilor modelelor
3. Proiectarea algoritmului de reglare folosind anumite metode de sinteză a
regulatorului.
4. Simularea în mediul MATLAB/Simulink a comportamentului sistemului de
reglare în buclă închisă. Punctele 3 şi 4 se repetă iterativ până la obţinerea
performanţelor dorite.
5. În modelul Simulink folosit pentru simulare se înlocuieşte modelul părţii
fixe cu blocurile de intrare/ieşire corespunzătoare plăcii de achiziţie folosite.
Folosind Real-Time Window target sau WinCon target se generează aplicaţia de timp real
corespunzătoare modelului Simulink obţinut anterior. Această aplicaţie de timp real va deveni
aplicaţia hardware-in-the-loop folosită pentru testarea algoritmului de reglare în timp real asupra
instalaţiei real pentru care a fost conceput.
141