Sunteți pe pagina 1din 10

Tehnici și implementări de cod (Design Patterns)

Contents
8 Tehnici și implementări de cod (Design Patterns)............................................ 2
8.1 Introducere .................................................................................................................. 2
8.2 Programare de stare ............................................................................................... 4
8.3 Automate de stare .................................................................................................... 4
8.4 Programarea evenimentelor .............................................................................. 5
8.5 Aplicații.......................................................................................................................... 8
8.5.1 Exemplul 1 – Implementarea metodei de Pooling ........................ 8
8.5.2 Exemplul 2 – implementarea unei aplicații utilizând
declanșarea unor evenimente...................................................................................... 8
8.6 Întrebări și exerciții.............................................................................................. 10

1
Instrumentatie Virtuala

8 Tehnici și implementări de cod (Design Patterns)


Acest capitol se referă la implementari de cod și tehnici care sunt
soluții la probleme specifice în proiectarea LabVIEW.

8.1 Introducere
Multe din VI-urile pe care le realizăm îndeplinesc sarcini succesive.
LabVIEW este implicit setat, astfel încât, să nu se realizeze o programare
secvențială.

Figura 8.1 Aplicație LabVIEW fară impunerea ordinii de execuție a modulelor.


În exemplul de mai sus se poate observa acest lucru. Dacă rulăm
aplicația, funcțiile se vor executa haotic, fară o anumită ordine de execuție,
oricare dintre acestea putându-se executa prima.

Pentru impunerea unei ordini de execuție a operațiilor se recomandă


utilizarea clusterelor de eroare și a refnum-urilor, care sunt referințe ale
unor tipuri specifice de date.

Nu toate funcțiile disponibile în LabVIEW au disponibile clustere de


eroare, așa cum este și funcția One Button Dialog, utilizată și în exemplul de
mai sus.

Figura 8.2 Aplicație LabVIEW și utilizarea clusterelor de eroare existente.

2
Tehnici și implementări de cod (Design Patterns)

Una din metodele de alegere și fixare a ordinii de execuție, în lipsa


clusterelor de eroare, este cea de utilizare a structurii secvențiale. Aceasta a
fost deja studiată în capitolul 3.

Cea mai bună metodă de realizare a acestui VI este, însă, utilizarea


structurilor de eroare pentru modulele care nu au incluse clustere de eroare.

Figura 8.3 Aplicație LabVIEW utilizând Error Case Structure.


Această structură nu este disponibilă direct în LabVIEW, ci se crează
cu ajutorul Case Structure.

O altă problemă este faptul că această aplicație va rula o singură dată,


programul oprindu-se din rulare la sfârșitul execuției ultimului bloc.

Practic aceasta este structura simplă a unui VI. Aceasta poate realiza
o simplă măsurare, calculare sau chiar afișare a unui rezultat și nu necesită
o acțiune de start sau stop din partea utilizatorului.

Un VI general are, insă, o structură mai complexă. Așa cum am


amintit într-un capitol anterior, un VI general are trei componente:

- Un start sau o inițializare;


- Codul propriu-zis, care de obicei este cuprins într-o buclă While și
care ajută la execuția multiplă a aceleiași porțiuni de cod;
- Un stop, utilizat pentru eliberarea resurselor.

O astfel de tehnică de implementare este folosită și în cazul


sistemelor care folosesc diagrame de stare, doar că în cazul acestora, în
interiorul buclei while, pot fi implementate mai multe acțiuni, pe parcursul
unei iterații putând rula doar o acțiune.

3
Instrumentatie Virtuala

8.2 Programare de stare


Programarea de stare ne ajută sa rezolvăm următoarele probleme,
care în cazul programării secvențiale nu pot fi rezolvate:

− Dacă este necesară schimbarea ordinii de execuție a secvențelor?


− Dacă este necesară repetarea unei secvențe de mai multe ori decât
ală secvență?
− Dacă unele elemente dintr-o secvență se execute doar atunci când
este întâlnită o anumită condiție?
− Dacă este necesară oprirea imediată a programului, inaintea
sfârșitului execuției secvenței?

Diagrama tranzițiilor de stare este un tip de diagramă care indică


starea programului și a tranzițiilor între stări.

Stare – parte a programului care satisface o anumită condiție,


realizează o acțiune, sau asteaptă un eveniment;

Tranziție – condiție, acțiune, sau eveniment care provoacă trecerea


de la o secvență la alta.

Figura 8.4 Exemplu de diagramă a tranzițiilor.

8.3 Automate de stare


Diagramele de stare sunt implementate fizic prin intermediul
automatelor de stare.

Cele mai comune utilizări sunt:

4
Tehnici și implementări de cod (Design Patterns)

− Pentru crearea interfețelor, în care acțiuni diverse ale utilizatorului


produce schimbări ale secvențelor programului;
− Pentru procesul de testare unde o stare reprezinta fiecare segment
al procesului.

Automatul de stare constă dintr-un set de stări și funcții de tranziție,


la o altă stare. Fiecare stare ne poate conduce la una sau mai multe stari, sau
la sfârșitul procesului.

Figura 8.5 Structura de bază a unui automat de stare.

8.4 Programarea evenimentelor


Eveniment – o notificare asincrona a unei acțiuni ce a avut loc.

Asincron se referă la faptul că o funcție începe o operație și poate să


reapară înaintea încheierii execuției operațiunii. Evenimentele provin din
interfața cu utilizatorul, extern, sau din alte părți ale programului.

Evenimentele din interfață pot fi acțiuni ale mousului, apăsarea unei


taste, etc. Evenimentele externe pot fi timere sau trigere care semnalizează
sfârșitul achiziției unui semnal.

Este bine de știut faptul că, un element de control de pe Panoul


Frontal este o sursă de evenimente. Un eveniment este o acțiune asupra
sursei de evenimente. De exemplu, schimbarea valorii, Value Change, a
elementului de control este un eveniment.

5
Instrumentatie Virtuala

Nu trebuie să confundăm evenimentul cu ceea ce poate să facă, sau


rolul care îl îndeplinește elementul de control respectiv. Acțiunea
elementului de control se numește metodă.

Programarea evenimentelor - metodă de programare în care


programul așteaptă ca un eveniment să se petreacă înaintea executării uneia
sau mai multor funcții.

Comparând metoda clasică de programare cu cea prin evenimente


putem trage următoarele concluzii:

Metoda clasică presupune rularea într-o buclă continuă a codului


pentru a verifica dacă nu au apărut cumva modificări. Aceasta necesită
tinerea ocupată a resursei procesorului. Poate să nu detecteze schimbările
succesive dacă acestea se execută foarte rapid.

Prin metoda de programare bazată pe detecția evenimentelor avem


următoarele avantaje:

− se elimină inspecția succesivă;


− se reduce solicitarea procesorului;
− se simplifică diagrama bloc;
− se garantează detecția tuturor evenimentelor ce au loc.

Figura 8.6 Stuctura de detecție evenimente.


Timeout – specifică timpul de așteptare al unui eveniment (ms). Dacă
se specifică o valoare, atunci trebuie creat Timeout case.

Eveniment Data – Identifică datele oferite de LabVIEW atunci când


apare un eveniment. Similar cu unbundle by name.

6
Tehnici și implementări de cod (Design Patterns)

Eveniment Filtru – Identifică subgrupul de date disponibil în


Eveniment Data pe care structura îl poate modifica.

Ca și funcționalitate se recomandă plasarea structurii event case


într-o buclă while. Fiecare eveniment se va executa într-o iterație a buclei
while. Structura event este pusă în modul sleep atunci când nu apare nici un
eveniment.

Pentru configurarea fiecărui eveniment utilizăm funcția click cu


butonul din dreapta al mouse-ului și selectăm Edit Events Handled by This
Case.

Figura 8.7 Fereastra de configurare a evenimentelor.


În fereastra 1 este prezentată o listă cu evenimente și de care se
poate ocupa case-ul curent, în fereastra 2 se poate alege sursa
evenimentului, iar în fereastra 3 se prezintă evenimentele individuale ale
fiecărei surse de generare de evenimente.

Săgeata verde indică faptul că evenimentul a avut loc și LabVIEW la


procesat, iar săgeata roșie indică faptul că evenimentul a avut loc, dar
LabVIEW încă nu la procesat.

7
Instrumentatie Virtuala

8.5 Aplicații

8.5.1 Exemplul 1 – Implementarea metodei de Pooling

Figura 8.8 Panoul frontal al exemplului 1.

Figura 8.9 Diagrama exemplului 1.

8.5.2 Exemplul 2 – implementarea unei aplicații utilizând


declanșarea unor evenimente
Pentru Definirea unei structuri de tip Event se va plasa din Paleta de
Structuri – Event Structure.

Pentru configurarea evenimentului, după plasarea structurii în


diagrama bloc, utilizăm funcția click cu butonul din dreapta al mouse-ului și
selectăm Edit Events Handled by This Case.

În fereastra din Figura 8.7 se va selecta Sursa(din Event Sources) și


tipul eventului (din Events). Acestea vor apărea de fiecare dată în partea de
sus a structurii. Pentru a adăuga un nou event utilizăm funcția click cu
butonul din dreapta al mouse-ului pe marginea structurii și selectăm Add
Event Case.

8
Tehnici și implementări de cod (Design Patterns)

Figura 8.10 Adăugarea unui eveniment nou.

Structura de evenimente va fi creată astfel încât să poată interpreta


5 evenimente.

Figura 8.11 Case-ul evenimentului 0.

Figura 8.12 Case-ul evenimentului 1.

9
Instrumentatie Virtuala

Figura 8.13 Case-ul evenimentului 2.

Figura 8.14 Case-ul evenimentului 3.

Figura 8.15 Case-ul evenimentului 4.

Figura 8.16 Panoul frontal al exemplului 2.

8.6 Întrebări și exerciții


1. Care este avantajul Event-urilor, în comparație cu aplicația 1?
2. Care este funcționalitatea fiecărui event în parte?

10

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