Obsah
MMDL - Mypower Microlog Display Language
Popis jayzka
MMDL je jednoduchý programovací jazyk, určený pro specifikaci chování displaye v projektu Mypower Microlog. Sestává ze dvou sekcí. První sekcí jsou matematické výpočty hodnot, definice a nastavení hodnot proměnných. Druhou sekcí je vlastní obsah jednotlivých stránek displaye a nastavení funkcí ovládacích tlačítek displaye.
Ukázky programu
Komentáře
Komentáře jsou v programu realizovány pomocí „/⁄
“ na začátku rádku. Vše s „/⁄
“ na začátku je považováno za komentář a ignorováno.
Příklad komentáře v programu
// Obrazovky displaye
Pozor! Komentáře na konci řádku nejsou funkční a jsou chápány jako syntaktická chyba
Příklad chybného komentáře v programu
$win = $win1 + $win2 // soucet vykonu
Znak „/
“ je zde chápán jako operátor dělení. „/⁄
“ musí být uveden na začátku řádku.
Příklad korektního komentáře v programu
// soucet vykonu $win = $win1 + $win2
Proměnné
Definice proměnných
- $ Začátek proměnné.
- @ Modifikátor určující že hodnota proměnné bude načtena z HW, například z analogového vstupu.
- a .. z, A .. Z, 0 .. 9, _ název proměnné.
- . Modifikátor určující počet desetinných míst v sekci pro definici obrazovek displaye. Může následovat číslo 0 .. 4 nebo písmeno R.
- # Modifikátor vynucující ukončení názvu proměnné v sekci pro definici obrazovek displaye.
Základní proměnné
Proměnné začínají znakem $
. Za tímto znakem se nachází název proměnné. V sekci pro výpočty název proměnné končí první mezerou, nebo znakem jiným než výše uvedené znaky pro název proměnné. Modifikátor pro desetinné místa i modifikátor vynucující ukončení je v sekci pro výpočty ignorován.
Příklady definice proměnných:
$uFV1 $uFV2 $iarray
V názvech proměnných jsou rozdílně vnímána malá a velká písmena. Proměnné $UFV
a $uFV
jsou dvě zcela odlišné proměnné
Speciální proměnné
Speciální proměnné se vyznačují použitím modifikátoru @
. Jako hodnota proměnné bude použita aktuální hodnota na vstupu HW, nebo systémová proměnná, například aktuálně naměřená hodnota analogového vstupu dle jeho aktuálního nastavení, nebo také čas, datum, atd. Znakem následujícím pro modifikátoru @
je typ hodnoty, která má být použita.
Analogové vstupy
Následující příklady jsou různé hodnoty pro analogový pin 11.
$@a11 => průměrná hodnota z převodníku pinu 11, například 578 $@r11 => efektivní hodnota z převodníku pinu 11, například 572 $@s11 => okamžitá hodnota z převodníku pinu 11, například 570 $@m11 => minimální hodnota z převodníku pinu 11, například 27 $@x11 => maximální hodnota z převodníku pinu 11, například 762
$@A11 => propočtená průměrná hodnota dle nastavení rozsahu pro pin 11, například 13.753 $@R11 => propočtená efektivní hodnota dle nastavení rozsahu pro pin 11, například 231.2 $@S11 => propočtená okamžitá hodnota dle nastavení rozsahu pro pin 11, například 12.302 $@M11 => propočtená minimální hodnota dle nastavení rozsahu pro pin 11, například 21.552 $@X11 => propočtená maximální hodnota dle nastavení rozsahu pro pin 11, například 325.622
Datum a čas
(od verze 2.04)
$@Td => Den včetně dodatečné nuly. 01 - 31 $@Tj => Den. 1 - 31 $@Tm => Měsíc včetně dodatečné nuly. 01 - 12 $@Tn => Měsíc. 1 - 12 $@TY => Čtyřciferný rok. 2013 $@Ty => Dvojciferný rok. 13 $@Tg => Hodiny ve dvanáctihodinovém času. 1 - 12 $@TG => Hodiny ve čtyřiadvacetihodinovém času. 0 - 23 $@Th => Hodiny ve dvanáctihodinovém času včetně dodatečné nuly. 01 - 12 $@TH => Hodiny ve čtyřiadvacetihodinovém času včetně dodatečné nuly. 00 - 23 $@Ti => Minuty včetně dodatečné nuly. 00 - 59 $@Ts => Sekundy včetně dodatečné nuly. 00 - 59
Příklad zobrazení data a času
# $@Td#.$@Tm#.$@TY $@TH:$@Ti:$@Ts
Výsledek:
12.09.2013 17:28:16
Příklad výpočtu počtu sekund od půlnoci a zobrazení času
$whrs = $@TH * 3600 $wmin = $@Ti * 60 $wx = $@Ts + $wmin + $whrs # cas:|$@TH:$@Ti:$@Ts sekund:|$wx.R
Výstup:
cas: 01:08:58 sekund: 4138
Další příklady pro datum a čas na displayi.
Modifikátor počtu desetinných míst
Proměnné v sekci pro stránky displaye může pomocí speciálního modifikátoru určit, kolik desetinných míst, či v jakém formátu bude číslo zobrazeno. $X
je proměnná.
Pravidla
- $X.0 zobrazí pouze celou část čísla. Například 17
- $X.1 až $X.4 zobrazí 1 - 4 desetinná místa s doplněním zbývajících nul do požadovaného počtu desetinných míst. Například 17.85 pro
$X.2
- $X. zobrazí automatický počet desetinných míst. 0 - 4, bez zbývajících nul.
- (od verze 2.04)
- $X.R zobrazí celou část čísla. Narozdíl od výše uvedených se neprovádí se úprava na jednotky k, M, G, T.
Sekce
Výpočty
Sekce výpočtů slouží pro přípravu a kalkulaci hodnot před jejich použitím pro zobrazení na displayi. Pro výpočty se používají základní matematické rovnice s použitím matematických operátoru pro součet +
, rozdíl -
, násobení *
a dělení /
.
Příklad sekce výpočtů
$wIN1 = $@A10 * $@A11 $wIN2 = $@A12 * $@A13 $wINsum = $wIN1 + $wIN2
Popis řádků:
$wIN1 = $@A10 * $@A11
Do proměnné $wIN1
ulož součin proudu měřeného na analogovém pinu 10 a napětí měřeném na pinu 11. Použij reálné hodnoty proudu a napětí přepočtené z hodnot převodníků na reálné hodnoty dle rozsahu v nastavení pro pin 10 a 11.
$wIN2 = $@A12 * $@A13
Do proměnné $wIN2
ulož součin proudu měřeného na analogovém pinu 12 a napětí měřeném na pinu 13. Použij reálné hodnoty proudu a napětí přepočtené z hodnot převodníků na reálné hodnoty dle rozsahu v nastavení pro pin 12 a 13.
$wINsum = $wIN1 + $wIN2
Do proměnné $wINsum
ulož součet výsledných výkonů $wIN1
a $wIN2
Stránky
Sekce pro definici stránek slouží pro nastavení obsahu jednotlivých stránek displaye a následuje bezprostředně za sekcí určenou pro výpočty. Stránky jsou uloženy v pořadí za sebou. Ve stejném pořadí budou zobrazeny po stisku tlačítek UP
a DOWN
na LCD Keypad Shield displayi.
Definice stránky
Každá stránka začíná symbolem #
. Za tímto znakem může následovat jedno z písmen R
, L
, nebo S
, které značí tlačítko (Right
, Left
, nebo Select
) po jehož stisku bude stránka okamžitě zobrazena. Tlačítka Up
a Down
si zachovávají svou funkci a jsou použita pro listování mezi stránkami v pořadí tak jak jsou napsány v programu pro display.
Příklad definice stránky s možností ji vyvolat pomocí tlačítka Right
:
#R Toto je stranka po stisku RIGHT
Běžná stránka je bez definice tlačítka
# Toto je bezna stranka....
Poznámka: V případě, že se v programu vyskytne více stránek s definicí pro jedno a totéž tlačítko, bude zobrazena ta stránka, která je umístěna v programu nejdříve. Ostatní jsou ignorovány 1)
Zarovnání textu
Zarovnání textu se provádí pomocí rozdělení řádku znakem „|“. Vše vlevo od znaku „|“ je zarovnáno vlevo, vše vpravo je zarovnáno vpravo. Řádek, který neobsahuje znak „|“ je zarovnán na střed.
# Centrovano Vlevo|Vpravo
Proměnné
Proměnné je možno použít pomocí znaku $
. Pokud je potřeba bezprostředně za proměnnou vložit text a je potřeba ukončit název proměnné, je možno použít znak #
. například pro text 12.25V potřebujeme za proměnnou vložit jednotku „V“. Proměná, do které jsme si v sekci výpočtů připravili napětí na bateriích se jmenuje $uBat
. Definice $uBat V
by vygenerovala text 12.25 V. Bez mezery dostáváme neexistující název proměnné $uBatV
. Proto v těchto případech použijeme znak #
, čímž určíme, kde končí název proměnné, tedy $uBat#V
vygeneruje text 12.25V.
Formát čísel
Pro definici počtu desetinných míst použijeme znak .
. Pro jedno desetinné místo použijeme výraz $uBat.1
. Výsledkem může být například 12.2. Pro 0 desetinných míst použijeme $uBat.0
. Pro automatický počet desetinných míst znak .
neuvedeme. V kombinaci se specifikací počtu desetinných míst se ukončení názvu proměnné nepoužívá. Je možno použít $uBat.3V
, což vygeneruje 3 desetinná místa 12.253V.
# Baterie|$uBat.2V Spotreba|$woutSUM#W
Datum a čas
Příklady pro datum a čas (od verze 2.04)
# Menic:| $wAC3k.2W Cas: | $@TH:$@Ti
Výsledek:
Menic: 0.00W Cas: 17:29