1
Tratarea exceptiilor
Codul este adesea scris fara sa se ia in
consideratie eventualele erori care pot aparea. Cand apar evenimente
fata de care aplicatia nu se asteapta apar probleme. Atunci, in faza de
depanare, trebuie sa se revizuiasca codul pentru implementarea unor
capcane de erori si corectie, desi de obicei nu este suficient.
Tratarea exceptiilor trebuie luata in consideratie inca din faza de
inceput a dezvoltarii aplicatiei. Implementarea unei tratari a erorilor
duce la un cod cu mult mai robust.
Acest capitol discuta despre erori si despre topica
tartarii exceptiilor in Lab VIEW. Pentru inceput, tratarea exceptiilor
va fi definita si insotita de rolul ei in aplicatii. Aceasta explicatie
va clarifica si importanta tratarii exceptiilor. Dupa aceea, vor fi
prezentate diferite tipuri de erori ce pot apare. Aceasta va fi urmata
de descrierea utilitarelor disponibile in pachetul Lab VIEW pentru
tratarea exceptiilor, ca si unele utilitare de depanare. La sfarsit,
cateva moduri diferite de a combate erorile vor fi demonstrate.
6.1 Definitia tratarii exceptiilor
Eceptiile sunt evenimente neintentionate sau
nedorite care apar in timpul executiei programului. O exceptie poate fi
orice eveniment care in mod normal nu trebuie sa aiba loc. Asta nu
inseamna ca apritia unei exceptii este neasteptata, dar nu trebuie sa
apara in circumstante normale. O eroare rezulta atunci cand apare ceva
ce tu nu ai vrue sa apara. Pentru aceasta, facerea mai multor pasi
alternativi de executie are sens cand au loc exceptii. Cand se ivesc
exceptii sau erori ea trebuie eleminata intr-o maniera potrivita.
Presupuneti ca ati scris un program in care
impartiti doua variabile intregi, x la y. Rezultatul este folosit in
alt scop. In unele ocazii, y poate sa fie setat pe zero. Unele programe
nu capteaza unele erori de genul impartirea la zero si permite
procesorului sa lanseze in executie exceptia. In Lab VIEW rezultatul
aceastei exceptii este nedefinit. Lab VIEW returneaza Inf sau infinit,
in acest caz. Acesta este exemplul unui rezultat neintentionat si
neasteptat. Infinitul poate fi covertit cu succes intr-un cuvant intreg
in Lab VIEW. Dacavaloarea este convertita de pentru alte intrebuintari,
pot apare si alte erori. Acesta este exemplul unei erori simle care
poate fi inlaturata folosind tratarea eceptiilor.
Este nevoie de tratari ale exceptiilor pentru a
inlatura unele probleme sau erori care pot apare. Este un mecanism care
permite programului sa detecteze si pe cat posibil sa-si revina in
timpul excutiei erorilor. Tratarea exceptiior duce la mult cod,
planificandu-se dinainte eventualele probleme. Capacitatea unei
aplicatii de a raspunde la un eveniment neasteptat este critica.
Implementarea unei tratari a exceptiilor duce la un cod mult mai sigur.
Puteti sa va srieti singur codul pentru a incerca sa
captati cat mai multe erori, dar asta necesita si mai mult cod de
implementat. La un moment dat veti avea mai mult cod inclus pentru a
capta erorile decat pentru a duce la bun sfarsit o anumita
intrebuintare. Codul pentru tratarea exceptiilor poate contine uneori
unele erori. Tu insuti ai creeat o problema cand se capteaza erorile.
Detectia de erori si corectia de erori sunt doua
activitati diferite, dar amandoua fac parte din tratarea exceptiilor.
Detectia de erori este constituita din cod care gaseste erorile.
Corectia de erori este procesul care capteaza si trateaza posibilitatea
de aparitie a erorilor. Mai intai tu trebuie sa captati erorile atunci
cand ele apar, apoi sa determinati ce actiune sa aiba loc.
Reprezentarea detectiei de erori este folositoare la
depanarea codului in timpul fazei de testare si integrare. Plasarea
unor verificari de erori in cod va ajuta la gasirea greselii in timpul
fazei de test. Acelasi mecanism poate juca un rol dual. Mecanismul de
detectie poate controla transferul la tartarea erorii cand tratarea
este dezvoltata. Acesta va fi benefic daca folositi un model de
dezvoltare interativ, cand se pot adauga si chestii noi in fiecare
ciclu.
Tratarea exceptiilor se comporta putin diferit in
diferitele limbaje de progranare. Java utilizeaza clase de exceptii
unde codul pentru tratare poate fi scris. De exemplu, o exceptie este
prezenta prin intermediul unei clase “Throwable” sau de una din
subclasele acesteia. Acest obiect este folosit pentru a transporta
punctul unde s-a produs exceptia la tratarea care o capteaza.
Programatorii pot de asemenea sa-si defineasca propriile clase de
exceptii pentru aplicatiile lor.
C++ foloseste cuvinte cheie pentru tratarea
exceptiilor: Try, Catch si Throw. Cuvintele cheie Try si Catch
identifica blocul de cod. Comenzile Try forteaza aplicatia sa-si
reaminteasca locatia curenta in stiva de apelari si sa realizeze testul
pentru a detecta eroarea. Cand apare o exceptie, executia trece direct
la blocul captat. Dupa ce blocul captat a fost executat, stiva de
chemari va fi “rulata inapoi” la punctul program unde se afla blocul
Try.
Lab VIEW furnizeaza cateva utilitare pentru detectia
de erori. Dar ca si toate celelate limbaje de programare, implementarea
unei tratari a exceptiilor ramane la latitudinea programatorului.
Urmatoarele sectiuni va vor ghida in crearea codului pentru tratarea
erorilor pentru aplicatiile dumneavoastra. Capitolul 10 acopera topici
cu referire la Programarea Orientata pe Obiect, incluzand definitiile
obiectelor, claselor si subclaselor, dar tratarea exceptiilor in Java
si C++ nu fac capitolul acestei carti.
6.2 Tipuri de erori
Erorile care apar in programele scrise in Lab VIEW
pot fi de tipul I/O sau logic. Erorile I/O sunt acelea cand
ezulta la incercarea unui program de a efectua operatii cu instrumente
exterioare, fisiere, sau alte aplicatii. O eroare logica este
rezultatul unui defect in codul programului. Exemplul de mai inainte cu
impartirea unei valori intregi la zero este o eroare logica. Aceste
tipuri de erori sunt foarte delicat de gasit si corectat. Amandoua, I/O
si logice, relateaza erori care vor fi discutate in sectiunile
urmatoare.
6.2.1 Erorile I/O
Input/Output incorporeaza o suprafata foarte mare de
activitati si Vis in Lab VIEW. Chiar daca folositi Vis pentru
comunicatii (TCP, UDP, DDE, ActiveX, OLE, PPC, AppleEvent), achizitii
de date, instrument I/O, sau fisier I/O, exista posibilitatea sa va
loviti de erori.
Erorile I/O pot fi consecinta mai multor lucruri.
Prima circumstanta care poate duce la o astfel de eroare este
initializarea sau configurarea canalului de comunicatie
necorespunzatoare. De exemplu, cand faceti comunicatie seriala, viteza
de transmisie trebuie sa se potriveasca intre controler si dispozitivul
extern. Daca aceasta initializare se face incorect rezulta erori.
Pentru majoritatea dispozitivelor comanzile trebuie trimise pentru a fi
puse in modul distant, ceea ce permite comunicatia cu controlerul. Cand
se citeste sau se scrie intr-un fisier, fisierul trebuie mai intai sa
fie deschis. Similar, cand se scrie intr-o baza de date, o coneziune
trebuie relizata inainte de a insera datele. Initializarea poate sa
includa, de asemenea, punerea unui instrument sau dispozitiv intr-un
stadiu cunoscut. Cateodata aceasta poate fi facuta prin resetare, dupa
care dispozitivul va aduaga valorile implicite.
O a doua cauza a erorii I/O este trimiterea unor
comenzi gresite sau date gresite instrumentului sau aplicatiei. Cand
s-a trimis informatie invalida, va apare o eroare de scriere. Unele
dispozitive pur si simplu ignora in timp ce altele returneaza o
necunoscuta. Acest lucru joaca un rol important cu referire la ce tip
de corectie sau tratare folositi. Cand datele sunt trimise la un
dispozitiv extern, trebuie sa va asigurati ca si datele corecte si
formatul corect sunt trimise. Trebuie sa ajustati informatia pe care o
trimiteti pentru a se potrivi cu ce poate dispozitivul sa primeasca.
Erorile tipografice pot fi clasificate tot in aceasta categorie.
O alta eroare I/O are loc cand exista o problema cu
instrumentul sau aplicatia in uz. Cand lucrati cu aplicatii sau
fisiere, aceasta poate apare din mai multe motive diferite. Fisierul
poate ca nu exista in cale specificata. In alta ordine de idei, poate
ca nu aveti permisiunile de scriere sau citire asupra fisierului.
Erorile I/O ale instrumentelor de acest fel apar de obicei cand
instrumentul nu este alimentat de la sursa sau cand nu functioneaza
corespunzator. O problema similara apare cand intrumentul se blocheaza
sau ingheata. O realimentare poata sa-l returneze la un stadiu cunoscut
si sa-l faca din nou operational. Aceste tipuri de erori pot rezulta
din configurarea incorecta a dispozitivului extern. Instrumentele pot
face masurari necorespunzatoare cand nu sunt configurate corect.
Lipsa hardware-ului sau software-ului poate fi o
sursa de erori I/O. Sunteti nevoit sa verificati daca aveti instalate
corect driver-ele interfetei. Incompatibilitatea interfetei si a
componetelor trebuie investigata.
6.2.2 Erori logice
Erorile logice apar cand sunt greseli in cod. Codul
din diagrama Figure 6.1 ilustreaza o greasala inocenta care poate
apare. In bucla While, programatorul intentioneaza sa opreasca executia
cand temperatura atinge 75.0 grade sau mai mult. Bucla, asa cum este
ea, va opri daca temperatura este mai mica de 75.0 grade. Acesta este
exemplul unei erori usoare care poate cauza o eroare in aplicatie.
Aceste tipuri de erori sunt dificil de gasit si sunt mari consumatoare
de timp. Utilitarele de depanare sunt inutile in gasirea unor surse de
erori.
Erorile por apare uneori cand datele introduse de
catre utilizator nu sunt validate. Daca utilizatorul nu prevede ce date
permite programul, poate apare o eroare. Aplicatia trebuie sa valideze
datele pentru a fi sigura ca nu se abate de la normal. De exemplu,
utilizatorul poate sa specifice care numar de unitate, intre unu si
zece, la care sa aplice testele. Programul trebuie sa verifice daca
sunt introduse date doar din zona acceptata inaite de a incepe
executia. Unitatea zero poate sa nu existe pentru teste, dar totusi
codul trebuie sa verifice datele corespunzatoare. Feritiva de erori de
precizie numerica si erori de conversie care sunt dificil de depistat.
Lab VIEW permite utilizatorului sa seteze regiunile
acceptate pentru controlerele Numeric, Boolean si List & Ring.
Aceasta poate fi facuta prin apasarea controlerului si selectarea Data
Range din meniu. Programatorul are de asemenea optiunea de a constrange
valoarea introdusa in asa fel incat sa fie in zona valida. Aceasta
optiune este disponibila in fereastra drop-down. Optiunea de a
constrange reduce nevoia de a scrie cod si de a indeplini niste sarcini.
6.3 Erorile incluse
Lab VIEW anunta utilizatorul de unele erori din
timpul executiei pentru instrumente si operatii de I/O pentru fisiere
prin casete de dialog. Lab VIEW nu infrunta erorile si, in general,
lasa tratarea exceptiilor in seama programatorului. Cu toate acestea,
Lab VIEW furnizeaza programatorului cateva utilitare pentru a vindeca
in cadrul tratarii exceptiilor. Primul utilitar despre care se va
discuta va fi pachetul de erori. Pachetul de erori este folosit pentru
a transporta informatia de la mecanismul de detectie la tratare. Dupa
pachetul de erori, va fi prezentata o descriere VISA de tratare a
erorilor pe scurt. Dupa aceea, tratarea Vis a erorilor va fi luata in
considerare. In particular sunt trei tipuri de erori Vis: Simple Error
Handler VI, General Error Handler VI si Find First Error VI.
Sectiunea 6.4 va discuta despre implementare codului
pentru tratarea erorilor.
6.3.1 Pachetul erorilor
Pachetul erorilor este un mecanism de detectie
furnizat pentru programatori. Pachetul se compune dintr-un statut, cod
si sursa. Fiecare dintre acestea furnizeaza informatii despre aparitia
erorilor. Statutul este boolean care returneaza “true” daca a aparut o
eroare. Codul care distinge erorile este pe 32 de biti. Sursa este un
sir care da informatia despre originea erorii. Pachetul de erori ca un
tot furnizeaza detalii de baza despre eroare care pot fi folosite in
scopul tratarii erorilor.
Figura 6.2 arata pachetul de erori de intrare si
erori de iesire cand apar in panoul principal. Pachetul de erori de
intrare si erori de iesire pot fi accesate din subcategoria Array &
Cluster in categoria “pallete”. Pachetul de erori este bazat pe
conceptul de erori de I/O ale “National Instruments”. Vis care
utiizeaza acest concept are indicatoare despre erorile de intrare si
erorile de iesire, care sunt de obicei localizate in partea de jos a
panoului principal. Informatia pachetului este trecuta succesiv prin
Vis intr-o aplicatie, consecvent su “data flow programming”.
Pachetul de erori poate servi in scopuri duale in
aplicatia dumneavoastra. Prin folosirea erorilor I/O, ordinea de
executie a Vis-ului poate fi fortata. Aceasta elimina nevoia de
structuri succesive pentru controlul ordinei de executie. Mai simplu,
puneti pachetul de erori in Vis pentru detectie si ordine.
Cand pachetul este pus in VI, VI-ul verifica daca a
aparut o eroare. Daca nu exista vreo eroare executia va continua.
Pachetul culege informatie daca erorile apar in timpul executiei
VF-ului si plaseaza aceasta informatie la urmatorul VI, care urmeaza
aceleasi verificari. In cel mai simplu caz, daca erorile apar intr-un
VI, VI-ul care il urmeaza nu ar trebui sa se execute. Cand preogramul
se termina, erorile sunt afisate in panoul principal.
Conceptul de erori I/O si pachetul de erori sunt
usor de folosit si incapsulat in aplicatii. Multe dintre VI-urile Lab
VIEW-ului sunt disponibile in paletele de functii si sunt bazate pe
acelasi concept: paleta Vis de comunicatie (TCP, UDP, DDE, ActiveX,
HiQ), majoritatea dintre VI-urile intrumentelor I/O (VISA, GPIB, GPIB
488.2), si unele achizitii de date si VI-urile de fisiere I/O folosesc
I/O. Prin folosirea acestor VI-uri si racordate la pachetul de erori,
mult din munca pentru detectia de erori este gata pentru programator.
Aceste VI-uri incluse furnizeaza detectia necesara in stadiul de jos a
operatiei. Cand se racordeaza acest VI la diagrama codului, veti
observa ca terminalul erorii de intrare este in partea din stanga jos a
VI-ului, in timp ce terminalul erorii de iesire va fi in partea din
dreapta jos. Aceasta este o conventie urmata de majoritatea
fabricantilor de VI-uri de la National Instruments, si sunt de asemenea
recomandate cand faceti drivere.
Figura 6.3 este un exemplu despre cum poate fi
utilizat un pachet de erori. VI-ul foloseste GPIB Write si GPIB Read
pentru paleta de instrumente I/O. Este un driver simplu pentru
instrument care poate sa citeasca si sa scrie de le un instrument.
Pentru a realiza o detectie, pachetele de erori de intrare si iesire si
sa le racordeze corespunzator in diagrama codului. Detectia de erori
este lasata in seama VI-ului instrumentului I/O. Cand un driver este
necesar ca o parte dintr-o aplicatie ampla, este folosit conceptul
erorilor I/O. Figura 6.4 foloseste doua drivere pentru erorie de iesire
si erorile de intrare racordate. Al doile VI nu se va executa atat timp
cat apare o eroare in primul VI. Ordinea executiei este fortata,
cauzand primul driver sa astepte pachetul de erori de la primul. Acest
mod poate fi aplicat si la aplicatiile ample.
Pachetul de erori poate fi de asemenea folosit
pentru a aplica niste verificari altele decat cele facute de VI-urile
disponibile in Lab VIEW. Presupuneti ca comunicati cu un dispozitiv sau
aplicatie care returneaza necunoscute la trimiterea de comenzi sau
date. Valoarea “OK” este returnata cand datele sunt valide si
acceptate, si valoarea “NOK” cand datele sunt invalide sau comenzile
sunt necunoscute. VI-ul Lab VIEW-ului nu aplica nici o verificare
asupra instrumentului sau aplicatiei specifica cunoscutelor, decat la
erori de comunicatie generale. Intorcandu-ne la VI-ul din exemplul
anterior, putem sa implementam verificarea proprie asupra erorilor.
Figura 6.5 arata cum aceasta este posibil.
Bundle by Name este folosit pentru paleta Cluster
pentru indeplinirea acesteia. Daca constatarea returnata nu este “OK”,
atunci informatia pachetului de erori este alterata. Boolean devine
“true”, asignarea codului este 6000, si descrierea sursei este
racordata. Lab VIEW isi rezerva erorile 5000 si 9999 pentru erori de
utilizator. Daca constatarea se potriveste cu valoarea care se astepta,
racordam pachetul de erori in cazul “true” direct la Error Out fara
alteratii. Detectia de erori pentru constatarea corecta va fi aplicata
de fiecare data cand driverul este apelat.
Figura 6.6, Extra Source Info.vi, arata un exemplu
despre cum sa culegi mai multa informatie in scopul depanarii si
tratarii erorilor. Acest VI adauga informatie suplimentara la sirul
sursei din pachetul de erori. Mai intai pachetul de erori este desfacut
folosind Unbundle by Name. Partile de informatie in plus care vor fi
adaugate include timpul cand s-a produs eroarea si lantul de apelari.
Call Chain, valabil in Application Control, returneaza tot lantul de
apelari in partea de sus in format sir. Lantul de apelari este
folositor pentru erorile de utilizator pentru a vedea unde s-a produs
eroarea. Aceste doua bucati de informatie for fi reunite la loc
impreuna cu informatia generala a sursei generata de pachetul de
erori. Poti adauga orice alta informatie pe care vrei sa o returneze
odata cu pachetul de erori in mod similar. Poate fi folosita pentru ai
da programatorului mai multe date despre eroare care pot fi ajutatoare
in compilare. Erorile pot fi puse intr-un fisier text sau baza de date
pentru referinta. Punerea aceasta va fi demonstrata in sectiunea 6.4.6
in exemplul de baza.
6.3.2 Erori de cod
O lista despre posibilele erori generate de Lab VIEW
sunt accesibile in Online Reference din Help Menu. Erorile sunt listate
de zonele de erori de cod si de tipurile de erori. Erorile de cod pot
fi valori atat pozitive cat si negative, depinzand de tipul erorii care
este generata. Cand o eroare de cod de zero este returnata, ea indica
ca nu a luat loc nici o eroare. Avertismentele sunt indicate de un cod
care nu este zero, in timp ce statutul este “false”. Tabelul 6.1
contine o lista de erori si zonele de cod. Atentie, daca folositi Lab
VIEW 5.1, exista o lista aditionala de coduri pentru VISA furnizata de
Lab VIEW Version 5.1 Addendum Manual care este trimis pe CD.
Tabelul 6.1 Erori de cod
Tipul erorii
Zona de
cod
Erori de cod G Function
0 la 85
Erori de cod Data Acquisition VI
-10001 la -10920
Erori de cod Analisys
-20001 la -20065
Erori de cod TCP si UDP
53 la 66
Erori de cod DDE
14001 la 14020
Erori de cod PPC
-900 la
-932
Erori de cod Lab VIEW Specific PPC
1 la 5
Erori de cod AppleEvent
-1700 la
-1719
Erori de cod Lab VIEW Specific for AppleEvents
100.0 la 1004
Erori de cod GPIB
0 la 32
Erori de cod Instrument Driver
-1200 la -13xx
Erori de cod Serial Port
61 la 65
-1073807360 to -1073807202
Erori de cod VISA
1073676290 to 107367443
Un utilitar util pentru a cauta erorile de cod este
de asemenea disponibil in meniul Help din Lab VIEW versiunea 5.0 sau
mai mare. Cand este selectat Explain Errors, o fereastra noua va aparea
cu pachetul de erori in partea stanga si casuta de text in partea
dreapta. Erorile de cod pot fi puse in format hexazecimal au zecimal. O
explicatie a erorii de cod va fi furnizata in casuta de text. Acest
utilitar furnizeaza un mod rapid de a afla informatii aditionale despre
o eroare in scopul compilarii.
6.3.3 Tratarea erorilor VISA
VISA este un standard pentru depanarea drivereleor
instrumentelor si nu este specific Lab VIEW. Este o interfata de
programare a aplicatiei (Application Programming Interface - API) care
este folosita pentru comunicarea cu diferitele tipuri de instrumente.
VISA traduce chemarile catre driverele de nivel jos, permitand sa
programati interfete nesimilare cu un singur API. Vedeti capitolul 5 cu
driverele instrumentelor pentru informatii despre VISA.
VISA are la baza conceptul I/O, astfel VISA Vis are
amandoua pachetele erorilor de intrare si cele de iesire. Cand apare o
eroare, acest Vis nu se va executa. Exista un set de erori specifice de
VISA care poate fi gasit in Lab VIEW Help. VISA Status Description VI
poate fi utilizat in situatiile de tratare a erorilor. Acest VI este
disponibil in subpaleta VISA despre palete ale instrumentelor I/O. VISA
Status Description VI ia sesiunea VISA si pachetele de erori ca date si
returneaza descrierea statului erorii care a fost generate.
Cand folositi drivere ale instrumentelor care
folosesc VISA, pot fi cateva erori suplimentare de care va puteti lovi.
Prima cauza este aceea ca VISA nu a fost corect instalata in computerul
dumneavoastra. Daca alegeti instalarea tipica, NI-VISA este selectata
pentru instalare implicit. Daca ati ales instalarea selectiva, trebuie
sa aveti in vedere sa bifati selectiile. Nu puteti sa folositi VISA Vis
daca nu ati instalat aceasta optiune. Alta cauza ar putea fi relatata
la serialul de nivel jos, driverele GPIB, sau VXI pe care VISA le
apeleaza pentru a realiza comunicarea cu instrumentul. De exemplu, daca
aveti o placa GPIB instalata in computerul dumneavoastra pentru a
controla instrumentele, fiti siguri ca software-ul placii este de
asemenea instalat corect pentru a permite sa il foloseasca VISA Vis.
Puteti folosi N1-Spy pentru a monitoriza chemarile catre driverele
instalate de la National Instruments de pe sistem. N1-Spy este explicat
pe scurt in sectiunea 5.5.
Cand folositi VISA in aplicatiile dumneavoastra, nu
uitati sa inchideti toate sesiunile VISA sau referintele pe care la
aveti deschise din timpul operatiilor I/O. Lasand sesiuni deschise
poate degrada performantele sistemului. Puteti folosi Open VISA Session
Monitor.vi pentru a gasi sesiunile pe care le aveti deschise, si sa le
inchideti pe cele care nu sunt in folosinta. Acest VI este disponibil
in urmatorul director: \LabVIEW\Vi.lib\Util-ityWisa.llb. Acest VI va
poate fi de folos in timpul depanarii unei aplicatii.
6.3.4 Tratarea simpla a erorilor
O tratare a erorilor simpla poate fi gasita in
paleta Time & Dialog in meniul Functions. Acest VI este uitlizat
pentru raportarea eroeilor. Este utilizat impreuna cu Lab VIEW Vis care
utilizeaza erorile I/O si pachetul de erori. Scopul tratarii simple
erorii este de a anunta utilizatorul daca o eroare s-a produs, dar
poate fi folosit si pentru alte functionalitati. El considera pachetul
de erori ca un dat si determina daca o eroare a fost generata. Daca o
eroare a fost generata, VI afiseaza o caseta de dialog cu codul erorii,
si o descriere pe scurt a unei erori, si a locatiei erorii. Tratarea
simpla a erorilor utilizeaza un tabel pentru a afisa descrierea erorii
bazandu-se pe codul erorii.
Asa cum am mentionat una dintre utilizarile tratarii
erorilor simple aste pentru anuntarea aparitiei erorilor. Programatorul
poate sa selecteze tipul de fereastra ce va fi afisata scriind numarul
intreg corespunzator sau constanta enumerata. Valoarea 1 afiseaza o
casuta de dialog avand ca unic buton “Ok” pentru activare. Valoarea 2
afiseaza o fereastra cu butoanele “Continue” si “Stop”. Aceasta permite
utilizatorului sa opresca executia programului. Vloarea 0 nu da nici o
instintare operatorului, chiar daca o eroare a fost generata. Aceasta
poate fi folosita cand tratarea exceptiilor trebuie sa fie indeplinita
astfel ca si cand utilizezi eroarea?, code out, sau source out, la
iesirea tratarii erorilor simple.
Trebuie sa aveti in vedere ca acest VI va opri de
tot executia pana cand operatorul raspunde la caseta de dialog. Daca
aveti intentia sa porniti programul si sa plecati, programul nu va
continua daca apare vreo eroare. Casetele de dialog nu ar trebui
folosite decat cand programul este monitorizat. Presupuneti ca folositi
e-mail-ul pentru instiintari folosind pachetul SMTP ca o
alternativa. Capitlul 8 de asemenea va arata cum sa includeti
posibilitatea e-mail-ului folosind ActiveX.
Figura 6.7 va arata cum sa folositi tratarea simpla
a erorilor. Acesta este acelasi cu cel din Figura 6.3. Aveti in vedere
ca tratarea simpla a erorilor a fost adaugata doar ca ultimul VI.
Valoarea 2, careia in corespunde doua butoane din caseta de dialog
(Continue si Stop), este trecuta la VI. Daca o eroare a fost detectata
in ambele GPIB Read si GPIB Write, caseta de dialog va apare afisand
codul erorii, descrierea, si sursa erorii.
6.3.5 Tratarea generala a erorilor
Tratarea generala a erorilor face practic acelasi
lucru ca si tratarea simpla a erorilor. Tratarea simpla a erorilor
cateva alegeri care sa le folosim intr-o aplicatie. Tratarea simpla a
erorilor este o invelis a tratarii generale a erorilor. Tratarea
generala a erorilor poate fi folosita in aceleasi situatii precum
tratarea simpla a erorilor, dar de cand tratarea generala a erorilor
are cateva optiuni in plus, ea poate fi folosita si in alte scopuri
unde se doreste si mai mult control.
Tratarea generala a erorilor permite aduagarea de
cod de erori definit de utilizator si descrierea erorilor. Cand aceste
caractere au fost adaugate, ale sunt adaugate la tabelul de afisare a
erorilor si descrierilor acestora. Cand se iveste o eroare, sunt
cautate posibilele erori definite deja in Lab VIEW, urmata apoi de
erorile introduse de programator. Caseta de dialog va afisa apoi
descrierea erorii si specifica unde a avut loc.
Tratarea generala a erorilor ofera de asemenea
optiuni limitate de tratare a exceptiilor. Programatorul poate sa
seteze statutul erorii sau ca anuleze o eroare folosind acest VI. O
eroare poate fi anulata specificand codul erorii, sursa, si actiunea
exceptiei. Setati actiunea exceptiei pe Cancel Error on Match. Tabelul
este rasfoit cand apare o eroare. Cand sa gasit o potrivire, statutul
erorii este pus pe “false”. Mai mult, descriptorul sursei este sters si
codul erorii este pus pe zero in pachetul de iesire. Similar, cand
statutul unei erori este “false”, el poate fi setat pe “true” prin
evitarea actiunii asupra exceptiei, codului erorii si a sursei.
6.3.6 Gasirea primei erori
Find First Error VI este de asemenea gasit in paleta
Time & Dialog din meniul Functions. Scopul acestui VI este de a
creea un pachet de erori de iesire. Sunt necesar de urmatoarele date:
Error Code Array (matricea codului erorii), Multiline Error Source
(sursa erorii multilinie), and Error In Cluster (eroare in pachet).
Cand statutul erorii este “false” sau nu este racordat, VI-ul testeaza
sa vada daca matricea codului erorii este diferita de zero. VI-ul
reuneste primul element diferit de zero, sursa si statutul valorii
“true” pentru a creea pachetul de erori de iesire. Din cauza ca sursa
este un sir multilinie, indexul matricii codului erorii este folosit
pentru a alege ce mai convenabila sursa pentru reunire. Daca este
introdus o eroare in pachet este facuta intai o verificare a statului
pachetului. When statutul este “true” eroarea din pachet va fi lasata
si verificare matricii nu va mai avea loc. Gasirea primei erori practic
de folosit cu VI-uri Lab VIEW care nu folosesc erori I/O ci da numai
valoarea codului erorii. Urmatoarele sunt cateva VI-uri care da numai
codul erorii: VI I/O serial, PPC Vis, Apple Event Vis, si cateva VI-uri
Analysis. Gasirea primei erori poate fi folosita pentru a converti
codul erorii intr-un pachet de erori. Pachetul de erori poate fi
utilizat ulterior cu alte VI-uri care utilizeaza erori I/O.
Figura 6.8 este un exemplu despre cum sa se
foloseasca gasirea primei erori. Amandoua Bytes at Serial Port.vi si
the Serial Port Read.vi relateaza codul erorii. O amtrice este
construita din cele doua coduri de erori care sunt relatate. Un sir
multilinie de la sursa este de asemenea aratat in exemplu. Sursa ne da
informatia despre originea erorii. Find First Error.vi asambleaza
pachetul de erori si in trimite la pachetul de erori de iesire. Daca nu
a fost generata nici o eroare codul erorii de iesire va contine
valoarea booleana “false”, nici un cod de eroare si sir de sursa gol.
Daca a aparut vreo eroare, prima eroare care apare va fi trimisa la
pachetul de erori de iesire. Pachetul de erori poate ulterior sa fis
trimis la Tratarea generala a erorilor sau la Tratarea simpla a
erorilor pentru a afisa vreo casuta de dialog daca este nevoie.
6.4 Executarea tratarii exceptiilor
Tratarea erorilor contine si detectia de erori si
tratamentul aplicat erorilor daca acestea sunt gasite. Sectiunea
anterioara prezinta cateva tipuri de erori care pot apare, ca si
functiile incluse in Lab VIEW pentru tratarea exceptiilor. Sectiunea
ilustreaza caile care sunt utilie pentru managmentul erorilor.
Eficacitatea unei tratari de erori poate fi imbunatatita prin
includerea ei in aplicatie inca din stadiile primare ale dezvoltarii.
Ea va suporta claritatea si mentenabilitatea codului dumneavoastra, ca
si reutilizarea codului. Cand tratarea erorilor nu este luata in
considerare cand creeati aplicatia, cadul de tratari va fi constituit
din petice ale fiecarei exceptii.
Va trebui sa va ouneti cateva intrebari despre
implementarea tratarii erorilor in loc sa faceti tratarea in mod
eficient si eficace. Cand este nevoie de detectie de erori, raportare
si tratare? Ce sa faca aplicatia cand este detectata o exceptie? Unde
si cum sa fie implementata? Urmatoarele subsectiuni va relata unde, cum
si de ce tratarea exceptiilor este utila in aplicatiile dumneavoastra.
6.4.1 Cand?
Intrebarea cand sa se implementeze este un pic
ciudata si depinde de siyuatiile sau aplicatiile specifice pentru care
este dezvoltata. Aceast poate diferi de obiectivele aplicatiei, de
timpul disponibil, de intentiile programatorului si de alti cativa
factori. Unele zone din apalicatie care au nevoie de taratare sunt mai
usor de indentificat decat altele. Poti fi capabil sa identifici zone
unde taratrile nu sunt tolerate, sau unde erorile pot apare. Acestea
sunt tinte definite pentru detectia de erori, raportare si tratare.
Pentru a raspunde la aceasta intrebare cat se poate
de complet, trebuie sa va uitati la o aplicatie in interior dupa niste
instante specifice pentru a determina ce altfel de scenariu mai poate
fi prevazut ca si posibilele consecinte. Pentru a ilustra aceasta,
considerati un exemplu in care trebuie sa cititi si sa scrieti intr-un
fisier folosind operatii I/O. Pantru a raspunde, daca este nevoie de
cod pentru exceptii, si poate si ce este nevoie, considerati
urmatoarele consecinte si scenarii. Ce se va intampla daca fisierul in
care vreti sa scrieti nu se deschide? Ce se intampla daca operatia de
citire sau scriere esueaza? Ce se intampla daca fisierul nu poate fi
inchis? Raspunsurile la aceste intrebari va va ajuta sa intelegeti
perspectiva tratarii aplicatiei. Va va ajuta de asemenea sa priviti
aplicatia si sa determinati cand este nevoie de tratarea exceptiilor
este utila punandu-va intrebari similare. Tratarea erorilor va fi
neaparat necesara in operatiile I/O cu fisiere, si daca si alte parti
ale aceleiasi aplicatii suntdependente de zona aceasta.
6.4.2 Exceptiile – Tratare la nivel mediu
Raspunsul la intrebarea “cand”, tratarea exceptiilor
trebuie condusa la nivel principal sau la nivel de excutare a testelor.
Nivelul principal controleaza si disteaza decurgerea aplicatiei. Prin
efectuarea tratarii exceptiilor la nivel principal, executia
programului si controlul pot fi tinute la nivelul de sus. Acest lucru
este important pentru ca tratarea exceptiilor poate altera decurgerea
normala a programului daca este detectata o eroare. Poate ca o sa vreti
ca codul sa efectueze mai multe actiuni diferite daca apare vreo
eroare. Cand taratrea exceptiilor este efectuata la nivelul de jos
controlul programului trebuie trecut de asemenea la nivelul de jos.
Acesta este un motiv puternic de ce trebuie luata in consideratie
tratarea exceptiilor inca din faza de constructie a aplicatiei.
Structura aplicatiilor si procesele dezvoltarii aplicatiilor sunt
sidcutate in capitolul 4. Citind capitolul 4 va va ajuta sa obtineti
perspective bune pentru modul in care sa te apropii de dezvoltarea unei
aplicatii si alte topici ce trebuie luate in considerare inainte de a
incepe.
Efectuarea taratrii exceptiilor la nivel principal
elimina nevoia de a dubla codul in unele subVI-uri. Acest lucru permite
tratarii exceptiilor sa fie localizata intr-un singur loc. Separarea
unui cod pentru tratarea erorilor de restul de cod reduce confuzia si
creste lizibilitatea si mentenabilitatea. Cursul logic al programului
va fi pierdut in dezordinea in care taratrea erorilor este efectuata
laolalta cu restul programului. Acest lucru este explicat mai incolo in
sectiunea 6.4.6 la taratarea exceptiilor cu masinile de statut.
Stilul sugerat este similar altor limbaje de
programare unde informatia eronata este trimisa unei parti de cod
separate in scopul tratarii. Cum am mentionat mai inainte, atat Java
cat si C++ au sectii diferite pentru efectuarea tratarii exceptiilor
dupa ce evaluarea unei erori este completa. Nu exista un asemenea
mecanism inerent in Lab VIEW.
6.4.3 Programatorul – erori precizate
Definirea erorilor a fost discutata pe scurt in
sectiunea 6.3.1 laolalta cu pachetul de erori. Abilitatea de a defini
erori este importanta deoarece Lab VIEW lasa taratarea erorilor
specifice aplicatiei in seama programatorului. Cum am mentionat mai
devreme, codul erorilor 5000-9999 sunt dedicate uzului programatorului.
Programatorul trebuie sa efectueze verificari in circumstante unde
greselile nu sunt tolerate, cum a fost aratat in figura 6.5. Codul
erorii trebuie supus verificarii de erori la fel ca sirul sursei pentru
a gasi punctul de plecare.
Cand se implementeaza o eroare definita de
programator intr-un subVI, trebuie sa va asigurati ca nu ati strecurat
vreo eroare. Desfaceti pachetul de erori si verificati valoarea
booleana a statutului. Daca s-a strecurat vreo eroare, dar nu ati
verificat statutul, puteti suprascrie pachetul de erori cu o noua
informatie despre erori. Este aproape imposibil de gasit radacina
acestei probleme in timpul compilarii. Trebuie, de asemenea, sa
folositi registre de transfer cand folositi pachete de erori incadrate
in structura buclei pentru a trece datele de la o iteratie la
urmatoarea. Daca nu sunt folositi registrii de transfer, datele vor
pierdute la fiecare iteratie.
Inregistrarile pot eleimana codurile erorilor care
au fost aignate de utilizator. Poate fi creat un tabel care sa contina
toate codurile erorilor si sursele asignate. Acesta poate fi utilizat
cu tratarea generala a erorilor sau cu p lata procedura de tratare a
erorilor. Poate fi o manevra buna de a mentine baze de date sau foi de
calcul tabelar pentru codurile definite de utilizator. O baza de date
faciliteaza managementul atunci cand numarul codurilor creste ca
valoare.
Cand asignati cod de erori, puteti grupa erori
similare in diferite regiuni. Acest lucru este folositor cand trebuie
decisa calea de actiune cand apare o eroare. De exemplu puteti sa
asignati codurile erorilor 6000-6999 pentru raspunsuri incorecte de la
intrumentele I/O. Erorile generate de Lab VIEW sunt grupate in cateva
moduri pentru a facilita managmentul si identificarea lor.
Avertismentele definite de utilizator poate de
asemenea sa fie asignate codurilor pentru a indica ca un eveniment
nedorit s-a intalplat. Puteti folosi aceasta cand semnalul pe care l-au
luat datele nu va fi tot valid datorita acuratetei unora dintre
evenimente in timpul executiei programului. Utilizatorul poate
investiga sursa avertismentului pentru a verifica dupa aceea daca
datele sunt valide. Pot fi raportate erori multiple si tratate dupa
desfacerea pachetului de erori si aduagarea de noi informatii.
6.4.4 Managmentul erorilor
Odata ce aveti lista cu erorile pe care vreti sa le
eliminati si care pot detectate, trebuie sa va decideti ce sa faceti cu
ele cand apar. Cand apare o eroare, ea trebuie sa fie trimisa la codul
de tratare a erorilor. Codul tratarii exceptiilor paote anfrunta
erorile in mai multe feluri. Largind ideea de a grupa erorile similare,
codul poate verifica in ce zona se incadreaza eroarea pentru a
determina actiunea ce trebuie luata. Figura 6.9, Error Range
Example.vi, este un exemplu de grupari ale zonelor de cod de eroare in
scopul tratarii. Cand un set de exceptii sunt considerate ca ar fi
relatate logic, este mai bine sa le organizezi intr-o familie de
exceptii.
Cel mai usor mod de a infrunta este de a afisa o
caseta de dialog pentru a anunta utilizatorul ca s-a produs o eroare.
Aceasta caseta de dialog poate fi atat de simpla ca si cea afisata de
tratarea generala a exceptiilor. Puteti sa va creeati un VI nou pentru
a afisa o caseta de dialog care include si mai multa informatie,
incluzand ce poate utilizatorul sa faca pentru a da la o parte eroarea.
Aceste rezultate obisnuite opresc executia programului.
Puteti sa va implicati si mai mult prin incercarea
de a corecta erorile din codul pentru tratarea exceptiilor. In acest
caz, tehnicile de verificare cat mai generale nu sunt suficiente
deoarece acelasi cod este folosit determinand bum sa-l corecteze. De
asemenea este nevoie de cunoasterea in detaliu a erorii si cum se poate
corecta. Presupuneti ca aveti a eroare specifica care va spune ca
dispozitivul supus testului nu raspunde la comenzi. De asemenea stiti
ca acest lucru se intampla cand dispozitivul nu este alimentat sau nu a
fost initializat corect. Puteti sa incercati sa corectati eroarea prin
alimentarea dispozitivului si reinitializarea lui. Atunci puteti
incerca sa comunicati cu el din nou si sa rulati aplicatia daca totul a
decurs bine.
Figura 6.10 ilustreaza tehnicile de infruntare a
unor coduri de erori specifice ca o alternativa la metoda de verificare
generala a zonei. Aceasta metoda poate fi folosita in Lab VIEW 4.1 sau
mai mare. Lab VIEW 5.0 are un proces initial care va permite sa legati
codul direct la terminalul selectat a structurii procesului. Puteti
folosi meniul care se deschide pentru selectarea procesului initial,
care este normal procesul 0. Acest proces se va executa pentru coduri
de erori pentru care nici un proces nu a fost definit.
Metoda afisata este similara unui tabelului descris
mai devreme. O matrice care contine toate codurile erorilor este
folosita cu Search ID Array VI (VI-ul de cuatare a ID-ului in matrice).
Codul eroarei este trimis si incepe sa caute dupa indexul codului
erorii. Indexul conduce la comandarea procesului, care reia cursul
corect al actiunii pentru codul erorii. Daca nu exista vreo potrivire
pentru codul erorii, Search ID Array returneaza -1. Adaugand 1 la
rezultat, procesul 0 (Case 0) este selectat din structura. Acest proces
este selectat ca initial daca nu este nici o potrivire. In exemplul
aratat apare o casuta de dialog care ne arata ca nu a fost definita
nici un cod de eroare.
O alta alternativa disponibila in Lab VIEW 5.0 este
folosirea sirurilor pentru a conduce la procese ale structurilor.
Puteti implementa exemplul anterior prin desfacerea pachetului pentru a
gasi informatia despre sursa. Acest sir poate fi folosit pentru a
determina cursul actiunii prin scrierea in terminalul procesului de
selectie.
1
6.4.5 Aparatul de stare pentru tratarea exceptiilor
Folosirea aparatului de stare ofera cateva avantaje
pentru codul
tratarii erorilor. Unul dintre ele este acela ca codul tratarii
exceptiilor este localizat intr-un singur loc. Acesta este gata prin
folosirea statutului erorii. Statutul erorii este responsabil pentru
toate tratarile exceptiilor din aplicatie. Aceasta elemina nevoia de a
plasa codul tratarii exceptiilor in mai multe locuri. Mentinerea
codului devine mai usoara cand codul este rezident intr-un singur loc.
Folosirea unui aparat de stare faciliteaza managmentul tratarii
exceptiilor la nivelul de test executiv si principal. Starea erorii
face parte din nivelul principal, asa ca controlul este mentinut la
nivele superioare.
Alt avantaj este ca dupicarea codului erorii este
redusa cand codul
este plasat intr-un singur loc. Erorile similare pot fi generate in
zone diferite din cod. Daca nu efectuati tratarea erorilor intr-un
sinfur loc, sunteti nevoit sa scrieti cod in mai multe locuri pentru
acelasi tip de eroare.
Executia conditionala a codului poate fi
implementata fara sa
creati o tratare complexa a erorilor in timpul folosirii aparatului de
stare. Codul tratarii exceptiilor determina exceutia programului bazata
pe severitatea erorii care a fost generate. Puteti sa lasti sa sara
peste executia partii din cod care este afectat de eroare, si sa
continuati executia restului din program. De exemplu, presupuneti ca
aveti o serie te zece teste diferite pe care vreti sa le efectuati pe
un dispozitiv sub analiza. Daca apare o eroare in testul 1 si aceeasi
eroare va afecta testul 5, 6 si 7, puteti inca sa mai executati testele
2, 3 si 4. In acest caz, folfosind un rand de aparate de stare va
simplifica procedura pentru a efectua aceasta sarcina. Starea erorii
poate sa analizeze statuturile care corespund testelor 5, 6 si 7 din
lista statuturilor de executie. In caz ca eroarea poate fi corectata,
programul trebuie sa-si aminteasca unde a fost intrerupta executia ca
sa poata sa continue din acelasi loc. Utilizarea aparatelor de stare
faciliteaza implementarea acestei posibilitati in codul tratarii
exceptiilor. Pentru diagnosticarea statutului informatia trebuie
retinuta pentru a face aceast lucru posibil. In plus, trebuie adaugate
rutine de salvare si inregistrare trebuie incorporate pentru a fi sigur
ca nu se pierd date.
Executia conditionata poate fi aplicata de asemenea
testelor care
esueaza. Puteti proiecta aplicatia sa execute un test ghidandu-se dupa
datele primite de la alt test. Daca testul 1 a dat gres puteti sa
sariti peste testele 2, 3 dar sa continuati cu testele ramase. Din nou,
puteti sa analizati testele care nu ar trebui sa fie executate.
6.4.6 Inregistrarea erorilor
Inregistrarea erorilor este folositoare pentru
pastrarea
inregistrarilor de greseli care apar de-a lungul executiei programului.
Jurnalul erorilor trebuie sa raporteze codul, originea, o descriere pe
scurt si cand a aparut eroarea. Pana la aparitia erorii, fisierul
furnal este deschis, scris in el si inchis. In tratari ale exceptiilor
suplimentare exista cod, eroarea poate fi infruntata intr-un mod
corespunzator.
Inregistrarea erorilor este benefica in cazurile in
care codul
tratarii exceptiilor a fost deja implementat si cand nu exista vreo
tratare a exceptiilor in aplicatie. Cand a fost implemntata o tratare a
exceptiilor, inregistrarea erorilor da programatorului intuitia la ce
tipuri de erori sa se astepte si daca codul le va trata corect.
Jurnalul poate fi folosit ca un mecanism de reactie pentru determinarea
zonelor din codul tratarii exceptiilor care este nesatisfacator. Aceste
zone pot fi folosite dupa aceea pentru constructia unei plicatii mult
mai robuste.
In unele instante unde codul pentru tratarea
exceptiilor nu a fost
inca implementat, jurnalul de erori poate fi folosit in mod similar.
Jurnalul poate servi ca fundament pentru dezvoltarea codului de tratare
a exceptiilor. Erorile care apar mai frecvent pot fi adresate mai
intai. Aceasta metoda vrea sa gaseasca o legatura cu timpul mare
consumat la dezvoltarea tratarii exceptiilor. Aici, conceptul este de a
fi mai benefic atacand cele mai comune erori.
Figura 6.11 este un exemplu de VI care inregistreaza
erorile. Mai,
intai este verificat statutul din pachetul de erori pentru a determina
daca a aparut vreo eroare. Daca a fost generata o eroare data, timpul,
codul erorii si sursa sunt scrise intr-un fisier care serveste drept
jurnal de erori. VI-ul “Write Characters to File” este folosit pentru a
efectua inregistrarea. Acest VI poate fi folosit in mult locuri unde
este dorita inregistrarea, sau in locatiile centrale laolalta cu alte
coduri tratari de exceptii. De cand informatia eronata a fost
convertita intr-un det de instructiuni delimitate prin spatii, poate fi
importate in Excel pentru a folosi drept baza de date.
6.4.7 Tratarea externa a erorilor
O tratare a exceptiilor care este externa aplicatiei
poate fi
scrisa sa tarteze exceptiile care pot apare in timpul executiei
programului. Aplicatia trebuie sa faca o chemare la tratarea externa a
rorilor. Acest lucru poate fi benefic cand folositi HI Test Executive.
VI-ul pentru trayarea erorilor este incarcat cand axista o referinta
spre el in aplicatie. VI-ul pentru tratarea erorilor poate fi scris sa
efectueze toate sarcinile semnificative, similar scoaterii tratarii
afara din aplicatie.
Daca tratarea erorilor este scrisa pentru a gazdui
exceptiile
generale, poate fi chemat din atatea aplicatii de cate avem nevoie.
Figura 6.12, Load External Handler.vi, ne arata cum poate fi incarcat
un VI si executat din aplicatie. Mai intai trebuie deschisa o referinta
catre VI folosind Open VI Reference. Acest VI poate fi accesat din
paleta Application Control. Trebuie sa specificati calea si directorul
unde se afla VI-ul. Setati VI Server Class pe “Virual Instrument” prin
localizarea VI Refnum. Nodul “Invoke” este folosit pentru executia
VI-ului extern. Nodul “Invoke” este de asemenea accesibil din paleta
Application Control. Cand referinta catre VI este trecuta la nodul
“Invoke”, VI Server Class se va schimba automat in “Virtual
Instrument”(Instrument Virtual). Apoi, prin localizarea
“Methods”(metode) puteti selecta matoda Run VI(executa VI) din meniu.
Prin folosirea si selectarea metodei Set Control Value(setati valoarea
de control) nodului Invoke pot fi trecute date catre VI-ul de tratare a
erorilor.
Exemplu:
Un exemplu despre cum este implementata o tratare
externa a
exceptiilor este aratat in figura 6.13. Aceasta diagrama de cod arata
pasii implicati in folosirea tratarii externe: deschiderea referintei
catre un VI, trimiterea datelor initiale, executia VI-ului extern, si
inchiderea referintei. Deschiderea unei referinte si executia VI-ului
extern au fost deja explicate. In acest exemplu, pachetul de erori este
trimis catre taratarea externa a exceptiilor, fiind cea care determina
cursul actiunii.
Mai intai, este deschisa o referinta catre VI prin
intermediul
External Handler.vi asa cum este aratat in calea VI. Apoi pachetul de
erori este trimis catre External Handler.vi folosind metoda Set Control
Value in nodul Invoke. Aceasta metoda solicita programatorului sa
specifice numele controlului (Control Name), descriptorul tipului (Type
Descriptor) si datele aplatizate (Flettened Data). Pachetul de erori
este trecut la aceasta metoda prin aplatizare folosind Flatten to
String din subpaleta Data Manipulation in paleta Advanced. Sirul de
date aplatizat si descriptorul tipului sunt apoi legate direct da la
Flatten to String la metoda Set Control Value. The Control Name (numele
controlului) este un sir care trebuie sa se potriveasca identic cu
numele controlului panoul frontal al VI-ului catre care sunt trimise
datele. Numele specificat in diagrama de cod este Error In (No Error),
asa cum apare pe panoul frontal al External Handler.vi. VI-ul este
executat folosind metoda Run VI si, in final este inchisa referinta.
Figura 6.14 ilustreaza diagrama de cod a External
Handler.vi. Acest
VI este similar cu un VI de tratare a exceptiilor aratat mai inaite. El
ia informatie despre pachetul de erori si decide cursul actiunii bazat
pe codul erorii. Informatia despre eroare este inregistrata folosind
Error Log.vi si structura procesului este ghidata dupa codul erorii.
Procesul 0 (Case 0) este folosit ca valoare implicita in codurile de
erori pentru care nu exista tratare de erori.
In acest exemplu pachetul de erori a fost trimis
catre un VI
extern. Similar, datele pot fi primite de la controloare si indicatoare
ale VI-ului daca se doreste. Metoda Get All Control Values (ia toate
valorile de control) poate fi folosita la efectuarea acestei actiuni.
Aceasta metoda ia toate valorile controloarelor si indicatoarelor de la
VI-ul extern. Datele sunt returnate ca o matrice de pachete, cate un
element pentru fiecare panou frontal al controlorului sau
indicatorului. Pachetul contine numele controlorului sau indicatorului,
descrierea tipului si datele aplatizate, similar cu datele care sunt
trimise catre VI-ul de tratare externa a erorilor External Handler VI
in exemplu.
6.4.8 Proceduri corespunzatoare de iesire
In situatii in care apar rori fatale sau
nerecuperabile cel mai
bine este sa se opreasca executia programului. Acest lucru este de
asemenea adevarat cand nu este rezonabil sa se continue executia
programului cand apar unele erori specifice. Cu toate acestea,
terminarea anormala a programului poate sa cauzeze probleme. Cand va
decideti sa opriti executia unui program datorita erorilor, trebuie sa
va asigurati ca programul exista intr-un mod corespunztor.
Toate instrumentele I/O, fisierele si canalele de
comunicatie
trebuie inchise inainte ca apicatia sa se termine. Efectuarea acestei
sarcini inainte de iesirea din program minimizeaza problemele de mai
sus. Presupuneti, de exemplu, ca un fisier a ramas deschis cand o
aplicatie s-a terminat. Acest lucru poate cauza erori cand altii vor sa
scrie in fisierul respectiv pentru ca privilegiile de scriere sunt
interzise.
Pana la aparitia unei erori controlul este trecut pe
seama tratarii
erorii. Din cauza asta, tine de responsabilitatea tratarii erorilor ca
toate tratarile, fisierele si cananlele de comunicatie sa fie inchise.
Cel mai usor de implementat acest lucru este de a face tratarea
erorilor de a identifica mai intai erorile. Daca eroarea care a fost
generata necesita terminarea programului codul din tratare poate
efectua aceasta sarcina. Figura 6.15, Close Handles.vi, este un exemplu
de VI care este folosit singur pentru a inchide canalele de comunicatie
deschise. O sesiune VISA, fisier refnum, conexiune TCP, si refnum
automat sunt trecute in seama acestui VI, care trece la inchiderea
referintelor.
Un program trebuie scris pentru a avea un singur
punct de iesire
unde toate sarcinile necesare sunt executate. Cel mai bun mod de a
implementa aceasta este de a utiliza un aparat de stare. Prin folosirea
unui aparat de stare este nevoie doar de un punct de iesire si va
folosi drept stare de inchidere (Close State). Corespunzator, exista
doar un singur loc unde unde toate tratarile exceptiilor sunt
efectuate: starea erorilor (Error State). Cand o eroare este
identificata ca fatala, starea erorilor va forta aparatul de stare sa
inchida toate starile. Starea de inchidere (Close State) va fi
responsabila pentru inchiderea programului intro maniera potrivita.
Toate tratarile, fisierele si canalele de comunicatie vor fi inchise in
aceasta stare. Din moment ce este nevoie de un singur punct de
inchidere vafi si ultima stare care se va executa atunci cand nu s-au
depistat erori. Acest stil face codul mai lizibil si mai usor de
intretinut.
6.4.9 Exemplu de tratare a exceptiilor
In aceasta sectiune au fost relatate cateva metode
de tratare a
erorilor. Un exemplu de inchidere care utilizeaza unele topici care au
fost discutate este prezentat in figura 6.16. Exemplul utilizeaza
structura aparatului de stare laolalta cu starea erorilor pentru
tratarea acestora.
Scopul Next State.vi (starea urmatoare) este simplu
de determinat
care stare va fi executata dupa aceea. Next State.vi este responsabil
pentru verificarea daca s-a produs vreo eroare dupa terminarea fiecarei
stari. Cand a aparut o eroare, urmatoarea stare care va fi executata va
fi starea erorilor. Starea erorilor inregistreaza mai intai eroarea
folosind Error Lod.vi. Codul erorii este verificat pentru a determina
daca exista intr-o zona certa care corespunde cu erorile driverul
instrumentului. Daca codul erorii se afla in zona aceea, eroarea este
considerata ca fatala sau nerecuperabila in acest exemplu. Cand o
eroare fatala a aparut, starea de inchidere (Close State) este legata
direct la Next State.vi (starea urmatoare) pentru a executa procedura
potriita de iesire.
Daca codul erorii nu se incadreaza in acea zona
specificata, codul
este verificat din nou si comparat cu codurile de erori definite de
utilizator. Aceasta conduce la structura procesului, care va actiona in
functie de eroarea care a fost generata. Cand nu se gaseste nici o
potrivire, procesul 0 (Case 0) este executat ca in figura 6.17.
Cand nu rezulta nici o potrivire pentru procesul 1
(Case 1), Remove
State.vi va inlatura procesele care nu pot fi executate din cauza unei
erori care a fost generata. Dupa aceea programul va continua ca
procesele care pot fi executate conform elementelor din matricea de
proces. Acest lucru este aratat in figura 6.18.
Figura 6.19 ne arata procesul de inchidere a
aparatului de stare.
Acest proces este executat la terminarea normala a programului si cand
se determina ca s-a ivit o eroare fatala. Cum este arata in figura
6.16, procesul de eroare va forta procesul de inchidere sa se execute
cand este depistata o eroare fatala. Singura sarcina a Close Handles.vi
(inchiderea tratarilor) este de a inchide toate referintele si canalele
de comunicatie care sunt deschise. Acest lucru va minimiza problemele
cand aplicatia este rulata din nou.
Exemplul demonstreaza ideile prezente in aceasta
sectiune. Mai
intai, tratarea exceptiilor s-a produs la nivelul principal pentru ca
aplicatia sa nu se treaca la nivelul de jos. In al doilea rand, codul
de tratare a exceptiilor este separat de restul de cod pentru a fi mai
lizibil. Nu numai ca reduce confuzia, dar reduce si nevoia de a dubla
codul in unele locuri. Dupa aceea, aparatul de stare permite
introducerea codului pentru tratarea exceptiilor intr-un sindur loc
pentru a creste mentenabilitatea si analizarea testelor conditionale.
Inregistrarea erorilor este efectuata pentru a tine evidenta erorilor
care au aparut. In final, a fost implementata o procedura potrivita de
iesire din aplicatie. Practicarea multa in crearea tratarilor de
exceptii va duce la un cod mai stabil si sigur.
6.5 Depanarea codului
Tehnicile prezentate in sectiunile anterioare pentru
tratarea
exceptiilor pot fi utilizate si in depanarea codului in Lab VIEW.
Detectia de erori este foarte pretioasa in timpul testarii codului.
Detectia este asistata de gasirea locului si de s-a produs eroarea. Un
defect este o greseala in cod care trebuie eliminata. Cu cat sunt
gasite aceste defecte mai devreme cu atat sunt mai usor de reparat.
Aceasta sectiune acopera unele utilitare care care faciliteaza procesul
de depanare a VI-urilor. Mai intai vor fi discutate VI-urile stricate
si lista de erori. Apoi va urma cum puteti activa executia pas cu pas
cu ajutorul butoanelor de executie pas cu pas. Apoi utilitarul de proba
care foloseste puncte de intrerupere si suspendarea executie vor fi
descrise. Inregistrarea datelor si NI Spy vor fi prezentate. In final,
vor fi aratate niste idei despre cum sa folositi aceste utilitare in
depanarea programelor.
6.5.1 Lista de erori
Un buton de executie sters (Run) indica ca VI-ul nu
poate fi
executat. Un VI nu poate fi executat cand una sau mai multe erori
exista in cod. Erorile pot rezulta dintr-o varietate de evenimente cum
ar fi legarea gresita sau terminale nelegate la diagrama codului.
Puteti de asemenea sa vedeti un buton de executie sters (Run) cand
editati diagrama codului. Cu toate acestea, cand terminati de acris
codul, butonul de executie (Run) nu ar mai trebui sa fie sters. Daca
butonul de executie este sters, puteti afla mai multe informatii despre
erorile care impiedica codul sa se excute prin apasarea pe butonul Run.
Figura 6.20 arata cum apare fereastra cu lista de erori.
In partea de sus a ferestrei cu lista de erori
exista o casuta care
listeaza toate VI-urile care contin erori. O casuta care listeaza toate
erorile din fiecare VI este exact sub aceasta casuta. Amandoi, erorile
din panoul frontal si din diagrama blocurilor vor fi listate. Lista
descrie natura erorilor. Cand este selectata o eroare casuta de langa
relateaza mai multe informatii despre eroare si cum poate fi acesata
inlaturata. Butonul Find (gaseste) va gasi si activa cauza erorii care
este selectata. De asemenea exista o casuta de bifare, Display Warnings
(afiseaza avertismentele), care listeaza toate avertismentele din VI-ul
respectiv. Avertismentele nu impiedica executia VI-ului, dar sunt
recomandari pentru programare. Puteti sa selectati afisarea
avertismentelor totdeauna prin selectarea casutei de bifare din meniul
Preference in submeniul Edit.
Folosirea listei de erori puteti efectiv rezolva
toate erorile care
pot impiedica VI-ul sa se execute. Odata ce ati infruntat toate
erorile, butonul de executie (Run) nu va mai fi sters. Lista de erori
realizeaza un mod usor de rezolvare a erorilor din cod si determina
cursul actiunii pentru a le elimina.
6.5.2 Execution Highlighting
Lista de erori prezentata mai sus va ajuta sa
rezolvati erorile
care impiedica aplicatia sa se execute. Dar nu asista la identificarea
de defecte care duc la producerea de erori. Execution Highlighting
(activarea executiei) este un utilitar care depisteaza defectele din
program. Execution Highlighting va permite sa vizualizati cursul
datelor de la un obiect la urmatorul in timp ce se executa VI-ul.
Datele care sunt reprezentate ca niste balonase care se misca de-a
lungul firelor, pot fi vazute cum se misca “cu incetinitorul” prin
noduri. G Reference Manual numeste acest lucru “animatie”. Acesta este
un utilitar foarte eficace a celor de la National Instruments care a
fost incorporat in Lab VIEW pentru depanarea VI-urilor. Din moment ce
Lab VIEW este un limbaj de programare vizual, are sens incorporarea de
uitlitare vizuale pentru ai ajuta pe programatori.
Daca nu vedeti balonase de date, poate ca setarile
din meniul
Preference nu a activat aceasta optiune. Initial aceasta otiune este
activata. Selectati Preference din meniul Edit si alegeti Debugging.
Fiti siguri ca optiunea este activata pentru a vedea balonase in timpul
Execution Highlighting.
Apasand butonul cu un simbol luminos in forma de
balon, localizat
in bara de utilitare a diagramei de cod, va activa Execution
Highlighting. Cand se porneste VI-ul incepe si animatia. Execution
Highlighting poate oprit sau pornit in timpul executiei VI-ului.
Execution Highlighting devine mult mai valoros cand este folosit in
modul pas cu pas. Viteza de executie a programului este redusa
semnificativ ca sa puteti vizualiza animatia si sa folositi si alte
utilitare de depanare in timpul executiei.
6.5.3 Pas cu pas
Modul pas cu pas poate fi activat prin apasarea
butonului Pause
(pauza). Acest mod va permite sa folositi butoanele de pasi pentru
executia unui nod odata din diagrama de cod. In plus, cand Execution
Highlighting este activat, puteti vizualiza curgerea datelor si
animatia pentru cod in timp ce se executa un nod odata. Butonul Pause
poate fi apasat sau neapasat in timpul executiei sau chiar pana cand sa
inceapa executia. Puteti de asemenea sa apasati butonul pentru executia
pas cu pas localizat langa butonul Execution Highlighting pentru a
intra in modul pas cu pas. Butonul Pause va deveni automat activ cand
sunt utilizate acestea.
Cand un VI este in modul pas cu pas, sunt trei
butoane de pe bara
de utilitare a diagramei de cod pentru controlul execuitiei
programului. Depinzand de diagrama de cod, butoanele de pasi vor
efectua actiuni diferite. Folositi Sinple Help (simplu ajutor) ce va
face fiecare buton la un nod specificat din diagrama de cod. Simple
Help poate fi accesat din meniul Help. Cand cursorul se afla deasupra
unui buton de pasi va aparea descriere a functiei acestuia. Figura 6.21
arata Error Log.vi in modul pas cu pas cu Execution Highlighting
activat. Pot fi vazute de asemenea si butoanele de executie pas cu pas.
Primul buton de pasi din bara de utilitare este
folosit pentru
intrarea intr-o structura particulara a unui VI. Structura sau subVI-ul
poate de asemenea sa fie in modul pas cu pas. Trebuie sa folositi
butoanele de pasi pentru a termina structura sau subVI-ul. Urmatorul
buton este folosit pentru saltul peste obiecte, structuri si subVI-uri.
Daca acest buton este apasat structura sau subVI0ul se va executa si va
va permite sa reluati executia pas cu pas dupa incheierea acesteia. Al
treilea buton va va permite sa terminati executia la sfarsitul
diagramei de cod. Odata apasat, codul ramas se va executa si nu va va
permite sa treceti la un obiect dacat daca este apsat din nou butonul
Pause.
6.5.4 Utilitarul de proba (Probe Tool)
Probe Tool poate fi accesat din paleta Tools sau
apsand pe un fir
din diagrama de cod. Probr Tool este folosit pentru a examina valorile
datelor prin firele din diagrama de cod. Cand un fir este probat,
datele vor fi afisate intr-o fereastra care are ca titlu numele
valorii. Probele si firele sunt numarate pentru a va ajuta sa le
urmariti cand sunt folosite mai multe odata. Puteti proba orice tip de
data sau format pentru a vedea valorile care sunt trecute de-a lungul
firelor. De exemplu, daca un grup de fire sunt probate, o fereastra cu
numele grupului apare afisand valorile grupului. Valorile vor fi
afisate imediat dupa ce datele trec de punctul de pe fir unde este
plasata proba in timp ce VI-ul este executat.
Probbe Tool este foarte valoros cand depaneze VI-uri
pentru ca va
permite sa exminati valorile care sunt trecute prin fire. Daca se ivesc
rezultate sau erori neasteptate, puteti verifica valorile pentru a fi
siguri ca sunt corecte. Acest utilitar va va permite sa aflati radacina
problemei. Figura 6.22 ilustreaza o proba la pachetul de erori intre
VISA Close.vi si File Close.vi. Firul este marcat cu un numar in timp
ce fereastra afiseaza valorile pachetului.
Implicit, probarea automata este activa in modul
Execution
Highlighting. Acest lucru cauzeaza ca Lab VIEW sa valorile datelor la
noduri in timpul Execution Highlighting. Cu toate acestea, datele
complete nu pot fi intotdeauna vazute in acest fel si este folositor
doar in scopul verificarii. Probr Tool va fi inca necesar pentru tipuri
de date ca matrici si grupuri. Probarea automata poate fi de asemenea
activata sau dezactivata din aceeasi fereastra Preference cum am
discutat mai devreme la balonase de date.
6.5.5 Utilitarul pentru puncte de oprire (Breakpoint Tool)
Breakpoint Tool este alt utilitar disponibil in
paleta Tools. Cu
sugereaza si numele, Breakpoint Tool ne permite sa inseram un punct de
oprire in diagrama codului. Punctele de oprire pot fi puse pe obiecte,
VI-uri, structuri si fire. Un cadru rosu in jurul unui obiect sau
structuri ne arata ca este un punct de oprire. In timp ce un punct rosu
indica un punct de oprire pe fir. Punctele de oprire cauzeaza opirea
executiei in locatia in care a fost amplasat. Daca este un fir, datele
vor trece de punctul de oprire inainte sa se opreasca executia. Un
punct de oprire poate fi eliminat folosind acelasi utilitar ca si cum
l-ai pune.
Punctele de oprire valoroase pentru ca permite
utilizatorului sa
opreasca executia la o locatie specificata in cod. Programul va
functiona in mod normal si va grabi executia inaitea punctului de
oprire, unde se va opri. Codul care este suspect poate fi apoi depanat
folosind modul pas cu pas, Execution HighLighting sau utilitarul de
proba.
Odata ce a fost pus un punct de oprire, programul se
va opri la
acea locatie de fiecare data cand este executat. Trebuie sa va amintiti
sa stergeti punctul de oprire daca nu mai vrei ca programul sa se
opreasca inainte de urmatoarea iteratie sau executie. Daca salvati
VI-ul cu punctul de oprire setat, VI-ul se va salva si cu punctul de
oprire. Urmatoarea data cand incarcati VI-ul si il executati, executia
se va opri la punctul de oprire. Puteti folosi functia Find (gaseste)
pantru a localuza orice puncte de oprire care au fost setate.
6.5.6 Suspendarea executiei
Puteti forta un subVI sa suspende executia, in
scupul depanarii,
cand este chemat. Acest lucru poate fi facut folosind una din cele trei
metode. Prima metoda este de a selecta Suspend when Called din meniul
Operate. Cea de-a doua metoda este sa apasati pe subVI-ul dib diagrama
de cod si sa selectati SubVI Node Setup. Apoi, selectati casuta Suspend
when Called. Puteti sa apasati pe iconita cand subVI-ul este deschis si
sa selectati VI Setup. Apoi casuta de bifare Suspend When Called.
Cand un subVI a cauzt suspendarea executiei, panoul
lui central va
fi afisat cand este chemat. SubVI-ul intra intr-un mod special de
executie cand este suspendat. Butonul Run incepe executia subVI-ului.
Cand un subVI este suspendat, poate fi executat in mod repetat folosind
butonul Run. La dreapta de butonul Run este butonul Return to Caller.
Odata suspendat, puteti folosi Execution Hightlightning, Singl-Stepping
(Pas su Pas) si utilitarul de proba pentru depanarea subVI-ului. Cand
folositi executia pas cu pas cand subVI-ul este suspendat, puteti sari
peste inceput si sa executati subVI-ul de cate ori este nevoie.
6.5.7 Data Logging (Inregistrarea datelor)
Data Logging este un alt utilitar inclus in Lab VIEW
care poate fi
folosit in scopul depanarii. Datele din panoul frontal pot fi
inregistrate automat activand Log at Completion din meniul Operate.
Cand VI se executa pentru prima data, va aprea o caseta de dialog,
cerandu-I utilizatorului un nume de fisier in care sa depoziteze. Un
fisier jurnal poate fi selectat inainte de a executa VI-ul, prin
selectarea Log din submeniul Data Logging din meniul Operate. Cand
numele fisierului este selectat inaintea executiei VI-ului, casuta de
dialog nu va aparea. Datele din panoul frontal sunt salvate in jurnal
dupa ce se executa VI-ul.
Data Logging este o metoda pentru salvarea datelor
din teste,
similar unei baze de date. Lab VIEW introduce o marca de timp si data,
laolalta cu datele din indicatoare si controloare din panoul frontal.
Datele pot ulterior fi vizionate selectand Retrieve din submeniul Data
Logging. Figura 6.23 ilustreaza cum apar datele cand sunt salvate si
receptionate folosind aceasta caracteristica. Acesta este un panou
frontal simplu cu doua indicatoare si doua controloare. Rezultatele
multiplicate si aditionale ale celor doua controloare intregi sunt
afisate in indicatoare. Acesta arata cum sunt afisate datele atunci
cand sunt receptionate. Marca cu timpul si data apare in partea de sus,
laolalta cu controloare pentru rularea prin inregistrari si stergerea
din ele.
Data Logging este util pentru salvarea valorilor
datelor din timpul
testelor si depanarii VI-urilor. Serveste drept mecanism pentru
salvarea rapida a datelor din VI-urile specificate care sunt depanate.
Jurnalul de date salvat poate fi vizualizat pentru valori suspecte.
Jurnalul de inregistrari de date este util pentru monitorizarea
problemelor intermitente ale VI-urilor. Datele din panoul frontal pot
fi apoi salvate, primite si curatate dupa necesitati.
6.5.8 NI Spy/GPIB Spy
Aceste doua utilitare sunt foarte similare si
amandoua sunt
folosite ca utilitare de depanare pentru sistemele de operare Windows
95/98/NT. NI Spy monitorizeaza chemarile care sunt facute de aplicatie
catre driverele NI-488.2, NI-VISA, IVI si NI-VXI. In mod similar, GPIB
Spy urmareste toate chemarile spre driverul GPIB. Sunt utile pentru
determinarea sursei de erori de comunicatie, chiar daca sunt relatate
in probleme generale de comunicatie sau specifice aplicatiei. Va ajuta
sa verificati ca comunicatia cu un instrument este corecta. Cand vor
rula amandoua in acelasi timp vor degrada viteza aplicatiei voastre.
Folositile doar cand depanati un program pentru a elibera din resursele
sistemului de operare, in special cand timpul de executie este un
considerent important.
NI-Spy afiseaza numarul de index asignat chemarii, o
descriere a
operatiei si parametrii si timpul cand au aparut. Utilitarul afiseaza
chemarile asa cum sunt facute in timpul executiei programului. Erorile
sunt imediat scoase in evidenta pentru a arata esecurile. NI Spy va
permite de asemenea sa inregistrati activitatile pentru a le vizualiza
mai tarziu.
GPIB Spy monitorizeaza chemarile catre driverul de
Windows GPIB sun
Win32, si le afiseaza in timp ce aplicatia se executa. Toate erorile si
esecurile sunt scoase in evidenta pentru o identificare rapida. Puteti
vedea fiecare chemare asa cum este ea facuta si sa vedeti rezultatele
incluzand si eventualele timeout-uri. Acest utilitar poate fi folosit
pentru a verifica daca aplicatia trimite chenarile corecte catre
driverul de Windows GPIB. GPIB Spy listeaza numerul de index al
chemarii, numele chemarii catre GPIB, scotand cuvantul de stare ibsta
dupa chemare, iberr in caz de eroare, variabila de numarare ibcntl si
timpul fiecarei chemari. Toate din acestea contin informatii despre
performanta aplicatiei. Puteti vizualiza informatii mai pe larg
folosind butonul Properties din bara de stare.
Familiarizarea cu protocoalele de comunicatie GPIB,
NI-488.2 si
ANSI/IEEE488.2 ar fi necesare pentru intelegerea completa si utilizarea
capacitatii de depanare pentru GPIB Spy cat si pentru NI Spy. O
discutie despre IEEE 488.2 nu face subiectul acestei carti.
Tabelul 6.2 Utilitare de depanare
Utilitarul Aplicatia Accesarea
Lista de erori Folosita la listarea, localizarea si
rezolvarea
erorilor care previne VI-ul sa se execute Apasati pe
butonul sters
Run
Execution Highlighting Folosit la animatia si
vizualizarea curgerii
datelor de-a lungul firelor in diagrama de cod
Apasati butonul
luminos ca un balonas
Modul pas cu pas Permite executia unui singur nod
odata Apasati butonul Pause
Utilitarul de proba Afiseaza valorile datelor care
trec prin fire Disponibil in paleta Tools
Utilitarul de puncte de oprire Opreste executia
programului la o locatie specificata Disponibil in
paleta Tools
Suspendarea executiei Suspenda subVI-uri pentru a nu
se executa in
mod repetat in timpul depanarii Folositi meniul
Operate, apasati pe
iconita de setare a subVI-ului (SubVI Node Setup sau VI Setup) in timp
ce VI-ul este deschis
Inregistrarea datelor Activeaza inregistrarea datelor
din panoul
frontal in fisiere Folositi meniul Operate si
submeniul Data Logging
GPIB Spy/NI Spy Monitorizeaza chemarile catre
driverii Windows-ului Porniti aplicatia
6.5.9 Utilizarea utilitarelor de depanare
Lista de erori, Execution Highlightning, modul pas
cu pas,
utilitarul de proba, uitlitarul de puncte de oprire si suspendarea
executiei au fost discutate in sectiunile anterioare. Aceste
posibilitati incluse in Lab VIEW sunt foarte eficiente in depanarea
codului cand sunt folosite odata cu ajutorul on-line (On-Line Help).
Fiecare este o arma pe care programatorul o poate folosi sa urmareasca
si sa rezolve problemele. Aceste utilitare sunt prezentate pe scurt in
tabelul 6.2. Tabelul 6.2 listeaza utilitarul, aplicarea sau uzul
acestuia si cum sa-l accesezi sau sa-l accesezi.
Software-ul proceseaza modelul care ruleaza
determinand cand incepe
faza de testare sau depanare a codului. Intr-un model iterativ
depanarea este implicata in fiecare ciclu al procesului. In modelul
cascadat, depanarea este facuta doar intr-un ciclu. In fiecare caz
prima actiune este de a elimina erorile care impiedica VI-ul sa se
execute. Lista de erori va asista in eleiminarea acestor erori ca sa se
poata executa VI-ul. Aceasta parte din depanare ar trebui efectuata
cand aplicatia este in curs de dezvoltare, fara sa priviti cu atentie
modelul folosit. Eliminarea erorilor care impiedica aplicatia sa se
execute poate fi considerata ca parte din faza de codare in Lab VIEW.
Acesta este analog erorilor de sintaxa in limbajele traditionale care
ii reiese programatorului in fata in timpul codarii. Lista de erori
face acest lucru usor inca si pentru nivicii programarii. Il ghideaza
pe programator in a rezolva rapid erorile.
Daca este posibil incercati sa testati cate un VI,
pe rand. Testati
driverele individual si subVI-urile individual, inainte de executie.
Veti mult mai protejat daca veti incerca sa depanati un program mare cu
multe subVI-uri. Nu numai ca este mai usor sa va concentrati asupra
partilor mai mici din program, dar puteti reduce erorile care pot apare
la interactiile intre subVI-uri unul cu altul. Un proiect modular
apropiat VI-ului si care este explicat simplifica testele.
Interactiunea cu cursul datelor poate face sa para ca exista maimulte
erori. Puteti fi in stare sa creati un simulator pentro I/O sau pentru
alte protiuni din cod care nu au fost inca pregatite. Din nou, acest
lucru ajuta la izolarea problemelor fara a va confrunta cu erori I/O.
Odata ce VI-ul poate fi executat, urmatorul pas este
sa-l executati
cu Exception Highlighting activat. Animatia te ajuta sa vezi cursul
datelor prin diagrama de cod. Execution Hightlighting va va ajuta sa
gasiti defecte cauzate de conectarea incorecta a obiectelor. In timp ce
VI-ul este rulat, fiti siguri ca codul se executa in ordinea
intentionata de dumneavoastra, care nu poate fi identificata cu
scoaterea in evidenta.
Poate ca vreti sa probati unele fire cu Execution
Highlighting si
sa fiti siguri ca valorile sunt corecte folosind Probe Tool. Probarea
pachetului de erori intre doua obicte sau VI-uri puteti identifica unde
este generata eroarea. Veti vedea valoarea utilitarului de proba odata
ce incepeti sa-l folositi. Probe Tool si Execution Highlighting pot fi
folosite in modul pas cu pas. Modul pas cu pas va lasa sa va uitati la
o sectiune de cod in mai mult detaliu pentru gasirea problemelor
existente.
Daca problemele persista, iata cateva sugestii pe
care ar trebui sa
le luati in consideratie. Acestea pot parea de baza, dar sunt cele care
se omit foarte usor. Mai intai, fiti siguri ca valorile relatate de
controloarele de utilizator sunt corecte. Utilitarul de proba poate fi
folosit pentru efectuarea acestei verificari in diagrama de cod. Cand
aceste valori date sunt in afara limitei acceptate, codul nu se va
executa cum se intentiona.
Daca efectuati comunicatia cum un dispozitiv extern.
Fisier sau
aplicatie, verificati comenzile si datele care se trimit. Dispozitivul
poate nu va raspunde la comenzi neasteptate. In timpul acestui proces
verificati numele corect al fisierului, tratarilor si adreselor.
Examinati dispozitivul extern pentru a vedeadaca functioneaza corect,
si efectuati manual actiunile pe care incercati sa le automatizati.
Presupuneti ca folositi pauze in program daca dispozitivul nu raspunde
repede. Investigati ordinea de executie di cod pentru a vedea daca are
loc secventa corecta de evenimente. Pot rezulta conditii concurente
daca codul nu se executa cum se intentioneaza.
Inspectati matricile pentru folosirea corecta a
indicilor.
Matricile, listele, sunetele si tipurile enumerate, toate pornesc de la
zero si pot cauza probleme serioase daca nu sunt luate in consideratie.
In timpul acestei inspectari, verificati structurile proceselor care
sunt coordonate de aceste valori sa vedeti daca corespund. De asemenea
fiti sigur ca aveti procesul implicit incorporat pentru a fi sigur ca
se executa codul corect. Puteti de asemenea sa examinati structurile
bucla pentru a vedea daca sunt folositi corect registrii de transfer ca
sa nu se piarda informatie. Acest lucru include si initializarea
corecta a registrilor de deplasare.
Setati limite de timp proprii pentru cat timp vei
incerca sa
determini unde exista eroare in cod. Poate deveni foarte frustant sa
incercati sa depanati o sectiune de cod ore in sir. Cand limita de timp
expira o a doua opinie este adusa in fata. Aceasta a doua perspectiva
va vedea problema programarii diferit si poate cu succes sa propuna o
solutie la intrebarile puse care te poate conduce la o solutie.
6.6 Sumar
Cand depanati o aplicatie ar putea fi mai usor doar
sa omiti din
codul pentru efectuarea tratarii sau detectiei de erori pentru ca
necesita munca in plus. Cu toate astea, tratarea exceptiilor este
necesara pentru controlarea problemelor care pot apare in timpul
executiei. O exceptie este ceva ce poate sa se iveasca in timpul
executiei programului. Aceste evenimente neasteptate sau exceptii,
trebuie sa le infruntati intr-o manierapotrivita. Daca exceptiile sunt
lasate in pace, puteti pierde controlul programului, care poate duce la
mai multe probleme.
O tratre de exceptii permite utilizatorului sa
infrunte unele
situatii care pot apare in timpul rularii aplicatiei. Este un mecanism
care poate detecta si eventual corecta erorile. Lab VIEW prezinta
cateva utilitare incluse care il ajuta pe programator in detectia de
erori, dar este responsabilitatea programatorului sa implementeze codul
de tratare a exceptiilor. Cateva metode pentru confruntarea su erorile
au fost descrise in acest capitol. Topica discutata va asista
programatorul in a scrie cod cat mai robust pentru implementarea
tratarii erorilor.
Tratarea erorilor poate fi considerata ca o faza
primara in
dezvoltarea unei aplicatii. Este potrivit sa luat in seama tratarea
erorilor si dupa aceea sa decidem structura si arhitectura aplicatiei.
Aplicatii mai bune se pot depana cand tratarea esceptiilor este primul
primara, nu secundara. Tratarea exceptiilor, cand este inclusa in
aplicatie, va conduce la un cod mai solid si mai sigur.
BIBLIOGRAFIE
G Programming Reference, National Instruments
Professional G Developers Tools Reference Manual, National Instruments
LabVlEWFunction and VIReference Manual, National Instruments LabVIEW
On-line Reference, National Instruments
Cele mai ok referate! www.referateok.ro |