Labview är ett färdigt program med beskrivning. CPU automatiserade styrsystem och industriell säkerhet. NI LabVIEW - skapelsehistoria

Nästan alla utvecklare av mikrokontrollerenheter, oavsett om de är amatörer eller professionella, behöver förr eller senare ansluta en mikrokontrollerenhet till sin "storebror", nämligen en PC. Det är då frågan uppstår: vilken programvara ska jag använda för att utbyta med mikrokontrollern, analysera och bearbeta data som tas emot från den? För att byta ut MK med en dator använder de ofta RS232-gränssnittet och protokollet - den gamla goda COM-porten i en eller annan implementering.

På datorsidan används olika terminalprogram, varav det finns hundratals. Men dessa program ger bara mottagning och överföring av information. Det är svårt att på något sätt bearbeta och visualisera det i en visuell form.

Vissa skriver sådan programvara oberoende i något programmeringsspråk (Delphi, C++), vilket ger den nödvändiga funktionaliteten. Men den här uppgiften är inte lätt att du behöver veta, förutom själva språket, operativsystemets struktur, hur man arbetar med kommunikationsportar och många andra tekniska finesser som distraherar från det viktigaste - genomförandet av programmet; algoritm. I allmänhet, att vara en Windows/Unix-programmerare på samma gång.

Begreppet virtuella instrument (vi) skiljer sig kraftigt från dessa tillvägagångssätt. Den här artikeln kommer att diskutera programvaran LabView från Nationals Instruments. Jag har precis börjat bemästra denna underbara produkt, så jag kan göra felaktigheter och misstag. Experterna kommer att rätta dig :-)) Vad är LabView egentligen?

LabView är en utvecklingsmiljö och plattform för att köra program skrivna i National Instruments grafiska programmeringsspråk G.

Enkelt uttryckt är LabView en applikationsskapande miljö för uppgifterna att samla in, bearbeta, visualisera information från olika instrument, laboratorieinstallationer m.m. Och även för att styra tekniska processer och enheter. Men med hjälp av LabView kan du skapa helt vanliga applikationsprogram. Jag har inte för avsikt att beskriva denna produkt och arbeta med den i detalj. Det finns tusentals sidor med utmärkt dokumentation och hundratals böcker skrivna om LabView. Internet är fullt av resurser dedikerade till LabView, där du kan få svar på alla dina frågor.

Syftet med artikeln är att visa hur enkelt och bekvämt det är, jämfört med traditionell programmering, att skapa applikationer för en PC och vilken kraft LabView bär. (I själva verket är det diskutabelt, för i traditionell programmering är det inte svårare att göra det i Delphi. Och vad gäller effektivitet är det knappast sämre, om inte bättre. Men för detta behöver du studera Delphi mycket längre. Allt går snabbt och klara nästan omedelbart kontroll av vattning och uppvärmning för ett hampa växthus , utan felsökning, all utrustning för hadron-kollideren fungerar på LabView och även en hel del vetenskaplig utrustning ca. Trots allt är PC-programmering främmande för de flesta elektronikingenjörer, eller hur? Det här ska vi försöka fixa. För att inte studera sfäriska vakuumhästar kommer vi att ställa in för oss själva och genomföra en enkel uppgift. Uppgiften är verkligen enkel, men utifrån den kan du förstå de grundläggande principerna för programmering i LabView. Vi kommer att använda LabView version 2010. För andra versioner kommer skillnaderna att vara minimala.

Uppgift
Vi har ett kort med en AVR-mikrokontroller kopplad till en dator via RS232. Regulatorn är laddad med firmware, enligt vilken regulatorn mäter spänningsvärdet vid en av ADC-ingångarna och sänder ADC-koden (från 0 till 1023) till datorn via en seriell kanal. Det är nödvändigt att skriva ett PC-program som kommer att ta emot en dataström från ADC, visa ADC-koden, konvertera ADC-koden till ett spänningsvärde i volt, visa spänningsvärdet i volt och plotta spänningsförändringen över tiden.

Tja, nog med texterna, låt oss börja!

Så vad behöver vi för att komma igång:

  • Faktiskt LabView själv. Du kan ladda ner testversionen från NI:s webbplats: http://www.ni.com/trylabview/. Den piratkopierade versionen går även att googla utan problem. Förresten, på rutracker.org, förutom massor av piratkopierade sådana, finns det också en version för Linux för vilken registrering inte verkar krävas alls. NI bestämde sig för att möta öppen källkod halvvägs?
  • Det är också nödvändigt att ladda ner NI VISA-komponenten. Utan detta program kommer LabView inte att "se" COM-porten på datorn. VISA innehåller funktioner för att arbeta med kommunikationsportar och mycket mer. Du kan ladda ner den från joule.ni.com. Installera LabView och VISA. Installationen av denna programvara är standard och har inga speciella funktioner.

Först och främst måste vi se till att VISA har hittat en COM-port i systemet och fungerar med den korrekt. Du kan kontrollera detta så här: starta programmet Measurement & Automation. Den levereras med LabView. Om den inte är installerad kan du installera den manuellt. Den finns på disken (bilden med LabView).

Vi får något sånt här:


Så vad har vi? Arbetsområdet består av två stora paneler, frontpanel och blockdiagram. På frontpanelen kommer vi att skapa gränssnittet för vårt program med kontroller från kontrollpanelen. Dessa element är de välkända variabla motståndsrattarna, lysdioderna, knapparna, pekinstrumenten, oscilloskopskärmen, etc. De tjänar till att mata in information i programmet och visa exekveringsresultat. Panelen Blockdiagram innehåller själva programkoden. Här måste vi ta ett steg tillbaka lite och förklara principen för programmering i LabView. Ett litet exempel. Det är vanligt att börja arbeta med ett program genom att designa gränssnittet och sedan implementera algoritmen på ett blockschema. Låt oss göra ett enkelt program för att multiplicera två tal. För att göra detta kommer vi att placera tre kontroller på frontpanelen genom att dra dem, säg ratten och numerisk indikatorelement för att visa resultatet.

Ok, nu måste vi implementera själva multiplikationen. Vi går till blockdiagrampanelen och ser att en motsvarande ikon har skapats för var och en av våra kontroller. Det är bäst att omedelbart byta visningsläge till terminaler. Diagrammet kommer inte att vara så rörigt. Dessutom visar terminalerna den typ av data som en viss kontroll arbetar på. För att göra detta, högerklicka på ikonen och avmarkera Visa som ikon. Överst på skärmen finns en kontroll i form av en terminal, längst ner och till höger i form av en ikon. För att konfigurera standardvyn av blockschemat som terminaler, måste du välja menyalternativet Verktyg->Alternativ, välja Blockschema till vänster och avmarkera Placera frontpanelterminaler som ikoner. Det är mycket användbart att visa kontextuell hjälp. Du kan visa det med kombinationen Ctrl+H. Detta fönster visar information om objektet som markören för närvarande är placerad på. Mega bekväm sak.

Det viktigaste konceptet i LabView-programmering är konceptet DataFlows. Kontentan är denna: Till skillnad från imperativa programmeringsspråk, där uttalanden exekveras i ordning, fungerar funktioner i LabView endast om det finns information om alla funktionsingångar (varje funktion har ingångs- och utdatavärden). Först då implementerar funktionen sin algoritm, och resultatet skickas till utgången, som kan användas av en annan funktion. Sålunda, inom ett virtuellt instrument, kan funktioner fungera oberoende av varandra.

Nu, för att återuppliva vårt exempel, måste vi följa det här konceptet och mata in funktionen som matar in de numeriska värdena som vi ställer in med kontrollerna, och få resultatet från utgången och visa det.

För att ansluta element i ett blockschema, använd Connect Wire-verktyget från verktygspanelen. Välj det och dra våra kopplingar.

Som du kan se verkar det inte vara något komplicerat. Men samtidigt låter LabView dig lösa problem av vilken komplexitet som helst! Fan, TANK-styrsystemet är gjort på det! Så att.

Nåväl, låt oss nu göra mer intressanta saker, nämligen, låt oss göra vår enklaste voltmeter, som jag pratade om i början.

Så vad behöver vi göra. Först måste du konfigurera och initiera serieporten. Starta en oändlig loop. I slingan använder vi läsfunktionen från porten och tar emot informationen. Vi omvandlar informationen för visning på grafen, räknar om ADC-koden till ett spänningsvärde i volt. När du lämnar slingan, stäng porten.
Så i gränssnittet för vårt program kommer det inte att finnas några kontrollelement förutom stoppknappen, utan bara en visning av resultatet. Vi kommer att göra detta: först skapar vi ett blockdiagram och sedan lägger vi till de saknade elementen på framsidan panel. Även om du måste göra tvärtom! Men i det här fallet är det bekvämare.

På blockdiagrampanelen placerar vi While Loop-elementet från Structures-paletten, detta är vår oändliga loop. Vi ritar en slingram runt ett område som är tillräckligt stort för att passa inuti algoritmen. Det finns en röd prick i det nedre högra hörnet, högerklicka på den och välj Skapa kontroll. Vi kommer omedelbart att ha en stoppknapp på frontpanelen. När du klickar på den avslutas vårt program.

Du måste skapa kontroller för portinitieringsfunktionen. Två räcker för oss - porthastighet och portnamn. Precis som vi skapade en konstant för läsfunktionen, skapar vi kontroller. PCM vid de nödvändiga ingångarna för initieringsfunktionen och artikeln

Skapa->Kontroll.

Skapa->Kontroll.

Vi är intresserade av två input: Visa resurs namn Och Baudhastighet(standard 9600). Låt oss nu gå till frontpanelen och lägga till de nödvändiga komponenterna, nämligen grafritningsskärmen och etiketter för att visa ADC-koden och spänningen i volt.
Följaktligen är dessa Waweform-diagramelement från Graph-paletten och två Numeric Indicator-element från den Numeriska paletten.

Låt oss återgå till blockdiagrammet och flytta elementen som visas inuti slingan. Vi närmar oss slutförandet! Det enda är att vi fortfarande behöver konvertera teckensträngen som kommer från utdata från läsfunktionen till ett format som våra indikatorer kan smälta. Och implementera även den enklaste matematiken för att konvertera ADC-koden till volt. Nedan är skärmdumpar av frontpanelen och blockdiagram i detta skede:



För att konvertera en sträng använder vi funktionen Skanna från sträng från strängpaletten. Vi placerar den inuti slingan. Nu till matematiken. För att konvertera ADC-koden till ett spänningsvärde i volt, måste du multiplicera koden med värdet på referensspänningen (i mitt fall är det fem volt) och dividera det resulterande värdet med 1023 (eftersom ADC har en 10 -bitsbredd). Vi kommer att placera de nödvändiga multiplikations- och divisionsfunktionerna, samt konstanter (5 och 1023) i en slinga. Jag tar inte skärmdumpar av varje anslutning, eftersom det redan finns för många bilder. Jag kommer att ge den sista skärmdumpen av alla anslutningar. Allt är extremt enkelt där.


Jag tror att allt är klart, om du har några frågor, fråga i kommentarerna. Låt oss ta reda på det tillsammans :-))) Under tiden är programmet klart.

Låt oss gå till vårt gränssnitt och ställa in diagrammet lite. Välj det nedre värdet längs Y-axeln och ställ in det till 0. Välj det övre värdet och ställ in det till 5. Vår skala längs Y-axeln är alltså i intervallet 0-5 volt. Tja, vi väljer COM-porten, anger baudhastigheten, startar vårt program med pilknappen och vrider motståndet på kortet ursinnigt, medan vi fritt observerar resultatet av vårt arbete på skärmen. Klicka på knappen Stopp för att stoppa programmet.

Du kan också kombinera bitarna till funktionella block så att de inte belamrar diagrammet.

Hallå kollegor!

I en relativt kort artikel skulle jag vilja prata om programmeringsspråket LabVIEW. Denna mycket intressanta produkt är tyvärr inte så populär, och jag skulle vilja fylla luckan till viss del.

Vad är LabVIEW?

LabVIEW är en av huvudprodukterna från National Instruments. Först och främst bör det noteras att LabVIEW är en akronym som står för Labb oratorium V virtuell jag instrumentation E ingenjörskonst W arbetsbänk. Redan i namnet kan man se fokus på laboratorieforskning, mätningar och datainsamling. Att bygga ett SCADA-system i LabVIEW är faktiskt något enklare än att använda "traditionella" utvecklingsverktyg. I den här artikeln skulle jag vilja visa att LabVIEWs möjliga omfattning är något bredare. Detta är ett fundamentalt annorlunda programmeringsspråk, eller, om du vill, en hel "filosofi" av programmering. Ett funktionellt språk som tvingar dig att tänka lite annorlunda och ibland ger helt fantastiska möjligheter för utvecklaren. Är LabVIEW överhuvudtaget ett programmeringsspråk? Detta är en kontroversiell fråga - det finns ingen standard här, som till exempel ANSI C. I smala utvecklarkretsar säger vi att vi skriver på "G"-språket. Formellt existerar inte ett sådant språk, men detta är skönheten med detta utvecklingsverktyg: från version till version introduceras fler och fler nya konstruktioner i språket. Det är svårt att föreställa sig att nästa reinkarnation av C kommer att innehålla, till exempel, en ny struktur för for-slingan. Och i LabVIEW är detta fullt möjligt.
Det bör dock noteras att LabVIEW är inkluderat i TIOBEs programmeringsspråksbetyg, som för närvarande upptar en trettionde plats - någonstans mellan Prolog och Fortran.

NI LabVIEW - skapelsehistoria

National Instruments grundades 1976 av tre grundare, Jeff Kodosky, James Truchard och Bill Nowlin, i Austin, Texas. Företagets huvudinriktning var mätverktyg och produktionsautomation.
Den första versionen av LabVIEW släpptes tio år efter att företaget grundades – 1986 (det var en version för Apple Mac). NI-ingenjörer bestämde sig för att utmana "traditionella" programmeringsspråk och skapade en helt grafisk utvecklingsmiljö. Jeff blev den främsta ideologen för det grafiska tillvägagångssättet. Nya versioner släpptes år efter år. Den första plattformsoberoende versionen (inklusive Windows) var version 3, som släpptes 1993. Den nuvarande versionen är 8.6, släpptes förra året.

Företagets huvudkontor ligger fortfarande i Austin idag. Idag sysselsätter företaget nästan fyra tusen personer och har kontor i nästan fyrtio länder (det finns också ett kontor i Ryssland)

Min introduktion till LabVIEW

Min bekantskap med LabVIEW skedde för nästan tio år sedan. Jag började arbeta under ett nytt kontrakt, och min dåvarande chef gav mig en hög cd-skivor med orden "nu ska du jobba med det här." Jag installerade LabVIEW (det var den femte versionen), och efter att ha spelat ett tag sa jag att inget allvarligt kunde göras med DETTA, jag skulle hellre göra det "på gammaldags sätt" i Delphi... Till vilket han berättade jag - du har bara inte provat det. Jobba en vecka eller två. Efter ett tag kommer jag att förstå att jag inte längre kommer att kunna skriva på något annat än LabVIEW. Jag blev helt enkelt kär i det här språket, även om det inte var "kärlek vid första ögonkastet".

Generellt sett är det ganska svårt att jämföra grafiska och textuella programmeringsspråk. Detta är kanske en jämförelse som "PC" kontra "MAC" eller "Windows" kontra "Linux" - du kan argumentera hur mycket du vill, men argumentet är absolut meningslöst - varje system har rätt att existera och var och en har både supportrar och motståndare, Dessutom har varje produkt sin egen nisch. LabVIEW är bara ett verktyg, om än ett väldigt flexibelt sådant.

Så vad är LabVIEW?

LabVIEW är en plattformsoberoende grafisk applikationsutvecklingsmiljö. LabVIEW är i princip ett universellt programmeringsspråk. Även om denna produkt ibland är nära besläktad med National Instruments hårdvara, är den ändå inte relaterad till en specifik maskin. Det finns versioner för Windows, Linux, MacOS. Källkoden är portabel och programmen kommer att se likadana ut på alla system. Koden som genereras av LabVIEW kan också köras på Windows Mobile eller PalmOS (i rättvisans namn bör det noteras att stödet för PalmOS har avbrutits, dock är det Palm självt som är mer att skylla på här). Detta språk kan med framgång användas för att skapa stora system för att bearbeta texter, bilder och arbeta med databaser.

LabVIEW är ett språk på mycket hög nivå. Men ingenting hindrar dig från att inkludera "lågnivå"-moduler i LabVIEW-program. Även om du vill använda assembler-inlägg är detta också möjligt, du behöver bara generera en DLL och infoga anrop i koden. Å andra sidan låter ett språk på hög nivå dig enkelt utföra mycket icke-triviala operationer med data, som på ett vanligt språk kan ta många rader (om inte tiotals rader) kod. Men för att vara rättvis bör det noteras att vissa operationer av lågnivåspråk (till exempel att arbeta med pekare) inte är så lätta att implementera i LabVIEW på grund av dess "högnivå" karaktär. Naturligtvis innehåller LabVIEW-språket grundläggande kontrollkonstruktioner som har analoger på "traditionella" språk:

  • variabler (lokala eller globala)
  • förgrening (fallstruktur)
  • För – slingor med och utan kompletteringskontroll.
  • Medan - loopar
  • Gruppering av verksamheter.

LabVIEW - program- och språkfunktioner

I LabVIEW kallas mjukvarumodulerna vi utvecklar "Virtual Instruments" eller helt enkelt VI. De sparas i filer med filtillägget *.vi. VI är byggstenarna som utgör LabVIEW-programmet. Varje LabVIEW-program innehåller minst en VI. När det gäller C-språket kan du ganska säkert rita en analogi med en funktion, den enda skillnaden är att i LabVIEW finns en funktion i en fil (du kan också skapa bibliotek med verktyg). Det säger sig självt att en VI kan anropas från en annan VI. I princip består varje VI av två delar - ett blockdiagram och en frontpanel. Blockdiagrammet är programkoden (mer exakt, en visuell grafisk representation av koden), och frontpanelen är gränssnittet. Så här ser ett klassiskt Hello, World-exempel ut:

LabVIEW bygger på dataflödesparadigmet. I exemplet ovan är konstanten och indikatorterminalen anslutna till varandra med en linje. Denna linje kallas Wire. Du kan kalla det en "tråd". Kablar överför data från ett element till ett annat. Hela detta koncept kallas Data Flow. Kärnan i ett blockdiagram är noder (noder), utgångarna från vissa noder är anslutna till ingångarna på andra noder. Noden kommer att börja köras först när all data som behövs för driften har anlänt. Det finns två noder i diagrammet ovan. En av dem är en konstant. Denna nod är fristående - den börjar köras omedelbart. Den andra noden är en indikator. Den kommer att visa data som konstanten sänder (men inte omedelbart, utan så snart data kommer från konstanten).

Här är ett lite mer komplext exempel: addera och multiplicera två tal. På traditionella språk skulle vi skriva något liknande

Int a, b, summa, mul;
//...
summa = a + b;
mul = a * b;

Så här ser det ut i LabVIEW:

Observera att addition och multiplikation utförs automatiskt parallellt. På en dubbelprocessor kommer båda processorerna att användas automatiskt.

Och här är hur strukturen while / for loops och if / then / else ser ut:

Som redan nämnts kommer alla element att exekveras parallellt. Du behöver inte tänka på hur man parallelliserar en uppgift till flera trådar som kan köras parallellt på flera processorer. I de senaste versionerna kan du till och med uttryckligen ange på vilken processor en viss while-loop ska köras. Nu finns det tillägg för textspråk som gör att du enkelt kan få stöd för multiprocessorsystem, men detta är förmodligen inte implementerat någonstans lika enkelt som i LabVIEW. (ja, jag halkade fortfarande in i jämförelse med textspråk). Om vi ​​redan pratar om multithreading, bör vi också notera att utvecklaren har ett brett urval av verktyg till sitt förfogande för att synkronisera trådar - semaforer, köer, rendezvous, etc.

LabVIEW innehåller rika uppsättningar av element för att bygga användargränssnitt. Gränssnitt skapades snabbt i Delphi, men i LabVIEW sker denna process ännu snabbare.

Standardleveransen av LabVIEW innehåller även block för att arbeta med ini-filer, registret, funktioner för att arbeta med binära och testfiler, matematiska funktioner, kraftfulla verktyg för att plotta (och var skulle du vara utan detta i laboratoriet), och förutom Den nämnda förmågan att anropa DLL:er, LabVIEW låter dig arbeta med ActiveX-komponenter och .net. Från och med den åttonde versionen lades stöd för klasser till i LabVIEW - språket blev objektorienterat. Det implementerade stödet kan inte kallas komplett, men huvuddragen i objektorienterade språk - arv och polymorfism - finns. Språkets funktionalitet kan också utökas med ytterligare moduler, till exempel NI Vision Toolkit - för bildbehandling och datorseende och andra. Och med hjälp av Application Builder-modulen kan du skapa en körbar exe-fil. Med hjälp av Internet Toolkit kan du arbeta med ftp-servrar, använda Database Connectivity Toolkit - med databaser, etc.

Man kan ofta höra åsikten att grafisk kod är svår att läsa. Faktum är att av vana är överflödet av ikoner och dirigenter något chockerande. Nybörjare skapar också "ark"-program och "spaghetti"-program. En erfaren LabVIEW-utvecklare kommer dock aldrig att skapa diagram som är större än skärmstorleken, även om programmet består av hundratals moduler. Ett väldesignat program är effektivt "självdokumenterande" eftersom det redan är baserat på en grafisk representation.

Under ganska lång tid, när jag programmerade i LabVIEW, var jag helt säker på att LabVIEW var en tolk och blockdiagram tolkades ständigt av kärnan. Efter att ha pratat med NI-ingenjörer visade det sig att så inte var fallet. LabVIEW är en kompilator (kvaliteten på kodgenerering lämnar dock mycket övrigt att önska). Men kompilering sker "on the fly" - när som helst under utvecklingen är programmet alltid redo att köras. LabVIEW-kod kan också kompileras till en fullfjädrad körbar fil som kan köras på en dator utan LabVIEW installerat (även om det kräver LabVIEW Run-Time). Du kan också montera ett installationspaket från tredje part som InstallShield krävs inte.

En ytterligare och mer detaljerad beskrivning av paketets kapacitet ligger utanför ramen för denna artikel, men jag föreslår helt enkelt att du provar det (länkar finns nedan). Som de stora sa, "... det enda sättet att behärska ett nytt programmeringsspråk är att skriva program i det." Tja, erfarna programmerare kommer att kunna extrapolera den kunskap som erhållits till sina egna behov.

Nästan alla utvecklare av mikrokontrollerenheter, oavsett om de är amatörer eller proffs, behöver förr eller senare ansluta en mikrokontrollerenhet till sin "storebror", nämligen en PC. Det är då frågan uppstår: vilken programvara ska jag använda för att utbyta med mikrokontrollern, analysera och bearbeta data som tas emot från den? Ofta, för att byta en MK med en dator, använder de RS232-gränssnittet och protokollet - den gamla goda COM-porten i en eller annan implementering.

På datorsidan används olika terminalprogram, varav det finns hundratals. Men dessa program ger bara mottagning och överföring av information. Det är svårt att på något sätt bearbeta och visualisera det i en visuell form.

Vissa skriver sådan programvara oberoende i något programmeringsspråk (Delphi, C++), vilket ger den nödvändiga funktionaliteten. Men den här uppgiften är inte lätt att du behöver veta, förutom själva språket, operativsystemets struktur, hur man arbetar med kommunikationsportar och många andra tekniska finesser som distraherar från det viktigaste - genomförandet av programmet; algoritm. Generellt sett måste du också vara en Windows/Unix-programmerare samtidigt.

Begreppet virtuella instrument (vi) skiljer sig kraftigt från dessa tillvägagångssätt. Den här artikeln kommer att diskutera programvaran LabView från Nationals Instruments. Jag har precis börjat bemästra denna underbara produkt, så jag kan göra felaktigheter och misstag. Experterna kommer att rätta dig :-)) Vad är LabView egentligen?

LabView är en utvecklingsmiljö och plattform för att köra program skrivna i National Instruments G grafiska programmeringsspråk.

Enkelt uttryckt är LabView en applikationsskapande miljö för uppgifterna att samla in, bearbeta, visualisera information från olika instrument, laboratorieinstallationer m.m. Och även för att styra tekniska processer och enheter. Men med hjälp av LabView kan du skapa helt vanliga applikationsprogram. Jag har inte för avsikt att beskriva denna produkt och arbeta med den i detalj. Det finns tusentals sidor med utmärkt dokumentation och hundratals böcker skrivna om LabView. Internet är fullt av resurser dedikerade till LabView, där du kan få svar på alla dina frågor.

Syftet med artikeln är att visa hur enkelt och bekvämt det är, jämfört med traditionell programmering, att skapa applikationer för en PC och vilken kraft LabView bär. (I själva verket är det diskutabelt, för i traditionell programmering är det inte svårare att göra det i Delphi. Och vad gäller effektivitet är det knappast sämre, om inte bättre. Men för detta behöver du studera Delphi mycket längre. Allt går snabbt och klara nästan omedelbart kontroll av vattning och uppvärmning för ett hampa växthus , utan felsökning, all utrustning för hadron-kollideren fungerar på LabView och även en hel del vetenskaplig utrustning ca. Trots allt är PC-programmering främmande för de flesta elektronikingenjörer, eller hur? Det här ska vi försöka fixa. För att inte studera sfäriska vakuumhästar kommer vi att ställa in för oss själva och genomföra en enkel uppgift. Uppgiften är verkligen enkel, men utifrån den kan du förstå de grundläggande principerna för programmering i LabView. Vi kommer att använda LabView version 2010. För andra versioner kommer skillnaderna att vara minimala.

Uppgift
Vi har ett kort med en AVR-mikrokontroller kopplad till en dator via RS232. Regulatorn är laddad med firmware, enligt vilken regulatorn mäter spänningsvärdet vid en av ADC-ingångarna och sänder ADC-koden (från 0 till 1023) till datorn via en seriell kanal. Det är nödvändigt att skriva ett PC-program som kommer att ta emot en dataström från ADC, visa ADC-koden, konvertera ADC-koden till ett spänningsvärde i volt, visa spänningsvärdet i volt och plotta spänningsförändringen över tiden.

Tja, nog med texterna, låt oss börja!

Så vad behöver vi för att komma igång:

  • Faktiskt LabView själv. Du kan ladda ner testversionen från NI:s webbplats: http://www.ni.com/trylabview/. Den piratkopierade versionen går även att googla utan problem. Förresten, på rutracker.org, förutom massor av piratkopierade sådana, finns det också en version för Linux för vilken registrering inte verkar krävas alls. NI bestämde sig för att möta öppen källkod halvvägs?
  • Det är också nödvändigt att ladda ner NI VISA-komponenten. Utan detta program kommer LabView inte att "se" COM-porten på datorn. VISA innehåller funktioner för att arbeta med kommunikationsportar och mycket mer. Du kan ladda ner den från joule.ni.com. Installera LabView och VISA. Installationen av denna programvara är standard och har inga speciella funktioner.

Först och främst måste vi se till att VISA har hittat en COM-port i systemet och fungerar med den korrekt. Du kan kontrollera detta så här: starta programmet Measurement & Automation. Den levereras med LabView. Om den inte är installerad kan du installera den manuellt. Den finns på disken (bilden med LabView).

På vänster sida av fönstret ser vi utrustningen som upptäckts i systemet. Vi hittar bland annat vår COM-port. Till höger finns en knapp Öppna Visa-testpanel. Med den kan du testa den valda enheten. När det gäller en COM-port kan du skicka eller ta emot en standard eller godtycklig teckensekvens. Om allt är i sin ordning med hamnen kan vi gå direkt vidare till att skapa vårt program.

Starta LabView. I fönstret Komma igång väljer du objektet Blank Vi för att skapa en ny virtuell enhet.

Vi får något sånt här:

Så vad har vi? Arbetsområdet består av två stora paneler, frontpanel och blockdiagram. På frontpanelen kommer vi att skapa gränssnittet för vårt program med kontroller från kontrollpanelen. Dessa element är de välkända variabla motståndsrattarna, lysdioderna, knapparna, pekinstrumenten, oscilloskopskärmen, etc. De tjänar till att mata in information i programmet och visa exekveringsresultat. Panelen Blockdiagram innehåller själva programkoden. Här måste vi ta ett steg tillbaka lite och förklara principen för programmering i LabView. Ett litet exempel. Det är vanligt att börja arbeta med ett program genom att designa gränssnittet och sedan implementera algoritmen på ett blockschema. Låt oss göra ett enkelt program för att multiplicera två tal. För att göra detta kommer vi att placera tre kontroller på frontpanelen genom att dra dem, säg ratten och numerisk indikatorelement för att visa resultatet.

Låt oss skapa gränssnittet som du vill, till exempel så här:

Ok, nu måste vi implementera själva multiplikationen. Vi går till blockdiagrampanelen och ser att en motsvarande ikon har skapats för var och en av våra kontroller. Det är bäst att omedelbart byta visningsläge till terminaler. Diagrammet kommer inte att vara så rörigt. Dessutom visar terminalerna den typ av data som en viss kontroll arbetar på. För att göra detta, högerklicka på ikonen och avmarkera Visa som ikon. Överst på skärmen finns en kontroll i form av en terminal, längst ner och till höger i form av en ikon. För att konfigurera standardvyn av blockschemat som terminaler, måste du välja menyalternativet Verktyg->Alternativ, välja Blockschema till vänster och avmarkera Placera frontpanelterminaler som ikoner. Det är mycket användbart att visa kontextuell hjälp. Du kan visa det med kombinationen Ctrl+H. Detta fönster visar information om objektet som markören för närvarande är placerad på. Mega bekväm sak.

Nu måste vi lägga till en multiplikationsfunktion till blockdiagrammet. Högerklicka på blockdiagrammet och välj Multiplicera-funktionen från den numeriska paletten. Låt oss sätta det på diagrammet. Det är värt att notera att LabView har en helt enkelt enorm uppsättning funktioner. Detta inkluderar olika matematik, statistik, signalanalys, PID-reglering, video, ljud och bildbehandling. Du kan inte lista allt.

Det viktigaste konceptet i LabView-programmering är konceptet DataFlows. Kontentan är denna: Till skillnad från imperativa programmeringsspråk, där uttalanden exekveras i ordning, fungerar funktioner i LabView endast om det finns information om alla funktionsingångar (varje funktion har ingångs- och utdatavärden). Först då implementerar funktionen sin algoritm, och resultatet skickas till utgången, som kan användas av en annan funktion. Sålunda, inom ett virtuellt instrument, kan funktioner fungera oberoende av varandra.

Nu, för att återuppliva vårt exempel, måste vi följa det här konceptet och mata in funktionen som matar in de numeriska värdena som vi ställer in med kontrollerna, och få resultatet från utgången och visa det.

För att ansluta element i ett blockschema, använd Connect Wire-verktyget från verktygspanelen. Välj det och dra våra kopplingar.

Det är allt, du kan köra det här dumma programmet för cyklisk utförande och vrida på rattarna och observera resultatet av multiplikationen.

Som du kan se verkar det inte vara något komplicerat. Men samtidigt låter LabView dig lösa problem av vilken komplexitet som helst! Fan, TANK-styrsystemet är gjort på det! Så att.

Nåväl, låt oss nu göra mer intressanta saker, nämligen, låt oss göra vår enklaste voltmeter, som jag pratade om i början.

Så vad behöver vi göra. Först måste du konfigurera och initiera serieporten. Starta en oändlig loop. I slingan använder vi läsfunktionen från porten och tar emot informationen. Vi omvandlar informationen för visning på grafen, räknar om ADC-koden till ett spänningsvärde i volt. När du lämnar slingan, stäng porten.
Så i gränssnittet för vårt program kommer det inte att finnas några kontrollelement förutom stoppknappen, utan bara en visning av resultatet. Vi kommer att göra detta: först skapar vi ett blockdiagram och sedan lägger vi till de saknade elementen på framsidan panel. Även om du måste göra tvärtom! Men i det här fallet är det bekvämare.

På blockdiagrampanelen placerar vi While Loop-elementet från Structures-paletten, detta är vår oändliga loop. Vi ritar en slingram runt ett område som är tillräckligt stort för att passa inuti algoritmen. Det finns en röd prick i det nedre högra hörnet, högerklicka på den och välj Skapa kontroll. Vi kommer omedelbart att ha en stoppknapp på frontpanelen. När du klickar på den avslutas vårt program.

Nu utanför loopen måste vi placera funktionerna för att initiera och stänga porten. Till vänster är initiering, till höger stängs. Återigen, högerklicka och välj funktionerna Konfigurera port, Läs och Stäng. Dessa funktioner finns i Instrument I/O –> Seriell paletten. Vi placerar läsfunktionen inuti slingan. Vi ansluter utgångarna och ingångarna för funktionerna med hjälp av en spole av ledningar. För läsfunktionen måste vi ange antalet byte den kommer att ta emot. Högerklicka på mitten av funktionen Läs och välj Skapa->Konstant, ange ett värde, till exempel 200. I detta skede ska det se ut som skärmdumpen.

Du måste skapa kontroller för portinitieringsfunktionen. Två räcker för oss - porthastighet och portnamn. Precis som vi skapade en konstant för läsfunktionen, skapar vi kontroller. PCM vid de nödvändiga ingångarna för initieringsfunktionen och artikeln

Skapa->Kontroll.

Vi är intresserade av två input: Visa resurs namn Och Baudhastighet(standard 9600). Låt oss nu gå till frontpanelen och lägga till de nödvändiga komponenterna, nämligen grafritningsskärmen och etiketter för att visa ADC-koden och spänningen i volt.
Följaktligen är dessa Waweform-diagramelement från Graph-paletten och två Numeric Indicator-element från den Numeriska paletten.

Låt oss återgå till blockdiagrammet och flytta elementen som visas inuti slingan. Vi närmar oss slutförandet! Det enda är att vi fortfarande behöver konvertera teckensträngen som kommer från utdata från läsfunktionen till ett format som våra indikatorer kan smälta. Och implementera även den enklaste matematiken för att konvertera ADC-koden till volt. Nedan är skärmdumpar av frontpanelen och blockdiagram i detta skede:

För att konvertera en sträng använder vi funktionen Skanna från sträng från strängpaletten. Vi placerar den inuti slingan. Nu till matematiken. För att konvertera ADC-koden till ett spänningsvärde i volt, måste du multiplicera koden med värdet på referensspänningen (i mitt fall är det fem volt) och dividera det resulterande värdet med 1023 (eftersom ADC har en 10 -bitsbredd). Vi kommer att placera de nödvändiga multiplikations- och divisionsfunktionerna, samt konstanter (5 och 1023) i en slinga. Jag tar inte skärmdumpar av varje anslutning, eftersom det redan finns för många bilder. Jag kommer att ge den sista skärmdumpen av alla anslutningar. Allt är extremt enkelt där.

Jag tror att allt är klart, om du har några frågor, fråga i kommentarerna. Låt oss ta reda på det tillsammans :-))) Under tiden är programmet klart.

Låt oss gå till vårt gränssnitt och ställa in diagrammet lite. Välj det nedre värdet längs Y-axeln och ställ in det till 0. Välj det övre värdet och ställ in det till 5. Vår skala längs Y-axeln är alltså i intervallet 0-5 volt. Tja, vi väljer COM-porten, anger baudhastigheten, startar vårt program med pilknappen och vrider motståndet på kortet ursinnigt, medan vi fritt observerar resultatet av vårt arbete på skärmen. Klicka på knappen Stopp för att stoppa programmet.

Som du kan se är allt ganska enkelt. Detta exempel är bara en liten del av alla funktioner i LabView. Om den här artikeln hjälper någon, blir jag glad. Slå mig bara inte för hårt i kommentarerna, jag är inget proffs. Ännu ett litet trick. Om diagrammet ser ut som Cthulhu kan du prova att använda knappen CleanUp Diagram. Det kommer att föra diagrammet till en mer eller mindre gudomlig form, men det måste användas försiktigt. Här är resultatet av hennes arbete

Du kan också kombinera bitarna till funktionella block så att de inte belamrar diagrammet.

Hallå kollegor!

I en relativt kort artikel skulle jag vilja prata om programmeringsspråket LabVIEW. Denna mycket intressanta produkt är tyvärr inte så populär, och jag skulle vilja fylla luckan till viss del.

Vad är LabVIEW?

LabVIEW är en av huvudprodukterna från National Instruments. Först och främst bör det noteras att LabVIEW är en akronym som står för Labb oratorium V virtuell jag instrumentation E ingenjörskonst W arbetsbänk. Redan i namnet kan man se fokus på laboratorieforskning, mätningar och datainsamling. Att bygga ett SCADA-system i LabVIEW är faktiskt något enklare än att använda "traditionella" utvecklingsverktyg. I den här artikeln skulle jag vilja visa att LabVIEWs möjliga omfattning är något bredare. Detta är ett fundamentalt annorlunda programmeringsspråk, eller, om du vill, en hel "filosofi" av programmering. Ett funktionellt språk som tvingar dig att tänka lite annorlunda och ibland ger helt fantastiska möjligheter för utvecklaren. Är LabVIEW överhuvudtaget ett programmeringsspråk? Detta är en kontroversiell fråga - det finns ingen standard här, som till exempel ANSI C. I smala utvecklarkretsar säger vi att vi skriver på "G"-språket. Formellt existerar inte ett sådant språk, men detta är skönheten med detta utvecklingsverktyg: från version till version introduceras fler och fler nya konstruktioner i språket. Det är svårt att föreställa sig att nästa reinkarnation av C kommer att innehålla, till exempel, en ny struktur för for-slingan. Och i LabVIEW är detta fullt möjligt.
Det bör dock noteras att LabVIEW är inkluderat i TIOBEs programmeringsspråksbetyg, som för närvarande upptar en trettionde plats - någonstans mellan Prolog och Fortran.

NI LabVIEW - skapelsehistoria

National Instruments grundades 1976 av tre grundare, Jeff Kodosky, James Truchard och Bill Nowlin, i Austin, Texas. Företagets huvudinriktning var mätverktyg och produktionsautomation.
Den första versionen av LabVIEW släpptes tio år efter att företaget grundades – 1986 (det var en version för Apple Mac). NI-ingenjörer bestämde sig för att utmana "traditionella" programmeringsspråk och skapade en helt grafisk utvecklingsmiljö. Jeff blev den främsta ideologen för det grafiska tillvägagångssättet. Nya versioner släpptes år efter år. Den första plattformsoberoende versionen (inklusive Windows) var version 3, som släpptes 1993. Den nuvarande versionen är 8.6, släpptes förra året.

Företagets huvudkontor ligger fortfarande i Austin idag. Idag sysselsätter företaget nästan fyra tusen personer och har kontor i nästan fyrtio länder (det finns också ett kontor i Ryssland)

Min introduktion till LabVIEW

Min bekantskap med LabVIEW skedde för nästan tio år sedan. Jag började arbeta under ett nytt kontrakt, och min dåvarande chef gav mig en hög cd-skivor med orden "nu ska du jobba med det här." Jag installerade LabVIEW (det var den femte versionen), och efter att ha spelat ett tag sa jag att inget allvarligt kunde göras med DETTA, jag skulle hellre göra det "på gammaldags sätt" i Delphi... Till vilket han berättade jag - du har bara inte provat det. Jobba en vecka eller två. Efter ett tag kommer jag att förstå att jag inte längre kommer att kunna skriva på något annat än LabVIEW. Jag blev helt enkelt kär i det här språket, även om det inte var "kärlek vid första ögonkastet".

Generellt sett är det ganska svårt att jämföra grafiska och textuella programmeringsspråk. Detta är kanske en jämförelse som "PC" kontra "MAC" eller "Windows" kontra "Linux" - du kan argumentera hur mycket du vill, men argumentet är absolut meningslöst - varje system har rätt att existera och var och en har både supportrar och motståndare, Dessutom har varje produkt sin egen nisch. LabVIEW är bara ett verktyg, om än ett väldigt flexibelt sådant.

Så vad är LabVIEW?

LabVIEW är en plattformsoberoende grafisk applikationsutvecklingsmiljö. LabVIEW är i princip ett universellt programmeringsspråk. Även om denna produkt ibland är nära besläktad med National Instruments hårdvara, är den ändå inte relaterad till en specifik maskin. Det finns versioner för Windows, Linux, MacOS. Källkoden är portabel och programmen kommer att se likadana ut på alla system. Koden som genereras av LabVIEW kan också köras på Windows Mobile eller PalmOS (i rättvisans namn bör det noteras att stödet för PalmOS har avbrutits, dock är det Palm självt som är mer att skylla på här). Detta språk kan med framgång användas för att skapa stora system för att bearbeta texter, bilder och arbeta med databaser.

LabVIEW är ett språk på mycket hög nivå. Men ingenting hindrar dig från att inkludera "lågnivå"-moduler i LabVIEW-program. Även om du vill använda assembler-inlägg är detta också möjligt, du behöver bara generera en DLL och infoga anrop i koden. Å andra sidan låter ett språk på hög nivå dig enkelt utföra mycket icke-triviala operationer med data, som på ett vanligt språk kan ta många rader (om inte tiotals rader) kod. Men för att vara rättvis bör det noteras att vissa operationer av lågnivåspråk (till exempel att arbeta med pekare) inte är så lätta att implementera i LabVIEW på grund av dess "högnivå" karaktär. Naturligtvis innehåller LabVIEW-språket grundläggande kontrollkonstruktioner som har analoger på "traditionella" språk:

  • variabler (lokala eller globala)
  • förgrening (fallstruktur)
  • För – slingor med och utan kompletteringskontroll.
  • Medan - loopar
  • Gruppering av verksamheter.

LabVIEW - program- och språkfunktioner

I LabVIEW kallas mjukvarumodulerna vi utvecklar "Virtual Instruments" eller helt enkelt VI. De sparas i filer med filtillägget *.vi. VI är byggstenarna som utgör LabVIEW-programmet. Varje LabVIEW-program innehåller minst en VI. När det gäller C-språket kan du ganska säkert rita en analogi med en funktion, den enda skillnaden är att i LabVIEW finns en funktion i en fil (du kan också skapa bibliotek med verktyg). Det säger sig självt att en VI kan anropas från en annan VI. I princip består varje VI av två delar - ett blockdiagram och en frontpanel. Blockdiagrammet är programkoden (mer exakt, en visuell grafisk representation av koden), och frontpanelen är gränssnittet. Så här ser ett klassiskt Hello, World-exempel ut:

LabVIEW bygger på dataflödesparadigmet. I exemplet ovan är konstanten och indikatorterminalen anslutna till varandra med en linje. Denna linje kallas Wire. Du kan kalla det en "tråd". Kablar överför data från ett element till ett annat. Hela detta koncept kallas Data Flow. Kärnan i ett blockdiagram är noder (noder), utgångarna från vissa noder är anslutna till ingångarna på andra noder. Noden kommer att börja köras först när all data som behövs för driften har anlänt. Det finns två noder i diagrammet ovan. En av dem är en konstant. Denna nod är fristående - den börjar köras omedelbart. Den andra noden är en indikator. Den kommer att visa data som konstanten sänder (men inte omedelbart, utan så snart data kommer från konstanten).

Här är ett lite mer komplext exempel: addera och multiplicera två tal. På traditionella språk skulle vi skriva något liknande

Int a, b, summa, mul;
//...
summa = a + b;
mul = a * b;

Så här ser det ut i LabVIEW:

Observera att addition och multiplikation utförs automatiskt parallellt. På en dubbelprocessor kommer båda processorerna att användas automatiskt.

Och här är hur strukturen while / for loops och if / then / else ser ut:

Som redan nämnts kommer alla element att exekveras parallellt. Du behöver inte tänka på hur man parallelliserar en uppgift till flera trådar som kan köras parallellt på flera processorer. I de senaste versionerna kan du till och med uttryckligen ange på vilken processor en viss while-loop ska köras. Nu finns det tillägg för textspråk som gör att du enkelt kan få stöd för multiprocessorsystem, men detta är förmodligen inte implementerat någonstans lika enkelt som i LabVIEW. (ja, jag halkade fortfarande in i jämförelse med textspråk). Om vi ​​redan pratar om multithreading, bör vi också notera att utvecklaren har ett brett urval av verktyg till sitt förfogande för att synkronisera trådar - semaforer, köer, rendezvous, etc.

LabVIEW innehåller rika uppsättningar av element för att bygga användargränssnitt. Gränssnitt skapades snabbt i Delphi, men i LabVIEW sker denna process ännu snabbare.

Standardleveransen av LabVIEW innehåller även block för att arbeta med ini-filer, registret, funktioner för att arbeta med binära och testfiler, matematiska funktioner, kraftfulla verktyg för att plotta (och var skulle du vara utan detta i laboratoriet), och förutom Den nämnda förmågan att anropa DLL:er, LabVIEW låter dig arbeta med ActiveX-komponenter och .net. Från och med den åttonde versionen lades stöd för klasser till i LabVIEW - språket blev objektorienterat. Det implementerade stödet kan inte kallas komplett, men huvuddragen i objektorienterade språk - arv och polymorfism - finns. Språkets funktionalitet kan också utökas med ytterligare moduler, till exempel NI Vision Toolkit - för bildbehandling och datorseende och andra. Och med hjälp av Application Builder-modulen kan du skapa en körbar exe-fil. Med hjälp av Internet Toolkit kan du arbeta med ftp-servrar, använda Database Connectivity Toolkit - med databaser, etc.

Man kan ofta höra åsikten att grafisk kod är svår att läsa. Faktum är att av vana är överflödet av ikoner och dirigenter något chockerande. Nybörjare skapar också "ark"-program och "spaghetti"-program. En erfaren LabVIEW-utvecklare kommer dock aldrig att skapa diagram som är större än skärmstorleken, även om programmet består av hundratals moduler. Ett väldesignat program är effektivt "självdokumenterande" eftersom det redan är baserat på en grafisk representation.

Under ganska lång tid, när jag programmerade i LabVIEW, var jag helt säker på att LabVIEW var en tolk och blockdiagram tolkades ständigt av kärnan. Efter att ha pratat med NI-ingenjörer visade det sig att så inte var fallet. LabVIEW är en kompilator (kvaliteten på kodgenerering lämnar dock mycket övrigt att önska). Men kompilering sker "on the fly" - när som helst under utvecklingen är programmet alltid redo att köras. LabVIEW-kod kan också kompileras till en fullfjädrad körbar fil som kan köras på en dator utan LabVIEW installerat (även om det kräver LabVIEW Run-Time). Du kan också montera ett installationspaket från tredje part som InstallShield krävs inte.

En ytterligare och mer detaljerad beskrivning av paketets kapacitet ligger utanför ramen för denna artikel, men jag föreslår helt enkelt att du provar det (länkar finns nedan). Som de stora sa, "... det enda sättet att behärska ett nytt programmeringsspråk är att skriva program i det." Tja, erfarna programmerare kommer att kunna extrapolera den kunskap som erhållits till sina egna behov.



NI LabVIEW är en strömmande grafisk programmeringsmiljö. När du skriver ett program i LabVIEW definierar användaren sekvensen av dataflödestransformationsoperationer med hjälp av ett blockschema. Blockschemat innehåller bilder av funktionella noder kopplade av ledare genom vilka dataflödet passerar från en nod till en annan. LabVIEW har också ett antal verktyg som bryter mot trådprogrammeringsparadigmet, vilket gör att du avsevärt kan utöka funktionaliteten hos de applikationer som utvecklats i den.

Vad är en programmeringsteknik

Termen "programmeringsteknik" kombinerar ett urval av olika programmeringsspråk, beräkningsmodeller, abstraktionsnivåer, metoder för att arbeta med kod och representationsalgoritmer. Under årens lopp har National Instruments utvecklat LabVIEW-funktionalitet för att ge stöd för ett bredare utbud av programmeringstekniker.


Du kan presentera koden skriven med olika tekniker såväl som G-flödeskod i ett blockschema, och LabVIEW kommer att sammanställa instruktionerna för lämpliga målenheter (vanliga stationära datorer, RTOS-plattformar, FPGA, mobila enheter, ARM-baserade inbäddade enheter)

Figur 1. Brett utbud av plattformar och programmeringstekniker i LabVIEW



Att överföra data mellan sektioner av kod som skrivits med olika tillvägagångssätt är organiserat i LabVIEW mycket enkelt - dataflödet är den sammanbindande länken mellan olika beräkningsmodeller och språk. I G-språket utförs informationsinmatning/utmatning med hjälp av ett specialiserat användargränssnitt (frontpanel), nätverksgränssnitt, analysbibliotek, databaser och andra verktyg.

Programmering i G
Tillkomsten av strömmande programmering 1986 var verkligen nyskapande. Sekvensen för att utföra operationer med data på G-språket bestäms inte av den ordning i vilken de inträffar, utan av närvaron av data vid ingångarna till dessa noder. Operatörer som inte är anslutna till ett dataflöde exekveras parallellt i slumpmässig ordning.

Diagrammets noder representerar enkla instruktioner eller deras uppsättningar - funktioner, virtuella enheter (VI). Exekvering av nodinstruktioner sker först efter att data visas på nodens alla ingångar. Efter att instruktioner exekveras, sänds dess resultat genom nodens utgångsterminaler till ingångarna på följande noder.


Fig.2. Det här exemplet lägger till A och B, multiplicerar den resulterande summan med C och visar resultatet


Figur 2 visar ett exempel på ett matematiskt uttryck i G-språket. Diagrammet består av två noder (addition och multiplikation) och tre ingångar (A, B och C). För det första sker additionen av A och B. Koden för multiplikationsnoden exekveras inte förrän data tas emot vid båda dess ingångsterminaler, och därför väntar den på resultatet av additionsnoden. Så snart additionsresultatet kommer till multiplikationsnodens första ingång kommer dess kod (A+B)*C att exekveras.

Trots att G-språket låter dig ställa in datatypen uttryckligen, är en av de betydande skillnaderna mellan detta språk och andra närvaron av ledare som utför variablernas funktioner. Istället för att överföra variabler mellan funktioner, bestäms dataöverföringen av trådanslutningar. Å andra sidan innehåller G även konstruktioner som är standard i andra språk, såsom villkorsloopar, räknarloopar, urvalsstrukturer, callback-funktioner och logiska funktioner.

Interaktiv konfiguration som grund för programmering
År 2003 släppte National Instruments NI LabVIEW 7 Express, som introducerade Express Virtual Instruments (VII)-teknologi, en teknik som är utformad för att ytterligare förenkla processen för att utveckla applikationsalgoritmer. Till skillnad från vanliga VI:er är express VI:er abstrakta språkstrukturer som implementerar en programmeringsteknik baserad på den interaktiva konfigurationen av komponenter.


Fig.3. Express VI-paletten, placerar Express VI på ett blockschema och visar Express VI i ikonvy


Du kan skilja en express VP från en vanlig VP med den stora blå ikonen. Första gången du placerar en Express VI på ett blockschema visas en anpassningsdialogruta. När konfigurationen är klar genererar LabVIEW automatiskt kod baserat på den Express VI-konfiguration du skapade. Du kan visa och redigera den här koden eller ändra inställningarna för Express VI genom att öppna dialogrutan igen genom att dubbelklicka på Express VI-ikonen.

Tänk som ett exempel på uppgiften att mata in data för mjukvaruanalys. LabVIEW gör gränssnittet med en mängd olika hårdvara mycket enkelt eftersom det innehåller drivrutiner för tusentals enheter. Uppgiften att samla in data kan implementeras inte bara genom en design av flera VP, utan också genom ett enklare alternativ - en express VP.

Det räcker med att specificera läs/skrivkanaler i inställningarna för DAQ Assistance Express VI och konfigurera parametrar som samplingshastighet, skalning, synkronisering och triggers. Dessutom ger Express VI möjligheten att förinsamla data från enheten för att verifiera att de valda datainsamlingsinställningarna är korrekta.


Fig.4. DAQ Assistant Express VI gör det enkelt att konfigurera triggertiming och kanalparametrar



Fig. 5. G-kod motsvarande DAQ Assistant Express VI


Trots alla dess fördelar ger Express VIs inte möjligheten till lågnivåkontroll och konfiguration av enhetens driftläge, som implementeras med hjälp av konventionella virtuella enheter. Användare som är nya i LabVIEW kan använda en inbyggd funktion som konverterar en tidigare konfigurerad Express VI till en sekvens av vanliga VI. Detta kan hjälpa nybörjare att lära sig kod på låg nivå. Välj bara raden Öppna frontpanel i snabbmenyn för Express VI på blockschemat. Det bör noteras att alla Express VI kan ersättas av en kombination av flera vanliga VI, och LabVIEW Professional Development System-versionen låter dig skapa dina egna Express VI.

Stöd för scripts.m-filer
Med LabVIEW MathScript RT-modulen kan du importera, redigera och köra *.m-filskript som traditionellt används i matematisk modellering och analys, signalbehandling och komplexa matematiska beräkningar. Du kan använda dem med G-kod för att skapa fristående applikationer för stationära datorer eller hårdvara i realtid.

Det finns flera sätt att arbeta med MathScript i LabVIEW. För att arbeta med skript i interaktivt läge, använd MathScript-fönstret som visas i Fig. 6


Fig. 6. Interaktiv utveckling av textalgoritmer i MathScript-fönstret


För att använda *.m-skript i en LabVIEW-applikation och kombinera text- och grafiska programmeringsfunktioner bör du använda MathScript-noden, som visas i figur 7. Genom att använda MathScript-noden kan du implementera textalgoritmer i VI-koden och använda gränssnittets grafiska funktioner för att styra skriptparametrar (knappar, skjutreglage, kontroller, grafer och andra element).


Fig. 7. MathScript-noden gör det enkelt att använda .m-skript i G-kod


LabVIEW MathScript RT-modulen har sin egen *.m-skriptmotor och kräver ingen installation av programvara från tredje part. Genom att använda MathScript-noden kan du kombinera fördelarna med textbaserade algoritmer, LabVIEWs höga grad av hårdvaruintegration, ett interaktivt användargränssnitt och andra programmeringstekniker som diskuteras i den här artikeln i en enda applikation.

Objektorienterad programmering
Objektorienterad programmering är en av de mest populära typerna av programmering. Detta tillvägagångssätt låter dig kombinera många olika komponenter i ett program till klasser med enstaka objekt. En klassdefinition innehåller egenskaperna hos ett objekt och en beskrivning av de åtgärder som objektet kan utföra, vanligtvis kallade egenskaper och metoder. Klasser kan ha barn som ärver egenskaper och metoder och kan åsidosätta dem eller lägga till nya.


Fig. 8. Det objektorienterade tillvägagångssättet är baserat på klasser (exempel i bilden) och tillhörande egenskaper och funktioner hos VI


Att använda OOP i LabVIEW har blivit möjligt sedan version 8.2

De viktigaste fördelarna med detta tillvägagångssätt är:

  • . Inkapsling: Inkapsling är grupperingen av data och metoder i en klass på ett sådant sätt att de endast kan nås via VI som är medlemmar i klassen. Detta tillvägagångssätt låter dig isolera sektioner av kod och se till att ändring av dem inte påverkar koden i resten av programmet.
  • . Arv: Arv låter dig använda befintliga klasser som grund för att definiera nya klasser. När en ny klass skapas, ärver den datatyperna och VI-medlemmarna i klassen och implementerar därmed egenskaperna och metoderna för den överordnade klassen. Det är också möjligt att lägga till egna VI:er för att ändra klassens funktionalitet.
  • . Dynamisk sändning: Det är möjligt att definiera metoder med flera VI med samma namn i klasshierarkin. Denna metod kallas dynamisk utsändning, eftersom beslutet om vilken VI som kommer att anropas fattas vid programexekveringsstadiet.
Dessa OOP-funktioner låter dig göra koden mer begriplig och skalbar, och även, om nödvändigt, begränsa åtkomsten till VI.

Modellering och simulering
Modellering och simulering av fysiska system är ett populärt tillvägagångssätt i utvecklingen av system som beskrivs med differentialekvationer. Genom att studera modellen kan vi identifiera egenskaperna hos dynamiska system och utveckla en styrenhet med det beteende som krävs.

Figur 9 visar Control & Simulation Loop, som löser en differentialekvation med hjälp av algoritmer inbyggda i LabVIEW i realtid under en viss tidsperiod. Denna programmeringsmetod är också dataflödesbaserad, liksom G-språket, men det brukar kallas signalflöde. Som visas i figur 9 kan du kombinera matematiska modelleringstekniker med andra tekniker som G Data Streams och MathScript Node.


Ris. 9. Simuleringsdiagrammet visar signalutbredning, I/O-hårdvara och MathScript-noden.


Control & Simulation Loop stöder funktioner som används för att implementera modeller av linjära stationära system på enheter som kör ett realtidsoperativsystem. Du kan använda dessa funktioner för att definiera diskreta modeller genom att specificera en överföringsfunktion, ett pol-nolldiagram och ett system av differentialekvationer. Analysverktyg för tids- och frekvensdomän, såsom tidsstegsvar eller Bode-plot, låter dig interaktivt analysera beteendet hos kontroll/simuleringar med öppen och sluten slinga. Du kan också använda de inbyggda modellkonverteringsverktygen som utvecklats i programmeringsmiljön MathWorks, Inc.. Simulink®, vilket gör att de kan användas i LabVIEW-miljön. Dessa dynamiska system kan installeras på realtids OS-enheter utan att kräva flera programkonverteringssteg tack vare funktionaliteten i LabVIEW Real-Time Module-biblioteket, som är idealiskt för att utveckla styrsystemprototyper och firmware-simuleringsapplikationer.

Tillståndsdiagram
NI LabVIEW Statechart-modulen ger utvecklaren möjligheten att beskriva funktionaliteten hos ett system på ett så abstrakt sätt som möjligt med hjälp av tillståndsdiagram. Genom att integrera LabVIEW-kod i diagramtillstånd kan du skapa en verklig arbetsspecifikation för applikationen. NI LabVIEW Statechart-modulen lägger till möjligheten att organisera hierarkisk kapsling och parallell exekvering till funktionaliteten hos konventionella tillståndsdiagram. Det bör noteras att tillståndsdiagram låter dig beskriva hur ett system reagerar på händelser, vilket gör dem till ett mycket användbart verktyg för att utveckla reaktiva system, såsom inbyggda enheter, kontrollsystem och komplexa användargränssnitt.


Ris. 10. LabVIEW Statechart-modulen beskriver ett system baserat på ett tillståndsdiagram.


Ganska ofta används tillståndsdiagram för att dela upp en applikation i delsystem, såsom datainsamling, datautmatning, nätverkskommunikation, dataloggning och användargränssnittshantering. I detta fall definierar tillståndsdiagram vilken information som överförs mellan tillstånd (delsystem) och i vilken ordning de fungerar.

Statechart-baserad applikationsarkitektur tillåter dig att mer effektivt utveckla komplexa programvarusystem, särskilt händelsekänsliga system som dynamiska systemkontroller, komplexa användargränssnitt och digitala kommunikationsprotokoll.

VHDL för FPGA
LabVIEW FPGA-modulen låter dig använda G-språket för att skriva FPGA-kod. Men som med andra utvecklingstekniker kan du använda tidigare skriven kod eller helt enkelt ha möjlighet att välja hur du ska implementera programmet. De flesta FPGA:er är programmerade med det textbaserade strömprogrammeringsspråket VHDL. Istället för att skriva om befintliga IP-block i G kan du importera VHDL-kod med en CLIP-nod (Component-Level IP). Vanligtvis behöver du en CLIP XML-fil för att konfigurera gränssnittet mellan blockdiagramelement, men LabVIEW har en CLIP Import Wizard som låter dig göra detta automatiskt. Den visar en lista med ingångar och utgångar för IP-blocket, som kan dras med musen till blockschemat och användas i applikationen, som visas i Fig. elva.


Ris. elva. CLIP nod.


Eftersom NI använder Xilinix FPGA och Xilinx mjukvaruverktyg i en LabVIEW FPGA-modul kan du använda Xilinx kärngenerator för att skapa en kompatibel kärna. Du kan också använda Xilinx Embedded Development Kit för att skapa valfri mjukvarumikroprocessor. Slutligen tillhandahåller många tredjepartsutvecklare olika typer av IP-block för busshantering, signalbehandling och specifika kärnor.

Integration av C-liknande kod
Du kan använda sekventiell textkod i dina blockdiagram VIs ​​på flera sätt. Det första sättet är formelnoden, som stöder en C-liknande syntax, med variabla definitioner och semikolon i slutet av rader.

Inline C-noden liknar formelnoden och ger ytterligare programmeringsmöjligheter på låg nivå och stöd för header-filer utan överbelastning av proceduranrop. Du kan använda Inline C-noden för att infoga vilken C-kod som helst, inklusive #defines-satser som är syntaktiskt inneslutna inom parentes i C-koden.

Interagerar med körbara filer
När du programmerar i LabVIEW behöver du ofta komma åt kompilerade filer och bibliotek från en applikation skriven i LabVIEW för att återanvända algoritmer som tidigare utvecklats i andra miljöer. När du skapar ett projekt måste du också komma åt applikationer skrivna i LabVIEW från andra applikationer.

LabVIEW tillhandahåller ett brett utbud av olika verktyg för att lösa dessa problem. För det första kan LabVIEW anropa DLL-funktioner, samt använda ActiveX- och .NET-gränssnitt.

För det andra kan en applikation skriven i LabVIEW exponera sin funktionalitet för en annan applikation som en DLL eller använda ActiveX-verktyg.

Om du har C-källkod som du vill använda i din LabVIEW-applikation kan du kompilera DLL:n och ansluta den med hjälp av Call Library Function-noden. Du kan till exempel organisera parallella beräkningar med algoritmer skrivna i C, medan ett program skrivet i LabVIEW hanterar de parallella trådarna. För att göra det enklare att arbeta med externa bibliotek har LabVIEW en Importera delat biblioteksguide som gör att du automatiskt kan skapa eller uppdatera en wrapper för att anropa lämpliga bibliotek (Windows .dll-fil, Mac OS .framework-fil eller Linux .so-fil).

Du kan också använda operativsystemets kommandoradsgränssnitt med System Exec.vi.

Kombinationen av flera programmeringstekniker i en utvecklingsmiljö gör det möjligt att återanvända algoritmer utvecklade på andra språk. Dessutom kan utvecklaren kombinera högnivå- och lågnivåoperationer i en applikation, vilket gör koden mer flexibel och visuell. Olika nivåer av abstraktion gör att komplexa algoritmer kan visualiseras samtidigt som kontroll på låg nivå över applikationen och hårdvaran bibehålls. Med tät hårdvaruintegration kan du använda båda metoderna för att hantera signaler på multi-core, FPGA och inbyggda processorplattformar.

Problem har vanligtvis flera lösningar, och LabVIEW-programmeringsmiljön är tillräckligt flexibel för att du ska kunna välja den lösning som bäst passar dina behov.

Simulink® är ett registrerat varumärke som tillhör The MathWorks, Inc.

ARM, Keil och µVision är varumärken och registrerade varumärken som tillhör ARM Ltd eller dess dotterbolag.