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