Aktualizováno v únoru 2019

      
 

   Základy programování - vidlácký experiment s objekty ...
 
Nevizuální objekty

Při procedurálním řízení programu s výhodou použijeme zapouzdřené objekty, které slouží jako černé skříňky k provádění různých funkcionalit. Objekty nemusí být vizuální (nejsou při běhu programu vidět). Ukážeme si to na jednoduchém a vidláckém příkladu tzv. spínacích hodin.

Spínací hodiny

Základní funkcionality spínacích hodin spočívají v tomto:
- umožňují týdenní plánování zapnutí a vypnutí zařízení (čas se píše do polí)
- pracují se systémovým časem PC
- lze s nimi zařízení zapnout trvale (zelené tlačítko)
- lze s nimi zařízení trvale vypnout
- lze spustit funkci předvoleného čas. programu
- lze jimi řídit zařízení, které obsahuje mikropočítač se sériovým portem
- lze je spustit ve více instancích, pokud řídíme zap/vyp více zařízení, start dalších spínaček se dělá stisknutím speciálního tlačítka (široké a hnědé dole).

Poznámky:
1. V této demoverzi byl odstraněn kód pro komunikaci se zařízením.
2. Jedna z komunikujících verzí je však popsána na této stránce.

 

Spuštění více instancí vypadá takto (horní dvě zařízení jsou zrovna zapnuta):

Spuštění více instancí má zásadní výhodu - Form1 programu je jednoduchý a přehledný.

Návrh programu

Demo programu (exe) si můžete stáhnout zde. Zdrojový kód (Visual Basic) .zip stáhnete zde a listing programu .pdf zde.

Nevizuální objekty

V plné verzi byly použity dva nevizuální objekty (Timer a Seriová komunikace). V demoverzi si představíme pouze Timer, jeho použití je jednoduché, používá se často. Vy nemáte zařízení, které lze spínačkami ovládat. Já takové zařízení mám a je v něm mikropočítač PICAXE 08M2, který se programuje také v programu Basic. V této úloze nyní nemá smysl druhý objekt popisovat.

Nevizuální objekt vytáhneme z Toolboxu jako kterýkoliv jiný objekt a vyplníme dvě vlastnosti, které budou po startu Form1 důležité - interval 200 milisekund; po uplynutí takového intervalu timer provede příkazy, které má napsané ve své proceduře, pokud je vlastnost Enabled nastavena jako True.

   

Pohled na design programu

Procedura Timer1 obsahuje jen dva příkazy - volání dvou procedur:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
           Prave_nyni()
'Skok do procedury na zjisteni casu
           Makej()
'Skok do procedury testovani přednastavených parametrů
End Sub

Procedura právě nyní slouží k tomu, aby program zjistil aktuální čas ze systémových hodin. Ten je vyčten v definovaném formátu a my ho pomocí několika málo příkazů musíme převést do formátů, které budeme v další proceduře testovat a zpracovávat:

Private Sub Prave_nyni()

den_nyni.Text = Format(Now(), "dddd")                                  'Tady se takto načte den v tejdnu jako číslo ve formátu "dddd"
cas_nyni.Text = Format(Now(),
"HH.mm ss") + " h.min s"       'Tady se sežene čas jako text (řetěz) ve formátu "h.min s"
Datum_hhmm = 100 * Format(Now(),
"HH") + Format(Now(), "mm") + 1    'Tady se vyrobí hodnota pro testování (porovnávání) ve formátu "hhmm"
Label5.Text = Format(Now(),
"ss") + " sekund"                                       'Tady se vyrobí jen hodnota sekund (nepoužil jsem)

End Sub

Poznámka: V tomto školním příkladu jsme se naučili používat systémovou funkci Format ( ....). Funkci jsme volali celkem 4 krát, pokaždé s jinými parametry a ona nám vrátila pokaždé jiné hodnoty (podle parametrů), které jsme dosadili do textových proměnných.

Tlačítko "Start dalších hodin" (tlačítko Button4) obsahuje též příkaz systémové funkce:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

                 Shell(
"time_control.exe", AppWinStyle.NormalFocus)                    ' Po kliknutí na tlačítko je spuštěn program "time_control.exe"
End Sub

Jedná se o systémovou funkci Shell ( ), pomocí které se spouští spustitelné Windows programy s různými parametry. Jsou nabídnuté v kontextové nápovědě) při psaní kódu.

Poznámky:

1. Tímto jednoduchým opatřením si snadno pořídíme tolik časových intervalů na zapínání během dne, aniž bychom to dopředu plánovali a rozmýšleli. Rozhodneme se až při běhu programu, když spínačky nastavujeme. Potřebujeme-li další interval, jednoduše si ho přidáme.

2. Všimněte si, že opět je kód napsán ve třídě (Class) Form1 a jeho konec je ukončen End Class. Můžeme si něco vyhledat a přečíst o tzv. třídách.
3. Všimněme si deklarace proměnných. První je typu Date, další tři jsou typu String (řetěz, textový řetězec, ...)

Dim Datum As Date                        'Deklarace Datum
Dim Datum_hh As String
Dim
Datum_mm As String
Dim
Datum_hhmm As String

Omezení

Naší demoverzi jsme si omezili o procedury pro komunikaci. Ostatní věci však provádí jako reálný program. Využívá vizuálních a jednoho nevizuálního objektu Timer1, volá 2 systémové funkce (Format a Shell), imperativní programování využívá procedur (skoků do podprogramů) a dosazovacích příkazů.

Měli bychom být schopni vytvořit stejný program v Linuxu, v prostředí Gambas nebo klidně v prostředí Lazarus, pokud se učíme syntaxi jazyka Pascal a deklaraci proměnných v Pascalu.

Měli bychom mít podvědomí o tom, co to je imperativní a objektové programování, jak se dělá s procedurami, že jsou vizuální a nevizuální objekty, že jsou tzv. třídy, že se nějak volají funkce, apod.

Po této lekci bychom měli být rovněž schopni porozumět např. tzv. "tipům dne", které nám nabízí Gambas 3 po jeho spuštění v Linuxu.

Pokud spustíme program v Linuxu, v runtime Wine, nebudou některé věci fungovat, např. sériový port, ten není v demoverzi, ale ani funkce Shell nám nespustí ve Wine další instanci. Pokud na dalším obrázku vidíte spuštěné dvě instance, tak toho jsem docílil tím, že jsem je spustil zavaděčem Wine z adresáře:

 

Zpět na obsah


TU 73, Mira, ok1ufc