Labview este un program gata făcut cu o descriere. Diverse tehnici de programare în NI LabVIEW

Salut colegi!

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

Ce este LabVIEW?

LabVIEW este unul dintre produsele emblematice ale National Instruments. În primul rând, trebuie remarcat faptul că LabVIEW este o abreviere care reprezintă laborator oratorie V virtual eu instrumentaţie E inginerie W orkbench. Deja în nume se poate urmări orientarea către 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 face să gândești 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 restrânse de dezvoltatori, spunem că scriem în limbajul „G”. Formal, un astfel de limbaj nu există, dar aceasta este frumusețea acestui instrument de dezvoltare: din versiune în versiune, din ce în ce mai multe constructe noi sunt introduse în limbaj. Este greu de imaginat că în următoarea reîncarnare a lui C, de exemplu, va apărea 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 TIOBE a limbajelor de programare, ocupând acest moment Locul treizeci este undeva între Prologue ș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 orașul american Austin, Texas. Principala specializare a companiei au fost instrumentele de măsurători și automatizarea producției.
Prima versiune a LabVIEW a fost lansată la zece ani după înființarea companiei - în 1986 (era versiunea 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. Noi versiuni au fost lansate an de an. Prima versiune multiplatformă (inclusiv Windows) a fost versiunea 3 lansată în 1993. Versiunea actuală este 8.6, care a fost lansată anul trecut.

Compania are sediul central în Austin până în prezent. Astăzi, compania are aproape patru mii de angajați, iar birourile sunt situate în aproape patruzeci de țări (există și un birou în Rusia)

Introducerea mea în LabVIEW

Introducerea mea în 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 pachet de CD-uri cu cuvintele „acum vei lucra la asta”. Am instalat LabVIEW (era cea de-a cincea versiune) și, după ce m-am jucat o vreme, am spus că nu se poate face nimic serios pe ASTA, e mai bine să folosești Delphi „modul vechi”... La care mi-a spus - pur si simplu nu ai gustat. Lucrați o săptămână sau două. După un timp, voi înțelege că nu voi putea scrie pe altceva decât LabVIEW. Tocmai 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 grafice și bazate pe text. Aceasta este, poate, o comparație din categoria „PC” cu „MAC” sau „Windows” cu „Linux” - poți argumenta cât vrei, dar argumentul este absolut lipsit de sens - fiecare sistem are dreptul să existe si fiecare va avea atat suporteri cat si adversari, in plus, fiecare produs are propria nisa. 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 practic un limbaj de programare universal. Și, deși acest produs este uneori strâns asociat cu hardware-ul National Instruments, nu este totuși asociat cu 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, de asemenea, executat în Windows Mobile sau PalmOS (pentru dreptate, trebuie remarcat faptul că suportul pentru PalmOS a fost întrerupt, dar Palm în sine este mai de vină aici). Acest limbaj poate fi folosit cu succes pentru a crea sisteme mari, pentru prelucrarea 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, din motive de corectitudine, 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ă „nivelului î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 terminației.
  • bucle while
  • Operațiuni de grupare.

LabVIEW - caracteristici ale programului și ale limbajului

În LabVIEW, dezvoltat module software sunt numite „Virtual Instruments” (Virtual Instruments) sau într-un mod simplu VI. Sunt salvate în fișiere *.vi. VI-urile sunt blocurile de bază care alcătuiesc un program LabVIEW. Fiecare program LabVIEW conține cel puțin un VI. În ceea ce privește limbajul C, puteți desena în siguranță o analogie cu o funcție, singura diferență fiind că în LabVIEW o funcție este conținută într-un 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. Practic, fiecare VI este format din două părți - Diagrama bloc și Panoul frontal. Diagrama bloc este cod de programare(mai precis, o reprezentare grafică vizuală a codului), iar panoul frontal este interfața. Iată cum arată un exemplu clasic de Hello, World!:

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

Iată un pic mai mult exemplu 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 activate automat.

Și iată cum arată în timp ce / pentru bucleși dacă / atunci / altfel structura:

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 rula în paralel pe mai multe procesoare. LA ultimele versiuni puteți chiar să specificați în mod explicit pe care dintre procesoare ar trebui să fie executată aceasta sau acea buclă while. Acum există suplimente pentru limbile text care vă permit să obțineți cu ușurință suport sisteme multiprocesor, dar la fel de simplu ca în LabVIEW, probabil că acest lucru nu este implementat nicăieri. (Ei bine, încă am alunecat în comparație cu limbile text). Dacă vorbim deja despre multithreading, atunci trebuie remarcat și faptul că un dezvoltator are o gamă largă de instrumente pentru sincronizarea firelor - semafore, cozi, rendezvous etc.

LabVIEW include un set bogat de elemente pentru construirea interfețelor utilizator. Interfețele din Delphi au fost rapid „atacate” pe ce, iar în LabVIEW acest proces este ș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 fără ele în laborator) și în plus față de posibilitatea deja menționată de apeluri DLL, 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 obiecte - moștenirea și polimorfismul sunt prezente. De asemenea, funcționalitatea limbajului poate fi extinsă cu module suplimentare, precum NI Vision Toolkit - pentru procesarea imaginilor și viziunea artificială și altele. Și cu ajutorul modulului Application Builder, puteți genera un fișier exe executabil. Cu setul de instrumente Internet, puteți lucra cu servere ftp, folosind setul de instrumente pentru conectivitate baze de date - cu baze de date etc.

Puteți auzi adesea părerea că cod grafic citim prost. Într-adevăr, din obișnuință, abundența de icoane și dirijori este oarecum șocantă. De asemenea, dezvoltatorii începători creează 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 de fapt „auto-documentat”, deoarece se bazează deja pe o reprezentare grafică.

Pentru o perioadă destul de lungă, în timp ce programam în LabVIEW, am fost complet convins că LabVIEW este un interpret și diagramele bloc sunt interpretate constant 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. De asemenea, codul LabVIEW poate fi 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 compila pachetul de instalare-instalare, utilități terță parte tipul InstallShield nu este necesar.

Descrierea suplimentară și mai detaliată a caracteristicilor pachetului depășește scopul acestui articol, dar vă sugerez doar să o încercați (linkurile sunt prezentate mai jos). După cum spuneau marii „... singura cale de a stăpâni Limba noua; limbaj nou programare - scrieți programe pe el. Ei bine, programatorii experimentați vor putea extrapola cunoștințele dobândite la propriile nevoi.

Aproape toți dezvoltatorii de dispozitive pe microcontrolere, 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 să folosești 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 bun 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 de procesat și vizualizat într-o formă vizuală.

Unii oameni scriu astfel de software pe cont propriu într-un limbaj de programare (Delphi, C++), dotându-le cu funcționalitatea necesară. Dar această sarcină nu este ușoară, trebuie să cunoașteți, pe lângă limba în sine, dispozitivul sistem de operare, moduri de lucru cu porturile de comunicare, multe alte subtilități tehnice care distrag atenția de la principalul lucru - implementarea algoritmului programului. În general, fii un programator Windows/Unix pe parcurs.

Pe fondul acestor abordări, conceptul de instrumente virtuale (vi) diferă puternic. Acest articol va vorbi despre produs software LabView de la Nationals Instruments. Abia încep să stăpânesc acest produs minunat, astfel încât să pot face inexactități și erori. Specialistii vor corecta :-)) De fapt, ce este LabView?

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

vorbind limbaj simplu, LabView - Acesta este un mediu pentru crearea de aplicații pentru sarcinile de colectare, prelucrare, vizualizare a informațiilor din diverse instrumente, facilități de laborator etc. Și, de asemenea, pentru controlul proceselor și dispozitivelor tehnologice. Cu toate acestea, cu ajutorul LabView, puteți crea un software de aplicație destul de obișnuit. Nu este scopul meu să descriu în detaliu acest produs și să lucrez cu el. LabView are mii de pagini de documentație excelentă și sute de cărți. Internetul este plin de resurse legate de LabView, unde puteți găsi răspunsuri la toate întrebările dvs.

Scopul articolului este să arate cât de ușor și convenabil, în comparație cu programarea tradițională, poți crea aplicații pentru un PC și ce putere are LabView. (De fapt, este discutabil, pentru că în programarea tradițională, pe același Delphi, nu este mai greu de făcut. Și din punct de vedere al eficienței, cu greu e mai rău, dacă nu mai bine. Dar pentru asta, trebuie să studiezi Delphi mult mai mult. Totul este rapid și clar aproape imediat „Am studiat câteva manuale și înainte să îngrădesc tot felul de cadrane. Deci pentru programatori este ca al cincilea picior al unui câine, dar pentru tovarăși atât de departe de computer ca mine, asta e. Odată, în jumătate de oră, când am văzut prima dată LabView, am construit un sistem brutal folosind un control manual subțire de irigare și încălzire pentru o seră de cânepă. Cu tot felul de controlere PID. Am adus potențiometre și senzori ai standului de laborator care era în tehnicul nostru și a lansat această unitate infernală. Și totul a funcționat imediat, fără depanare. Apropo, toate echipamentele coliderului cu hadron funcționează pe LabView, precum și o mulțime de echipamente științifice.notă DI HALT) La urma urmei, majoritatea inginerilor electronici sunt străini de programarea pentru PC, nu? Aceasta este ceea ce încercăm să reparăm. Pentru a nu studia caii sferici de vid, ne-am propus și implementăm o sarcină simplă. Sarcina este foarte 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.

O 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 la o valoare a tensiunii în volți, să afișați valoarea tensiunii în volți, să graficați modificarea tensiunii în timp.

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

Deci, ce avem nevoie pentru a lucra:

  • De fapt, LabView în sine. Puteți descărca o versiune de încercare de pe site-ul web NI: http://www.ni.com/trylabview/. De asemenea, caută pe google fără probleme versiune piratată. Apropo, pe rutracker.org, pe lângă abisul celor piratați, există și o versiune Linux pentru care înregistrarea pare să nu fie deloc necesară. NI a decis să se întâlnească cu sursa deschisă?
  • De asemenea, trebuie 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 porturi 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, nu are caracteristici speciale.

În primul rând, trebuie să ne asigurăm că VISA a găsit un port COM în sistem și funcționează corect cu acesta. Puteți verifica acest lucru după cum urmează: rulați programul Măsurare și automatizare. Vine cu LabView. Dacă nu este instalat, îl puteți instala manual. Pe disc (imaginea cu LabView o are).

Primim ceva de genul asta:


Deci ce avem. Spațiul de lucru este format din două panouri mari Panoul frontal și Diagrama bloc. Pe panoul frontal, vom compune interfața programului nostru folosind comenzile din panoul Controls. Aceste elemente sunt mânerele rezistențelor variabile care ne sunt familiare, LED-uri, butoane, dispozitive pointer, un ecran de osciloscop etc. Acestea servesc pentru a introduce informații în program și pentru a afișa rezultatele execuției. În panoul Diagramă bloc, codul programului este localizat direct. 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 lucrul la program cu proiectarea interfeței și apoi implementarea algoritmului de lucru pe diagrama bloc. Să facem cel mai simplu program pentru înmulțirea a două numere. Pentru a face acest lucru, vom plasa pe panoul frontal trăgând trei comenzi, să spunem elementele Knob și Numeric Indicator pentru a afișa rezultatul.

Ok, acum trebuie să implementăm înmulțirea reală. Accesați panoul Diagramă bloc și vedeți că pentru fiecare dintre controalele noastre a fost creată o pictogramă corespunzătoare. Cel mai bine este să comutați imediat modul de afișare sub formă de terminale. Diagrama nu va fi atât de aglomerată. Pe lângă terminale, este vizibil tipul de date cu care funcționează acest sau acel control. Pentru a face acest lucru, faceți clic dreapta pe pictogramă și debifați Vizualizare ca pictogramă. În partea de sus a ecranului, controlul este sub forma unui terminal, în jos și în dreapta sub forma unei pictograme. Pentru a configura vizualizarea diagramei bloc ca terminale în mod implicit, 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. Foarte util pentru afișarea ajutorului context. Îl puteți afișa cu combinația Ctrl + H. Această fereastră afișează informații despre obiectul pe care este suprapus cursorul. Articol mega la îndemână.

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

Acum, pentru a reînvia exemplul nostru, trebuie să urmăm acest concept și să dăm funcției de intrare valorile numerice pe care le-am setat controalele și să obținem rezultatul de la ieșire și să-l afișăm.

Pentru a conecta elemente pe o diagramă bloc, utilizați instrumentul Conectare cablu din panoul Instrumente. Selectează-l și desenează 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! Ept, sistemul de control TANK este realizat pe el! Astfel încât.

Ei bine, acum să facem lucruri mai interesante, și anume, vom face 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 pentru a citi din port și a primi informații. Să convertim informațiile pentru afișare pe grafic, să recalculăm codul ADC în valoarea tensiunii în volți. La ieșirea din buclă, închidem portul.
Deci, în interfața programului nostru nu vor exista alte elemente de control decât butonul Stop, dar va exista doar o afișare a rezultatului, vom face acest lucru: mai întâi vom crea o diagramă bloc, apoi vom adăuga elementele lipsă la panoul frontal. 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ă infinită. Încercuim zona cu un cadru de ciclu, suficient 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 alegeți Creare control. Butonul Stop va apărea imediat 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. În același mod în care am creat o constantă pentru funcția de citire, creăm controale. RMB pe 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 de diagramă de formă de undă din paleta Grafic și două elemente Indicatoare numerice din paleta Numeric.

Să revenim la diagrama bloc și să mutăm elementele care au apărut în interiorul buclei. Ne apropiem 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 vor digera. Și, de asemenea, pentru a implementa cea mai simplă matematică pentru a traduce codul ADC în volți. Mai jos sunt capturi de ecran ale panoului frontal și diagrama bloc activată această etapă:



Pentru a converti un șir, vom folosi funcția Scan from string din paleta String. Îl punem în buclă. Acum matematica. 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 capacitate de 10 biți). Funcțiile necesare de înmulțire și împărțire, precum și constantele (5 și 1023) vor fi plasate într-o buclă. Nu voi face capturi de ecran cu fiecare conexiune, pentru ca sunt deja poze dofiga. Voi oferi ecranul final al 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ă trecem la interfața noastră și să modificăm puțin graficul. Selectați valoarea inferioară pe axa Y și setați-o la 0. Selectați valoarea superioară și setați-o la 5. Astfel, scara noastră de pe axa Y este în intervalul 0-5 volți. Ei bine, selectăm portul COM, introducem cursul de schimb, lansăm programul nostru folosind butonul cu săgeata și răsucim violent rezistorul de pe placă, în timp ce observăm rezultatul muncii noastre pe ecran. Faceți clic pe butonul Stop pentru a opri programul.

Și puteți, de asemenea, să combinați piese în blocuri funcționale, astfel încât acestea să nu aglomereze circuitul.

Aproape toți dezvoltatorii de dispozitive pe microcontrolere, 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 să folosești 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 î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 de procesat și vizualizat într-o formă vizuală.

Unii oameni scriu astfel de software pe cont propriu într-un limbaj de programare (Delphi, C++), dotându-le cu funcționalitatea necesară. Dar această sarcină nu este ușoară, trebuie să știți, pe lângă limba în sine, dispozitivul 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, fii un programator Windows/Unix pe parcurs.

Pe fondul acestor abordări, conceptul de instrumente virtuale (vi) diferă puternic. Acest articol se va concentra pe produsul software Nationals Instruments LabView. Abia încep să stăpânesc acest produs minunat, astfel încât să pot face inexactități și erori. Specialistii vor corecta :-)) De fapt, ce este LabView?

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

În termeni simpli, LabView este un mediu pentru crearea de aplicații pentru sarcinile de colectare, procesare, vizualizare a informațiilor din diverse instrumente, setări de laborator etc. Și, de asemenea, pentru controlul proceselor și dispozitivelor tehnologice. Cu toate acestea, cu ajutorul LabView, puteți crea un software de aplicație destul de obișnuit. Nu este scopul meu să descriu în detaliu acest produs și să lucrez cu el. LabView are mii de pagini de documentație excelentă și sute de cărți. Internetul este plin de resurse legate de LabView, unde puteți găsi răspunsuri la toate întrebările dvs.

Scopul articolului este să arate cât de ușor și convenabil, în comparație cu programarea tradițională, poți crea aplicații pentru un PC și ce putere are LabView. (De fapt, este discutabil, pentru că în programarea tradițională, pe același Delphi, nu este mai greu de făcut. Și din punct de vedere al eficienței, cu greu e mai rău, dacă nu mai bine. Dar pentru asta, trebuie să studiezi Delphi mult mai mult. Totul este rapid și clar aproape imediat Am studiat câteva manuale și înainte să îngrădesc tot felul de cadrane. Deci pentru programatori este ca al cincilea picior al unui câine, dar pentru astfel de camarazi departe de un computer ca mine, asta este. O dată, într-o jumătate de jumătate oră, când am văzut prima dată LabView, am construit un sistem brutal folosind un control manual subțire de irigare și încălzire pentru o seră de cânepă. Cu tot felul de controlere PID. Am adus potențiometre și senzori ai standului de laborator care era în tehnica noastră și a lansat această unitate infernală. Și totul a funcționat imediat, fără depanare. Apropo, toate echipamentele colizionatorului de hadron funcționează pe LabView, precum și o mulțime de echipamente științifice.notă DI HALT) La urma urmei, majoritatea inginerilor electronici sunt străini de programarea pentru PC, nu? Aceasta este ceea ce încercăm să reparăm. Pentru a nu studia caii sferici de vid, ne-am propus și implementăm o sarcină simplă. Sarcina este foarte 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.

O 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 la o valoare a tensiunii în volți, să afișați valoarea tensiunii în volți, să graficați modificarea tensiunii în timp.

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

Deci, ce avem nevoie pentru a lucra:

  • De fapt, LabView în sine. Puteți descărca o versiune de încercare de pe site-ul web NI: http://www.ni.com/trylabview/. De asemenea, o versiune piratată este ușor de căutat pe google. Apropo, pe rutracker.org, pe lângă abisul celor piratați, există și o versiune Linux pentru care înregistrarea pare să nu fie deloc necesară. NI a decis să se întâlnească cu sursa deschisă?
  • De asemenea, trebuie 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 porturi 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, nu are caracteristici speciale.

În primul rând, trebuie să ne asigurăm că VISA a găsit un port COM în sistem și funcționează corect cu acesta. Puteți verifica acest lucru după cum urmează: rulați programul Măsurare și automatizare. Vine cu LabView. Dacă nu este instalat, îl puteți instala manual. Pe disc (imaginea cu LabView o are).

În partea stângă a ferestrei, vedem hardware-ul găsit în sistem. Printre altele, găsim portul nostru COM. În partea dreaptă se află un buton din panoul de testare Open Visa. Cu acesta, puteți testa dispozitivul selectat. În cazul unui port COM, puteți trimite sau primi o secvență de caractere implicită sau arbitrară acolo. Dacă totul este în regulă cu portul, puteți trece direct la crearea programului nostru.

Pornim LabView. În fereastra Noțiuni de bază, selectați Blank Vi, ceea ce înseamnă un nou instrument virtual.

Primim ceva de genul asta:

Deci ce avem. Spațiul de lucru este format din două panouri mari Panoul frontal și Diagrama bloc. Pe panoul frontal, vom compune interfața programului nostru folosind comenzile din panoul Controls. Aceste elemente sunt mânerele rezistențelor variabile care ne sunt familiare, LED-uri, butoane, dispozitive pointer, un ecran de osciloscop etc. Acestea servesc pentru a introduce informații în program și pentru a afișa rezultatele execuției. În panoul Diagramă bloc, codul programului este localizat direct. 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 lucrul la program cu proiectarea interfeței și apoi implementarea algoritmului de lucru pe diagrama bloc. Să facem cel mai simplu program pentru înmulțirea a două numere. Pentru a face acest lucru, vom plasa pe panoul frontal trăgând trei comenzi, să spunem elementele Knob și Numeric Indicator pentru a afișa rezultatul.

Vom forma interfața așa cum dorește inima noastră, de exemplu astfel:

Ok, acum trebuie să implementăm înmulțirea reală. Accesați panoul Diagramă bloc și vedeți că pentru fiecare dintre controalele noastre a fost creată o pictogramă corespunzătoare. Cel mai bine este să comutați imediat modul de afișare sub formă de terminale. Diagrama nu va fi atât de aglomerată. Pe lângă terminale, este vizibil tipul de date cu care funcționează acest sau acel control. Pentru a face acest lucru, faceți clic dreapta pe pictogramă și debifați Vizualizare ca pictogramă. În partea de sus a ecranului, controlul este sub forma unui terminal, în jos și în dreapta sub forma unei pictograme. Pentru a configura vizualizarea diagramei bloc ca terminale în mod implicit, 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. Foarte util pentru afișarea ajutorului context. Îl puteți afișa cu combinația Ctrl + H. Această fereastră afișează informații despre obiectul pe care este suprapus cursorul. Articol mega la îndemână.

Acum trebuie să adăugăm funcția de înmulțire la diagrama bloc. Faceți clic dreapta pe diagrama bloc și selectați funcția Multiply din paleta numerică. Să o punem pe o diagramă. Este de remarcat faptul că LabView are doar un set uriaș de caracteristici. Aceasta include diverse matematică, statistici, analiză de semnal, control PID, procesare video, sunet și imagini. Nu poți enumera totul.

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

Acum, pentru a reînvia exemplul nostru, trebuie să urmăm acest concept și să dăm funcției de intrare valorile numerice pe care le-am setat controalele și să obținem rezultatul de la ieșire și să-l afișăm.

Pentru a conecta elemente pe o diagramă bloc, utilizați instrumentul Conectare cablu din panoul Instrumente. Selectează-l și desenează 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! Ept, sistemul de control TANK este realizat pe el! Astfel încât.

Ei bine, acum să facem lucruri mai interesante, și anume, vom face 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 pentru a citi din port și a primi informații. Să convertim informațiile pentru afișare pe grafic, să recalculăm codul ADC în valoarea tensiunii în volți. La ieșirea din buclă, închidem portul.
Deci, în interfața programului nostru nu vor exista alte elemente de control decât butonul Stop, dar va exista doar o afișare a rezultatului, vom face acest lucru: mai întâi vom crea o diagramă bloc, apoi vom adăuga elementele lipsă la panoul frontal. 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ă infinită. Încercuim zona cu un cadru de ciclu, suficient 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 alegeți Creare control. Butonul Stop va apărea imediat 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. Initializarea in stanga, inchiderea in dreapta. Din nou, faceți clic dreapta și selectați funcțiile Configurare Port, Citire și Închidere. Aceste funcții se găsesc în paleta Instrument I/O –> Serial. Funcția de citire este plasată în interiorul buclei. Conectăm ieșirile și intrările funcțiilor folosind o bobină cu fire. Pentru funcția Read, trebuie să specificăm numărul de octeți pe care îi va accepta. Facem clic dreapta pe intrarea din mijloc a funcției Citire și selectăm Creare-> Constant, introducem o valoare, de exemplu 200. În această etapă, ar trebui să iasă ca în 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. În același mod în care am creat o constantă pentru funcția de citire, creăm controale. RMB pe 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 de diagramă de formă de undă din paleta Grafic și două elemente Indicatoare numerice din paleta Numeric.

Să revenim la diagrama bloc și să mutăm elementele care au apărut în interiorul buclei. Ne apropiem 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 vor digera. Și, de asemenea, pentru a implementa cea mai simplă matematică pentru a traduce codul ADC în volți. Mai jos sunt capturi de ecran ale panoului frontal și diagrama bloc în această etapă:

Pentru a converti un șir, vom folosi funcția Scan from string din paleta String. Îl punem în buclă. Acum matematica. 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 capacitate de 10 biți). Funcțiile necesare de înmulțire și împărțire, precum și constantele (5 și 1023) vor fi plasate într-o buclă. Nu voi face capturi de ecran cu fiecare conexiune, pentru ca sunt deja poze dofiga. Voi oferi ecranul final al 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ă trecem la interfața noastră și să modificăm puțin graficul. Selectați valoarea inferioară pe axa Y și setați-o la 0. Selectați valoarea superioară și setați-o la 5. Astfel, scara noastră de pe axa Y este în intervalul 0-5 volți. Ei bine, selectăm portul COM, introducem cursul de schimb, lansăm programul nostru folosind butonul cu săgeata și răsucim violent rezistorul de pe placă, în timp ce observăm 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 posibilitățile LabView. Dacă acest articol ajută pe cineva, mă voi bucura. Doar nu lovi 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 prudență. Iată rezultatul muncii ei

Și puteți, de asemenea, să combinați piese în blocuri funcționale, astfel încât acestea să nu aglomereze circuitul.

Salut colegi!

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

Ce este LabVIEW?

LabVIEW este unul dintre produsele emblematice ale National Instruments. În primul rând, trebuie remarcat faptul că LabVIEW este o abreviere care reprezintă laborator oratorie V virtual eu instrumentaţie E inginerie W orkbench. Deja în nume se poate urmări orientarea către 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 face să gândești 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 restrânse de dezvoltatori, spunem că scriem în limbajul „G”. Formal, un astfel de limbaj nu există, dar aceasta este frumusețea acestui instrument de dezvoltare: din versiune în versiune, din ce în ce mai multe constructe noi sunt introduse în limbaj. Este greu de imaginat că în următoarea reîncarnare a lui C, de exemplu, va apărea o nouă structură pentru bucla for. Și în LabVIEW acest lucru este foarte posibil.
Totuși, trebuie menționat că LabVIEW este inclus în clasamentul TIOBE al limbajelor de programare, 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 orașul american Austin, Texas. Principala specializare a companiei au fost instrumentele de măsurători și automatizarea producției.
Prima versiune a LabVIEW a fost lansată la zece ani după înființarea companiei - în 1986 (era versiunea 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. Noi versiuni au fost lansate an de an. Prima versiune multiplatformă (inclusiv Windows) a fost versiunea 3 lansată în 1993. Versiunea actuală este 8.6, care a fost lansată anul trecut.

Compania are sediul central în Austin până în prezent. Astăzi, compania are aproape patru mii de angajați, iar birourile sunt situate în aproape patruzeci de țări (există și un birou în Rusia)

Introducerea mea în LabVIEW

Introducerea mea în 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 pachet de CD-uri cu cuvintele „acum vei lucra la asta”. Am instalat LabVIEW (era cea de-a cincea versiune) și, după ce m-am jucat o vreme, am spus că nu se poate face nimic serios pe ASTA, e mai bine să folosești Delphi „modul vechi”... La care mi-a spus - pur si simplu nu ai gustat. Lucrați o săptămână sau două. După un timp, voi înțelege că nu voi putea scrie pe altceva decât LabVIEW. Tocmai 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 grafice și bazate pe text. Aceasta este, poate, o comparație din categoria „PC” cu „MAC” sau „Windows” cu „Linux” - poți argumenta cât vrei, dar argumentul este absolut lipsit de sens - fiecare sistem are dreptul să existe si fiecare va avea atat suporteri cat si adversari, in plus, fiecare produs are propria nisa. 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 practic un limbaj de programare universal. Și, deși acest produs este uneori strâns asociat cu hardware-ul National Instruments, nu este totuși asociat cu 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 rulat și pe Windows Mobile sau PalmOS (pentru a fi corect, suportul PalmOS a fost renunțat, deși Palm însuși este mai de vină aici). Acest limbaj poate fi folosit cu succes pentru a crea sisteme mari, pentru prelucrarea 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, din motive de corectitudine, 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ă „nivelului î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 terminației.
  • bucle while
  • Operațiuni de grupare.

LabVIEW - caracteristici ale programului și ale limbajului

În LabVIEW, modulele software care sunt dezvoltate se numesc „Virtual Instruments” (Virtual Instruments) sau pur și simplu VI. Sunt salvate în fișiere *.vi. VI-urile sunt blocurile de bază care alcătuiesc un program LabVIEW. Fiecare program LabVIEW conține cel puțin un VI. În ceea ce privește limbajul C, puteți desena în siguranță o analogie cu o funcție, singura diferență fiind că în LabVIEW o funcție este conținută într-un 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. Practic, fiecare VI este format din două părți - Diagrama bloc și Panoul frontal. Diagrama bloc este codul programului (mai precis, o reprezentare grafică vizuală a codului), în timp ce panoul frontal este interfața. Iată cum arată un exemplu clasic de Hello, World!:

În centrul LabVIEW se află paradigma fluxului de date. În exemplul de mai sus, constanta și terminalul indicator sunt conectate printr-o linie. Această linie se numește Wire. Îl poți numi „sârmă”. Firele transportă date de la un element la altul. Întregul concept se numește Flux de date. Esența Diagramei bloc sunt nodurile (nodurile), ieșirile unor noduri sunt conectate la intrările altor noduri. Nodul va începe să se execute numai când sosesc toate datele necesare pentru lucru. Există două noduri în diagrama de mai sus. Una dintre ele este o constantă. Acest nod este autosuficient - începe să se execute imediat. Al doilea nod este un indicator. Va afișa datele pe care le trece 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 activate 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 rula în paralel pe mai multe procesoare. În versiunile recente, puteți chiar să specificați în mod explicit pe care dintre procesoare ar trebui să fie executată aceasta sau acea 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 simplu ca în LabVIEW. (Ei bine, încă am alunecat în comparație cu limbile text). Dacă vorbim deja despre multithreading, atunci trebuie remarcat și faptul că un dezvoltator are o gamă largă de instrumente pentru sincronizarea firelor - semafore, cozi, rendezvous etc.

LabVIEW include un set bogat de elemente pentru construirea interfețelor utilizator. Interfețele din Delphi au fost rapid „atacate” pe ce, iar în LabVIEW acest proces este ș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 fără ele în laborator) și în plus față de posibilitatea deja menționată de apeluri DLL, 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 obiecte - moștenirea și polimorfismul sunt prezente. De asemenea, funcționalitatea limbajului poate fi extinsă cu module suplimentare, precum NI Vision Toolkit - pentru procesarea imaginilor și viziunea artificială și altele. Și cu ajutorul modulului 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 slab lizibil. Într-adevăr, din obișnuință, abundența de icoane și dirijori este oarecum șocantă. De asemenea, dezvoltatorii începători creează 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 de fapt „auto-documentat”, deoarece se bazează deja pe o reprezentare grafică.

Pentru o perioadă destul de lungă, în timp ce programam în LabVIEW, am fost complet convins că LabVIEW este un interpret și diagramele bloc sunt interpretate constant 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. De asemenea, codul LabVIEW poate fi 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 construi un pachet de instalare-instalare, utilitare terțe, cum ar fi InstallShield, nu sunt necesare.

Descrierea suplimentară și mai detaliată a caracteristicilor pachetului depășește scopul acestui articol, dar vă sugerez doar să o încercați (linkurile sunt prezentate mai jos). După cum au spus cei mari, „... singura modalitate de a învăța 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.



NI LabVIEW - Mediu de streaming programare grafică. Când scrie un program în LabVIEW, utilizatorul specifică secvența operațiilor pentru transformarea unui flux de date folosind o diagramă bloc. Pe diagrama bloc sunt plasate imagini ale nodurilor funcționale, conectate prin conductori, de-a lungul cărora fluxul de date trece de la un nod la altul. De asemenea, LabVIEW are o serie de instrumente care încalcă paradigma programării în flux, permițând totuși extinderea semnificativă a funcționalității aplicațiilor dezvoltate în acesta.

Ce este o tehnică de programare

Termenul „tehnică de programare” cuprinde 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 evoluat funcționalitatea LabVIEW pentru a sprijini mai multe tehnici de programare.


Puteți prezenta codul scris folosind diferite tehnici pe diagrama bloc, precum și codul G în flux, iar LabVIEW va compila instrucțiuni pentru dispozitivele țintă adecvate (PC-uri desktop generale, 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 destul de simplu - fluxul de date este o legătură între diferite modele și limbaje de calcul. În limbajul G, intrarea/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 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. Declarațiile care nu sunt conectate printr-un flux de date sunt executate în paralel într-o ordine arbitrară.

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


Fig.2. În acest exemplu, A și B sunt adăugate, suma rezultată este înmulțită cu C și rezultatul este afișat


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). Se adaugă mai întâi A și B. Codul nodului de multiplicare nu este executat până când ambele terminale de intrare au primit date ș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.

Deși limbajul G vă permite să specificați în mod explicit tipul de date, una dintre diferențele semnificative ale acestui limbaj față de altele este prezența conductorilor care îndeplinesc funcțiile variabilelor. În loc să se transmită variabile între funcții, transmiterea datelor este definită prin conexiuni prin cablu. Pe de altă parte, limbajul G are și constructe standard pentru alte limbaje, cum ar fi bucle condiționate, bucle de contor, structuri de alegere, callback și funcții booleene.

Configurarea interactivă ca bază a programării
În 2003, National Instruments a lansat NI LabVIEW 7 Express, care a fost pionier în tehnologia Express VI, o tehnologie concepută pentru a simplifica și mai mult procesul de dezvoltare a algoritmilor de aplicație. Spre deosebire de VI-urile convenționale, VI-urile Express sunt structuri de limbaj abstracte care implementează o tehnică de programare bazată pe configurația interactivă a componentelor.


Fig.3. Paleta Express VI, plasarea VI-ului Express pe diagrama bloc și afișarea VI-ului Express în modul Miniaturi


Puteți distinge VP expres de VP obișnuit prin pictograma albastră mare. Când plasați un Express VI pe o diagramă bloc pentru prima dată, apare caseta de dialog de configurare corespunzătoare. După finalizarea personalizării, LabVIEW generează automat codul bazat pe configurația Express VI generată. Puteți vizualiza și edita acest cod sau modifica setările Express VI redeschizând caseta de dialog făcând dublu clic pe pictograma Express VI.

Ca exemplu, luați în considerare problema introducerii datelor pentru analiza lor programatică. LabVIEW facilitează interacțiunea cu diverse componente hardware, deoarece include drivere pentru mii de dispozitive. Sarcina de colectare a datelor poate fi implementată nu numai cu un design de mai multe VI-uri, ci și cu o opțiune mai simplă - un VI expres.

Pur și simplu specificați canalele de citire/scriere în setările DAQ Assistance Express VI și 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 simplifică foarte mult configurarea timpului de declanșare și a parametrilor canalului



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


În ciuda tuturor avantajelor sale, VI-urile Express nu oferă control și configurație la nivel scăzut a modului de funcționare a dispozitivului, care este implementat folosind VI-uri 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. Este suficient să selectați linia Deschideți panoul frontal în meniul contextual expres VI pe diagrama bloc. Rețineți că orice Express VI poate fi înlocuit cu o combinație de mai multe VI-uri obișnuite, iar ediția LabVIEW Professional Development System vă permite să vă creați propriile VI-uri Express.

Fișiere suport script.m
Cu modulul LabVIEW MathScript RT, puteți importa, edita și executa 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 cod G pentru a crea aplicații independente pentru desktop sau hardware în timp real.

Există mai multe moduri de a lucra cu MathScript în LabVIEW. Pentru a lucra cu scripturi în mod 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 a combina puterea programării text și grafică, utilizați nodul MathScript prezentat în Figura 7. Utilizarea nodului MathScript vă permite să încorporaț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, elemente grafice și alte elemente).


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


Modulul LabVIEW MathScript RT are propriul motor de script *.m și nu necesită instalarea unei terțe părți software. Utilizarea nodului MathScript vă permite să combinați avantajele algoritmilor de text într-o singură aplicație, un grad înalt integrarea LabVIEW cu hardware, interfață interactivă cu utilizatorul și alte tehnici de programare discutate în acest articol.

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 un obiect le poate efectua, denumite în mod obișnuit 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 fost posibilă începând cu versiunea 8.2

Principalele avantaje ale acestei abordări sunt:

  • . Încapsulare: încapsularea este combinația de date și metode dintr-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 afectează codul restului programului.
  • . Moștenire: Moștenirea permite ca clasele existente să fie folosite ca bază pentru descrierea noilor 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 VI-uri personalizate pentru a schimba funcționalitatea unei clase.
  • . Dispecerare dinamică: Metodele pot fi definite folosind mai multe VI-uri cu același nume în ierarhia claselor. Această metodă se numește dispecerare dinamică, deoarece decizia despre care VI va fi apelat se ia în momentul execuției programului.
Aceste caracteristici OOP vă permit să faceți codul mai ușor de înțeles și mai scalabil, precum și, dacă este necesar, să restricționați accesul la VI.

Modelare și simulare
Modelarea și simularea sistemelor fizice este o abordare populară pentru dezvoltarea sistemelor care sunt descrise prin ecuații diferențiale. Studiul modelului face posibilă dezvăluirea caracteristicilor sistemelor dinamice și dezvoltarea unei unități de control cu ​​comportamentul necesar.

Figura 9 prezintă bucla de control și simulare, care rezolvă o ecuație diferențială folosind algoritmii î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, dar este denumită în mod obișnuit fluxul de semnal. După cum se arată în Figura 9, puteți combina tehnicile de modelare matematică cu alte tehnici, cum ar fi fluxurile de date G și Nodul MathScript.


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


Bucla de control și simulare acceptă funcții care sunt utilizate pentru implementarea modelelor liniare. sisteme staţionare pe dispozitivele cu sistem de operare în timp real instalat. Puteți utiliza aceste funcții pentru a defini modele discrete prin specificare funcție de transfer, diagrame poli-zero și sisteme de ecuații diferențiale. Instrumentele de analiză a domeniului timp și frecvență, cum ar fi răspunsul în pas de timp sau funcțiile bode plot, vă permit să analizați în mod interactiv comportamentul buclelor de control/simulare deschise și închise. De asemenea, puteți utiliza instrumente de conversie de model încorporate dezvoltate în mediul de programare MathWorks, Inc. Simulink®, care le va permite să fie utilizate în mediul LabVIEW. Aceste sisteme dinamice pot fi instalate pe dispozitive cu un sistem de operare în timp real fără a parcurge diferiți pași de conversie a programului datorită funcționalității bibliotecii LabVIEW Real-Time Module, care este excelentă pentru dezvoltarea prototipurilor de sisteme de control și a aplicațiilor de simulare.

Diagrame de stare
Modulul NI LabVIEW Statechart oferă dezvoltatorului abilitatea de a descrie funcționalitatea sistemului în cel mai abstract mod posibil folosind diagrame de stat. Integrarea codului LabVIEW în stările diagramei vă permite să creați o specificație de lucru virtuală pentru aplicația dvs. Modulul NI LabVIEW Statechart adaugă imbricare ierarhică și execuție paralelă la funcționalitatea convențională a diagramei de stat. Trebuie remarcat faptul că diagramele de stare vă permit să descrieți reacția sistemului la evenimente, ceea ce le face un instrument foarte convenabil pentru dezvoltarea sistemelor reactive, cum ar fi dispozitive încorporate, sisteme de control și interfețe complexe cu utilizatorul.


Orez. zece. Modulul LabVIEW Statechart descrie un sistem bazat pe o diagramă de stat.


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 determină ce informații sunt transferate între stări (subsisteme) și în ce ordine funcționează.

Arhitectura aplicației bazată pe diagrame de stare vă permite să dezvoltați mai eficient complexe sisteme software, în special sistemele bazate pe evenimente, cum ar fi controlerele de sistem dinamice, complexe interfețe cu utilizatorulși protocoale de comunicații digitale.

VHDL pentru FPGA
Modulul LabVIEW FPGA vă permite să utilizați limbajul G pentru a scrie cod pentru FPGA. Cu toate acestea, ca și în cazul altor tehnici de dezvoltare, puteți utiliza cod pre-scris sau pur și simplu puteți alege modul în care este implementat programul. Majoritatea FPGA-urilor sunt programate folosind limbajul de programare stream bazat pe text VHDL. În loc să rescrieți blocurile G IP existente, puteți importa codul VHDL utilizând nodul Component-Level IP (CLIP). De obicei, aveți nevoie de un fișier XML CLIP pentru a configura interfața dintre elementele diagramei bloc, dar LabVIEW oferă un expert de import CLIP pentru a face acest lucru automat. Listează intrările și ieșirile blocului IP, care pot fi trase cu mouse-ul pe diagrama bloc și utilizate în aplicație, așa cum se arată în Fig. unsprezece.


Orez. unsprezece. Nodul CLIP.


Deoarece NI utilizează Xilinix FPGA și setul de instrumente software Xilinx în modulul LabVIEW FPGA, puteți utiliza Xilinx Core Generator pentru a crea un nucleu compatibil. De asemenea, puteți utiliza kitul de dezvoltare încorporat Xilinx pentru a crea orice microprocesor software. Și, în sfârșit, mulți dezvoltatori terți oferă tipuri diferite Blocuri IP pentru managementul 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 Nodul Formula și oferă caracteristici suplimentare programare de nivel scăzut și suport pentru fișierele antet fără suprasolicitarea apelurilor de procedură. Puteți folosi Nodul C Inline pentru a încorpora 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 mediul LabVIEW, este adesea necesar să accesați fișiere și biblioteci compilate dintr-o aplicație scrisă în mediul LabVIEW pentru a reutilizare algoritmi dezvoltați anterior în alte medii. De asemenea, la crearea unui proiect, este necesar să accesați aplicații scrise în limbajul LabVIEW din alte aplicații.

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

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

În cazul în care ai sursă C pe care doriți să-l utilizați în aplicația dvs. LabVIEW, îl puteți compila DLLși conectați-l folosind nodul Call Library Function. De exemplu, puteți aranja calcul paralel folosind algoritmi scrisi in C, in timp ce un program scris in LabVIEW va gestiona firele de executie paralele. Pentru a simplifica lucrul cu biblioteci externe, LabVIEW dispune de un expert de importare a bibliotecii partajate care vă permite să creați sau să actualizați automat un wrapper pentru a apela bibliotecile corespunzătoare (Windows . fișier dll, fișierul Mac OS .framework sau fișierul Linux .so).

De asemenea, folosind System Exec.vi, puteți utiliza interfața Linie de comanda sistem de operare.

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. Nivelurile diferite de abstractizare permit vizualizarea algoritmilor complecși, menținând în același timp controlul la nivel scăzut al aplicațiilor și al hardware-ului. Cu o integrare hardware strânsă, puteți utiliza ambele abordări ale procesării semnalului pe platforme cu procesoare 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 metoda de soluție care funcționează cel mai bine pentru dvs.

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.



Se încarcă...
Top