|
Všeobecně
Čas od času zjistíme, že ergonomie ovládání transceiveru nám zcela
úplně nevyhovuje a začneme se zajímat o ovládání rádia z PC. Což je
můj případ. Základním předpokladem je pochopit strukturu příkazů a
můžeme začít s pokusy nebo s napsáním vlastního, ergonomického a
přehledného programu, který bude náš transceiver řídit přes rozhraní
CI-V (Icom) nebo CAT (Yaesu).
Odlišnosti mezi CI-V Icom a CAT Yaesu
Jak rádia Icom, tak Yaesu používají pro komunikaci s PC sériový port.
Předpokládám, že čtenář zná základní práci se sériovým portem, které
spočívá v instalaci ovladače a v nastavení základních parametrů, jako
je zjištění názvu portu (např. COM7), nastavení baudové rychlosti,
počtu bitů, atd. Toto není předmětem článku.
Do sériového portu jsou odesílány bajty z PC nebo z portu čteny bajty, které
odeslal transceiver. Program v PC řeší několik základních věcí.
Pokud
si pro tuto část popisu zjednoduším úlohu na tři základní věci
(principy), tak náš pokusný program v PC, který může vypadat podobně pro Icom i
Yaesu (printscreen) takto:

Na obrazovce každého programu jsou ovládací prvky.
První základní věc (1. princip) je, že kliknutím na
ovládací prvek se vytvoří povel, který lze použít k řízení rádia,
například zapnout atenuátor nebo poslat hodnotu kmitočtu do VFO-A.
Druhá základní věc (2. princip) je, že povel
převedeme na předepsanou posloupnost bajtů, kterou umí rádio vykonat.
Třetí základní věc (3. princip) je, že náš program
umí posloupnost bajtů poslat vyhovujícím způsobem skrz sériový port.
Filosofie Icom i Yaesu se v
ovládání přes sériový port liší ve všech třech základních principech.
Společné zůstává pouze to, že odesíláme (nebo přijímáme) bajty skrz
sériový port.
Mým prvním rádiem od Icomu byl
model IC-706 Mk2G, jehož množina příkazů CI-V byla velmi malá, pro
ilustraci lze stáhnout zde. Icom
dodržoval filosofii zpětné kompatibility. Což znamená, že příkazy
nejstarších modelů byly s novými typy zachovány, ale množina příkazů
se rozšiřovala o nové příkazy (pro
ilustraci lze stáhnout referenční manuál CI-V pro IC-7300 MK2 zde). Totéž nelze tvrdit o filosofii Yaesu.
Neznám podrobnosti, avšak s velkou pravděpodobností se příkazy liší
typ od typu rádia. Množinu příkazů CAT pro model FT-710 lze rovněž pro
ilustraci stáhnout zde. Z
příruček výrobců o CI-V nebo CAT zjistíme, že Icom své povely
strukturuje přímo jako posloupnost bajtů. Yaesu strukturuje (a také
publikuje v příručce) své povely jako posloupnost znaků (řetěz,
string). S ohledem na technickou podstatu sériového portu jsou však v
obou případech povely přenášeny jako posloupnosti 8 bitů (1 bajt), a
to bajt po bajtu. Takže programy pro CAT (Yaesu) a CI-V (Icom) se
budou lišit v použité metodě, tedy ve způsobu, jak bajty vyrobíme
(vygenerujeme) a seřadíme. Bohužel to však není úplná informace, ale
to už předbíhám k popisu 3. principu u Yaesu. Yaesu vyžaduje pro
přenos bajtů nepřerušovaný stream a také malou prodlevu (nevím přesně,
pravděpodobně desítky až stovky ms) mezi jednotlivými odeslanými
povely.
1. princip Icom: Po kliknutí na ovládací prvek programu musí
dojít k naplnění proměnných, které reprezentují jeden každý přenášený
bajt, a to
hodnotami v souladu s příručkou CI-V.
1. princip Yaesu: Po kliknutí na ovládací prvek programu musí
dojít k naplnění řetězce znaků. Příklad řetězce (také viz níže): "FA014074000;"
znamená, že povel "FA" znamená, že se nastaví hodnota pro VFO A,
číslice "014074000" reprezentuje kmitočet 14.074 MHz v předepsaném
formátu a středník ";" znamená konec příkazu. Jiný příkaz má
tvar například "RA01;" a tento příkaz by provedl zařazení 6 dB
atenuátoru u FT-710. 2. princip Icom: Pokud
proměnné, které jsme naplnili v předchozím kroku a seřadili v
předepsaném v pořadí, máme hotovo.
Poznámka: Předepsanou posloupnost bajtů (protokol) Icom definoval
jako specifický význam konkrétních bajtů a jako pořadí bajtů - viz
referenční příručky Icom CI-V. Princip je zřejmý také z tohoto
obrázku. Protokol obsahuje povinnou preambuli (bajty FE FE), adresu
zařízení (bajty 76 a E0), bajty příkazu (command a subcommand 1A a 04)
a znak konce příkazu (FD):

Abych protokol Icom pochopil a hlavně si relevantním způsobem
protokol v reálu vyzkoušel, napsal jsem si asi před 20 roky pomůcku,
jejíž obrazovku jste právě viděli.
Je ke stažení zde, jako soubor
Serial_To_Icom.exe.
2. princip Yaesu: V předchozím kroku jsme vyrobili řetězec s
povelem. Ten musíme převést na posloupnost bajtů. Toto uděláme pomocí
metody, kterou používá náš vývojový prostředek na psaní programů
(třeba Visual Studio), ve kterém si píšeme program. Například pro
Visual Basic ve Visual Studiu jsem našel následující metodu.
První řádek deklaruje proměnnou text jako String a dosadí mu hodnotu, tedy náš
povel "FA014074000;" a druhý řádek deklaruje proměnnou
bytes () a
naplní ji posloupností bajtů, které získá systémovou funkcí (metoda
GetBytes(text)) z hodnot
řetězce text:
Dim text As String = "FA014074000;"
Dim bytes() As Byte = System.Text.Encoding.ASCII.GetBytes(text)
3. princip Icom: Máme posloupnost bajtů. Tak ji proženeme skrz
sériový port do rádia. Instrukce vypadají takto:

Nejsem programátor. Proto je posloupnost instrukcí taková, jaká je.
Windows a framework .NET nemilují, pokud se pokusíme otevřít port
dvakrát po sobě. Ale nevadí jim, pokud port dvakrát po sobě zavřu. Tak
port jednoduše před každým otevřením zavírám (jako vidlák).
Programátor by port testoval, zda je otevřený nebo zavřený a podle
výsledku provedeného testu by se zařídil. Jako amatérský
programátor-vidlák bych to asi taky uměl, ale vidlácký způsob se mi zdá
jednodušší.
Skrz sériový port odesílá program bajty bajts
pomocí instrukce SerialPort1.Write(bajts, 1, 11), a to bajts(1)
až bajts(11), jejichž hodnoty jsme naplnili v prvním kroku.
3. princip Yaesu:

Opět zavírám a otevírám před použitím port SerialPort1. Další
instrukce převede textový řetězec Povel na bajty. Rádio Yaesu
má jednu vlastnost, která mi zamotala pořádně kebuli. Když jsem
experimentoval s prostým odesíláním bajtu po bajtu skrz sériový port,
tak to prvně šlo vždycky, podruhé jen někdy a opakovaně obvykle už to
nešlo vůbec. Moje FT-710 si zablokuje na čas port, pokud nepřijde
příkaz ve správné posloupnosti nebo správný příkaz. Takže začalo
experimentování a nakonec jsem začal odesílat posloupnost bajtů jako
BaseStream, musel jsem použít funkcionalitu BaseStream.Flush,
aby proud bajtů odešel celý. A před uzavřením SerialPort1 jsem musel
použít metodu Threading.Thread.Sleep. Používám nastavení na 300 ms,
asi by stačilo méně, např. 100 ms, abych do Yaesu necpal něco
rychleji, než Yaesu stačí zpracovat a nezablokuje se komunikace.
Uvedené kódy spolehlivě přenášejí bajty pro ovládání tcvru Yaesu skrz
sériový port z Windows.
Příklad kódu pro čtení ze
sériového portu, v příkladech nejsou použity, ale v jiných
příkladech (třeba čtení S metru) se mohou hodit:
 Příklady
jednoduché struktury povelů Yaesu:
Vypnutí předzesilovačů (tzv. režim IPO, povel má tvar "PA00;"
procedura Posli_povel() byla právě popsána výše):

Povel k nastavení frekvence VFO-A:

Příklady pokusných prográmků (exe soubory, nikam se neinstalují)
k vyzkoušení, ale vyžadují, aby systém Windows měl nainstalován
odpovídající Framework.
Stahujte pouze, pokud s takovými programy umíte dělat, rovněž tak s
nastavením antivirových programů, které nemají soubory exe v lásce a
vždy na vlastní nebezpečí:

Stáhnete po kliknutí: Icom, pro
Yaesu.
Příklady zdrojových textů s použitými algoritmy, vyžadují Visual
studio 2010 nebo novější:
Stáhnete po kliknutí: Icom, pro
Yaesu.
Hlavní důvody, proč se trápit s CAT nebo s CI-V:
1. Vyžadujeme lepší ergonomii, nechce se nám stále lézt do menu rádia,
hledat a nastavovat položky, které jsou často dobře utajené. Vždyť lze
do rádia nasypat potřebné nastavení na jedno kliknutí.
2. Nevyhovují nám dostupné programy, které jsou obvykle graficky
hezké, plné ovládacích prvků, ale, my chceme pro daný účel nástroj
jednoduchý a přehledný.
3. Chceme-li pochopit architekturu a způsob ovládání našeho rádia,
nejlépe ji pochopíme, pokud poznáme strukturu a filosofii CAT nebo
CI-V povelů. Jen tak využijeme jeho možností.
Takže, já jsem si pro využití každého rádia dělal své vlastní
udělátka. Nikoliv jedno, ale celou řadu a používal jsem vždy to
konkrétní, které mi vyhovovalo pro daný účel. Jednou jsem potřeboval
přepínat po pásmech, podruhé měnit šířky pásma (Yaesu FT-710 má jen
jedno tlačítko NAR, chybí mi Twin PBT a kvůli šířce pásma se musí do
menu). Jindy jsem potřeboval do rádia nasypat celou řadu parametrů
nebo používat neobvyklé povely, když jsem zkoušel na 50 MHz převaděče.
Zrealizoval jsem si například jednoduché prográmky, které si nevadí s
programem WSJT-X. Kmitočet, mód USB, PTT, to vše řídí WSJT-X. Ale z
mého jednoduchého programu si řídím předzesilovače, atenuátory, šířky
pásma, split apod.
Závěry a poznámky
1.
Používání sériové komunikace mezi PC a rádiem s využitím instrukcí CAT
a CI-V je velice jednoduché, pokud principy pochopíme a naučíme se s
tím dělat.
2. Prosím, neposílejte mi ohledně programování komunikace skrz CAT
nebo CI-V žádné dotazy, náměty nebo připomínky. Pro mojí vlastní
potřebu jde o uzavřenou záležitost, činnost není předmětem mého
dalšího zájmu a v žádném případě nemám ani čas a ani chuť cokoliv
kolem této problematiky řešit. Opravdu berte tento článek pouze jako
námět a příklad s uvedením rozhodujících detailů, jak jsem komunikaci
mezi Windows PC a transceiverem Yaesu nebo Icom vyřešil já.
|