Vedere de laborator. Sisteme de control automate CPU și siguranță industrială. NI LabVIEW - istoria creației

Salut colegi!

Într-un articol relativ scurt aș dori să vorbesc despre limbajul de programare LabVIEW. Acest produs foarte interesant, din păcate, nu este foarte popular și aș dori să umplu golul într-o oarecare măsură.

Ce este LabVIEW?

LabVIEW este unul dintre principalele produse ale National Instruments. În primul rând, trebuie remarcat faptul că LabVIEW este un acronim care reprezintă laborator oratorie V virtual eu instrumentaţie E inginerie W orkbench. Deja în nume se poate vedea accentul pus pe cercetarea de laborator, măsurători și colectarea datelor. Într-adevăr, construirea unui sistem SCADA în LabVIEW este oarecum mai ușoară decât utilizarea instrumentelor de dezvoltare „tradiționale”. În acest articol, aș dori să arăt că domeniul de aplicare posibil al LabVIEW este oarecum mai larg. Acesta este un limbaj de programare fundamental diferit sau, dacă doriți, o întreagă „filozofie” a programării. Un limbaj funcțional care te obligă să gândești puțin diferit și oferă uneori oportunități absolut fantastice pentru dezvoltator. Este LabVIEW un limbaj de programare? Aceasta este o problemă controversată - nu există un standard aici, cum ar fi, de exemplu, ANSI C. În cercurile înguste de dezvoltatori, spunem că scriem în limbajul „G”. Formal, un astfel de limbaj nu există, dar aceasta este frumusețea acestui instrument de dezvoltare: de la versiune la versiune, din ce în ce mai multe constructe noi sunt introduse în limbaj. Este greu de imaginat că următoarea reîncarnare a lui C va prezenta, de exemplu, o nouă structură pentru bucla for. Și în LabVIEW acest lucru este foarte posibil.
Cu toate acestea, trebuie remarcat faptul că LabVIEW este inclus în ratingul limbajului de programare TIOBE, ocupând în prezent locul treizecea - undeva între Prolog și Fortran.

NI LabVIEW - istoria creației

National Instruments a fost fondată în 1976 de trei fondatori, Jeff Kodosky, James Truchard și Bill Nowlin, în Austin, Texas. Principala specializare a companiei au fost instrumentele de măsurare și automatizarea producției.
Prima versiune a LabVIEW a fost lansată la zece ani după înființarea companiei - în 1986 (era o versiune pentru Apple Mac). Inginerii NI au decis să provoace limbajele de programare „tradiționale” și au creat un mediu de dezvoltare complet grafic. Jeff a devenit principalul ideolog al abordării grafice. Au fost lansate versiuni noi an de an. Prima versiune multiplatformă (inclusiv Windows) a fost versiunea 3, lansată în 1993. Versiunea actuală este 8.6, lansată anul trecut.

Sediul central al companiei se află și astăzi în Austin. Astăzi, compania are aproape patru mii de angajați și are birouri în aproape patruzeci de țări (există și un birou în Rusia)

Introducerea mea în LabVIEW

Cunoașterea mea cu LabVIEW a avut loc acum aproape zece ani. Am început să lucrez cu un nou contract, iar șeful meu de atunci mi-a dat un teanc de CD-uri cu cuvintele „acum vei lucra la asta”. Am instalat LabVIEW (era a cincea versiune), iar după ce am jucat un timp, am spus că nu se poate face nimic serios cu ASTA, mai degrabă aș face „moda veche” în Delphi... La care a spus eu - pur și simplu nu ai încercat. Lucrați o săptămână sau două. După un timp voi înțelege că nu voi mai putea scrie pe altceva decât LabVIEW. Pur și simplu m-am îndrăgostit de această limbă, deși nu era „dragoste la prima vedere”.

În general, este destul de dificil să compari limbajele de programare grafică și textuală. Aceasta este, probabil, o comparație de genul „PC” versus „MAC” sau „Windows” versus „Linux” - puteți argumenta cât de mult doriți, dar argumentul este absolut lipsit de sens - fiecare sistem are dreptul să existe și fiecare are atât suporteri, cât și adversari, În plus, fiecare produs are propria sa nișă. LabVIEW este doar un instrument, deși unul foarte flexibil.

Deci, ce este LabVIEW?

LabVIEW este un mediu de dezvoltare a aplicațiilor grafice multiplatformă. LabVIEW este, în principiu, un limbaj de programare universal. Deși acest produs este uneori strâns legat de hardware-ul National Instruments, cu toate acestea nu este legat de o anumită mașină. Există versiuni pentru Windows, Linux, MacOS. Codul sursă este portabil, iar programele vor arăta la fel pe toate sistemele. Codul generat de LabVIEW poate fi executat și pe Windows Mobile sau PalmOS (pentru dreptate, trebuie remarcat că suportul pentru PalmOS a fost întrerupt, totuși, Palm însuși este mai de vină aici). Acest limbaj poate fi folosit cu succes pentru a crea sisteme mari pentru procesarea textelor, imaginilor și lucrul cu baze de date.

LabVIEW este un limbaj de nivel foarte înalt. Cu toate acestea, nimic nu vă împiedică să includeți module „de nivel scăzut” în programele LabVIEW. Chiar dacă doriți să utilizați inserții de asamblare, acest lucru este posibil, trebuie doar să generați un DLL și să inserați apeluri în cod. Pe de altă parte, un limbaj de nivel înalt vă permite să efectuați cu ușurință operațiuni foarte netriviale cu date, care într-un limbaj obișnuit ar putea lua multe linii (dacă nu zeci de linii) de cod. Cu toate acestea, pentru a fi corect, trebuie remarcat faptul că unele operațiuni ale limbajelor de nivel scăzut (de exemplu, lucrul cu pointeri) nu sunt atât de ușor de implementat în LabVIEW, datorită naturii sale de „nivel înalt”. Desigur, limbajul LabVIEW include constructe de control de bază care au analogi în limbaje „tradiționale”:

  • variabile (locale sau globale)
  • ramificare (structură de caz)
  • For – bucle cu și fără verificarea finalizării.
  • While - bucle
  • Gruparea operațiunilor.

LabVIEW - capabilități de program și limbaj

În LabVIEW, modulele software dezvoltate se numesc „Instrumente virtuale” sau pur și simplu VI. Acestea sunt salvate în fișiere cu extensia *.vi. VI-urile sunt blocurile de bază care alcătuiesc programul LabVIEW. Fiecare program LabVIEW conține cel puțin un VI. În ceea ce privește limbajul C, puteți face destul de sigur o analogie cu o funcție, singura diferență fiind că în LabVIEW o funcție este conținută într-un singur fișier (puteți crea și biblioteci de instrumente). Este de la sine înțeles că un VI poate fi apelat dintr-un alt VI. În principiu, fiecare VI este format din două părți - o diagramă bloc și un panou frontal. Diagrama bloc este codul programului (mai precis, o reprezentare grafică vizuală a codului), iar panoul frontal este interfața. Iată cum arată un exemplu clasic Hello, World!:

LabVIEW se bazează pe paradigma fluxului de date. În exemplul de mai sus, constanta și terminalul indicator sunt conectate între ele printr-o linie. Această linie se numește Wire. Îl poți numi „sârmă”. Firele transmit date de la un element la altul. Întregul concept se numește Flux de date. Esența unei diagrame bloc sunt nodurile, ieșirile unor noduri sunt conectate la intrările altor noduri. Nodul va începe execuția numai când toate datele necesare funcționării au ajuns. Există două noduri în diagrama de mai sus. Una dintre ele este o constantă. Acest nod este autonom - începe să se execute imediat. Al doilea nod este un indicator. Va afișa datele pe care le transmite constanta (dar nu imediat, ci de îndată ce datele sosesc din constantă).

Iată un exemplu puțin mai complex: adunarea și înmulțirea a două numere. În limbile tradiționale am scrie ceva de genul

Int a, b, sum, mul;
//...
suma = a + b;
mul = a * b;

Iată cum arată în LabVIEW:

Rețineți că adunarea și înmulțirea sunt efectuate automat în paralel. Pe o mașină cu două procesoare, ambele procesoare vor fi utilizate automat.

Și iată cum arată structura while / for și if / then / else:

După cum sa menționat deja, toate elementele vor fi executate în paralel. Nu trebuie să vă gândiți cum să paralelizați o sarcină în mai multe fire care pot fi executate în paralel pe mai multe procesoare. În cele mai recente versiuni, puteți chiar să specificați în mod explicit pe ce procesor ar trebui să fie executată o anumită buclă while. Acum există suplimente pentru limbile text care vă permit să obțineți cu ușurință suport pentru sistemele multiprocesor, dar probabil că acest lucru nu este implementat nicăieri la fel de ușor ca în LabVIEW. (Ei bine, încă am alunecat în comparație cu limbile text). Dacă vorbim deja despre multithreading, atunci ar trebui să remarcăm și faptul că dezvoltatorul are la dispoziție o selecție largă de instrumente pentru sincronizarea firelor - semafore, cozi, rendezvous etc.

LabVIEW include seturi bogate de elemente pentru construirea interfețelor utilizator. Interfețele au fost create rapid în Delphi, dar în LabVIEW acest proces are loc și mai rapid.

Livrarea standard a LabVIEW include, de asemenea, blocuri pentru lucrul cu fișiere ini, registry, funcții pentru lucrul cu fișiere binare și de testare, funcții matematice, instrumente puternice pentru trasare (și unde ați fi fără acest lucru în laborator) și, în plus, Abilitatea menționată de a apela DLL-uri, LabVIEW vă permite să lucrați cu componente ActiveX și .net. Începând cu versiunea a opta, la LabVIEW a fost adăugat suport pentru clase - limbajul a devenit orientat pe obiecte. Suportul implementat nu poate fi numit complet, dar principalele caracteristici ale limbajelor orientate pe obiect - moștenirea și polimorfismul - sunt prezente. De asemenea, funcționalitatea limbajului poate fi extinsă cu module suplimentare, de exemplu NI Vision Toolkit - pentru procesarea imaginilor și viziunea computerizată și altele. Și folosind modulul Application Builder puteți genera un fișier exe executabil. Folosind Internet Toolkit puteți lucra cu servere ftp, folosind Database Connectivity Toolkit - cu baze de date etc.

Puteți auzi adesea părerea că codul grafic este greu de citit. Într-adevăr, din obișnuință, abundența de icoane și dirijori este oarecum șocantă. Dezvoltatorii începători creează, de asemenea, programe „foaie” și programe „spaghetti”. Cu toate acestea, un dezvoltator LabVIEW cu experiență nu va crea niciodată diagrame mai mari decât dimensiunea ecranului, chiar dacă programul constă din sute de module. Un program bine conceput este efectiv „auto-documentat”, deoarece se bazează deja pe o reprezentare grafică.

Pentru o lungă perioadă de timp, programând în LabVIEW, am fost complet încrezător că LabVIEW este un interpret și diagramele bloc erau în mod constant interpretate de kernel. După ce am discutat cu inginerii NI, s-a dovedit că nu a fost cazul. LabVIEW este un compilator (calitatea generării codului, totuși, lasă mult de dorit). Dar compilarea are loc „din mers” - în orice moment în timpul dezvoltării, programul este întotdeauna gata de rulare. Codul LabVIEW poate fi, de asemenea, compilat într-un fișier executabil cu drepturi depline care poate fi rulat pe un computer fără instalarea LabVIEW (deși necesită LabVIEW Run-Time). De asemenea, puteți asambla un pachet de instalare a programului de instalare; utilitarele terțe, cum ar fi InstallShield, nu sunt necesare.

O descriere suplimentară și mai detaliată a capabilităților pachetului depășește scopul acestui articol, dar vă sugerez pur și simplu să o încercați (linkurile sunt prezentate mai jos). După cum au spus cei mari, „... singura modalitate de a stăpâni un nou limbaj de programare este să scrieți programe în el.” Ei bine, programatorii experimentați vor putea extrapola cunoștințele dobândite la propriile nevoi.

Aproape toți dezvoltatorii de dispozitive cu microcontroler, fie că sunt amatori sau profesioniști, mai devreme sau mai târziu trebuie să conecteze un dispozitiv de microcontroler la „fratele său mai mare”, și anume un PC. Atunci apare întrebarea: ce software ar trebui să folosesc pentru a schimba cu microcontrolerul, a analiza și a procesa datele primite de la acesta? Adesea, pentru a schimba MK-ul cu un computer, folosesc interfața și protocolul RS232 - vechiul port COM bun într-o implementare sau alta.

Pe partea computerului, sunt utilizate diverse programe terminale, dintre care sunt sute. Dar aceste programe oferă doar recepția și transmiterea informațiilor. Este dificil să o procesezi și să o vizualizezi într-o formă vizuală.

Unii scriu astfel de software independent într-un limbaj de programare (Delphi, C++), oferind funcționalitatea necesară. Dar această sarcină nu este ușoară; trebuie să știți, pe lângă limba în sine, structura sistemului de operare, cum să lucrați cu porturile de comunicare și multe alte subtilități tehnice care distrag atenția de la principalul lucru - implementarea programului. algoritm. În general, fiind și programator Windows/Unix în același timp.

Conceptul de instrumente virtuale (vi) diferă mult de aceste abordări. Acest articol va discuta despre produsul software LabView de la Nationals Instruments. Abia încep să stăpânesc acest produs minunat, așa că s-ar putea să fac inexactități și greșeli. Experții vă vor corecta :-)) Ce este mai exact LabView?

LabView este un mediu de dezvoltare și o platformă pentru rularea programelor scrise în limbajul de programare grafică National Instruments G.

În termeni simpli, LabView este un mediu de creare a aplicațiilor pentru sarcinile de colectare, procesare, vizualizare a informațiilor din diverse instrumente, instalații de laborator etc. Și, de asemenea, pentru controlul proceselor și dispozitivelor tehnologice. Cu toate acestea, folosind LabView puteți crea un software de aplicație destul de obișnuit. Nu am de gând să descriu acest produs și să lucrez cu el în detaliu. Există mii de pagini de documentație excelentă și sute de cărți scrise pe LabView. Internetul este plin de resurse dedicate LabView, unde poți obține răspunsuri la toate întrebările tale.

Scopul articolului este de a arăta cât de simplu și convenabil este, în comparație cu programarea tradițională, să creezi aplicații pentru un PC și ce putere are LabView. (De fapt, este discutabil, pentru că în programarea tradițională, nu este mai greu să o faci în Delphi. Și din punct de vedere al eficienței nu e cu greu mai rău, dacă nu mai bine. Dar pentru asta trebuie să studiezi Delphi mult mai mult timp. Totul este rapid și clar imediat. Am studiat câteva manuale și am continuat să îngrădesc tot felul de cadrane. Așa că pentru programatori este ca al cincilea picior al unui câine, dar pentru tovarășii care sunt departe de computer ca mine, este exact lucrul. o dată, în jumătate de oră, când am văzut prima dată LabView, am construit un sistem bestial folosind un control manual subțire de udare și încălzire pentru o seră de cânepă.Cu tot felul de controlere PID.L-am adus la potențiometrele și senzorii din laborator. bancă care era în tehnicianul nostru și a lansat această unitate infernală. Și totul a funcționat imediat, fără depanare. Apropo, toate echipamentele coliderului cu hadron rulează pe LabView, precum și o mulțime de echipamente științifice. Notă: DI HALT) La urma urmei, programarea PC-ului este străină majorității inginerilor electronici, nu? Acesta este ceea ce vom încerca să reparăm. Pentru a nu studia caii de vid sferici, ne vom stabili și vom implementa o sarcină simplă. Sarcina este cu adevărat simplă, dar pe baza ei puteți înțelege principiile de bază ale programării în LabView. Vom folosi LabView versiunea 2010. Pentru alte versiuni diferențele vor fi minime.

Sarcină
Avem o placă cu un microcontroler AVR conectat la un computer prin RS232. Controlerul este încărcat cu firmware, conform căruia controlerul măsoară valoarea tensiunii la una dintre intrările ADC și transmite codul ADC (de la 0 la 1023) către computer printr-un canal serial. Este necesar să scrieți un program pentru computer care va primi un flux de date de la ADC, să afișați codul ADC, să convertiți codul ADC într-o valoare a tensiunii în volți, să afișați valoarea tensiunii în volți și să graficați modificarea tensiunii în timp.

Ei bine, probabil destule versuri, să începem!

Deci de ce avem nevoie pentru muncă:

  • De fapt, LabView în sine. Puteți descărca versiunea de încercare de pe site-ul web NI: http://www.ni.com/trylabview/. Versiunea piratată poate fi căutată pe google fără probleme. Apropo, pe rutracker.org, pe lângă o tonă de piratate, există și o versiune pentru Linux pentru care înregistrarea nu pare deloc necesară. NI a decis să se întâlnească cu sursa deschisă la jumătatea drumului?
  • De asemenea, este necesar să descărcați componenta NI VISA. Fără acest program, LabView nu va „vedea” portul COM de pe computer. VISA conține funcții pentru lucrul cu porturile de comunicație și multe altele. Îl puteți descărca de pe joule.ni.com. Instalați LabView și VISA. Instalarea acestui software este standard și nu are caracteristici speciale.

În primul rând, trebuie să ne asigurăm că VISA a găsit un port COM în sistem și că lucrează cu el corect. Puteți verifica acest lucru astfel: lansați programul Măsurare și automatizare. Vine cu LabView. Dacă nu este instalat, îl puteți instala manual. Este pe disc (imaginea cu LabView).

Primim ceva de genul asta:


Deci ce avem? Zona de lucru este formată din două panouri mari, Panoul frontal și Diagrama bloc. Pe panoul frontal vom crea interfața programului nostru folosind comenzile din panoul de control. Aceste elemente sunt cunoscutele butoane cu rezistență variabilă, LED-uri, butoane, instrumente cu indicator, ecranul osciloscopului etc. Acestea servesc la introducerea de informații în program și la afișarea rezultatelor execuției. Panoul Diagramă bloc conține codul programului în sine. Aici trebuie să ne întoarcem puțin și să explicăm principiul programării în LabView. Un mic exemplu. Este obișnuit să începeți să lucrați la un program prin proiectarea interfeței și apoi implementând algoritmul pe o diagramă bloc. Să facem un program simplu pentru înmulțirea a două numere. Pentru a face acest lucru, vom plasa trei comenzi pe panoul frontal trăgându-le, să spunem elementele Buton și Indicator numeric pentru a afișa rezultatul.

Ok, acum trebuie să implementăm înmulțirea reală. Mergem la panoul Diagramă bloc și vedem că a fost creată o pictogramă corespunzătoare pentru fiecare dintre controalele noastre. Cel mai bine este să comutați imediat modul de afișare pe terminale. Diagrama nu va fi atât de aglomerată. În plus, terminalele afișează tipul de date pe care operează un anumit control. Pentru a face acest lucru, faceți clic dreapta pe pictogramă și debifați Vizualizare ca pictogramă. În partea de sus a ecranului există un control sub formă de terminal, în jos și în dreapta sub forma unei pictograme. Pentru a configura vizualizarea implicită a diagramei bloc ca terminale, trebuie să selectați elementul de meniu Instrumente->Opțiuni, selectați Diagrama bloc din stânga și debifați Plasați terminalele panoului frontal ca pictograme. Este foarte util să afișați ajutor contextual. Îl puteți afișa folosind combinația Ctrl+H. Această fereastră afișează informații despre obiectul pe care este plasat curent cursorul. Lucru mega convenabil.

Cel mai important concept din programarea LabView este conceptul de DataFlows. Esenta este aceasta: Spre deosebire de limbajele de programare imperative, în care instrucțiunile sunt executate în ordine, în LabView funcțiile funcționează numai dacă toate intrările funcției au informații (fiecare funcție are valori de intrare și de ieșire). Abia atunci funcția își implementează algoritmul, iar rezultatul este trimis la ieșire, care poate fi folosit de o altă funcție. Astfel, în cadrul unui instrument virtual, funcțiile pot funcționa independent unele de altele.

Acum, pentru a reînvia exemplul nostru, trebuie să urmăm acest concept și să introducem funcția cu valorile numerice pe care le-am stabilit cu comenzile și să obținem rezultatul de la ieșire și să-l afișăm.

Pentru a conecta elemente într-o diagramă bloc, utilizați instrumentul Connect Wire din panoul Instrumente. Selectați-l și desenați conexiunile noastre.

După cum puteți vedea, nu pare să fie nimic complicat. Dar, în același timp, LabView vă permite să rezolvați probleme de orice complexitate! La naiba, sistemul de control TANK este făcut pe el! Astfel încât.

Ei bine, acum haideți să facem lucruri mai interesante și anume, să facem cel mai simplu voltmetru al nostru, despre care am vorbit chiar la început.

Deci, ce trebuie să facem. Mai întâi trebuie să configurați și să inițializați portul serial. Începeți o buclă nesfârșită. În buclă folosim funcția de citire din port și primim informațiile. Convertim informațiile pentru afișare pe grafic, recalculăm codul ADC într-o valoare a tensiunii în volți. La ieșirea din buclă, închideți portul.
Deci, în interfața programului nostru nu vor exista elemente de control cu ​​excepția butonului Stop, ci doar o afișare a rezultatului.Vom face asta: mai întâi vom crea o diagramă bloc, apoi vom adăuga elementele lipsă în față. panou. Deși trebuie să faci invers! Dar în acest caz este mai convenabil.

Pe panoul diagramei bloc plasăm elementul While Loop din paleta Structuri, aceasta este bucla noastră fără sfârșit. Desenăm un cadru buclă în jurul unei zone suficient de mare pentru a se potrivi în interiorul algoritmului. Există un punct roșu în colțul din dreapta jos, faceți clic dreapta pe el și selectați Creare control. Vom avea imediat un buton Stop pe panoul frontal. Când faceți clic pe el, programul nostru se va încheia.

Trebuie să creați controale pentru funcția de inițializare a portului. Două sunt suficiente pentru noi - viteza portului și numele portului. La fel cum am creat o constantă pentru funcția de citire, creăm controale. PCM la intrările necesare ale funcției și articolului de inițializare

Creare->Control.

Creare->Control.

Suntem interesați de două intrări: Numele resursei VisaȘi Baud Rate(implicit 9600). Acum să mergem la panoul frontal și să adăugăm componentele necesare, și anume ecranul de desen grafic și etichetele pentru afișarea codului ADC și a tensiunii în volți.
În consecință, acestea sunt elemente Waweform Chart din paleta Graph și două elemente Numeric Indicator din paleta Numeric.

Să revenim la diagrama bloc și să mutăm elementele care apar în interiorul buclei. Suntem aproape de finalizare! Singurul lucru este că mai trebuie să convertim șirul de caractere care vine de la ieșirea funcției Citire într-un format pe care indicatorii noștri îl pot digera. Și, de asemenea, implementați cea mai simplă matematică pentru a converti codul ADC în volți. Mai jos sunt capturi de ecran ale panoului frontal și diagrame bloc în această etapă:



Pentru a converti un șir, vom folosi funcția Scan from string din paleta String. Îl plasăm în interiorul buclei. Acum pentru matematică. Pentru a converti codul ADC într-o valoare a tensiunii în volți, trebuie să înmulțiți codul cu valoarea tensiunii de referință (în cazul meu este de cinci volți) și să împărțiți valoarea rezultată la 1023 (deoarece ADC-ul are un 10 -lățime de biți). Vom plasa într-o buclă funcțiile de înmulțire și împărțire necesare, precum și constantele (5 și 1023). Nu voi face capturi de ecran pentru fiecare conexiune, pentru că sunt deja prea multe poze. Voi oferi captura de ecran finală a tuturor conexiunilor. Totul este extrem de simplu acolo.


Cred că totul este clar, dacă aveți întrebări, întrebați în comentarii. Să ne dăm seama împreună :-))) Între timp, programul este gata.

Să mergem la interfața noastră și să setăm puțin diagrama. Selectați valoarea inferioară de-a lungul axei Y și setați-o la 0. Selectați valoarea superioară și setați-o la 5. Astfel, scara noastră de-a lungul axei Y este în intervalul 0-5 volți. Ei bine, selectăm portul COM, introducem rata de baud, lansăm programul nostru folosind butonul săgeată și răsucim cu furie rezistorul de pe placă, în timp ce observăm liber rezultatul muncii noastre pe ecran. Faceți clic pe butonul Stop pentru a opri programul.

De asemenea, puteți combina piesele în blocuri funcționale, astfel încât acestea să nu aglomereze diagrama.

Aproape toți dezvoltatorii de dispozitive cu microcontroler, fie amatori sau profesioniști, mai devreme sau mai târziu trebuie să conecteze un dispozitiv de microcontroler la „fratele său mai mare”, și anume un PC. Atunci apare întrebarea: ce software ar trebui să folosesc pentru a schimba cu microcontrolerul, a analiza și a procesa datele primite de la acesta? Adesea, pentru a schimba un MK cu un computer, folosesc interfața și protocolul RS232 - vechiul port COM într-o implementare sau alta.

Pe partea computerului, sunt utilizate diverse programe terminale, dintre care sunt sute. Dar aceste programe oferă doar recepția și transmiterea informațiilor. Este dificil să o procesezi și să o vizualizezi într-o formă vizuală.

Unii scriu astfel de software independent într-un limbaj de programare (Delphi, C++), oferind funcționalitatea necesară. Dar această sarcină nu este ușoară; trebuie să știți, pe lângă limba în sine, structura sistemului de operare, cum să lucrați cu porturile de comunicare și multe alte subtilități tehnice care distrag atenția de la principalul lucru - implementarea programului. algoritm. În general, fiind și programator Windows/Unix în același timp.

Conceptul de instrumente virtuale (vi) diferă mult de aceste abordări. Acest articol va discuta despre produsul software LabView de la Nationals Instruments. Abia încep să stăpânesc acest produs minunat, așa că s-ar putea să fac inexactități și greșeli. Experții vă vor corecta :-)) Ce este mai exact LabView?

LabView este un mediu de dezvoltare și o platformă pentru rularea programelor scrise în limbajul de programare grafică National Instruments G.

În termeni simpli, LabView este un mediu de creare a aplicațiilor pentru sarcinile de colectare, procesare, vizualizare a informațiilor din diverse instrumente, instalații de laborator etc. Și, de asemenea, pentru controlul proceselor și dispozitivelor tehnologice. Cu toate acestea, folosind LabView puteți crea un software de aplicație destul de obișnuit. Nu am de gând să descriu acest produs și să lucrez cu el în detaliu. Există mii de pagini de documentație excelentă și sute de cărți scrise pe LabView. Internetul este plin de resurse dedicate LabView, unde poți obține răspunsuri la toate întrebările tale.

Scopul articolului este de a arăta cât de simplu și convenabil este, în comparație cu programarea tradițională, să creezi aplicații pentru un PC și ce putere are LabView. (De fapt, este discutabil, pentru că în programarea tradițională, nu este mai greu să o faci în Delphi. Și din punct de vedere al eficienței nu e cu greu mai rău, dacă nu mai bine. Dar pentru asta trebuie să studiezi Delphi mult mai mult timp. Totul este rapid și clar imediat. Am studiat câteva manuale și am continuat să îngrădesc tot felul de cadrane. Așa că pentru programatori este ca al cincilea picior al unui câine, dar pentru tovarășii care sunt departe de computer ca mine, este exact lucrul. o dată, în jumătate de oră, când am văzut prima dată LabView, am construit un sistem bestial folosind un control manual subțire de udare și încălzire pentru o seră de cânepă.Cu tot felul de controlere PID.L-am adus la potențiometrele și senzorii din laborator. bancă care era în tehnicianul nostru și a lansat această unitate infernală. Și totul a funcționat imediat, fără depanare. Apropo, toate echipamentele coliderului cu hadron rulează pe LabView, precum și o mulțime de echipamente științifice. Notă: DI HALT) La urma urmei, programarea PC-ului este străină majorității inginerilor electronici, nu? Acesta este ceea ce vom încerca să reparăm. Pentru a nu studia caii de vid sferici, ne vom stabili și vom implementa o sarcină simplă. Sarcina este cu adevărat simplă, dar pe baza ei puteți înțelege principiile de bază ale programării în LabView. Vom folosi LabView versiunea 2010. Pentru alte versiuni diferențele vor fi minime.

Sarcină
Avem o placă cu un microcontroler AVR conectat la un computer prin RS232. Controlerul este încărcat cu firmware, conform căruia controlerul măsoară valoarea tensiunii la una dintre intrările ADC și transmite codul ADC (de la 0 la 1023) către computer printr-un canal serial. Este necesar să scrieți un program pentru computer care va primi un flux de date de la ADC, să afișați codul ADC, să convertiți codul ADC într-o valoare a tensiunii în volți, să afișați valoarea tensiunii în volți și să graficați modificarea tensiunii în timp.

Ei bine, probabil destule versuri, să începem!

Deci de ce avem nevoie pentru muncă:

  • De fapt, LabView în sine. Puteți descărca versiunea de încercare de pe site-ul web NI: http://www.ni.com/trylabview/. Versiunea piratată poate fi căutată pe google fără probleme. Apropo, pe rutracker.org, pe lângă o tonă de piratate, există și o versiune pentru Linux pentru care înregistrarea nu pare deloc necesară. NI a decis să se întâlnească cu sursa deschisă la jumătatea drumului?
  • De asemenea, este necesar să descărcați componenta NI VISA. Fără acest program, LabView nu va „vedea” portul COM de pe computer. VISA conține funcții pentru lucrul cu porturile de comunicație și multe altele. Îl puteți descărca de pe joule.ni.com. Instalați LabView și VISA. Instalarea acestui software este standard și nu are caracteristici speciale.

În primul rând, trebuie să ne asigurăm că VISA a găsit un port COM în sistem și că lucrează cu el corect. Puteți verifica acest lucru astfel: lansați programul Măsurare și automatizare. Vine cu LabView. Dacă nu este instalat, îl puteți instala manual. Este pe disc (imaginea cu LabView).

În partea stângă a ferestrei vedem echipamentul detectat în sistem. Printre altele, găsim portul nostru COM. În dreapta există un buton Deschide panoul de testare Visa. Folosind-o, puteți testa dispozitivul selectat. În cazul unui port COM, puteți trimite sau primi o secvență implicită sau arbitrară de caractere. Dacă totul este în regulă cu portul, putem trece direct la crearea programului nostru.

Lansați LabView. În fereastra Noțiuni de bază, selectați elementul Blank Vi pentru a crea un nou dispozitiv virtual.

Primim ceva de genul asta:

Deci ce avem? Zona de lucru este formată din două panouri mari, Panoul frontal și Diagrama bloc. Pe panoul frontal vom crea interfața programului nostru folosind comenzile din panoul de control. Aceste elemente sunt cunoscutele butoane cu rezistență variabilă, LED-uri, butoane, instrumente cu indicator, ecranul osciloscopului etc. Acestea servesc la introducerea de informații în program și la afișarea rezultatelor execuției. Panoul Diagramă bloc conține codul programului în sine. Aici trebuie să ne întoarcem puțin și să explicăm principiul programării în LabView. Un mic exemplu. Este obișnuit să începeți să lucrați la un program prin proiectarea interfeței și apoi implementând algoritmul pe o diagramă bloc. Să facem un program simplu pentru înmulțirea a două numere. Pentru a face acest lucru, vom plasa trei comenzi pe panoul frontal trăgându-le, să spunem elementele Buton și Indicator numeric pentru a afișa rezultatul.

Să creăm interfața după cum doriți, de exemplu astfel:

Ok, acum trebuie să implementăm înmulțirea reală. Mergem la panoul Diagramă bloc și vedem că a fost creată o pictogramă corespunzătoare pentru fiecare dintre controalele noastre. Cel mai bine este să comutați imediat modul de afișare pe terminale. Diagrama nu va fi atât de aglomerată. În plus, terminalele afișează tipul de date pe care operează un anumit control. Pentru a face acest lucru, faceți clic dreapta pe pictogramă și debifați Vizualizare ca pictogramă. În partea de sus a ecranului există un control sub formă de terminal, în jos și în dreapta sub forma unei pictograme. Pentru a configura vizualizarea implicită a diagramei bloc ca terminale, trebuie să selectați elementul de meniu Instrumente->Opțiuni, selectați Diagrama bloc din stânga și debifați Plasați terminalele panoului frontal ca pictograme. Este foarte util să afișați ajutor contextual. Îl puteți afișa folosind combinația Ctrl+H. Această fereastră afișează informații despre obiectul pe care este plasat curent cursorul. Lucru mega convenabil.

Acum trebuie să adăugăm o funcție de multiplicare la diagrama bloc. Faceți clic dreapta pe diagrama bloc și selectați funcția Multiply din paleta numerică. Să-l punem pe diagramă. Este demn de remarcat faptul că LabView are un set pur și simplu uriaș de funcții. Aceasta include diverse matematică, statistici, analiză a semnalului, reglare PID, procesare video, sunet și imagini. Nu poți enumera totul.

Cel mai important concept din programarea LabView este conceptul de DataFlows. Esenta este aceasta: Spre deosebire de limbajele de programare imperative, în care instrucțiunile sunt executate în ordine, în LabView funcțiile funcționează numai dacă toate intrările funcției au informații (fiecare funcție are valori de intrare și de ieșire). Abia atunci funcția își implementează algoritmul, iar rezultatul este trimis la ieșire, care poate fi folosit de o altă funcție. Astfel, în cadrul unui instrument virtual, funcțiile pot funcționa independent unele de altele.

Acum, pentru a reînvia exemplul nostru, trebuie să urmăm acest concept și să introducem funcția cu valorile numerice pe care le-am stabilit cu comenzile și să obținem rezultatul de la ieșire și să-l afișăm.

Pentru a conecta elemente într-o diagramă bloc, utilizați instrumentul Connect Wire din panoul Instrumente. Selectați-l și desenați conexiunile noastre.

Asta e tot, poți rula acest program stupid pentru execuție ciclică și rotiți butoanele, observând rezultatul înmulțirii.

După cum puteți vedea, nu pare să fie nimic complicat. Dar, în același timp, LabView vă permite să rezolvați probleme de orice complexitate! La naiba, sistemul de control TANK este făcut pe el! Astfel încât.

Ei bine, acum haideți să facem lucruri mai interesante și anume, să facem cel mai simplu voltmetru al nostru, despre care am vorbit chiar la început.

Deci, ce trebuie să facem. Mai întâi trebuie să configurați și să inițializați portul serial. Începeți o buclă nesfârșită. În buclă folosim funcția de citire din port și primim informațiile. Convertim informațiile pentru afișare pe grafic, recalculăm codul ADC într-o valoare a tensiunii în volți. La ieșirea din buclă, închideți portul.
Deci, în interfața programului nostru nu vor exista elemente de control cu ​​excepția butonului Stop, ci doar o afișare a rezultatului.Vom face asta: mai întâi vom crea o diagramă bloc, apoi vom adăuga elementele lipsă în față. panou. Deși trebuie să faci invers! Dar în acest caz este mai convenabil.

Pe panoul diagramei bloc plasăm elementul While Loop din paleta Structuri, aceasta este bucla noastră fără sfârșit. Desenăm un cadru buclă în jurul unei zone suficient de mare pentru a se potrivi în interiorul algoritmului. Există un punct roșu în colțul din dreapta jos, faceți clic dreapta pe el și selectați Creare control. Vom avea imediat un buton Stop pe panoul frontal. Când faceți clic pe el, programul nostru se va încheia.

Acum în afara buclei trebuie să plasăm funcțiile de inițializare și închidere a portului. În stânga este inițializarea, în dreapta este închiderea. Din nou, faceți clic dreapta și selectați funcțiile Configurare Port, Citire și Închidere. Aceste funcții se află în paleta Instrument I/O –> Serial. Am plasat funcția de citire în interiorul buclei. Conectăm ieșirile și intrările funcțiilor folosind o bobină de fire. Pentru funcția Read, trebuie să specificăm numărul de octeți pe care îi va primi. Faceți clic dreapta pe intrarea din mijloc a funcției Citire și selectați Creare->Constant, introduceți o valoare, de exemplu 200. În această etapă ar trebui să arate ca captura de ecran.

Trebuie să creați controale pentru funcția de inițializare a portului. Două sunt suficiente pentru noi - viteza portului și numele portului. La fel cum am creat o constantă pentru funcția de citire, creăm controale. PCM la intrările necesare ale funcției și articolului de inițializare

Creare->Control.

Suntem interesați de două intrări: Numele resursei VisaȘi Baud Rate(implicit 9600). Acum să mergem la panoul frontal și să adăugăm componentele necesare, și anume ecranul de desen grafic și etichetele pentru afișarea codului ADC și a tensiunii în volți.
În consecință, acestea sunt elemente Waweform Chart din paleta Graph și două elemente Numeric Indicator din paleta Numeric.

Să revenim la diagrama bloc și să mutăm elementele care apar în interiorul buclei. Suntem aproape de finalizare! Singurul lucru este că mai trebuie să convertim șirul de caractere care vine de la ieșirea funcției Citire într-un format pe care indicatorii noștri îl pot digera. Și, de asemenea, implementați cea mai simplă matematică pentru a converti codul ADC în volți. Mai jos sunt capturi de ecran ale panoului frontal și diagrame bloc în această etapă:

Pentru a converti un șir, vom folosi funcția Scan from string din paleta String. Îl plasăm în interiorul buclei. Acum pentru matematică. Pentru a converti codul ADC într-o valoare a tensiunii în volți, trebuie să înmulțiți codul cu valoarea tensiunii de referință (în cazul meu este de cinci volți) și să împărțiți valoarea rezultată la 1023 (deoarece ADC-ul are un 10 -lățime de biți). Vom plasa într-o buclă funcțiile de înmulțire și împărțire necesare, precum și constantele (5 și 1023). Nu voi face capturi de ecran pentru fiecare conexiune, pentru că sunt deja prea multe poze. Voi oferi captura de ecran finală a tuturor conexiunilor. Totul este extrem de simplu acolo.

Cred că totul este clar, dacă aveți întrebări, întrebați în comentarii. Să ne dăm seama împreună :-))) Între timp, programul este gata.

Să mergem la interfața noastră și să setăm puțin diagrama. Selectați valoarea inferioară de-a lungul axei Y și setați-o la 0. Selectați valoarea superioară și setați-o la 5. Astfel, scara noastră de-a lungul axei Y este în intervalul 0-5 volți. Ei bine, selectăm portul COM, introducem rata de baud, lansăm programul nostru folosind butonul săgeată și răsucim cu furie rezistorul de pe placă, în timp ce observăm liber rezultatul muncii noastre pe ecran. Faceți clic pe butonul Stop pentru a opri programul.

După cum puteți vedea, totul este destul de simplu. Acest exemplu este doar o mică parte din toate capacitățile LabView. Dacă acest articol ajută pe cineva, mă voi bucura. Doar nu mă lovi prea tare în comentarii, nu sunt un profesionist. Un alt mic truc. Dacă diagrama arată ca Cthulhu, puteți încerca să utilizați butonul CleanUp Diagram. Va aduce diagrama într-o formă mai mult sau mai puțin divină, dar trebuie folosită cu atenție. Iată rezultatul muncii ei

De asemenea, puteți combina piesele în blocuri funcționale, astfel încât acestea să nu aglomereze diagrama.



NI LabVIEW este un mediu de programare grafică în flux. Când scrie un program în LabVIEW, utilizatorul definește secvența operațiilor de transformare a fluxului de date folosind o diagramă bloc. Diagrama bloc conține imagini ale nodurilor funcționale conectate prin conductori prin care fluxul de date trece de la un nod la altul. De asemenea, LabVIEW are o serie de instrumente care încalcă paradigma de programare a firelor, permițându-vă totuși să extindeți în mod semnificativ funcționalitatea aplicațiilor dezvoltate în acesta.

Ce este o tehnică de programare

Termenul „tehnică de programare” combină o selecție de diferite limbaje de programare, modele de calcul, niveluri de abstractizare, metode de lucru cu cod și algoritmi de reprezentare. De-a lungul anilor, National Instruments a dezvoltat funcționalitatea LabVIEW pentru a oferi suport pentru o varietate mai largă de tehnici de programare.


Puteți prezenta codul scris folosind diverse tehnici, precum și codul de flux G pe o diagramă bloc, iar LabVIEW va compila instrucțiunile pentru dispozitivele țintă adecvate (PC-uri desktop obișnuite, platforme RTOS, FPGA, dispozitive mobile, dispozitive încorporate bazate pe ARM)

Fig.1. Gamă largă de platforme și tehnici de programare în LabVIEW



Transferul de date între secțiuni de cod scrise folosind diferite abordări este organizat în LabVIEW foarte simplu - fluxul de date este legătura de legătură între diferite modele de calcul și limbaje. În limbajul G, introducerea/ieșirea informațiilor se realizează folosind o interfață de utilizator specializată (panoul frontal), interfețe de rețea, biblioteci de analiză, baze de date și alte instrumente.

Programare in G
Apariția programării în flux în 1986 a fost cu adevărat inovatoare. Secvența efectuării operațiilor cu date în limbajul G este determinată nu de ordinea în care apar, ci de prezența datelor la intrările acestor noduri. Operatorii care nu sunt conectați printr-un flux de date sunt executați în paralel, în ordine aleatorie.

Nodurile diagramei reprezintă instrucțiuni simple sau seturile lor - funcții, dispozitive virtuale (VI). Execuția instrucțiunilor nodului are loc numai după ce datele apar pe toate terminalele de intrare ale nodului. După ce instrucțiunile sunt executate, rezultatul acestuia este transmis prin bornele de ieșire ale nodului către intrările următoarelor noduri.


Fig.2. Acest exemplu adaugă A și B, înmulțește suma rezultată cu C și afișează rezultatul


Figura 2 prezintă un exemplu de expresie matematică în limbajul G. Diagrama este formată din două noduri (adunare și înmulțire) și trei intrări (A, B și C). În primul rând, are loc adăugarea lui A și B. Codul nodului de multiplicare nu este executat până când datele nu sunt primite la ambele terminale de intrare și, prin urmare, așteaptă rezultatul nodului de adunare. De îndată ce rezultatul adunării ajunge la prima intrare a nodului de multiplicare, codul acestuia (A+B)*C va fi executat.

În ciuda faptului că limbajul G vă permite să setați tipul de date în mod explicit, una dintre diferențele semnificative dintre acest limbaj și altele este prezența conductorilor care îndeplinesc funcțiile variabilelor. În loc de a trece variabile între funcții, transferul de date este determinat de conexiuni prin cablu. Pe de altă parte, G conține, de asemenea, constructe care sunt standard în alte limbi, cum ar fi bucle condiționate, bucle de contor, structuri de selecție, funcții de apel invers și funcții logice.

Configurarea interactivă ca bază a programării
În 2003, National Instruments a lansat NI LabVIEW 7 Express, care a introdus tehnologia Express Virtual Instruments (VII), o tehnologie concepută pentru a simplifica în continuare procesul de dezvoltare a algoritmilor de aplicație. Spre deosebire de VI-urile obișnuite, VI-urile expres sunt structuri de limbaj abstracte care implementează o tehnică de programare bazată pe configurația interactivă a componentelor.


Fig.3. Paleta Express VI, plasând Express VI pe o diagramă bloc și afișând Express VI în vizualizarea pictogramelor


Puteți distinge un VP expres de un VP obișnuit prin pictograma albastră mare. Prima dată când plasați un Express VI pe o diagramă bloc, apare o casetă de dialog de personalizare. După finalizarea configurației, LabVIEW generează automat codul pe baza configurației Express VI pe care ați creat-o. Puteți vizualiza și edita acest cod sau puteți modifica setările Express VI prin redeschiderea casetei de dialog făcând dublu clic pe pictograma Express VI.

Ca exemplu, luați în considerare sarcina de a introduce date pentru analiza software. LabVIEW face interfața cu o varietate de hardware foarte ușoară, deoarece include drivere pentru mii de dispozitive. Sarcina de colectare a datelor poate fi implementată nu numai printr-un design al mai multor VP, ci și printr-o opțiune mai simplă - un VP expres.

Este suficient să specificați canale de citire/scriere în setările DAQ Assistance Express VI și să configurați parametri precum rata de eșantionare, scalarea, sincronizarea și declanșatoarele. În plus, Express VI oferă posibilitatea de a pre-colecta date de pe dispozitiv pentru a verifica dacă setările de colectare a datelor selectate sunt corecte.


Fig.4. DAQ Assistant Express VI facilitează configurarea timpului de declanșare și a parametrilor canalului



Fig.5. Cod G echivalent cu DAQ Assistant Express VI


În ciuda tuturor avantajelor sale, Express VI-urile nu oferă posibilitatea de control și configurare la nivel scăzut a modului de operare al dispozitivului, care este implementat folosind dispozitive virtuale convenționale. Utilizatorii nou la LabVIEW pot folosi o funcție încorporată care convertește un VI Express configurat anterior într-o secvență de VI-uri obișnuite. Acest lucru îi poate ajuta pe începători să învețe cod de nivel scăzut. Doar selectați linia Open Front Panel din meniul contextual al Express VI din diagrama bloc. Trebuie remarcat faptul că orice Express VI poate fi înlocuit cu o combinație de mai multe VI-uri obișnuite, iar versiunea LabVIEW Professional Development System vă permite să vă creați propriile VI-uri Express.

Suport pentru fișierele scripts.m
Cu modulul LabVIEW MathScript RT, puteți importa, edita și rula scripturi de fișiere *.m utilizate în mod tradițional în modelarea și analiza matematică, procesarea semnalului și calcule matematice complexe. Le puteți folosi cu codul G pentru a crea aplicații autonome pentru desktop sau hardware în timp real.

Există mai multe moduri de a lucra cu MathScript în LabVIEW. Pentru a lucra cu scripturi în modul interactiv, utilizați fereastra MathScript prezentată în Fig. 6


Fig.6. Dezvoltarea interactivă a algoritmilor de text în fereastra MathScript


Pentru a utiliza scripturi *.m într-o aplicație LabVIEW și pentru a combina capabilitățile de programare text și grafică, ar trebui să utilizați nodul MathScript, care este prezentat în Figura 7. Utilizarea nodului MathScript vă permite să implementați algoritmi de text în codul VI și să utilizați capacitățile grafice ale interfeței pentru a controla parametrii scriptului (butoane, glisoare, controale, grafice și alte elemente).


Fig.7. Nodul MathScript facilitează utilizarea scripturilor .m în codul G


Modulul LabVIEW MathScript RT are propriul motor de script *.m și nu necesită instalarea de software terță parte. Utilizarea nodului MathScript vă permite să combinați beneficiile algoritmilor bazați pe text, gradul înalt de integrare hardware al LabVIEW, o interfață interactivă cu utilizatorul și alte tehnici de programare discutate în acest articol într-o singură aplicație.

Programare orientată pe obiecte
Programarea orientată pe obiecte este unul dintre cele mai populare tipuri de programare. Această abordare vă permite să combinați multe componente disparate într-un program în clase de obiecte individuale. O definiție de clasă conține caracteristicile unui obiect și o descriere a acțiunilor pe care obiectul le poate efectua, numite de obicei proprietăți și metode. Clasele pot avea copii care moștenesc proprietăți și metode și le pot suprascrie sau adăuga altele noi.


Fig.8. Abordarea orientată pe obiect se bazează pe clase (exemplu în imagine) și proprietăți și funcții asociate ale VI-ului


Utilizarea OOP în LabVIEW a devenit posibilă începând cu versiunea 8.2

Principalele avantaje ale acestei abordări sunt:

  • . Încapsulare: încapsularea este gruparea datelor și metodelor într-o clasă, astfel încât acestea să poată fi accesate numai prin VI-uri care sunt membri ai clasei. Această abordare vă permite să izolați secțiuni de cod și să vă asigurați că modificarea acestora nu va afecta codul din restul programului.
  • . Moștenire: Moștenirea vă permite să utilizați clasele existente ca bază pentru definirea unor noi clase. Când este creată o nouă clasă, aceasta moștenește tipurile de date și membrii VI ai clasei și, astfel, implementează proprietățile și metodele clasei părinte. De asemenea, este posibil să adăugați propriile VI-uri pentru a schimba funcționalitatea clasei.
  • . Dispecerare dinamica: Definirea metodelor este posibila folosind mai multe VI-uri cu acelasi nume in ierarhia claselor. Această metodă se numește dispecerare dinamică, deoarece decizia despre care VI va fi apelat se ia în etapa de execuție a programului.
Aceste caracteristici OOP vă permit să faceți codul mai ușor de înțeles și mai scalabil și, de asemenea, dacă este necesar, să limitați accesul la VI.

Modelare și simulare
Modelarea și simularea sistemelor fizice este o abordare populară în dezvoltarea sistemelor care sunt descrise prin ecuații diferențiale. Studierea modelului ne permite să identificăm caracteristicile sistemelor dinamice și să dezvoltăm o unitate de control cu ​​comportamentul necesar.

Figura 9 prezintă bucla de control și simulare, care rezolvă o ecuație diferențială folosind algoritmi încorporați în LabVIEW în timp real pe o anumită perioadă de timp. Această abordare de programare se bazează, de asemenea, pe fluxul de date, ca limbajul G, cu toate acestea, este de obicei numit flux de semnal. După cum se arată în Figura 9, puteți combina tehnicile de modelare matematică cu alte tehnici, cum ar fi G Data Streams și MathScript Node.


Orez. 9. Diagrama de simulare arată propagarea semnalului, hardware-ul I/O și nodul MathScript.


Bucla de control și simulare acceptă funcții care sunt utilizate pentru implementarea modelelor de sisteme staționare liniare pe dispozitive care rulează un sistem de operare în timp real. Puteți utiliza aceste funcții pentru a defini modele discrete specificând o funcție de transfer, o diagramă pol-zero și un sistem de ecuații diferențiale. Instrumentele de analiză în domeniul timpului și al frecvenței, cum ar fi răspunsul în pas de timp sau diagrama Bode, vă permit să analizați în mod interactiv comportamentul controlului/simulărilor în buclă deschisă și închisă. De asemenea, puteți utiliza instrumentele de conversie a modelelor încorporate dezvoltate în mediul de programare The MathWorks, Inc. Simulink®, care le va permite să fie utilizate în mediul LabVIEW. Aceste sisteme dinamice pot fi instalate pe dispozitive OS în timp real fără a necesita mai mulți pași de conversie a programului datorită funcționalității bibliotecii LabVIEW Real-Time Module, care este ideală pentru dezvoltarea prototipurilor de sisteme de control și a aplicațiilor de simulare a firmware-ului.

Diagrame de stare
Modulul NI LabVIEW Statechart oferă dezvoltatorului capacitatea de a descrie funcționalitatea unui sistem în cel mai abstract mod posibil folosind diagrame de stare. Integrarea codului LabVIEW în stările diagramei vă permite să creați o specificație de lucru reală a aplicației. Modulul NI LabVIEW Statechart adaugă capacitatea de a organiza imbricarea ierarhică și execuția paralelă la funcționalitatea diagramelor de stat convenționale. Trebuie remarcat faptul că diagramele de stare vă permit să descrieți modul în care un sistem reacționează la evenimente, ceea ce le face un instrument foarte util pentru dezvoltarea sistemelor reactive, cum ar fi dispozitive încorporate, sisteme de control și interfețe complexe de utilizator.


Orez. 10. Modulul LabVIEW Statechart descrie un sistem bazat pe o diagramă de stare.


Destul de des, diagramele de stat sunt folosite pentru a împărți o aplicație în subsisteme, cum ar fi achiziția de date, ieșirea datelor, comunicațiile în rețea, înregistrarea datelor și gestionarea interfeței cu utilizatorul. În acest caz, diagramele de stări definesc ce informații sunt transferate între stări (subsisteme) și în ce ordine funcționează.

Arhitectura aplicației bazată pe Statechart vă permite să dezvoltați mai eficient sisteme software complexe, în special sisteme care răspund la evenimente, cum ar fi controlere de sistem dinamice, interfețe complexe de utilizator și protocoale de comunicații digitale.

VHDL pentru FPGA
Modulul LabVIEW FPGA vă permite să utilizați limbajul G pentru a scrie codul FPGA. Cu toate acestea, ca și în cazul altor tehnici de dezvoltare, puteți utiliza codul scris anterior sau pur și simplu aveți opțiunea de a alege cum să implementați programul. Majoritatea FPGA-urilor sunt programate folosind limbajul de programare VHDL bazat pe text. În loc să rescrieți blocurile IP existente în G, puteți importa codul VHDL utilizând un nod CLIP (Component-Level IP). De obicei, aveți nevoie de un fișier XML CLIP pentru a configura interfața dintre elementele diagramei bloc, dar LabVIEW are un expert de import CLIP care vă permite să faceți acest lucru automat. Afișează o listă de intrări și ieșiri ale blocului IP, care poate fi trasă cu mouse-ul pe diagrama bloc și utilizată în aplicație, așa cum se arată în Fig. unsprezece.


Orez. unsprezece. Nodul CLIP.


Deoarece NI folosește FPGA-uri Xilinix și setul de instrumente software Xilinx într-un modul FPGA LabVIEW, puteți utiliza generatorul de nucleu Xilinx pentru a crea un nucleu compatibil. De asemenea, puteți utiliza kitul de dezvoltare încorporat Xilinx pentru a crea orice microprocesor software. În cele din urmă, multe terțe părți oferă diferite tipuri de blocuri IP pentru gestionarea magistralei, procesarea semnalului și nuclee specifice.

Integrarea codului asemănător C
Puteți utiliza cod text secvențial în VI-urile diagramei bloc în mai multe moduri. Prima modalitate este Formula Node, care acceptă o sintaxă asemănătoare C, cu definiții variabile și punct și virgulă la sfârșitul liniilor.

Nodul C Inline este similar cu Formula Node și oferă capacități suplimentare de programare la nivel scăzut și suport pentru fișierele antet fără suprasolicitarea apelurilor de procedură. Puteți folosi Nodul C Inline pentru a introduce orice cod C, inclusiv instrucțiuni #defines care sunt cuprinse sintactic între paranteze în codul C.

Interacțiunea cu fișierele executabile
Când programați în LabVIEW, de multe ori trebuie să accesați fișiere compilate și biblioteci dintr-o aplicație scrisă în LabVIEW pentru a reutiliza algoritmi dezvoltați anterior în alte medii. De asemenea, atunci când creați un proiect, trebuie să accesați aplicații scrise în LabVIEW din alte aplicații.

LabVIEW oferă o gamă largă de instrumente diferite pentru a rezolva aceste probleme. În primul rând, LabVIEW poate apela funcții DLL, precum și poate folosi interfețele ActiveX și .NET.

În al doilea rând, o aplicație scrisă în LabVIEW își poate expune funcționalitatea unei alte aplicații ca DLL sau folosind instrumente ActiveX.

În cazul în care aveți cod sursă C pe care doriți să-l utilizați în aplicația dvs. LabVIEW, puteți compila DLL-ul și îl puteți conecta folosind nodul Funcție Bibliotecă Apel. De exemplu, puteți organiza calcule paralele folosind algoritmi scriși în C, în timp ce un program scris în LabVIEW gestionează firele paralele. Pentru a face lucrul cu biblioteci externe mai ușoară, LabVIEW are un expert Import Shared Library care vă permite să creați sau să actualizați automat un wrapper pentru a apela bibliotecile corespunzătoare (fișier Windows .dll, fișier Mac OS .framework sau fișier Linux .so).

De asemenea, puteți utiliza interfața de linie de comandă a sistemului de operare cu System Exec.vi.

Combinația mai multor tehnici de programare într-un mediu de dezvoltare face posibilă reutilizarea algoritmilor dezvoltați în alte limbaje. În plus, dezvoltatorul poate combina operațiuni de nivel înalt și de nivel scăzut într-o singură aplicație, făcând codul mai flexibil și mai vizual. Diverse niveluri de abstractizare permit vizualizarea algoritmilor complecși, menținând în același timp controlul la nivel scăzut asupra aplicației și hardware-ului. Cu o integrare hardware strânsă, puteți utiliza ambele abordări pentru a gestiona semnalele pe platforme multi-core, FPGA și procesoare încorporate.

Problemele au de obicei mai multe soluții, iar mediul de programare LabVIEW este suficient de flexibil pentru a vă permite să alegeți soluția care se potrivește cel mai bine nevoilor dumneavoastră.

Simulink® este o marcă comercială înregistrată a The MathWorks, Inc.

ARM, Keil și µVision sunt mărci comerciale și mărci comerciale înregistrate ale ARM Ltd sau ale subsidiarelor sale.



Salut colegi!

Într-un articol relativ scurt aș dori să vorbesc despre limbajul de programare LabVIEW. Acest produs foarte interesant, din păcate, nu este foarte popular și aș dori să umplu golul într-o oarecare măsură.

Ce este LabVIEW?

LabVIEW este unul dintre principalele produse ale National Instruments. În primul rând, trebuie remarcat faptul că LabVIEW este un acronim care reprezintă laborator oratorie V virtual eu instrumentaţie E inginerie W orkbench. Deja în nume se poate vedea accentul pus pe cercetarea de laborator, măsurători și colectarea datelor. Într-adevăr, construirea unui sistem SCADA în LabVIEW este oarecum mai ușoară decât utilizarea instrumentelor de dezvoltare „tradiționale”. În acest articol, aș dori să arăt că domeniul de aplicare posibil al LabVIEW este oarecum mai larg. Acesta este un limbaj de programare fundamental diferit sau, dacă doriți, o întreagă „filozofie” a programării. Un limbaj funcțional care te obligă să gândești puțin diferit și oferă uneori oportunități absolut fantastice pentru dezvoltator. Este LabVIEW un limbaj de programare? Aceasta este o problemă controversată - nu există un standard aici, cum ar fi, de exemplu, ANSI C. În cercurile înguste de dezvoltatori, spunem că scriem în limbajul „G”. Formal, un astfel de limbaj nu există, dar aceasta este frumusețea acestui instrument de dezvoltare: de la versiune la versiune, din ce în ce mai multe constructe noi sunt introduse în limbaj. Este greu de imaginat că următoarea reîncarnare a lui C va prezenta, de exemplu, o nouă structură pentru bucla for. Și în LabVIEW acest lucru este foarte posibil.
Cu toate acestea, trebuie remarcat faptul că LabVIEW este inclus în ratingul limbajului de programare TIOBE, ocupând în prezent locul treizecea - undeva între Prolog și Fortran.

NI LabVIEW - istoria creației

National Instruments a fost fondată în 1976 de trei fondatori, Jeff Kodosky, James Truchard și Bill Nowlin, în Austin, Texas. Principala specializare a companiei au fost instrumentele de măsurare și automatizarea producției.
Prima versiune a LabVIEW a fost lansată la zece ani după înființarea companiei - în 1986 (era o versiune pentru Apple Mac). Inginerii NI au decis să provoace limbajele de programare „tradiționale” și au creat un mediu de dezvoltare complet grafic. Jeff a devenit principalul ideolog al abordării grafice. Au fost lansate versiuni noi an de an. Prima versiune multiplatformă (inclusiv Windows) a fost versiunea 3, lansată în 1993. Versiunea actuală este 8.6, lansată anul trecut.

Sediul central al companiei se află și astăzi în Austin. Astăzi, compania are aproape patru mii de angajați și are birouri în aproape patruzeci de țări (există și un birou în Rusia)

Introducerea mea în LabVIEW

Cunoașterea mea cu LabVIEW a avut loc acum aproape zece ani. Am început să lucrez cu un nou contract, iar șeful meu de atunci mi-a dat un teanc de CD-uri cu cuvintele „acum vei lucra la asta”. Am instalat LabVIEW (era a cincea versiune), iar după ce am jucat un timp, am spus că nu se poate face nimic serios cu ASTA, mai degrabă aș face „moda veche” în Delphi... La care a spus eu - pur și simplu nu ai încercat. Lucrați o săptămână sau două. După un timp voi înțelege că nu voi mai putea scrie pe altceva decât LabVIEW. Pur și simplu m-am îndrăgostit de această limbă, deși nu era „dragoste la prima vedere”.

În general, este destul de dificil să compari limbajele de programare grafică și textuală. Aceasta este, probabil, o comparație de genul „PC” versus „MAC” sau „Windows” versus „Linux” - puteți argumenta cât de mult doriți, dar argumentul este absolut lipsit de sens - fiecare sistem are dreptul să existe și fiecare are atât suporteri, cât și adversari, În plus, fiecare produs are propria sa nișă. LabVIEW este doar un instrument, deși unul foarte flexibil.

Deci, ce este LabVIEW?

LabVIEW este un mediu de dezvoltare a aplicațiilor grafice multiplatformă. LabVIEW este, în principiu, un limbaj de programare universal. Deși acest produs este uneori strâns legat de hardware-ul National Instruments, cu toate acestea nu este legat de o anumită mașină. Există versiuni pentru Windows, Linux, MacOS. Codul sursă este portabil, iar programele vor arăta la fel pe toate sistemele. Codul generat de LabVIEW poate fi executat și pe Windows Mobile sau PalmOS (pentru dreptate, trebuie remarcat că suportul pentru PalmOS a fost întrerupt, totuși, Palm însuși este mai de vină aici). Acest limbaj poate fi folosit cu succes pentru a crea sisteme mari pentru procesarea textelor, imaginilor și lucrul cu baze de date.

LabVIEW este un limbaj de nivel foarte înalt. Cu toate acestea, nimic nu vă împiedică să includeți module „de nivel scăzut” în programele LabVIEW. Chiar dacă doriți să utilizați inserții de asamblare, acest lucru este posibil, trebuie doar să generați un DLL și să inserați apeluri în cod. Pe de altă parte, un limbaj de nivel înalt vă permite să efectuați cu ușurință operațiuni foarte netriviale cu date, care într-un limbaj obișnuit ar putea lua multe linii (dacă nu zeci de linii) de cod. Cu toate acestea, pentru a fi corect, trebuie remarcat faptul că unele operațiuni ale limbajelor de nivel scăzut (de exemplu, lucrul cu pointeri) nu sunt atât de ușor de implementat în LabVIEW, datorită naturii sale de „nivel înalt”. Desigur, limbajul LabVIEW include constructe de control de bază care au analogi în limbaje „tradiționale”:

  • variabile (locale sau globale)
  • ramificare (structură de caz)
  • For – bucle cu și fără verificarea finalizării.
  • While - bucle
  • Gruparea operațiunilor.

LabVIEW - capabilități de program și limbaj

În LabVIEW, modulele software dezvoltate se numesc „Instrumente virtuale” sau pur și simplu VI. Acestea sunt salvate în fișiere cu extensia *.vi. VI-urile sunt blocurile de bază care alcătuiesc programul LabVIEW. Fiecare program LabVIEW conține cel puțin un VI. În ceea ce privește limbajul C, puteți face destul de sigur o analogie cu o funcție, singura diferență fiind că în LabVIEW o funcție este conținută într-un singur fișier (puteți crea și biblioteci de instrumente). Este de la sine înțeles că un VI poate fi apelat dintr-un alt VI. În principiu, fiecare VI este format din două părți - o diagramă bloc și un panou frontal. Diagrama bloc este codul programului (mai precis, o reprezentare grafică vizuală a codului), iar panoul frontal este interfața. Iată cum arată un exemplu clasic Hello, World!:

LabVIEW se bazează pe paradigma fluxului de date. În exemplul de mai sus, constanta și terminalul indicator sunt conectate între ele printr-o linie. Această linie se numește Wire. Îl poți numi „sârmă”. Firele transmit date de la un element la altul. Întregul concept se numește Flux de date. Esența unei diagrame bloc sunt nodurile, ieșirile unor noduri sunt conectate la intrările altor noduri. Nodul va începe execuția numai când toate datele necesare funcționării au ajuns. Există două noduri în diagrama de mai sus. Una dintre ele este o constantă. Acest nod este autonom - începe să se execute imediat. Al doilea nod este un indicator. Va afișa datele pe care le transmite constanta (dar nu imediat, ci de îndată ce datele sosesc din constantă).

Iată un exemplu puțin mai complex: adunarea și înmulțirea a două numere. În limbile tradiționale am scrie ceva de genul

Int a, b, sum, mul;
//...
suma = a + b;
mul = a * b;

Iată cum arată în LabVIEW:

Rețineți că adunarea și înmulțirea sunt efectuate automat în paralel. Pe o mașină cu două procesoare, ambele procesoare vor fi utilizate automat.

Și iată cum arată structura while / for și if / then / else:

După cum sa menționat deja, toate elementele vor fi executate în paralel. Nu trebuie să vă gândiți cum să paralelizați o sarcină în mai multe fire care pot fi executate în paralel pe mai multe procesoare. În cele mai recente versiuni, puteți chiar să specificați în mod explicit pe ce procesor ar trebui să fie executată o anumită buclă while. Acum există suplimente pentru limbile text care vă permit să obțineți cu ușurință suport pentru sistemele multiprocesor, dar probabil că acest lucru nu este implementat nicăieri la fel de ușor ca în LabVIEW. (Ei bine, încă am alunecat în comparație cu limbile text). Dacă vorbim deja despre multithreading, atunci ar trebui să remarcăm și faptul că dezvoltatorul are la dispoziție o selecție largă de instrumente pentru sincronizarea firelor - semafore, cozi, rendezvous etc.

LabVIEW include seturi bogate de elemente pentru construirea interfețelor utilizator. Interfețele au fost create rapid în Delphi, dar în LabVIEW acest proces are loc și mai rapid.

Livrarea standard a LabVIEW include, de asemenea, blocuri pentru lucrul cu fișiere ini, registry, funcții pentru lucrul cu fișiere binare și de testare, funcții matematice, instrumente puternice pentru trasare (și unde ați fi fără acest lucru în laborator) și, în plus, Abilitatea menționată de a apela DLL-uri, LabVIEW vă permite să lucrați cu componente ActiveX și .net. Începând cu versiunea a opta, la LabVIEW a fost adăugat suport pentru clase - limbajul a devenit orientat pe obiecte. Suportul implementat nu poate fi numit complet, dar principalele caracteristici ale limbajelor orientate pe obiect - moștenirea și polimorfismul - sunt prezente. De asemenea, funcționalitatea limbajului poate fi extinsă cu module suplimentare, de exemplu NI Vision Toolkit - pentru procesarea imaginilor și viziunea computerizată și altele. Și folosind modulul Application Builder puteți genera un fișier exe executabil. Folosind Internet Toolkit puteți lucra cu servere ftp, folosind Database Connectivity Toolkit - cu baze de date etc.

Puteți auzi adesea părerea că codul grafic este greu de citit. Într-adevăr, din obișnuință, abundența de icoane și dirijori este oarecum șocantă. Dezvoltatorii începători creează, de asemenea, programe „foaie” și programe „spaghetti”. Cu toate acestea, un dezvoltator LabVIEW cu experiență nu va crea niciodată diagrame mai mari decât dimensiunea ecranului, chiar dacă programul constă din sute de module. Un program bine conceput este efectiv „auto-documentat”, deoarece se bazează deja pe o reprezentare grafică.

Pentru o lungă perioadă de timp, programând în LabVIEW, am fost complet încrezător că LabVIEW este un interpret și diagramele bloc erau în mod constant interpretate de kernel. După ce am discutat cu inginerii NI, s-a dovedit că nu a fost cazul. LabVIEW este un compilator (calitatea generării codului, totuși, lasă mult de dorit). Dar compilarea are loc „din mers” - în orice moment în timpul dezvoltării, programul este întotdeauna gata de rulare. Codul LabVIEW poate fi, de asemenea, compilat într-un fișier executabil cu drepturi depline care poate fi rulat pe un computer fără instalarea LabVIEW (deși necesită LabVIEW Run-Time). De asemenea, puteți asambla un pachet de instalare a programului de instalare; utilitarele terțe, cum ar fi InstallShield, nu sunt necesare.

O descriere suplimentară și mai detaliată a capabilităților pachetului depășește scopul acestui articol, dar vă sugerez pur și simplu să o încercați (linkurile sunt prezentate mai jos). După cum au spus cei mari, „... singura modalitate de a stăpâni un nou limbaj de programare este să scrieți programe în el.” Ei bine, programatorii experimentați vor putea extrapola cunoștințele dobândite la propriile nevoi.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva