OK1UFC

 

Jak si popovídáme s SDR++

Poslední aktualizace 2026   


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.
 

 

 

   TU 73, Mira, ok1ufc