LabVIEW Academy 6. óra state machine
Tartalom Állapotgép Típusdefiníció Fájlok 2 feladat: egy könnyebb és egy kicsit gyakorlatiasabb 2
Szekvenciális programozás Alapértelmezetten nincs szekvenciális futtatás LabVIEW környezetben, habár sok feladat ilyen. Itt semmi sem kényszeríti a szekvenciális végrehajtást.
Sorrendiség Error clusterek és refnumok kötése a sorrendiség miatt. Még itt se a várt eredményt kapjuk.
Sequence Structure Sequence structure egy vezérlési struktúra, minden frame akkor hajtódik csak végre ha az előtte lévő bemeneti elemeken minden adat rendelkezésre áll» dataflow Ez a megoldás bár működik, még nem a legjobb
Egy fokkal jobb megoldás
Case struktúra és Error cluster A legjobb megoldás
State Tervezési technikák - Állapotgép Az állapotgép egy gyakran használt tervezési minta (design pattern), A lényege, hogy az adott alrendszer csak egy állapotban lehet egyszerre, ebből az átmenetek és az egyes állapotok tevékenységei pontosan definiáltak. While Loop Type-Defined Enum Shift Register Case Structure
State machine - állapotgép Az állapotgép egy gyakran használt tervezési minta (design pattern), A lényege, hogy az adott alrendszer csak egy állapotban lehet egyszerre, ebből az átmenetek és az egyes állapotok tevékenységei pontosan definiáltak. Megadható állapot és tevékenységtáblás, UML diagram és nem szabványos módokon. http://en.wikipedia.org/wiki/finite-state_machine http://en.wikipedia.org/wiki/uml_state_machine 9
C nyelven state machine implementáció //state machine - állapotgép #include <stdio.h> typedef enum {normal,komment,cs_var,p_var} allapotok; int main(void){ int c; allapotok a = normal; //CTR+Z-ig while((c=getchar())!=eof){ switch (a){ case normal: if(c!='/')putchar(c); else a = cs_var; break; } case cs_var: if(c=='*') a = komment; else{ putchar('/'); if(c!='/'){ putchar(c); a=normal; } } break; case komment: if(c=='*') a = p_var; break; case p_var: if(c=='/') a = normal; else if(c!='*') a = komment; break; } } Forrás: A programozás alapjai - Pohl László, Budapest, 2010 10
Állapottábla Komment /* */ szűrő Állapot * / egyéb normál normál csillagra vár normál csillagra vár megjegyzés csillagra vár normál megjegyzés perre vár megjegyzés megjegyzés perre vár perre vár normál megjegyzés Tevékenységtábla Állapot * / egyéb normál másol nem másol másol csillagra vár nem másol előző / kiírása, nem másol előző / kiírása, másol Forrás: A programozás alapjai - Pohl László, Budapest, 2010 11
Komment /* */ szűrő egyéb, '*' '/' egyéb, '/' '*' normal cs_var megj p_var '/' '*' egyéb egyéb '*' '/' Az implementációba be lehet tenni egy plusz állapotot - végállapotot -, amibe bármikor elérhetünk EOF hatására. 12
Tervezési technikák - Állapotgép While ciklus Case struktúra (különböző állapotbeli viselkedés) Shift regiszter (állapot tárolása) File New VI From Template Frameworks Design Pattern State Machine 13
Állapotgép start Alap Mérés Led villogtatás end 14
Mentés lehetőségei Csv/Txt (szöveges) Tdms (labview és excel is támogatja) Report generation toolkit
Fájlműveletek Megnyit/ Létrehoz/ Cserél Ír/Olvas Lezár Hibakezelés 16
Fájlok Binary Spreadsheet (ASCII) Pro s Fast, Small Footprint Flexible, Exchangeable Con s Not self describing Requires strict control over format Limited Capacity No Structure (Flat 2D Table) XML Flexible Flexible TDMS: Combines XML + Binary Flexible Small footprint Easy to create (Complete API) Easy to extend, customize Designed for measurement data
Write to File Example Open/Create/Replace opens the existing file TEST1.DAT and generates refnum and error cluster Write File writes the data Close File closes the file Simple Error Handler checks for errors 18
Reading Data from a File Open/Create/Replace opens the file Read File reads the specified number of bytes from the file Close File closes the file Simple Error Handler checks for errors 19
Formatting a Spreadsheet String Spreadsheets are popular tools for data handling and analysis There are many formats for spreadsheet data. One of the most popular is tabdelimited: Columns are separated by a tab character Rows are separated by an end-of-line character A spreadsheet yields: Tab End of Line 20
Creating a Spreadsheet File Can replace Format Into String and Write File with Format Into File in above example 21
Típus definíciók.ctl Advenced >> Customize Kontrollok, konstansok 22
8-1 feladat Egyedi felsorolás típus használatával hozzunk létre egy állapotgépet. Létre kell hoznunk egy állapotgéppel vezérelt felhasználói felület sablont. Az állapotgépnek lehetővé kell tennie, hogy a felhasználó tetszőeges sorrendben elindíthassa az 1. vagy a 2. folyamatot. Mivel a későbbiekben további folyamatok is beépülhetnek az alkalmazásba, az állapotgépünket bővíthetőre kell terveznünk. 23
8-1 feladat 24
Led: GND / AO0 Fotóellenállás: GND / +5V / AI0 25
Állapotgép start Alap Mérés Led villogtatás end 26
Példa06_1 állapotgép Készítsen állapotgépet, amely egy gép ki és bekapcsolását képes kezelni. Bekapcsolt állapotban jelezze ki a bekapcsolás óta eltelt időt. Ha bekapcsolt állapotban nyomjuk le a Start gombot, jelezze ki, hogy már be van kapcsolva a gép. 27
Példa06_2 állapotgép Készítsen állapotgépet, amely egy kávé automatát modellez. Lehessen bele pénzt bedobni és 80 egység után kávét, 120 egység után cappuchinot ad gombnyomásra. Ha nincs elég pénzünk azt is jelezze egy eseményeket gyűjtő stringben. Előbb itt is tervezzünk, utána programozzunk. 28
Példa06_3 csv olvasás Készítsen programot mely képes beolvasni a Szenergy team CSV formátumban tárolt telemetriás adatait egy double tömbbe. 29
Fotóellenállásos 30
Fotóellenállásos 31
Fotóellenállásos 32
Köszönöm a figyelmet!