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
A legjobb megoldás • Case struktúra és Error cluster
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
Case Structure Shift Register
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ó 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; } }
//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; }
Forrás: A programozás alapjai - Pohl László, Budapest, 2010
10
Komment /* */ szűrő Állapottábla Állapot normál csillagra vár megjegyzés perre vár
’*’ normál megjegyzés perre vár perre vár
’/’ csillagra vár csillagra vár megjegyzés normál
egyéb normál normál megjegyzés megjegyzés
’/’ nem másol előző ’/’ kiírása, nem másol
egyéb másol előző ’/’ kiírása, másol
Tevékenységtábla Állapot normál csillagra vár
’*’ másol nem másol
Forrás: A programozás alapjai - Pohl László, Budapest, 2010
11
Komment /* */ szűrő egyéb, '*'
normal
'/'
egyéb, '/'
'/'
cs_var
'*'
egyéb
megj
'*'
'*'
p_var
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
16
Hibakezelés
Fájlok Pro’s
Con’s
Binary
Fast, Small Footprint
Not self describing Requires strict control over format
Spreadsheet (ASCII)
Flexible, Exchangeable
Limited Capacity No Structure (Flat 2D Table)
Flexible
Flexible
XML
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!