|
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.
Příklad zkoušky kódu v Python 3.14:

Poznámky:
1. Python musí mít nainstalované path. Doporučuji udělat při
instalaci.
2. Python musí mít naintalovanou knihovnu pro práci s porty
COM. Ta se instaluje z Microsoft Power Shell příkazového řádku.
3. Po předchozích krocích
už půjde udělat import serial. Knihovna import time se neinstaluje,
byla součástí Pythonu.
4. Kód, který je viditelný v okně Python Interpreteru jde spustit a
odešle skutečně do COM11 řetězec "FA026985000;".
5. Kód lze napsat v normálním texťáku a uložit s příponou .py;
uvedený příklad skriptu si můžete stáhnout
zde. Když na soubor kliknete, skript se provede a na port se
odešle string bajt po bajtu.
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, poznámky, zkušenosti
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. Pokud dodržíme konkrétní zásady, můžeme klidně ovládat transceiver
Yaesu FT-710 z programu WSJT-X, připojeného např. k portu COM3 a
všechny ostatní funkcionality, které WSJT-X neřeší, lze ovládat z vlastního programu, podobného tomu,
který jsem zde popsal.
|
Základní zásadou pro takové použití je, aby náš program
neotravoval FT-710 častým nebo periodickým odesíláním povelů na čtení čehokoliv z
rádia. Při takové činnosti se může zablokovat komunikace mezi TCVRem a
druhým programem. Z tohoto důvodu je aplikace, kterou si můžete
stáhnout (odkaz výše) napsaná tak, že
povely se odesílají do transceiveru až po kliknutí na tlačítko
"ENTER". Nápodobně, údaj o nastavené frekvenci VFO A se stáhne vždy
pouze jednou, a to až po kliknutí na malé modré tlačítko "R"
(Read) - obrázek vpravo (jedna z verzí aplikace, která čte vybraná
data z TCVRu).
Další blízkou
verzi (v1.04) CAT controlleru lze stáhnout zde. |
 |
|
|
|
|
Minimalistické pojetí controlleru
Minimalistické provedení má smysl v
případě, že naši FT-710 řídíme například z programu WSJT-X. Ten
nám zajistí přepínání pásem/kmitočtů a další funkcionality (např.
PTT). Náš mini controller zase poslouží k přepínání IPO/AMP a ATT,
k přímé volbě vysílacího výkonu TX Power v několika skocích a k
zapnutí/vypnutí rádia.
Na obrázku vpravo je příklad mého pojetí takové aplikace, která si
vystačí jen se 4 položkami v základním menu. Příklad ukazuje
rozbalené menu na položce IPO.
Protože jsem měl všechny funkcionality odladěné z předchozí
tvorby, povely řádně vyzkoušené, měřil jsem dobu, za kterou jsem
schopen takový prográmek vyrobit a odladit. Trvalo mi to 90 minut
času, a to včetně doplnění odstavce do webové stránky.
Příklad mini lze stáhnout (zip) zde.
|
 |
|

Na obrázcích jsou kvůli porovnání
velikosti obě varianty zobrazené vedle sebe.
|
 |
Příklad použití controlleru na PC s více obrazovkami - hlavní obrazovka
se spuštěným WSJT-X:

Druhá (větší) obrazovka - nahoře waterfall a dole spuštěný
controller (nějaká starší verze):

Pohled na detail našeho školního prográmku controlleru:

Náš controller na odesílání povelů do Yaesu FT-710 je jednoduchá
aplikace s okny Windows. Okno po spuštění obsahuje základní menu,
ze kterého se dají dělat základní nastavení s VFO, režimem provozu
(USB, LSB, AM, FM-N ...), přepínat pásma, nastavovat IPO a atenuátory,
šířky pásma, RF Gain/Squelch, RF Power. Pokud hodnotu některého z
parametrů potřebujeme nastavovat precizně, otevřeme si další malé okno
s příslušnými ovládacími prvky (viz obrázek, okna Power a
Squelch. Pokud mi stačí několik typických hodnot nastavení, pak je
mám přímo v menu na jedno kliknutí. Naprosto jednoduchou aplikací jsme
si jednoduše zpřístupnili funkce, které se už výrobci rádia na
ovládací panel nevešly, ale nám se zdají být potřebné.
|
3. Mě u FT-710 asi nejvíc chybí prvek
pro nastavování šířky pásma filtru.
Teď ho mám k dispozici - viz obrázek vpravo.
Poznámka: Při provozu FT-8 nepatří k
výjimkám, že se nám s úpravou šířky pásma vylepší přijímaný report
slabého signálu.
Například RSTR se změní u občas dekódovaného signálu z -29 dB na
pravidelně dekódovaný signál s RSTR = -24 dB.
4. Když už jsem si hrál s povely Yaesu,
cvičně jsem si napsal pár instrukcí na vytvoření povelu, který mi
nastaví pro požadovaný digimód (RTTY, PSK, MFSK) a požadované
pásmo (od 160 m do 4 m) kmitočet oscilátoru.
|
 |
|
|
|
|
Poznámky k psaní jednoduchých
aplikací:
a) Zde popsané jednoduché aplikace byly vytvořené pomocí starší
verze Visual Studio 2010 jako aplikace Windows Forms. Aplikace
jsou jednoduché, jejich vytvoření je jednoduché, učení je
jednoduché a pod Windows 10 a Windows 11 fungují spolehlivě.
Hlavně však neobsahují kraviny, které nikdy nepotřebujeme.
b) Já obvykle používám jeden ze dvou programovacích jazyků (Visual
Basic nebo Visual C#); zde uvedené
aplikace byly vytvořené pomocí jazyka Visual Basic. Pokud se vám
lépe pracuje ve Visual C#, snadno si
převedete použitý kód. Oba jazyky však vytvoří aplikaci stejně
výkonnou a se stejnými vlastnostmi. Snad popis procedur v jazyce
Visual Basic se mi zdá kratší, než popis stejných procedu (void) v
jazyce Visual C#. Skriptovací jazyk
Python lze samozřejmě také použít. Vyžaduje odlišné myšlení.
Některé klíčové skripty jsem si v Pythonu vyzkoušel, ale napsat
celou aplikaci by mi zabralo podstatně víc času.
c) Kód aplikací je opravdu krátký, jedná se opravdu o program na
pár řádků. Zde si můžete v pdf
zobrazit celý kód mini controlleru. Se všemi poznámkami,
deklaracemi a se všemi procedurami povelů se vejde na 4 stránky.
d) Aplikace nám pomáhají s ergonomií a s komfortem obsluhy
TCVRu. To byl náš hlavní cíl.
e) Druhotným efektem psaní vlastní aplikace je skutečnost, že nás
tato činnost donutí přemýšlet o filosofii ovládání rádia přes CAT
rozhraní, rychle pochopíme a naučíme se povely používat. Mnohem
rychleji, než při suchém
čtení manuálu CAT. A proč rozhraní CAT (nebo CI-V) nepoužívat,
když už je tím rádio vybavené?
f) Vytvořením ergonomického controlleru rádia si nejlépe ověříme,
jaké provedení aplikace nám nejvíc vyhovuje pro naše účely, pro naše
použití. Rovněž si ověříme, zda jsme schopni efektivně ovládat
celé rádio z PC, aniž bychom použili jediné otočení knoflíku nebo
jediný stisk tlačítka na panelu. Vytvoříme, ověříme a vyzkoušíme si nejen svou
aplikaci, ale současně získáme i vlastní názor na to, co je pro nás dobré
a co rozhodně odmítneme, protože máme vlastní lepší řešení.
|
|
|
|
|
5. Zkoušení právě napsaných programů pro
CAT
Ke zkoušení komunikace na CAT se mi
osvědčil terminálový program Hercules, který možná už používám
déle než 15 let.
Na obrázku dole (jde o printscreen z
FT-710 CAT Operation Reference Manual) vidíte, jak se i v lepších
rodinách vloudí drobná chybička. Zrovna v takovém případě se pak
programátor-amatér diví, proč rádio nezahájí ladicí cykl tuneru.
Použije však terminál Herkules, Zamyslí se nad tím, co se děje,
cosi vyzkouší a je doma.
Na obrázku vpravo vidíte povely odeslané přes CAT do Yaesu.
Všimněte si nastavení terminálu. Musí být stejné, jako v našem
programu. Hercules terminál připojuji při prvních zkouškách k mému
programu přes virtuální sériový kabel COM11-COM12. V programu
nastavuji COM11 a na Herkules terminálu COM12. Nastavení je:
a) Jméno portu: COM12
b) Baud: 38400
6. 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, ani nejsem profesionální programátor a v žádném případě nemám
ani zájem, ani čas a ani chuť cokoliv
kolem problematiky ovládání rádií přes CAT řešit. Berte tento článek jako
námět a příklady s uvedením rozhodujících detailů, jak jsem komunikaci
mezi Windows PC a transceiverem Yaesu nebo Icom vyřešil já. |
 |
|
|
|
|
 |
|