Aktualizováno v březnu 2019

      
 

   Základy programování - úvod do programování sériové komunikace
 
Posílání povelů do Icom IS-7200

Rádio Icom IC-7200 je vybaveno USB konektorem. Na USB rozhraní najde náš desktop externí zvukovou kartu a převodník USB to Serial. Po sériovém portu můžeme do TCVRu posílat povely a ze sériového portu můžeme číst stavy TRXu. Obvykle za nás komunikaci vyřešili autoři komunikačních programů. Např. program wsjt-x komunikuje s rádiem po tomto portu.

Naším úkolem je nakreslit jednoduchý program, na kterém pochopíme princip protokolu, který používá Icom a vyzkoušíme si do rádia posílat povely. Komunikace rádia Icom používá obvyklou logiku. Princip povelování pochopíme z tohoto obrázku (z manuálu Icom):

Zařízení, pro které píšeme program, se nazývá Controller. Náš kontrolér bude posílat sadu bajtů po stisknutí tlačítka. Data bude z rádia vyčítat po stisknutí jiného tlačítka, které spustí příkazy k vyčtení bufferu.

Všimněte si, že prvními bajty jsou tzv. preamble code (hexadecimálně FE FE), následuje adresa rádia (pro Icom 7200 je to 76 hexadecimálně), následuje adresa kontroléru (standard je E0), potom se posílá číslo povelu (Command Number) a tzv. Sub command, následují nastavovaná data a celý povel je zakončen tzv. koncem zprávy (End of message FD).

Významy bajtů jsou uvedené v manuálu na 4 stránkách, lze stáhnout zde.  

Princip řešení

Pomocí komponentů NumericUpDown budeme volit hodnotu bajtů v povelu. Pomocí nevizuální komponenty SerialPort budeme komunikovat s TCVRem. Spuštěný program vypadá takto:

Program během návrhu

Klíčovými komponentami jsou nevizuální SerialPort1 a vizuální NumericUpDown1 až  NumericUpDown32 (16 na nastavení povelu, 16 na čtení po bytech). U sériového portu se obvykle nastavuje číslo COM (zde COM12, tam je Icom), baudová rychlost, počet datových bitů (použito 8), počet stopbitů (1), parita (není použita), handshaking (není použit):

Základní příkazy

Vyčtení bajtů z NumericUpDown do tzv. pole bajtů a odeslání do portu metodou SerialPort1.Write je zde:

Vyčtení bufferu pomocí cyklu z pole bajtů a zapsání do textového pole jsem dělal takto:

Závěr

Prográmek pro Windows lze stáhnout tady. Projekt pro Visual Basic, se zdrojovým kódem je zazipovaný zde.

Poznámky:
1. Icom používá ke komunikaci mezi kontrolérem a transceiverem jednoduchého protokolu pro sériovou linku, který má ve své struktuře hlavičku (preambuli), adresovací identifikátory pro transceiver i kontrolér, strukturu povelu, která se skládá z příkazu a podpříkazu a datovou část, která nese informaci o parametru, který chceme nastavit. Na konci je znak, podle kterého poznáme konec zprávy.
2. Osobně používám stejnou koncepci protokolu pro svá zařízení.
3. Adresace umožní povelovat více zařízení. Pokud zařízení přijme zprávu se svou adresou, provede povel a odpoví. Pokud přijme zprávu s cizí adresou, povel ignoruje a nedělá nic. Já jsem takto míval na stejném sériovém portu transceiver, přepínač antén a externí tuner.
4. Jednodušší protokol používá např. Kenwood. Protokoly Yaesu a dalších jsem nestudoval.

Co umíme a jak dál?

1. Umíme na našem desktopu (notebooku) otevřít vývojové prostředí pro Windows (Visual Basic), Linux (Gambas), pro Windows, Linux a macOS (placené XOJO), použít vizuální komponenty a nakreslit wokna našeho programu.
2. Umíme napsat imperativní procedury ve Visual Basic (Gambas Basic, XOJO Basic), použít nevizuálních komponentů pro časování a pro komunikaci (přes počítačové sítě, po sériovém portu do mikropočítače přístroje).
3. Umíme zapsat a číst informace ze/do souboru. A pamatovat si tak např. konfigurační data.
4. Umíme v PC sehnat systémový čas, zeptat se, jaký je den, kolik je hodin. Umíme volat potřebnou systémovou funkci, např. matematickou. Umíme použít syntaxi pro metodu třídy.
5. Umíme jednoduché testování proměnných, alespoň jeden příkaz tzv. cyklu, umíme strukturovat příkazy do jednoduchých procedur.
6. Neumíme zatím napojit náš program do databáze a strukturovaně ukládat, číst data, dělat dotazy do relačních databází, atd. To je však samostatná disciplína, navíc natolik popularizovaná a právě k takové činnosti snad vedou kroky všech učitelů programování. Naše vývojové prostředky jsou vybavené pro práci s alespoň jedním databázovým systémem. A to i ty, které jsou zcela zdarma.

Během několika málo lekcí jsme schopni vymyslet a napsat si jednoduchý a užitečný program pro desktop, který umí komunikovat. Podle mého názoru právě teď přišla doba, kdy začneme studovat podrobně, struktury datových typů, proměnné, funkce knihoven, metody objektů a vlastnosti programovacího jazyka. O tom bude také několik mých dalších článků. Budou stručnější a zaměřené na použitý princip.

V komunikačních věcech bych rád, až najdu nějaký čas, třeba ve vlaku, uvedl tato témata:

a) Příklad sériové komunikace s přístrojem, do kterého jsme vetknutli mikropočítač PICAXE (Picaxe se programuje bez HW programátoru s použitím jazyka Basic). Programování PICAXE a komunikace PICAXE je založena na použití sériového portu. Práce je s tím velice jednoduchá.

b) Příklad sériové komunikace v Linuxu.

c) Příklad TCP/IP komunikace v počítačových sítích. Vysvětlím: Mám trvale zapnutý jednodeskový SBC (Single Board Comp) velikosti kreditky. Na USB disku mám Terabajtové úložiště dat a v jeho eMMC paměti RAM běží webový server se stránkami mého intranetu a extranetu, vidím na nich své rozpracované projekty, časopisy a věci ke čtení, desky plošňáků, výkresy, náčrty, katalogové listy, atd. Také tam mám stránky se stavy (telemetrickými daty) některých zařízení, která mě zajímavý. Mimo serverů ftp (úložiště), http (webové stránky) mi tam běží TCPserver, který naslouchá. Můj SBC je zapojen na lokální síti LAN (kde už běží nepřetržitě několik měsíců bez restartu). Router sítě běží na veřejné IP adrese a právě s tímto jediným SBC je Internet propojen. TCP server je tedy schopen naslouchat na svém portu z internetu a přijímat povely z internentu. Pokud přijme správný povel a vyhodnotí ho tak, nedělá nic jiného, než že ho přeloží a pošle přes TCP klienta do jiného mikropočítače s TCP serverem, ale to se děje na LAN síti. Takový mikropočítač může být např. levné Raspberry zero, které povel přijme a vykoná. Shrnuto - s tím, co jsme se během pár lekcí asi za měsíc naučili, umíme si udělat např. takový "router povelů" z internetu a povely posílat tam, kde budou vykonány. Podotýkám, že povely mých zařízení jsou jednoduché, typu zapni, vypni, zrestartuj, spusť sekvenci časovačů, změř a pošli na web, změň konfiguraci v konfiguračním souboru (a tím i algoritmus), atd. atd. ...
 

 
 

Zpět na obsah


TU 73, Mira, ok1ufc