OK1UFC, České Budějovice, JN78fx, dne 23. září 2017:

 
Příslušenství řízené z PC aplikace

Úvod

V předchozím článku jsem se pustil na tenký led a ukázal příslušenství (dálkový tuner, anténní přepínač, mikrovlnný oscilátor, ...) radioamatérské stanice řízené z PC. A uvedl jsem v něm, že je třeba mít alespoň základní dovednost o tom, jak jednoduchou aplikaci rychle napsat, neutratit majlant za vývojové prostředky a nestrávit mládí bohapustým učením něčeho, co nerostlo na poli, ale vymysleli to lidé.

Specifikace cílů

Jak jsem už psal, nejsem programátor, nikdy jsem se programováním neživil, nejsem mladý, abych se pořádně učil složité věci, které možná budou za 2 roky vypadat jinak a navíc je nebudu potřebovat.

Takže prvním a nejdůležitějším cílem je, abych byl schopen své myšlenky po krátkém učení napsat třeba za hodinu (nebo večer, když se nedaří).

Další 4 cíle:
- napsat to ve vývojových prostředcích, které jsou pokud možno zadarmo nebo levné
- program musí vypadat tak, jak jsme zvyklí ve Windows, tj. jednoduchá okna, kde jsou tlačítka nebo jiná jednoduchá řídítka
- program musí mít pár zásadních funkcionalit, hlavně si musí umět nastavit do paměti nastavení nebo stavy a musí být schopen odeslat a přijmout data (bajty) ze sériového portu, který se používá pro komunikaci s kontrolérem
- program musí běžet z Win XP, Win7 a Win10 a to je pro začátek opravdu všechno ...

Slepé uličky, které mě nikam nedovedly nebo se mi po nich nechtělo jít

Do slepé uličky mě dostal Microsoft. Naštěstí jsem se z ní dostal, ale o tom je další článek.
Jsem technik. Ve škole (před 40 léty) nás učili programovat ve Fortranu a taky v Algolu. A  také jsem se tam tenkrát doslechl o jazyku Basic. Ten byl také na 8 bitovém gumovém prvním počítači, který jsem si tenkrát koupil (ZX Spectrum). Od té doby jsem si s Basicem vystačil a vyřešil téměř všechno. I když jsem realizoval své větší projekty v Pascalu a neodolal jsem laškování s C, C++ a nedávno i s Pytonem.

Našel jsem na webu levné a krásné editory a kompilátory Basicu. Několik jsem jich vyzkoušel a zjistil jsem, že nejsou pro mě. Zmíním alespoň Pure Basic. Cena dobrá. Grafický designér byl krásný. Příklady vzorových kódů krásně strukturované, uspořádané, pochopitelné. Kompilátor pracoval rychle, finální exe soubory byly malé, nevyžadovaly žádné runtime knihovny, na PC prostě běžely. Kdybych se živil programováním desktopových aplikací nebo výukou programování asi bych se nechal přesvědčit. Jenže moje návyky jsou jiné - viz další kapitola.

Moje špatné návyky 

1. Potřebuji kliknout na ikonu a spustit rychle vývojové prostředí, otevřít rozdělaný projekt a začít makat.
2. Potřebuji sáhnout po komponentě, kterou naprogramoval někdo jiný profesionálně a umístnit ji do okna programu. To všechno graficky. S komponentami musí jít hýbat, měnit velikost, barvy a celou řadu dalších vlastností.
3. Komponenty jsou v grafickém prostředí také od toho, abych tam snadno nastavil událost, kterou má program provést. Třeba něco dělat po kliknutí myší. Vím, že je hezké, když se ze zdrojového souboru vygenerují krásná okna, tlačítka a další řídítka. Jenže je to práce, nikoliv zábava. Já se programováním neživím a tak jsem raději, když mi např. rozměry prvků vygeneruje vývojový prostředek. A tentýž prostředek mě dovede do těla procedury, kam napíšu už jen kousek kódu, třeba, že se má něco nastavit, změnit barva, spustit. A musí to jít jednoduše.

A tohle málo, bohužel nesplňoval žádný z vývojových prostředků, které jsem nedávno vyzkoušel. Proto jsem zůstal u produktu Microsoft Visual Studio, přestože od jejich manažerů očekávám, že nové  verze budou stále a stále jiné, stále a stále víc nenažrané a stále a stále složitější.

Příklad 

Dost už bylo povídání. Program na řízení tuneru jsem napsal v roce 2012. Ve Visual Basic 2008 Express, který byl zadarmo.

Program vypadá po spuštění takto - viz vpravo. Když máte naladěno a uloženo, vyberete si jedno ze 4 tlačítek (modré, červené, hnědé a zelené) skupinu pamětí.

Já používám modrá pro CW a digi
 (vlevo, začátky pásem), zelená pro SSB DX (konec) a dvě jsou pro provoz mezi tím, když anténa ladí ostře.

Po kliknutí se obarví stejně tlačítka pásem. Takže se s tím dělá tak, že se vybere banka a vybere se pásmo. Pokud bylo dříve naladěno, program nasype tři bajty do kontoléru tuneru. Jeden bajt nacvaká 8 relátek indukčností, druhý bajt nacvaká 8 relátek s kondenzátory a třetí bajt přepne jedním bitem kondenzátory tak, aby byly před nebo za indukčností (tedy zvolí CL nebo LC článek).

Je to jednoduché, funkční

Pokud si chcete rozhraní aplikace na svém PC vyzkoušet. Můžete si stáhnout exe soubor s programem. Je to jen ukázka, nic to do žádného portu neposílá. Stačí to nakopírovat do nějakého prázdného adresáře a  s ním to potom smazaat. Program si vytvoří v tomtéž adresáři ještě jeden soubor *.dat, do kterého si zapisuje nastavení bank a pamětí. Ničím dalším vám PC nezasere, do registrů nic nepíše a zbavíte se toho smazáním obou souborů, až vás to omrzí.

Jiné verze ...
Zde popsaná koncepce tuneru byla vyrobena v mnoha modifikacích. Předchozí popsaná modifikace sloužila u symetrického tuneru (pro antény napájené žebříčkem), jiné verze, na obrázku spuštěná z Windows 10 - viz níže, slouží u LW a vertikálů. Byla napsána pro jiné množství pamětí, s jiným designem (ale podobným), s jinými komponenty pro ladění ....demo uživatelského rozhraní lze opět stáhnout a vyzkoušet.

Jak s tím dělá neprogramátor
Tak, jak jsem psal. Spustí vývojový prostředek. Když jsem psal tento článek, tak jsem ho spustil na starém a malém notebooku v hospodě, u piva a u námořního muzea v Rotterdamu. Vypadalo to takto nějak. Zaklikáme v Recent Projects na antenna_tuner:

Vývojové prostředí umožňuje do projektu vkládat formuláře (forms se říká těm woknům programu), do formulářů dávat různá tlačítka a jiná řídítka (komponenty):

Na obrázku nahoře je okno s řídítky ladění. Jak se s tím dělá? V hlavním okně kliknete v menu na položku "Ladění". Protože neladíte pořád, ale máte naladěno, uloženo a po zbytek života jen přepínáte pásma, přesto musíte občas anténu naladit. Po kliknutí ladění se otevře okno ladění, viz výše. Jde o tuner ruční, dálkově řízený. Postup práce je jednoduchý a tento:
1. Vybereme banku (modrou pro CW kraj pásma, zelenou pro SSB konec)
2. Dáme myš na řídítko C nebo řídítko L. Hned vidíme, že se zabarví proužek řídítka, program odesílá bajty do kontroléru, relátka cvakají, přepínají a my ladíme, což vidíme na TCVRu nebo měřiči VSWR. Tam, kde máme vyladěno nejlépe, klikneme. Data se uloží a můžeme hejbat s druhým řídítkem. Párkrát to zopakujeme, až docílíme nejlepšího VSWR, klikneme na pásmo a naladění je uloženo. Můžeme ladicí okno zavřít, pokud nebudeme ladit na jiném pásmu.
Tím jsme trochu předběhli. Tady jsem chtěl ukázat, jak se to vyvíjí (nebo snad píše?, programuje?) ve vývojovém prostředí. Jsme technici. Tak si dopředu rozmyslíme, co chceme. Chceme mít na každém pásmu vyladěno ve 4 bodech. To jsou 4 barevné banky našich naladění. Chceme mít naladěno na všech pásmech. To je 10 tlačítek (160 - 6). Chceme ladit indukčnost a kapacitu L článku. To jsou dvě řídítka. Ještě chceme přepínat typ CL a LC. Na to se mi nechtělo "utratit" další tlačítko a taky jsem si chtěl něco vyzkoušet. A vyzkoušel jsem si automatické přepínání typu článku. Když začnu po otevření okna ladit s indukčností, program přepne na LC článek. Když začnu ladit s kondenzázorem, program přepne na CL článek. Všimněte si detailu. Vedle okna formuláře s laděním jsem z menu otevřel okno "Properties". Tam jsou vlastnosti právě vybraného prvku. Já mám na obrázku vybrán Form2 a tabulka "Properties" je narolována tak, že do políčka "Text" umožňuje napsat text "Ladění - ukaž a klikni ...". Takto snadno nastavíte všechny parametry, které jde v době návrhu nastavit a které je třeba nastavit.

Komponenta musí však reagovat také na události, třeba na kliknutí myší:

Když klikneme na Form nebo na komponentu, editor (říkám mu tady vývojový prostředek) otevře stránku s kódem (děláme ve Visual Basicu, tak s kódem Basicu). A otevře ho tam, v místě, kde zrovna klikáme. To je milé. A právě v tom místě vidíme napsaný kus kódu, např. Private Sub ..... End Sub. To je tzv. Subroutine programu, kus kódu mezi těmi slovy Private Sub ... End Sub. Na obrázku jste viděli, že mezi prvním Private Sub ..... End Sub je napsáno jen About.Show(). To je kód, který po kliknutí otevře okno about  a v tom okně je cosi napsáno o tomto programu. U druhé Private Sub ..... End Sub je napsáno "banka =1", což znamená, že jsme vybrali první banku pro ukládání dat (modrou) a potom je tam několik řádků, které končí "....Color.Blue". To jsou příkazy, které nám obarví tlačítka pásem z jiných barev na modrou.

Ještě zmíním, jak Microsoft řešil nastavování více vlastností, např. položek menu. Na obrázku vidíte tzv. Collection editor:

Např. položky v menu se přidávají pomocí tlačítka "Add". Po přidání položky si vyplníte (vpravo vedle) tzv. ToolStripMenuItem. Všimněte si, že v poli text je napsáno "Ladění" a pod tím další vlastnosti (uhádnete, o co jde, hi) a pod tím je skupina Behavior, kde lze vyplňovat další vlastnosti o chování menu. Jednoduché, že. Tak hlavně, aby nám to programátoři nepošahali v dalších verzích editoru a hlavně, aby za to Microsoft nechtěl nehorázný prachy.

Další dovednosti a věci  

Jde mi o krátký článek. Vynechal jsem úmyslně dvě věci - posílání dat do kontroléru (i když jsem nakonec okopíroval kus kódu zde)

a ukládání dat do souboru .dat. Jde samozřejmě opět o jednoduché věci (na 1 až 3 řádky). Příkazy však mají víc parametrů. Pokud bude zájem, popíšu je jindy na další stránce. Dovednosti spočívají např. v tom, že budeme umět nastavit port COM. Já jsem baudovou rychlost, počet bitů, stop bity, paritu nastavil natvrdo. Ručně se nastavuje jen číslo  portu, např. COM7. To musíme udělat, protože zrovna nevíme, jaký COM přiřadí Windows právě zastrčenému převodníku USB-RS232.

Rovněž se musíme naučit alespoň v základech ovládat kompilátor a nástroje na ladění. Např. po napsání jedné nebo více řádek si neprogramátor, jako jsem já, potřebuje vyzkoušet, zda mu nový kus programu běhá. Viz k příkladu:

Pustil jsem si program, vyzkoušel z menu položku "Ladění". Otevřelo se pravé okno. Popojel jsem s ním, abych na okna viděl. Kliknul jsem si hnědou (nebo je to oranžová?) banku. Tlačítka dole zhnědla. Dal jsem myš na řídítko a popojel s indukčností. Kliknul jsem, hodnota se zmrazila. Dal jsem myš na řídítko s kapacitou. Popojel jsem, kliknul, ale to už znáte. Uložil jsem to do paměti pásma pro 40 metrů. Okno ladění můžete zavřít. Nebo nemusíte, to není důležité. V levém panelu kliknete na hnědou banku. I tady tlačítka zhnědnou. Kliknete na pásmo 40. Program vyčte z paměti hodnoty apošle bajty do kontroleru. Ten nacvaká relátka. A bude je tam držet, než kliknete na tlačítko "Neladit". Nebo, když začnete hejbat s řídítkama v panelu ladění. Proto ho raději skrývám.

Elegantní, že? Odborníci vám budou tvrdit, že pro neprogramátory. Ano mají pravdu. Jen v takto a podobně koncipovaném programu neprogramátor napíše funkční program dříve, než dopije jedno pivo (půllitr Pils měli) v hospodě. Včera jsem tam taky seděl. Dal si dvě piva. A ani za tak dlouhou dobu jsem nebyl schopen nastudovat a aplikovat programování událostí v jiném editoru, než byl tento. Namaloval jsem tlačítka, řídítka. Získal spoustu užitečného kódu. Jenže ty předdefinované procedury bych musel psát  do kódu ručně, se spoustou parametrů. Fuj, fuj, fuj. Proto, páni programátoři, pokud jste se to naučili během mnoha bezesných nocí, či na drahých kurzech programování, nesmějte se nám, líným technikům, radioamatérům. My jsme si místo toho zkonstruovali tuner. Byť jsme programovali jako "vidláci". 

   
Řízení mikropočítače z PC

Pokud máme alespoň mikrokontrolér s procesorem PIC, PICAXE nebo ATmega, který nám přijímá bajty ze sériové linky, můžeme ho trénovat. Máme čím.

Závěr

Chtěl jsem ukázat, že jde některé věci dělat jednoduše. A to i na stařičkém notebooku v hospodě, daleko od domova. Ale musíte mít ty správné  cajky. S hodinářským šroubovákem, který má "heft" od krumpáče, také hodinky neopravíte ....

Někde jsem četl, že dobrá metoda, jak se učit programovat, je napsat nějakou jednodušší hru. Asi na tom něco bude. Já jsem si zkusil napsat hračku, prográmek, který bude posílat instrukce do mého TCVRu Icom (a taky do Kenwooda, ale Icom má hezčí protokol). Funguje to tak, že se podíváte do manuálu, jak se třeba nastavuje šířka filtru, nacvakáte si instrukci v programu, pošlete do rádia a podíváte se, zda ji rádio provedlo. Takový program jsem psal už kdysi ve Visual Basicu, později jsem se učil dělat i s jinými jazyky ve Visual Studiu a nevynechal jsem ani Pyton, (včetně tkinter a wxpython, což jsou nástroje GUI pro Pyton). Moje první hračka, kde jsem si vyzkoušel ty vidlácké věci, jako vytvořit form, nacpat tam widgety (to jsou ty nesprávně zmíněné komponety), udělat binding, napsat kódy pro události mi k tomu posloužila. Šla spustit, trénovala moje rádio a vypadala takto nějak:

Jak píšu, nejsem programátor. A nikdy nebudu. Jsem na to starý a tak se pouštím jen do jednoduchých projektů, které potřebuji. To jsou třeba kontroléry, testery, pomůcky k měření, apod. Ale třeba to někoho z mladších hamů "nakopne" a vytvoří pár dalších udělátek, která se u staničky hodí.

Poznámka 1: Od dovolené, během které jsem napsal v Rotterdamském přístavu tento článek, uplynul asi měsíc. Během té doby jsem si něco přečetl o vývojovém prostředí americké společnosti xojo.com. Mohu říci, že mě prostředí dost zaujalo. Jde sice o placené (a dost drahé) nástroje. Umožňují však kompilovat vytvořené programy pro různé platformy desktopů, tedy nejen pro Windows, také pro MacOS, Linuxy, Rapsberry, ale také pro mobilní hračky a web. Zdarma lze po registraci stáhnout prostředí pro výuku a vývoj aplikací. Ty lze spustit jen na PC, kde je Xojo instalováno. Jde o nástroj s nádhernou strukturou helpů a nápověd a s velkým množstvím profesionálně napsaných komponent, mezi kterými nechybí komponenty pro práci s mnoha databázovými stroji, komponenty pro komunikaci, včetně seriového portu, samozřejmě, ale také pomocí TCP/IP a dalších síťových protokolů. První fungující jednoduchou aplikaci (zase tuner) jsem naklikal hned první večer po instalaci. Určitě budu tomuto nástroji věnovat nějakou tu stránku na webu.

Poznámka 2: Také jsem nainstaloval nové Microsoft Visual Studio 2017 Community (to je verze zadarmo, ale možná jen na chvíli). Nainstaloval jsem si IDE pro vývoj aplikací v jazyce Visual Basic a Visual C#. Také se s tím dá dělat. Bohužel, vadí mi, že instalace je dost rozsáhlá, řekl bych, obrovská. Po instalaci mi to příliš nefungovalo. Programy lze samozřejmě psát, ale nenainstaloval se správně Debuger. Asi nějaký "bug". Také jsem si všiml, že po ukončení napsaného programu se neukončí všechny procesy. Takže jsem jeden program 5x spustil, 5x ukončil a ve správci procesů jsem viděl 5 běžících procesů po jejich ukončení. U Microsoftu se nedivím, vše mají rozsáhlé, docela nepřehledné, s obrovským množstvím balastu. Takže spíš očekávám, že chlapci budou ladit. A aktualizovat, aktualizovat a aktualizovat. Jako u jejich Windows 10.

Poznámka 3: Pokud si stáhnete např. zde uvedené programy k vyzkoušení, pravděpodobně vám je zablokuje antivirus a označí je jako nebezpečné. To je další problém desktopových aplikací, Windows a hackerských aktivit. Antivirák samozřejmě bezpečnou aplikaci nerozezná od té škodlivé. A tak řve a prudí. Naprosto nesmyslně. Ale s tím nic nenadělám. Jsem jaksi smířen, že jednou to, co neprojde skrz Microsoft (nebo Google), nepůjde nijak nainstalovat nebo spustit. To to chlapci dopracovali ...

Dovětek z konce ledna 2018:

Bohužel, jak plynul čas, tak jsem dospěl k názoru, že s Microsoftem ztrácím čas. Přestože si uvědomuji, jak je důležité používat stejný šroubovák, jako v práci, stejnou židli, jako v práci, obecně stejné nástroje, jako v práci. Jenže MS zvolil marketing, který se mi nelíbí, obchodní politiku, která se mi nelíbí a přístup, který se mi nelíbí. Viz podrobnosti a důvody zde. Prostě nastal čas poohlédnout se po něčem jiném. Operační systémy jsem v několika PC nakonec nahradil Linuxy. Oblíbeným se stal Linux Mint. Poslední instalace nese krásné jméno Sylvia. Byl tedy čas začít kreslit programy (technik programy kreslí) v něčem jiném. Další milé překvapení bylo, že jsem našel celou řadu hezkých nástrojů ke kreslení programů pro Linux. Proto jsem nakreslil během týdne většinu svých řídících programů. Ukázka anténního tuneru je na obrázku vpravo. Kupodivu, vše šlo rychle. Naučil jsem se pracovat s designérem IDE, psát funkce a procedury v oblíbených jazycích (Basic, Python, C++), spustit kompilátory, udělat spustitelné balíčky a vykašlat se na produkty Microsoft. Které jsem tu, mimochodem, preferoval.
Jsem v etapě, kdy bych mohl všechny články o vidláckém programování technikem-neprogramátorem inovovat. Snad někdy :-)

 

 

TU 73, Mira, ok1ufc