banner

EasyTerm - příběh jednoho nápadu

Tak úplně na úvod - vítejte!

První příspěvek bych rád pojal na trochu osobnější rovině - tedy dovolte, abych se jakožto původní autor nápadu tzv. "EasyTermu" představil - jmenuji se Miroslav Šíma, profesním pozadím zejména FW vývojář s přesahem do hardware a software a již pěknou řádku let pracuji na zařízení zvaném EasyTerm.

EasyTerm má pestrou historii - původně to mělo být zařízení, jehož jádrem byl dotykový displej a UART - zkráceně řekněme tedy takové "HMI" - pro obsluhu a monitorování různých zařízení se sériovým portem buď v rámci vývoje, validací či běžného používání. Každý má zkušenosti s terminálovými aplikacemi jako je Putty či se mnou oblíbeným ScriptCommunicatorem. Sledování výpisů různých zařízení je však mnohdy neintuitivní a ovládání zařízení přes textové API také - zprávy jsou vypisovány pod sebe dle časové souslednosti - bez jakéhokoliv třídění či filtrace, ovládání parametrizací příkazů ručním přepisováním parametrů není zrovna komfortní a dělají se chyby, zařízení například zrovna není v dosahu počítače, UART<->USB převodník leží zase kdoví kde, API onoho zařízení se pozapomnělo... (nechal jsem se unést - aneb ta osobní praxe)...

EasyTerm jako HMI

Prvotní verze tedy obsahovala sadu grafických widgetů pro monitorování zpráv s parsovaním dle masky (formuláře, grafy, sekvenční logovací okno) a sadu widgetů pro tvorbu (respektive parametrizaci) zpráv - tlačítka, klávesnice, slidery, checkboxy. Zařízení jsem používal pro obsluhu jiných zařízení - prostě všeho co mělo UART. Vzhledem k možnosti ukládání layoutů těchto widgetů mohlo mít každé obsluhované zařízení uložené svůj vlastní layout (či hezky-česky to nazvěme kontrolním panelem). Ono obsluhované zařízení se dalo velmi komfortně ovládat a monitorovat - a to i přesto, že obsahovalo drobný nevýkonný mikrokontrolér s několika málo piny - hlavně když byl UART. Nebylo třeba jej tedy komplikovat a dalo se soustředit na vývoj a zdokonalování primární činnosti, pro kterou bylo zařízení vlastně vyvíjeno. Vzhledem k využití ASCII protokolu nebyla potřeba integrace žádné knihovny či jakýkoliv zásahů do FW onoho zařízení (to by se na to člověk taky mnohdy vykašlal a postačil si s běžným SW terminálem, že ano...). 

Spousta času padla na návrh onoho ASCII protokolu (nechtěl jsem jej stále dokola měnit) - prioritou byla intuitivnost. Příkazy šlo zadávat v kompaktním či sebe-dokumentujícím formátu (či kombinovaně).

Tak například příkaz displayButton x=10 y=10 text="Save layout" action="SaveLayout bankId=0" věřím pochopí i úplný neznalec EasyTermu. Ta samé se dalo zapsat zkráceně jako db x=10 y=10 t="Save layout" a="sl bid=0" či kombinovaně.

Obsluha čehokoliv byla konečně zábava a nemuselo se všemu přidělávat rozhraní na displej ani hromada tlačítek - s postupem času mne však stále více frustrovaly okamžiky, kdy jsem při vývoji potřeboval realizovat zdánlivě jednoduchý úkon, například si vygenerovat napětí o určité hodnotě, PWM signál o určité frekvenci a střídě, vyčíst si registr nějakého integrovaného obvodu, nastavit někde logickou úroveň. Ono to zní jednoduše, ale zpravidla to vždy bylo peklo. Člověk si to buď musel nějak ubastlit, případně udělat místo na stole na nějaký těžký a drahý přístroj, který byl pro daný úkon absolutní "overkill". Pro vyčtení integrovaného obvodu zase bylo nutné obstarat speciální zařízení a instalovat...Nedejbože když se to muselo nějak automatizovat a například generovat časovou souslednost různých PWM signálů - to vedlo na hledání manuálu a v mnoha případech na tápání, proč onen SCPI příkaz nefunguje.

EasyTerm jako multitool

Proto přišla na řadu druhá verze - obvodově se zařízení zkomplikovalo, přibyly známé sběrnice (UART/SPI/I2C), digitální vstupy/výstupy (GPIOs, PWM) a analogové piny (ADC/DAC). Vygenerování napětí či PWM byla poté záležitost na pár vteřin (zpravidla jeden příkaz - ukázkou například příkazy DAC v=1000, ADC v=? nebo PWM initialized=1 frequency=10kHz dutyCycle=80 - nebudu popisovat, to bych Vás urážel...). Naskriptování jakékoliv sekvence například v pythonu s knihovnou pyserial poté bylo tak na minutku bez jakýchkoliv zádrhelů.

Úplně nejlepší však bylo, jak snadno šlo původní "HMI" funkcionalitu napojit na tato rozhraní. Stačilo zobrazit slider, který místo doplňování a zasílání nějaké generické zprávy měl nadefinovou akci například jako PWM frequency=%d a posunutím slideru nastavujete frekvenci! K tomu se přidá slider nastavující dutyCycle, nějaké ty checkboxy a tlačítka pro detailnější parametrizaci PWM a z EasyTermu se záhy stává PWM generátor s ovládáním přes dotykový displej! Obdobné šlo aplikovat i na ostatní rozhraní. Jednou je potřeba signálový generátor, poté vyčítač I2C obvodu s kreslením grafu na základě hodnoty určitého registru a tak dále... Vzhledem k podpoře "listování" mezi stránkami layoutů lze mít tedy na první stránce layoutu signálový generátor a po přepnutí na stránku vedle onen "HMI" kontrolní panel pro libovolná zařízení.

EasyTerm jde do světa

Poslední fáze přišla po uvědomění si, jak mocný nástroj vzniknul (skromnost stranou...). Následující činnosti se již týkaly zejména zpřístupnění EasyTermu ostatním. FW byl vylepšován, kam až fantazie sahala, HW iterován do úplné spokojenosti. Zahájena byla tvorba manuálu. Aby se i ostatním stala práce s EasyTermem co nejkomfortnější (listovat manuálem prostě nebývá zábava!), byla stvořena aplikace CmdBuilder, kde se finální příkaz složí vyplněním formulářů. Pro ty, které láká využití EasyTermu jakožto onoho "multitoolu", se vytvořila sada layoutů (v zásadě jen soupis předpřipravených "příkazů"). Takže onen dotykově ovladatelný PWM generátor či mnoho dalšího získáte obratem po odeslání již "předpřipravené" sady příkazů. A aby to bylo vše jak se patří, HW byl ocertifikován na EMI/ESD v certifikované zkušební laboratoři. Takže pokud máte zájem, můžete jej mít i vy. Zprvu pouze pro Českou republiku, časem pro Evropu - a snad brzy i pro celý svět!

Případné dotazy odpovím osobně a rád na support@7-tech.net

Přeji šťastný vývoj!

Ing. Miroslav Šíma