|
Proč používat program SDR++ pro ovládání SDR přijímačů?
1. Program SDR++ používám proto, že zobrazuje přijímané
spektrum a vodopád přes celou obrazovku monitoru -
viz náhled, což se mi pro použití u
panoramatického přijímače líbí.
2. Program SDR++ používám proto, že má vestavěný TCP/IP server,
který mi umožňuje, že si s programem popovídám například z vlastní
aplikace.
Jak si s programem SDR++ popovídám?
|
Program SDR++ má již v sobě
zabudován Rigctl server. Jeho nastavování najdeme ve spodní
části levého menu.
1. V serveru musíme nastavit IP
adresu (jako localhost) a číslo portu (zde 4532).
2. Server musíme spustit tlačítkem "Start" (na obrázku vpravo
je už server puštěný, proto se zobrazuje text "Stop" ve
zmíněném tlačítku.
3. Lze nastavit, aby server naslouchal při spuštění SDR++.
4. Spuštěný server naslouchá na IP adrese 127.0.0.1
(localhost) a na portu 4532. 6e server naslouchá, poznáme
podle toho, že jako status svítí žlutý nápis "Listening".
5. Spuštěný server naslouchá našim příkazům. |
 |
| |
|
|
Jaké příkazy server akceptuje?
Uvádím jen ty, které mi fungovaly
| |
|
|
|
1. Základní ovládání
(Frekvence a Mód) |
Význam |
Příklad |
|
f get_freq |
Dotaz na aktuální frekvenci
|
f $0A |
| F set_freq |
Nastavení frekvence (v Hz) |
F 7047000$0A |
| m get_mode |
Dotaz na mód |
m $0A |
| M set_mode |
Nastavení módu a šířky
filtru |
M USB 2400$0A |
| |
|
|
|
Poznámka k módům:
SDR++ podporuje standardní řetězce jako USB, LSB, AM, WFM,
FM, ... |
| |
|
|
|
2. Stav rádia
(VFO a S metr) |
Význam |
Příklad |
| v |
Dotaz na aktivní VFO |
v$0A |
| s |
Dotaz na sílu signálu
(S-metr) |
s$0A (vrátí hodnotu v dB
a na druhém řádku píše VFOA) |
| |
|
|
|
3. Speciální
a systémové |
Význam |
Příklad |
| dump_caps |
Vrátí kompletní
seznam schopností, které rádio svému serveru
nahlásilo. Asi se stím dělá jinak nebo nefunguje. |
Mě to vrací
toto:
"RPRT 1, RPRT 1, WFM, RPRT 1, RPRT 1, RPRT 1, RPRT 1, RPRT
1, 0, VFOA";
to znamená, že server zpracoval postupně znaky řetězce
"dump_caps", odpověděl na "m" (WFM) a na "s" (0, WFOA),
tedy poznal tyto dva příkazy. Na ostatní znaky odpověděl
"RPRT 1", což znamená, že ostatní znaky nepoznal. |
|
Poznámka:
Příkaz musí být ukončen znakem $0A (v terminálu
Herkules) nebo znakem Chr(10) ve Visual Studiu. |
|
| |
|
|
Jak si se serverem SDR++
popovídáme?
Na zkoušku komunikace používám
oblíbený Hercules terminál (obrázek vpravo).
Zvolím záložku TCP Client, nastavím IP: 127.0.0.1 a Port:
4532.
Kliknu na "Connect", Hercules oznámí, kam se připojuje a na
dalším řádku, že se připojil.
Na řádcích "Send" si připravíme povely, které odešleme
tlačítkem "Send".
Když odešleme příkaz, server odpoví
po vykonání "RPRT 0", pokud příkaz vykoná nebo "RPRT 1", když
příkaz nepozná.
Když odešleme příkaz psaný malými
písmeny (dotaz), server odpoví hodnotou.
Například na f$0A server odpoví hodnotou (řetězec): 94100000.
Pozor! Server přidává na konec
řetězce jeden znak (asi LF), nezkoumal jsem, jaký, ale v
programu ho odstraňuji.
Když vyzkoušíme příkazy v terminálu
Hercules, můžeme si napsat svůj první program, může vypadat
třeba takto:

Tlačítko "R" přečte
kmitočet z SDR++, "E" odešle hodnotu kmitočtu v kHz, která je
v textovém poli, v rozbalovacím menu vybereme mód (druh
modulace) a šířku pásma (zobrazí se po kliknutí). Příkazy se
vykonají po kliknutí na položku menu. |
 |
| |
|
|
Procedura na komunikaci se
serverem SDR++ v mém prográmku
 |
| |
|
|
Stažení
Jednoduchý
spustitelný program s
příkladem si můžeme stáhnout (zip) zde, jeho
zdrojový kód zde. |
| |
|
|
K čemu je tohle všechno dobré?
Například k tomu, abychom si z SDR++
udělali přehledný širokopásmový panoramatický přijímač. Pokud
k takovému přijímači připojíme kontrolér, můžeme pomocí
takového kontroléru z SDR++ přečíst informace o frekvenci a
módu, pomocí kterých okamžitě sesynchronizujeme své rádio Yaesu
FT-710 s SDR++.
To vše může vypadat například takto:

Poznámky:
1. Z několika důvodů jsem nepoužil tzv. "polling", tedy
algoritmus, který bude periodicky číst status SDR++ a
nastavovat TCVR Yaesu. Takový přístup obvykle zaměstná
komunikaci se serverem nebo na portech CAT. Já potřebuju TCVR
sesynchronizovat v okamžiku, kdy to je třeba, rychle a
spolehlivě. Potřebuji, aby takto vyvedený kontrolér
nezaměstnával ani SDR++, ani TCVR a aby ostatním programům
nijak nevadil a neužíral výkonu procesoru.
2. Jednoduchý spustitelný
program s příkladem si můžeme stáhnout (zip) zde, jeho
zdrojový kód zde.
3. Popsaný kontrolér tedy čte informace o kmitočtu a módu
ze serveru SDR++ a podle těchto informací synchronizuje přesně
a okamžitě TCVR Yaesu FT-710 na můj pokyn. Z kontroléru však
lze nastavovat mnohem víc parametrů rádia Yaesu. Parametry a
hodnoty se volí kliknutím na položky dvou řad menu. Lze řídit
nastavení měřidla (S-metr, Power, ALC...), výkon TX, interní
tuner, PTT, lze zapnout/vypnout TRX, lze pracovat s VFO,
módem, s pásmy, s IPO/ATT, s šířkou pásma filtru a s dalšími
parametry.
Více podrobností jsem popsal na
stránce o CAT rozhraní Yaesu a CI-V rozhraní Icom.
4. Praktické
zkušenosti se synchronizací mezi SDR++ a TRX Yaesu samozřejmě
podrobně popíšu, až bude čas a nálada.
5. Program SDR++ rovněž spolupracuje s programem WSJT-X pro
digitální komunikaci. TCP komunikace je realizována s využitím
Hamlib NET ctl a
nastavení ve WSJT-X vypadá takto. Nesmíme zapomenout
propojit audio s použitím virtuálních audio kabelů (VB-Audio
cable A a B). Současný běh WSJT-X a výše popsaného
kontroléru není možný. Rovněž doporučuji vyvarovat se v
programu WSJT-X některým příkazům, například neklikat na
tlačítko "Test CAT".
6. Pro zkoušení komunikace programu TCP serveru SDR++ není
nutné, aby byl přijímač spuštěn. Není dokonce ani nutné, aby
bylo SDR zařizení připojeno (v Source svítí červeně "No device
Available"). Program SDR++ i za takových podmínek umožňuje
spustit TCP server, který komunikuje s naším Herculesem nebo s
naším kontrolérem.
7. Kontrolér otevírá TCP klienta je po dobu nezbytnou k
odeslání a k příjmu streamu s příkazy a krátkými daty. Po
ukončení těchto operací je stream i client uzavřen (dva
poslední řádky s příkazy stream.Close() a client.Close().
Proto můžete mít klidně spuštěno mnoho instancí takových
prográmků a při ručním odesílání povelů zjistíte, že prakticky
nikdy nedojde ke kolizi v komunikaci klienta s TCP serverem
programu SDR++.
Různé
1. Prosím,
neposílejte mi ohledně programování komunikace via TCP client,
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. Nejsem profesionální programátor a v žádném případě nemám
zájem, čas a chuť cokoliv
kolem problematiky ovládání rádií řešit. Berte tento článek jako
námět a příklady s uvedením rozhodujících detailů, které vás mohou
zaměstnat déle, než jste předpokládali.
|
|