LabView Academy 4. óra párhuzamos programozás
Ellenőrző kérdések Hogyan lehet letiltani az automatikus hibakezelés funkciót? a) Engedélyezzük az Execution highlighting ot b) A subvi error out cluster-jét bekötjük egy másik subvi error in cluster-jébe c) Az Error list ablakban bejelöljük a Show Warnings jelölőnégyzetet 2
Ellenőrző kérdések Az alábbiak közül melyek az error cluster elemei? a) Status: Boolean b) Error: String c) Code: 32-bit integer d) Source: String 3
String String Length Concatenate String subset Trim whites Normalize end of line Replace subset Stb. 4
String példák Match pattern Search and replace 5
Case Structures» Case structure Bool, egész szám, enum Számnál és enumnál alapértelmezett» Default case Értékek tól ig határokkal 1..200 1..200, 220..240 6
Case 7
String Gyakorlás: pelda05_1_string_case.pdf Gyakorlás: Lva.04.strings.docx pelda08_build_string.vi 8
Switch/Latch mechanical action Boolean latch action nem kompatibilis a local változókkal. Próbáljuk ki ezt a következő feladat előtt! 9
Párhuzamosság Két különböző frekvenciájú koszinusz jel, két ciklusban, egy stop gombbal leállítva 10
Párhuzamosság Helyes-e a következő elgondolás? Nem! 11
Párhuzamosság Helyes-e a következő elgondolás? (Változók) pelda05_local_variables.vi Igen! 12
Párhuzamosság Adatfolyam architektúra Az adatfolyam határozza meg a végrehajtási sorrendet Jól párhuzamosítható Adatátadás a párhuzamos programrészek között Adatfüggőséget okoz (adatfolyam) Elveszik a párhuzamosság Változók: blokk diagram elemek, amelyek lehetővé teszik adatok beolvasását, illetve tárolását. 13
Változók Lokális változó: Front panel kontrolban/indikátorban tárolja az értéket, csak egy VI-on belül használható Globális változó: Speciális adattárolóban tárol, adatokat így több VI számára elérhető Funkcionális globális:while ciklus inicializálatlan Shift regiszterében tárol értéket Shared: több eszköz és rendszer között hálózati megosztás 14
Lokális változók Létrehozása: Jobb klikk egy kontrol/indikátor terminálon >> Create >> Local variable Functions paletta Írása/olvasása: Jobb klikk >> Change to Read/Write 15
Globális változók Adatcsere különböző VI-ok között Speciális VI, aminek csak Front panelje van Létrehozása: Functions paletta A globális változó Front paneljén elhelyezett egy/több objektum >> összetett változó Írása/olvasása: Összetett változó esetén az al-változó kiválasztása Change to Read/Write 16
Single-process shared variable Adatcsere különböző VI-ok között Létrehozása: Project explorer >> My computer, New >> Variable 17
Single-process shared variable Adatcsere különböző VI-ok, sőt különböző rendszerek között hálózaton Project Explorer 18
A változók túlzott használatának veszélyei A változók nem részei az adatfolyam architektúrának A blokk diagram nehezen olvashatóvá válik a használatukkal Túlzott használatuk rontja a VI teljesítményét 19
Ellenőrző kérdések Mi lesz az értéke? a) Szám=(Szám*5)+2 b) Szám=(Szám*2)+5 c) Szám=Szám*5 d) Szám=Szám+2 e) A kiértékelési sorrend dönt 20
Charts vs. Graphs Multi-plot and XY Graph
Feladat 22
Feladat pelda07_local_variables_order.png Snippet 23
Funkcionális globális változók For, vagy While ciklusok inicializálatlan shiftregisztereiben tárolja az adatot Művelet bemenet (set/get, read/write) Adat bemenet Bonyolultabb adatstruktúrák (verem, sor) is megvalósíthatók így Fájlok, műszerek, DAQ eszközök hozzáférése is szabályozható ezzel pelda06_functional_global_variable.zip 24
Versenyhelyzet Több párhuzamosan futó program használja ugyanazt a megosztott erőforrást (változót) Nehéz azonosítani és debuggolni Elkerülése Megosztott erőforrások korlátozása Kritikus kódrészek védelme (pl. semaphor, funkc. globális változó) Végrehajtási sorrend meghatározása 25
Controlling Shared Resources 26
Megosztott erőforrások Minimalizáljuk a megosztott erőforrások alkalmazását vagy legalább a megosztott erőforrások használóinak számát ha sokan olvassák ugyanazt az erőforrást, az áltatában nem probléma ha sokan írják, az jelent problémát Cél: Egy írásjog Jól definiált végrehajtási sorrend 27
Változók Inicializálatlan változók az alapértelmezett értéket veszik fel. Ökölszabály: előbb inicializáljuk a változót, utána használjuk. 28
Kritikus kódrészlet Definíció: az a kódrészlet, amely közben versenyhelyzet állhat elő Kritikus kód védelme Funkcionális globális változók: non reentrant subvi, egyszerre csak egy helyről futtatható Szemaforok 29
Szemafor használata a kritikus kódrészlet védelmére Acquire semaphore és Release semaphore közti rész védett 30
Ellenőrző kérdések VI-okban érdemes gyakran változókat használni. a) Igaz b) Hamis 31
Ellenőrző kérdések Az alábbiak közül melyek nem alkalmasak adatátvitelre? a) Szemafor b) Funkcionális globális változó c) Lokális változó d) Single-process shared változó 32
Ellenőrző kérdések Az alábbiak közül melyek használhatók kizárólag projektben? a) Lokális változó b) Globális változó c) Funkcionális globális változó d) Single-process shared változó 33
Ellenőrző kérdések Az alábbiak közül melyek nem használhatók különböző VI-ok közti adatátadásra? a) Lokális változó b) Globális változó c) Funkcionális globális változó d) Single-process shared változó 34
Többhurkos tervezési technikák Párhuzamos Több független feladat párhuzamos végrehajtása Kommunikáció a ciklusok között nem egyszerű (változók) 35
Többhurkos tervezési technikák Master/Slave Több független ciklus különböző sebességgel Slave ciklus Különböző frekvenciájú adatgyűjtési feladatok Master ciklus Felhasználói felület kezelése (inputok a felhasználótól) Túl lassú Slave gondot okozhat 36
Többhurkos tervezési technikák Producer/Consumer Továbbfejlesztett adatmegosztás a Master/Slave-hez képest Producer ciklus: Adatot termel Consumer ciklus: Adatot fogyaszt Kommunikáció egy soron keresztül -> nincs adatvesztés 37
Olvasnivaló http://www.ni.com/white-paper/7585/en/ http://labviewwiki.org/race_condition http://www.ni.com/white-paper/4679/en/ http://digital.ni.com/public.nsf/allkb/a1ba7477550dbfde862 565BC006CD410 http://www.ni.com/white-paper/6099/en/ 38