Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Tratarea exceptiilor
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

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. j3z21zo
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.

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 fereastr


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta