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. ...
|