SerialSend i skrypty AHK

Najprostszą metodą wysłania ciągu znaków do portu szeregowego jest skorzystanie z systemowej komendy ECHO  (bezpośrednio z linii komend w okienku CMD systemu Windows), przykładowo:

 

echo BU0; > COM6


Potencjalne problemy:
– nie wiemy, jakie mamy ustawione parametry portu
– oprócz wysyłanej komendy, systemowe ECHO wysyła jeszcze dodatkowe znaki (np. CR-LF), co czasem może być problematyczne
– komenda ECHO nie zadziała dla portów o numerze większym  niż 9

Ustawienie parametrów portu możemy zrealizować dodatkową komendą MODE, wysyłaną przed w/w komendą ECHO (dane portu, Baudrate, itp. oczywiście przykładowe, do ew. testów wpisz zgodnie ze swoją konfiguracją):

 

mode COM6 BAUD=19200 PARITY=n DATA=8

 

Pewnym obejściem pozostałych problemów  jest zastosowanie małego tricku z systemową komendą SET:

 

SET /p x="BU0;" <nul >\\.\COM6


Pokazana komenda wysyła do portu COM dane (tu komenda CAT przełączająca pasmo  BU0;),
ale bez wysyałania zbędnych spacji czy  CR-LF, a port szeregowych może być określony dowolnym numerem np. COM22

 

W skryptach lubię ułatwić sobie życie – więc do wysyłania danych do portów szeregowych zdecydowanie wolę programik SerialSend.exe

Ten malutki program, opracowany i napisany przez pana Ted’a Burke, określany przez niego na jego stronie www jako „little command line application” okazał się nieoceniony przy zabawie z portami szeregowymi, i jest przeze mnie używany do wysyłania danych we wszystkich skryptach wysyłających dane bezpośrednio do portów COM.

Kod źródłowy programiku SerialSend i również jego wersja skompilowana gotowa do użytku, dostępne są na stronie:
https://batchloaf.wordpress.com/serialsend/

Program jest nieodzowną częścią wielu moich skryptów. Bardzo polecam.
Umożliwia wysyłanie dowolnego ciągu tekstowego do urządzenia przez port szeregowy za pomocą jednego prostego polecenia i daje możliwość określenia portu i szybkość transmisji jako parametrów.

Przykładowe wywołanie (np. w pliku .cmd)

 

SerialSend.exe /devnum 6 /baudrate 19200 "BU0;" 

 

W skryptach AHK wywołujemy go komendą Run lub RunWait, jak w poniższym przykładzie:


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 Twojego portu COM dla komend CAT BR := 19200 ;używany przez Ciebie Baudrate komenda1 = "BD0;" ;komenda CAT -> przełącz pasmo "w dół" komenda2 = "BU0;" ;komenda CAT -> przełącz pasmo "w górę" !F1:: ;Alt-F1 RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda1%,,Hide Return !F2:: ;Alt-F2 RunWait %ComSpec% /c serialsend.exe /devnum %port% /baudrate %BR% %komenda2%,,Hide Return

 

Tak tak, to jest pierwszy na tym blogu skrypt w AHK, sterujący radiem, a konkretnie –  przełączaniem pasm w TRXie przy pomocy kombinacji klawiszy Alt-F1 i Alt-F2

Jeżeli masz uruchomione radio, aktywny i wolny port szeregowy dedykowany dla komend CAT, no i  zainstalowany pakiet AHK, to:
– w/w skrypt skopiuj po prostu do notatnika,
– zmodyfikuj parametry portu COM:  port := x i prędkość baudrate: BR := xxxxx, na takie wartości, które masz u siebie,
– zapisz plik z rozszerzeniem .ahk pod dowolną nazwą,
– umieść w tym samym katalogu z w/w programem serialsend.exe
– uruchom skrypt.
Naciskanie Alt-F1 lub Alt-F2 będzie powodowało przełączanie pasm w radiu (Dla przypomnienia – komendy zgodne z CAT dla Yaesu)

Uwaga: skrypt zadziała tylko wtedy, gdy port COM do obsługi komend CAT będzie „wolny” (czyli żaden inny program nie będzie korzystał z przydzielonego portu COM) , lub w konfiguracji z aktywnym współdzieleniem portu, czyli  przypadek 2 lub 3 w opisie konfiguracji.

 

Inne praktyczne użycie przedstawionych zagadnień, jak również różne wersje procedur wysyłających dane do portu szeregowego do wykorzystania w skryptach AHK – zobacz wpis dotyczący komend CAT