LabVIEW alapismeretek
7. példa: Grafikus megjelenítés (program4_1.llb) Ezzel a programmal a harmonikus mozgás és a hullámmozgás kapcsolatát fogjuk bemutatni. Ahhoz, hogy ezt megtehessük meg kell ismerkednünk a LabVIEW alapvető grafikus lehetőségeivel, valamint az ezekhez kapcsolódó néhány más elemmel is. A program egy ellipszispályán mozgó négyzetet, valamint a négyzet mozgásának vetületét fogja megjeleníteni. Először készítsük el a négyzetet valamint az ellipszist kirajzoló programokat, amelyeket mint 'subVI' fogunk felhasználni a főprogramban. Először is ismerkedjünk meg a LabVIEW számos diagramtípusa (ez a szám ráadásul operációs rendszertől függően lehet több vagy kevesebb) közül azzal a hárommal, amelyekkel e jegyzet keretei között foglalkozni fogunk. Ezek a ● ● ●
'Waveform Chart' 'Waveform Graph' 'XY Graph'.
A 'Waveform Chart'-on skalár adatokat jeleníthetünk meg, például időben lezajló folyamatokat. A 'Waveform Graph'-on egy tömb adatait tudjuk kirajzolni, így például nagyon jól használható egy mérés során a mintavételezett jel adatsorozatainak megjelenítésére. Ehhez képest az 'XY Graph' képes egy tömb adatainak megjelenítésére egy másik tömb függvényében. Ezért ez utóbbi kijelzőtípust használhatjuk általános alakzatok kirajzolásához.
IV.1. ábra: A LabVIEW diagramtípusai
Visszatérve a feladatunkhoz, készítsük el a 'Front Panel'-jét a négyzetet kirajzoló programunknak! Helyezzünk el három numerikus kontroll elemet, kettőt a középpont koordinátáinak megadásához, egyet pedig a négyzet élhosszának. A kijelzőnk pedig az imént megismert típusok közül az 'XY Graph' lesz. Az 'XY Graph' tulajdonságait, csakúgy mint bármely más LabVIEW elemét, a hozzá tartozó legördülő menün keresztül állíthatjuk be. Figyeljünk oda arra is, hogy az egyes részegységekhez (skála, 'Legend', stb.) tartozhatnak saját menük is! Most keressük meg mind az 'X' mind az 'Y' tengely 'Autoscale' funkcióját, és 1
LabVIEW alapismeretek
kapcsoljuk ki, mivel most nem lenne előnyös, ha a kijelző skálása mindig úgy kalibrálódna át, hogy a legjobb kitöltést biztosítsa (IV.2. ábra).
IV.2. ábra: Az automata skálázás kikapcsolása
Magának a megjelenítésnek a tulajdonságait a 'Plot Legend'-hez tartozó menün (IV.3. ábra) keresztül érjük el. Az itt található lehetőségek közül a vonalvastagságot állítsuk át nagyobbra!
IV.3.ábra: A vonalszélesség átállítása
2
LabVIEW alapismeretek
Most, hogy elkészültünk a 'Front Panel'-lel, térjünk át a 'Diagram Panel'-en végzendő munkára. Itt ugye ki kell számolnunk a négyzet sarokpontjainak koordinátáit, és ezek segítségével a megjelenítéshez szükséges adatokat a diagramba vezetni. A LabVIEW lehetőséget biztosít arra, hogy a egyes számításokat ne csak grafikusan programozzunk be, hanem az úgynevezett 'Formula Node'-ban (IV.4. ábra) a C/C++ nyelv szintaktikájához igen hasonló módon, szövegesen megírt programok beillesztése is megvalósítható.
IV.4. ábra: A 'Formula Node'
A 'Context Help'-ben látható, hogy milyen matematikai függvényeket használhatunk a 'Formula Node'-ban. Bővebb információt a szintaktikáról, használható függvényekről a részletes 'Help'-ből nyerhetünk. Ahhoz, hogy a 'Node'-ba adatot vigyünk be, illetve onnan adatot nyerjünk ki, a hozzá tartozó legördülő menü segítségével definiálnunk kell ezeket a csatornákat (IV.5. ábra). Ilyenkor a definiált változók neve nem kell hogy azonos legyen azzal a LabVIEW-beli változóval, amellyel adatokat cserél. ( : Linuxos környezetben, magyar billentyűzetbeállítás mellett, a 'Formula Node'-ba az 'Alt-Gr' billentyű lenyomásakor egy 'white-space' típusú karakter kerül, amelyet ki kell törölni, különben hibás lesz a program!) A 'Formula Node' bemenetei a három kontroll elemről érkező adat lesz. A kimenetek pedig az egyes pontok koordinátái. Célszerű ezeket úgy csoportosítani, hogy szem előtt tartjuk azt, hogy az 'X' illetve 'Y' koordinátákat egy-egy tömbbe fogjuk összefűzni. Tömböket különböző adatokból a 'Build Array' függvény (IV.6. ábra) segítségével tudunk létrehozni. Ez a LabVIEW elem átméterezhető és különböző dimenziójú adatokat képes fogadni. Ez azt jelenti, hogy képes skalár elemekből tömböt építeni, vagy egy tömbhöz egy újabb elemet hozzáfűzni, vagy beállítástól függően két tömbből mátrixot létrehozni, vagy a két tömböt összefűzni egy nagyobb tömbbe. Ha megnézzük az 'XY Graph' súgóját, akkor abban le van írva, hogy hogyan tudunk egy, illetve több különböző elemet kirajzolni a grafikonra. A négyzetünk kirajzolásához a négyzet pontjainak 'X' illetve 'Y' koordinátáit tartalmazó tömböt kell egy 'Cluster'-be kötegelnünk. Ez a 'Cluster' palettán található 'Bundle' (IV.7. ábra) valamint 'Bundle by Name' függvényekkel tehető meg. Ezek közül az elsőt fogjuk most használni, mivel most nincs is nevük a 'Cluster'-be foglalt 3
LabVIEW alapismeretek
tömbjeinknek.
IV.5. ábra: Bemenet hozzáadása a 'Formula Node'-hoz
Az összekötegelt koordinátákat ezek után vezessük bele a grafikon termináljába, és nézzük meg, hogy a program megfelelően működik-e. (A futtatás eredménye, valamint a program 'Block Diagram'-ja a IV.8. ábrán látható.)
IV.6. ábra: Tömbök építése
4
LabVIEW alapismeretek
IV.7. ábra: Kötegelés
Sajnos azt láthatjuk, hogy az alakzat nem zárt, de kiindulva abból, hogy a négy pont koordinátáit megadva mit rajzolt ki a program, könnyen kijavíthatjuk ezt a kis hiányosságot azzal, hogy az első pont koordinátáit ötödik elemként még egyszer hozzáfűzzük a tömbjeink végéhez.
IV.8. ábra: Az négyzet program első futtatási eredménye
Ha ismét lefuttatjuk a programot (IV.9. ábra), az már a megfelelő eredményt szolgáltatja. Most már csak 'subVI'-t kell készítenünk a programból, hiszen egy másik programban kívánjuk a későbbiekben felhasználni. A csatlakozók kiosztására, valamint a program rövid dokumentációjára mutat példát a IV.10. ábra.
5
LabVIEW alapismeretek
IV.9. ábra: A négyzet program végleges változata
IV.10. ábra: A négyzet VI 'Context Help'-je
Most, hogy elkészült a program, mentsük el, de ne az eddig megszokott módon, hanem mentsük el egy LLB-be! Az LLB a LabVIEW LiBrary rövidítése, és tulajdonképpen egy speciális könyvtárformátum.
IV.11. ábra: LLB létrehozása
Az LLB használatának több előnye is van. Egyrészt egy fájlban tárolhatjuk a segítségével az összetartozó VI-ainkat, a fájlnevekben bármely megjeleníthető karakter szerepelhet, az így tárolt VI-ok működtetése gyorsabb, és végül de nem utolsó sorban, a fájlméret is kisebb lesz összességében. Az LLB létrehozásának folyamatát mutatja be a IV.11. ábra. ( : Amennyiben a LabVIEW 6
LabVIEW alapismeretek
telepítése során felinstalláltuk a gépünkre a megfelelő komponenst, akkor az Intéző is képes lesz megnyitni az LLB kiterjesztésű fájlokat.) Készítsük el az ellipszist kirajzoló programunkat is. A 'Front Panel'-t hasonló elvek szerint tervezzük meg, mint a négyzetrajzoló alkalmazásnál. Egy lehetséges megoldást mutat a IV.12. ábra, ahol 'x' és 'y' a középpont koordinátái, 'a' és 'b' az ellipszis féltengelyhosszai, és 'N' az ellipszis pontjainak száma.
IV.12. ábra: Az ellipszisrajzoló program 'Front Panel'-je
Az 'N' értékre azért van szükségünk, mivel valójában egy már ellipszisnek látszó N-szöget fogunk kirajzolni. (Javaslom a IV.12. ábrán lévő értékeket alapértelmezettként beállítani!) Az ellipszis pontjait úgy határozzunk meg, hogy az 'N' pontból álló origó középpontú egységsugarú kör pontjainak koordinátáiból kiindulva a kör megnyújtjuk a féltengelyhosszoknak megfelelően, majd eltoljuk a megadott helyzetbe. Ehhez az egységkör kerületét (2π) fel kell osztanunk 'N' részre, majd az egyes 'x' illetve 'y' koordinátákat a koszinusz illetve a szinusz függvények kimeneteként kapjuk meg. (A 2π konstanst a IV.13. ábrán látható palettán találjuk meg, egyéb numerikus konstansok és állandók társaságában.) Ha visszaemlékszünk a ciklusokról tanultakra, akkor rögtön be kell ugorjon, hogy a 'For' ciklust pont az olyan esetekre találták ki, ahol megadott mennyiségszer kell egy műveletet elvégezni. Az külön jól nekünk, hogy a 'For' ciklus alapesetben a belőle kivezetett adatokat egy tömbbe rendezi. Ezt az úgynevezett indexelést az adott 'Tunnel'-hez tartozó legördülő menü első pontjával a 'Disable/Enable Indexing' ponttal tudjuk tiltani illetve engedélyezni (IV.14. ábra). A 'While' ciklusnál pedig az alapértelmezett beállítás az indexelés tiltása. A IV.14. ábrán látható állapotban a program még csak az egységsugarú kör pontjait számította ki. Ezután, az alakzat zárása végett a tömbjeink első elemeit az utolsó helyre is át kell másolni! Az ehhez szükséges tömbindexelő és tömbösszefűző elemet pedig már ismerjük. Ha az összes pont helye megvan, akkor történhet meg a kör torzítása ellipszissé és az eltolása a megadott koordinátákra.
7
LabVIEW alapismeretek
IV.13. ábra: Numerikus konstansok
Természetesen ebből a programból is 'subVI'-t készítünk és ezután elmentjük abba az LLB könyvtárba, amelyikbe a négyzetrajzoló alkalmazást is mentettük.
IV.14. ábra: A ciklus-indexelés engedélyezése/tiltása
A végleges program a IV.15. ábrán a csatlakozó pontos illetve a VI leírása pedig a IV.16. ábrán látható.
8
LabVIEW alapismeretek
IV.15. ábra: Az ellipszist rajzoló program
IV.16. ábra: Az ellipszis program 'Context Help'-je
Most pedig lássunk neki annak a programnak, amely megvalósításához az előző két programot készítettük, a körmozgás és a hullámmozgás kapcsolatát bemutató alkalmazásnak. A 'Front Panel'-en helyezzünk el egy csúszkát ('Slider'-t), amellyel a függőleges tengely méretét állíthatja majd a felhasználó. A rajzobjektumok egyéb méreteit a programban fogjuk beállítani. Tegyünk még fel egy 'XY-Graph'-ot a körmozgás, illetve egy 'Waveform Chart'-ot a hullámmozgás megjelenítéséhez (IV.17. ábra). Igyekezzünk az egyes elemeket úgy elhelyezni, hogy azok jól mutassák az egymás közötti összefüggéseket! Ne felejtsük el kikapcsolni a mindkét diagram automatikus skálázását! A 'Waveform Chart' alapesetben száz időlépésnyi adatot jelenít meg. Amennyiben ez kevésnek bizonyul, akkor az időtengelyen lévő maximális érték átírásával változtathatunk ezen, azonban tapasztalni fogjuk, ez csak 1023-ig tehető meg. Ez azért van, mert ekkora méretűre van beállítva a diagram adatpufferje. Ennek méretét a diagram legördülő menüjében található 'Chart History Length' menüpont használatával változtathatjuk meg. Ahhoz, hogy a program folyamatosan fusson, és mutassa az ellipszis mentén köröző négyzetet, az egész programot egy 'While' ciklusba kell elhelyezni. A ciklus leállási feltétele legyen egy gomb megnyomása, amelyet a ciklusleállító elem legördülő menüjéből a 'Create Control' menüponttal egyszerűen elkészíthetünk. A programban az elkészített 'subVI'-ok felhasználásával ki kell rajzolni az ellipszist, valamint az ellipszis pontjai folyamatosan végigsétáltatni a négyzet középpontját. Ehhez a numerikus palettán található 'Quotient & Remainder' elem igen nagy segítségünkre lesz. 9
LabVIEW alapismeretek
Mivel a mai számítógépek és a bennük található videókártyák igen nagy számítási sebességre képesek, ezért annak érdekében, hogy a diagramokon megjelenített információ jól látható legyen, szükséges, hogy a programunk futását lelassítsuk. Ezt a 'Time & Dialog' palettán található 'Wait Until Next ms Multiple' elemmel (IV.18. ábra) tehetjük meg, aminek a felhasználásával azt érjük el, hogy a ciklus, amelybe ezt az elemet elhelyeztük, az elem bemenetére kötött milliszekundumnyi ideig megállítja a ciklus futását.
IV.17. ábra: A körmozgás és hullámmozgás kapcsolatát bemutató program felhasználói felülete
IV.18. ábra: Ciklus késleltetése
10
LabVIEW alapismeretek
A 'Front Panel' végleges kinézetét, egy futtatás eredményét, valamint a program 'Block Diagram'-ját a IV.19. ábrán láthatjuk.
IV.19. ábra: A körmozgás és hullámmozgás kapcsolatát bemutató program
11