1. mérés - LabView 1 Mérést végezte: Bartha András Mérőtárs: Dobránszky Márk Mérés dátuma: 2015. február 18. Mérés helye: PPKE Információs Technológiai és Bionikai Kar A mérés célja: Ismerkedés a Labview programmal, és a periodikus jelek alapszintű vizsgálatával. A mérés során használt eszközök: LabView program Az eredmény meghatározásának körülményei: 1 A mérés során megismerkedtünk a Labview program lehetőségeivel és mintafeladatok megoldásával szemléltettük a programban elvégezhető alapvető méréseket. A LabVIEW (Laboratory Virtual Instrument Engeneering Workbench) egy olyan programcsomag, mellyel virtuális műszereket (virtual instruments) hozhatunk létre. Felhasználható általános célú grafikus programozási nyelvként is, de legnagyobb erőssége, és kifejlesztésének célja a virtuális műszerek tervezése, kialakítása, és az alkalmazások műszerként való használata. A fizikai mérések elvégzéséhez számos műszert kell igénybevennünk. Ezek rendszerint minimális kezelőfelülettel rendelkező célspecifikus eszközök. A bonyolultabb mérések elvégzéséhez speciális eszközökre van szükség. Ezek rendszerint nem olcsók. Éppen ezért van fontos szerepe a LabView programnak, mert használatával számos mérést tudunk modellezni jelentősebb pénzforrás és eszközpark nélkül. 1 http://e-oktat.pmmf.hu/bevezetes_grafikus_programozas (Hozzáférve: 2015. február 18.) 1
A mérés ismertetése Kapcsoló, LED és alapszintű matematikai műveletek használata: A három részes feladat első részében, egy egyszerű kapcsolót használtunk kontrollerként, aminek a kimenetét két logikai érték között tudunk állítani (igaz-hamis). Indikátornak, egy négyszögletű LED-et választottunk, ez tökéletesen alkalmas logikai értékek megjelenítésére. A gombot úgy állítottuk be, hogy minden kattintás alkalmával váltson át a másik állapotára. Ha a kapcsoló igaz-jelet ad, a LED-ünk feketéről kék-re vált. A második feladatrész kielégítése érdekében, a kapcsolót rákötöttük még egy case struktúrára is, ami a kapcsoló hamis jelére futtatja le a tartalmát. Ebben a struktúrában helyet kapott egy flat sequence nevű struktúra, melynek tartalma egy kontroller, egy gauge elnevezésű indikátor, továbbá egy subvi, mely egy bementet és egy kimenetet tartalmaz. A kontrollerünk lebegőpontos számok (double) bevitelére alkalmas. Az indikátor skáláját úgy állítottuk be, hogy nulla, és száz között legyen képes számok kijelzésére. A subvi a bejövő lebegőpontos értéket megszorozza egy lebegőpontos konstanssal, melynek értéke 3.6, így a kimenet is lebegőpontos lesz. A harmadik feladatrész érdekében ez a szorzás, egy for loop struktúrában kapott helyet, melynek a magja 10 000 alkalommal fut le. A harmadik feladatrészben, a subvi futási idejének méréséhez két részre osztottuk fel a flat sequence struktúránkat. Az első részben helyeztük el a numerikus kontrollert és a subvi-t. Továbbá elhelyeztünk itt egy tick count elnevezésű elemet, mely kiolvassa a rendszeridőt milliszekundumban. A sequence második részében helyeztük el a gauge indikátort, egy másik tick count elemet, és egy kivonás aritmetikai műveletet, mely a későbbi időből kivonja a korábbit, ezzel lényegében megkapjuk a subvi lefutásának idejét. (Ez nem teljesen pontos érték, mert ebbe belezavar pl: a numerikus kontroller kiolvasásának ideje, az adat továbbításának ideje, a sequence következő részére váltásnak az ideje stb...,de ez annyira kevés, milliszekundumnál kevesebb idő, hogy esetünkben elhanyagolható). A kapott időérték megjelenítésére egy másik numerikus indikátort használtunk, amely megjeleníti az időt milliszekundumban. A feladat pontos teljesítésének érdekében még elhelyeztünk itt egy osztás műveletet, mely a kapott időkülönbséget elosztja egy 10 000 értékű konstanssal. Ezzel megkapjuk a subvi-ben lévő ciklusmagnak az egyszeri lefutási idejét (Ez esetünkben egy rendkívül pontatlan érték, mert a mérési tartományunknak csak a legalját használjuk, emiatt a kapott értékünk csak az értéktelen biteken jelenik meg) 1. ábra. Sebesség átváltás 2
Randomszám generátor használata: Ennél a feladatnál a műszerpanelen egy nyomógombbot használunk kontrollerként, melyet lenyomva egy pillanatra igaz értéket ad, majd visszatér a hamis állapotába. Megjelenítésre egy numerikus és egy mutatós indikátort használtunk. Elhelyeztünk egy LED-et is amely zöldre vált, ha a kapott érték 6. Annak érdekében, hogy a generálás is és a megjelenítés is csak akkor történjen, meg amikor a gombot lenyomjuk, az egész eseményt egy case struktúrába helyeztük, amely akkor fut le, ha a gomb igaz logikai értéket ad. Ebben a case struktúrában helyet kapott egy randomszám generátor, amely 0 és 1 között ad értékeket 64 bit pontossággal (15 számjegy), továbbá a numerikus indikátor, a Meter nevű mutatós indikátor, és a LED. Ezek az elemek oly módon kerültek összekötésre, hogy a randomszám generátorból kijövő értéket egy szorzás aritmetikai kapu és egy konstans segítségével megszorozzuk 6-tal, így a kapott értékünk 0 és 5 közé esik, de továbbra is lebegőpontos típus. Ahhoz, hogy egész típust kapjunk, egy kerekítést végző kaput használtunk, amely eltávolítja az egynél kisebb tizedes tört értékeket, így 0 és 5 közé eső egész számot kapunk. Ahhoz hogy 1 és 6 közé eső számot kapjunk, egy összeadás aritmetikai kapu és egy konstans segítségével hozzáadunk 1-et, így minden kapott érték már 1 és 6 közé esik. Ezt az értéket megjelenítjük mind a numerikus, mind a mutatós indikátoron. Továbbá ezt az értéket rávezetjük egy egyenlőséget vizsgáló összehasonlító kapura, egy 6 érétkű konstanssal együt. Az így nyert logikai értéket, amely egyenlőség esetény igaz, ellenkező esetben hamis, rávezetjük a zöld LED-ünkre, amely így világítani fog, ha a generált értékünk (a műveletek elvégzése után) 6. 2. ábra. Randomszám generátor 3
Idő mérése két kontroller esemény között: Ebben a feladatrészben, a műszerelőlapon kontrollernek helyet kapott egy gomb, indikátornak pedig egy numerikus kijelző, és egy zöld LED. A gombot úgy állítottuk be, hogy amíg nyomjuk, addig igaz értéket ad, és ha felengedjük, akkor hamisat. A blokk diagramon elhelyeztünk egy tick count órát, amely felveszi a rendszeridő értékét, amikor lefut. Továbbá elhelyeztünk még egy event struktúrát amely akkor indul el, amikor a nyomógombunk értéke megváltozik, és addig fut, amíg ismét meg nem változik. Lényegében addig fut a tartalma, amíg nyomjuk a gombot. Ebben a struktúrában van egy data node elnevezésű rész melynek elemei különböző adatokat tartalmaznak, pl.: hogy le fog-e futni még egyszer a struktúra tartalma (new value). Ezen tulajdonságainak a kihasználására, elhelyeztünk benne egy case struktúrát, amely akkor fut le, ha az event struktúra már megkapta a második eseményt tehát utoljára fut le a magja (A nev value konnektor hamis értéke esetén). Ekkor, az event struktúrában kiolvassuk a time konnektor értékét, ez az a rendszeridő, amikor az utolsó lefutás történt, és kivonjuk belőle az event struktúrán kívül elhelyezett tick count értékét. Ezzel megkaptuk a gomb lenyomása, és felengedése közötti időt. Ez az érték egész típusú és az eltelt időt milliszekundumban tartalmazza. Ahhoz hogy másodpercként jelenítsük meg a lebegőpontos számok ábrázolására alkalmas indikátoron, ezt az értéket egy osztás aritmetikai művelet, és egy konstans segítségével elosztjuk 1000-rel. Az így kapott értéket kivezetjük a numerikus indikátorra. A kivezetendő értéket még rákötöttük két összehasonlító kapura, melyek közül az egyik megvizsgálja, hogy az érték nagyobb-e mint 0,9 a másik pedig hogy kisebb-e mint 1,1. A két kapu értékét rávezettük egy és logikai kapura, így akkor kapunk igaz értéket, ha a gombot tovább tartottuk nyomva mint 0,9 de kevesebb mint 1,1 másodperc. Ezt a logikai értéket rákötöttük a LED-re, amely igaz érték esetén világítani fog. 3. ábra. Időmérés 4
Ismerkedés a periodikus jelekkel: Ebben a feladatrészben három különböző periodikus jelet vizsgálunk meg: szinuszos jelet, háromszög jelet, és négyszög jelet. Fontos volt, hogy a jelek feszültség értékét (amplitúdó), offszet feszültségét (függőleges tengelyen való eltolás), és frekvenciáját a szimuláció közben módosítani tudjuk. Így a műszer előlapon kontrollerként helyet kapott mindhárom jel esetében három darab Vertical pointer slide elnevezésű csúszka. Indikátornak elhelyeztünk a műszer előlapon egy-egy Waveform chart elnevezésű grafikont, amely alkalmas periodikus jelek megjelenítésére, továbbá két-két Meter elnevezésű mutatós elemet, melyek majd a jelek csúcs, és effektív értékét fogják mutatni. A jelek előállítására egy Simulate signal elnevezésű elemet használtunk, melyeket a properties menüben úgy állítottunk be, hogy a megfelelő jelalakokat generálják. A jelalak generátoron lévő Offset, Frequency, Amplitude bemenetekre rákötöttük csúszkákat, így valós időben tudjuk módosítani ezeket az értékeket a szimuláció során. A jelalak generátor kimenetét rákötöttünk a grafikonunkra, továbbá egy Amplitude and level Measurment elnevezésű elemre, amely egy bejövő jelnek meg tudta állapítani bizonyos tulajdonságait. Esetünkben a Positive Peak (pozitív csúcsérték) és az RMS (effektív érték) kimenetek voltak aktuálisak melyeket rákötöttük a megfelelő mutatós indikátorra. A szimuláció során jól megfigyelhető volt a jelek csúcs és effektív értéke közötti összefüggés. Szinusz jel elesét U eff = Umax 2, háromszög jel esetén U eff = Umax 3, és négyszögjel esetén a két érték megegyezik U eff = U max. 4. ábra. Periodikus jelek 5