Komendy CAT

Komendy CAT – to ściśle określone ciągi znaków alfanumerycznych lub zakodowane wartości, które możemy wysyłać do naszego radia (lub radio wyśle do naszego komputera), poprzez dedykowany port szeregowy. Oczywiście warunkiem koniecznym jest posiadanie przez radio wsparcia dla takich rozwiązań. W zależności od producenta radia, komendy sterujące nazywane są:

Yaesu – CAT (Computer Aided Transceiver) System
Kenwood – PC CONTROL COMMAND
Icom – Remote Control (CI-V)
Dla uproszczenia, na tym blogu nazywam je po prostu: komendy CAT Rozwiązanie (składnia komend) Yaesu i Kenwood jest bardzo zbliżona do siebie, dość czytelna.

Wszystkie skrypty na tym blogu oparte są o komendy YEASU. Składnia komend ICOM bazuje na kodach, i jest trudna do analizy wzrokowej. Po pierwsze – w zależności jakie masz radio, poszukaj w sieci (na stronie producenta) dedykowanego do niego zestawienia komend CAT.
Przykładowo:
dla FTdx3000 CAT OPERATION REFERENCE BOOK, wersja PL dzięki Krzysztofowi SP5KP na jego stronie
dla TS590(S) – PC CONTROL COMMAND Reference Guide  

Komendy CAT dzielą na kilka typów: Set, oraz Read/Answer
Typ SET – są to komendy-polecenia, wysyłane z komputera do radia. Radio,  odczytując z portu szeregowego wysłane (przez nasz program) polecenie typu Set, po prostu je wykonuje (np. ustawia określoną częstotliwość VFO A, załącza filtr Notch, przełącza antenę, itd.) i my, jako użytkownik radia, od razu w większości to „widzimy lub słyszymy”. Radio po otrzymaniu komendy typu Set nie wysyła zwrotnie do komputera  żadnej odpowiedzi.

Typ READ – są to komendy-polecenia, też wysyłane z komputera do radia, ale nie powodujące  ustawiania żadnych jego parametrów. Ich zadaniem jest poinformowanie radia jaką informację, (komendę) typu Answer ma zwrotnie wysłać radio do komputera. W uproszczeniu – są to komendy-pytania, np:  „Podaj mi zwrotnie, jaka jest częstotliwość VFOA?”  „Podaj mi zwrotnie, który port anteny podłączony jest pod odbiornik Main?”

Answer – to po prostu odpowiedzi trasceivera (wysyłane z Radia poprzez port szeregowy zwrotnie do komputera) po otrzymaniu w/w komendy typu Read.

Przykład,  na podstawie CAT REFERENCE FTdx3000: Tryb pracy – Operating Mode  – komenda MD_ _; opisana jest w dokumencie referencyjnym taką tabelką (strona 11 pdf):

znaki  P1 , P2 itd. (jako pojedyncze cyfry lub litery) w komendach określa się na podstawie prawej strony tabeli;
Dla komendy MD typu Set mamy dwa identyfikatory P1 i P2 przyjmujące wartości:
P1=0 (zawsze 0),
P2= wartości 1 do 9 lub A do D  (w zależności od trybu pracy transceivera / MODE)

Przykładowo:
Aby ustawić mode AM musimy wysłać z komputera do portu COM skojarzonego z TRX ciąg znaków:  MD05;
Aby ustawić mode CW – wysyłamy ciąg  MD03;
itd – polecam tzw. CAT Reference dla Twojego radia, które w większości wyglądają tak, jak poniżej:

I pamiętaj , że każda komenda CAT z list referencyjnych Yaesu/Kenwood zawsze kończy się znakiem ; (średnik)

WAŻNE:  Są komendy CAT, których nieumiejętne użycie może spowodować w najgorszym przypadku uszkodzenie Twojego radia. Zawsze miej to na uwadze. W szczególności: – komendy CAT używane do PRZEŁĄCZANIA WEJŚĆ ANTENOWYCH nigdy nie mogą być stosowane w trakcie nadawania. Może to spowodować uszkodzenie końcówki mocy (konsekwencja przełączenia gniazda w TRX np. na gniazdo bez podłączonej anteny lub ze źle dopasowaną anteną!).  – zmiana mocy komendą CAT w trakcie nadawania (np. przy współpracy z zewnętrznymi wzmacniaczami).
Zawsze pamiętaj, że transceiver najczęściej na „ślepo” wykonuje komendy CAT napływające poprzez port szeregowy. Wg mojej wiedzy, radia niestety nie zawsze posiadają zabezpieczenia przez takimi przypadkami.  

Czas na praktyczny przykład sterowania w języku AHK Prosty przykład, bazujący na opisie SerialSend czyli sterownie kombinacjami klawiszy Alt-1 do Alt-4 trybem pracy transceivera (Operating mode)

jeżeli chcesz wysyłać komendy podaną poniżej metodą w trakcie pracy innego programu, który korzysta z portu szeregowego przypisanego do radia (np.N1MM+), to koniecznie zapoznaj z wpisem dotyczącym wysyłania danych do portu szeregowego, jak również potencjalnych problemów mogących Cię spotkać, omawianych przy opisie mojej konfiguracji)
(Uwaga: jeżeli korzystasz z auto tłumaczenia strony, to prezentowane skrypty mogą być błędne – skrypty kopiuj z wersji oryginalnej stron, w języku polskim)

SetWorkingDir %A_ScriptDir% 
; SerialSend.exe ze strony https://batchloaf.wordpress.com/serialsend/ 
; umieść w tym samym katalogu na dysku, co prezentowany skrypt 

port := 6 ;numer portu COM dla CAT 
BR := 19200 ;używany Baudrate 

komenda1 := "MD01;" ; komenda CAT -> ustaw mode LSB 
komenda2 := "MD02;" ; komenda CAT -> ustaw mode USB 
komenda3 := "MD03;" ; komenda CAT -> ustaw mode CW 
komenda4 := "MD07;" ; komenda CAT -> ustaw mode CW-Reverse 

!1:: ;Alt-1 
RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda1%,,Hide 
Return 
!2:: ;Alt-2 
RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda2%,,Hide 
Return 
!3:: ;Alt-3 
RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda3%,,Hide 
Return 
!4:: ;Alt-4 
RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda4%,,Hide 
Return

  Jak widać, spore fragmenty kodu powtarzają się, i każdy zawodowy programista już odbezpiecza broń 🙂 Napiszmy więc prostą procedurę, i uprośćmy w/w kod skryptu:

SetWorkingDir %A_ScriptDir% 

; SerialSend.exe ze strony https://batchloaf.wordpress.com/serialsend/ 
; umieść w tym samym katalogu na dysku, co prezentowany skrypt

; procedura wysyłająca do określonego portu szeregowego zadany ciąg znaków 
wyslij(portc, br, komenda)
{
RunWait %ComSpec% /c serialsend.exe /devnum %portc% /baudrate %br% %komenda%,,Hide
}

port := 6   ;numer portu COM dla CAT
BR := 19200 ;używany Baudrate

;Alt-1 do Alt-4
!1:: wyslij(port,BR,"MD01;")  ; komenda CAT -> ustaw mode LSB
!2:: wyslij(port,BR,"MD02;")  ; komenda CAT -> ustaw mode USB
!3:: wyslij(port,BR,"MD03;")  ; komenda CAT -> ustaw mode CW
!4:: wyslij(port,BR,"MD07;")  ; komenda CAT -> ustaw mode CW-Reverse

  Oczywiście w analogiczny sposób, poprzez dodanie do w/w skryptu kolejnych linii do kodu z komendami, np. za linią !4::wyslij(port,BR,”MD07;”) dodajemy !5::wyslij(port,BR,”MD04;”) itd,  i ustanawiając dla nich interesujące nas kombinacje klawiszy, możemy rozbudować ten skrypt o wysyłanie dowolnych komend CAT do naszego radia.

Uwaga dot. pisania takich skryptów:
W danej chwili możemy mieć uruchomionych kilka skryptów AHK, więc trzeba uwazać, żeby nie powtarzać w nich tych samych kombinacji klawiszy – czasem może to prowadzić to niespodziewanych zdarzeń, w szczególności przy sterowaniu w ten sposób radiem.
Uwaga 2: Ponieważ wyżej przedstawiony skrypt sam się nie zakończy (jak każdy skrypt AHK, który „czeka” na kombinacje klawiszy) proponuję na samym końcu dodać linijkę:

#Z::ExitApp

Oznacza ona, że po naciśnięciu kombinacji Win-Z nastąpi po prostu zakończenie pracy skryptu.  

Komendy typu Read/Answer.

Tak jak to było dyskutowane tutaj, używanie komend Read/Answer przy bezpośrednim odwoływaniu się do portu szeregowego może być uciążliwe. Krótko – w wyżej przedstawionym przykładzie  komendy MD,  wysłanie do portu komendy typu Read MD0; spowoduje, że radio wyśle zwrotnie do komputera ciąg MD0x; gdzie 0x odpowiada alfanumerycznej wartości aktualnie ustawionemu w radiu trybowi MODE (CW/LSB/USB/itp). Wrócimy do komend typu Read/Answer w opisie OmniRIG  API.  


 

Zmodyfikowana procedura wysyłająca:

Gdybyśmy nie chcieli używać programiku  SerialSend w w/w procedurze, można ew. ją zmodyfikować i korzystać tylko z możliwości, jakie daje nam system operacyjny Windows. Wersja z użyciem komendy ECHO:

; procedura ahk wysyłająca do określonego portu szeregowego zadany ciąg znaków 
wyslij(portc, br, komenda)
{
 RunWait, %ComSpec% /c mode COM%portc% BAUD=%br% PARITY=n DATA=8, , Hide
 RunWait, %ComSpec% /c echo %komenda% > COM%portc%, , Hide
}

  Wersja z użyciem komendy SET:

wyslij(portc, br, komenda)
{
 RunWait, %ComSpec% /c mode COM%portc% BAUD=%br% PARITY=n DATA=8, , Hide
 RunWait, %ComSpec% /c SET /p x="%komenda%" <nul >\\.\COM%portc%, , Hide
}

  Procedura ustawia w pierwszej kolejności parametry naszego portu (poleceniem MODE), i wysyła do portu COM określone dane (poleceniem ECHO lub SET). Ale tak jak już pisałem – zdecydowanie polecam używanie rozwiązania SerialSend. Powodzenia w sterowaniu radiem.