OK1UFC

 

Rozhraní CI-V a CAT u rádií Icom a Yaesu

Poslední aktualizace 2026   


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

   

 

   TU 73, Mira, ok1ufc