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