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.

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

 

 

   TU 73, Mira, ok1ufc