venerdì 30 dicembre 2022

Controllo del ricevitore YAESU FRG-8800 con FLDIGI

FLDIGI è un programma sviluppato da David Freese W1HKJ ed altri radioamatori; essenzialmente è un modem che permette di operare via radio con una moltitudine di modulazioni e modi attraverso la scheda audio del PC.

Integra in sé anche un controllo degli apparati via CAT, rendendo completo ed automatico l'utilizzo della radio.

La descrizione ed il funzionamento dell'interfaccia hardware computer - radio è descritta in vari post nel mio blog.

Il programma FLDIGI permette di controllare il ricetrasmettitore oppure il ricevitore attraverso due modalità:

  • Controllo via RigCAT;
  • Controllo via HamLib.

Controllo via Hamlib

E' la modalità più utilizzata con questo programma. Essa usa la libreria HAMLIB ormai diventata uno standard: praticamente tutti i programmi che permettono il controllo via seriale di una radio ne dispone l'uso, a parte qualche rara eccezione.

Questa libreria interfaccia una notevole quantità di apparati diversi, integra tutti i comandi seriali da inviare alla radio e gestisce le risposte provenienti dalla stessa.

Permette anche il controllo dei più comuni rotori per antenne.


Per la configurazione, si seleziona la radio da controllare, si imposta la porta seriale e tutto dovrebbe funzionare.

Le Hamlib contengono le definizioni per i comandi dello Yaesu FRG-8800 in versione Untested. Ma sfortunatamente, con FLDIGI, non c'è modo di farle andare: il ricevitore non esegue alcun comando.

Controllo via RigCAT

Questa è una modalità personalizzabile. Vengono eseguiti dei file in formato xml, ovvero degli script in eXtensible Markup Language, nei quali vengono codificati tutti i comandi seriali della radio.


Un elenco ufficiale di questi files si trova all'indirizzo https://sourceforge.net/projects/fldigi/files/xmls/, ma qui purtroppo non si trova quello per FRG-8800.

Non resta altro che realizzarne uno.

Programmazione del file RigCAT

Il Rig Control CAT di FLDIGI non è altro che un parser di comandi seriali. Quando si lancia FLDIGI ed è stata configurata una radio con RigCAT, vengono eseguiti, quando richiamati dal software, i comandi inseriti nel file di configurazione xml.

Questo file adopera come formattazione un preciso standard: usa, per separare le singole informazioni, dei TAG del tipo

<tag>comando</tag>

I comandi non sono purtroppo tutti spiegati nel manuale on-line di FLDIGI, ne mancano diversi. L'elenco è disponibile presso l'indirizzo http://www.w1hkj.com/FldigiHelp/rig_xml_page.html.

Manca una descrizione del range di valori applicabili; manca infine soprattutto una descrizione di come questi comandi vengano eseguiti quando si avvia FLDIGI e si controlla una radio con questo metodo.

Per realizzare un file xml, l'autore consiglia di studiarsi i file xml pubblicati per le altre radio, crearlo quindi secondo le proprie esigenze e salvarlo con il nome della nuova radio.

Da quanto ho appreso dal manuale d'uso, fondamentalmente il file xml del RigCAT di FLDIGI è composto da queste sequenze di comandi:

  • Inizia sempre con il tag <RIGDEF>;
  • Una intestazione, con i tag <RIG>, <PROGRAMMER>, <STATUS> e <TITLE>;
  • Settaggio porta seriale;
  • <MODES>, definizione dei modi;
  • <BANDWIDTHS>, definizione della larghezza di banda passante;
  • <COMMAND>, un elenco di comandi;
  • <REPLY>, un parser delle risposte della radio;
  • Si chiude con </RIGDEF>.

Tra i comandi, vi sono <INIT> per inizializzazione della radio, <SETFREQ> con <SETMODE> per il settaggio di frequenza e modo e <GETFREQ> con <GETMODE> per ottenere la frequenza e modo come risposta dalla radio.

Ci sono pure alcuni comandi per l'impostazione e la lettura della potenza RF, per il set dello squelch e per la lettura dello S-Meter, oltre ad alcuni comandi per il debug.

All'avvio, il programma esegue un <INIT>, seguito da una richiesta di <GETFREQ> e di <GETMODE>.

I valori di frequenza e la codifica del modo restituiti dalla radio vengono letti da <REPLY>.

Se la radio non risponde entro un timeout preimpostato, il parser si ferma e chiude la comunicazione seriale. Quindi, se all'avvio <GETFREQ> non ottiene risposta, oppure <REPLY><FREQ> non restituisce il valore atteso, i comandi sembrano non funzionare più e la radio non reagisce come atteso.

Molto utile è il debug della seriale fornito nel menù Help. Per usarlo, inserire nell'xml dopo <RIGDEF> la stringa

<DEBUG>true</DEBUG>

Sin qui tutto bene, se non altro che l'FRG-8800 ha disponibile solo la linea RX data (Serial Input), vedi il precedente post. Quindi nessuna risposta può pervenire dalla radio. E quindi un file xml impostato in questo modo può non funzionare.

Ma c'è un modo per imbrogliare la lettura dalla radio: ho scoperto che basta istruire il programma in modo che la risposta REPLY contenga un dato a zero byte.

La codifica dei comandi dello Yaesu FRG-8800 è tratta dal manuale utente della radio:


Non è chiaro se il parser xml di FLDIGI preferisca avere come "codice di interruzione di riga" solo il Line Feed LF oppure la sequenza Carriage Return CR seguito da LF. Ho scritto la sequenza di comandi usando il programma gratuito Notepad++, scaricabile all'indirizzo

https://notepad-plus-plus.org/downloads/

ed ho usato la funzionalità testo Unix, che per interruzione di riga mette solo il LF. Il programma FLDIGI funziona sia sotto Windows® che Linux, quindi ci potrebbe essere un problema di compatibilità se l'xml non è scritto secondo lo standard Unix. Non ho verificato.

Possiamo allora scrivere la sequenza di comandi, che sarà la seguente:

        <RIGDEF>

Si inizia con questo tag. Segue poi l'intestazione:

        <RIG>Yaesu FRG-8800</RIG>

        <PROGRAMMER>
         Nome Cognome NOMINATIVO
         Tested by:  NOMINATIVO
        </PROGRAMMER>

        <STATUS>
         Beta
         Version: 1.00
         Date:  17 December 2022
        </STATUS>

        <TITLE>RigCAT - FRG-8800</TITLE>

Al posto degli spazi si può usare la tabulazione. E' importante chiudere sempre il tag aperto con il corrispondente </tag>. Andiamo poi a configurare la seriale:

        <ECHO>false</ECHO>
        <TIMEOUT>2000</TIMEOUT>
        <RETRIES>1</RETRIES>
        <WRITE_DELAY>5</WRITE_DELAY>
        <BAUDRATE>4800</BAUDRATE>
        <RTSCTS>true</RTSCTS>
        <ECHO>false</ECHO>
        <CMDPTT>false</CMDPTT>
        <STOPBITS>2</STOPBITS>
        <RTSCTS>false</RTSCTS>
        <POLLINT>500</POLLINT>

Definiamo qui i modi:

        <MODES>
         <ELEMENT>
          <SYMBOL>LSB</SYMBOL>
          <BYTE>01</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>USB</SYMBOL>
          <BYTE>02</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>CW-W</SYMBOL>
          <BYTE>03</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>CW-N</SYMBOL>
          <BYTE>0B</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>AM-W</SYMBOL>
          <BYTE>00</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>AM-N</SYMBOL>
          <BYTE>08</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>FM-W</SYMBOL>
          <BYTE>04</BYTE>
         </ELEMENT>
         <ELEMENT>
          <SYMBOL>FM-N</SYMBOL>
          <BYTE>0C</BYTE>
         </ELEMENT>
        </MODES>

Non so se questa stringa è obbligatoria; <LSBMODES> dovrebbe includere tutti i modi disponibili nella radio che lavorano in banda laterale inferiore (LSB):

        <LSBMODES>
         <STRING>LSB</STRING>
        </LSBMODES>

Definiamo quindi l'INIT; viene richiamato all'avvio del programma e pone la nostra radio in modalita CAT:

        <COMMAND>
         <SYMBOL>INIT</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00 00 00</BYTES>
        </COMMAND>

Questo comando non è documentato ma permette l'uscita dalla modalità CAT della radio quando si chiude il programma:
 
         <COMMAND>
         <SYMBOL>CLOSE</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00 80 00</BYTES>
        </COMMAND>
 
Questo il comando per settare la frequenza nella radio:

        <COMMAND>
         <SYMBOL>SETFREQ</SYMBOL>
         <SIZE>5</SIZE>
         <DATA>
          <DTYPE>BCD</DTYPE>
          <SIZE>7</SIZE>
          <MAX>29000000</MAX>
          <MIN>150000</MIN>
          <RESOL>10</RESOL>
          <REV>true</REV>
         </DATA>
         <BYTE>01</BYTE>
        </COMMAND>

E di seguito il comando per settare il modo:

        <COMMAND>
         <SYMBOL>SETMODE</SYMBOL>
         <SIZE>5</SIZE>
         <BYTES>00 00 00</BYTES>
         <DATA>
          <DTYPE>BINARY</DTYPE>
          <SIZE>1</SIZE>
          </DATA>
         <BYTE>80</BYTE>
        </COMMAND>

Quindi i comandi fasulli per richiedere la frequenza ed il modo, con la lunghezza della parola a zero bytes:

        <COMMAND>
        <SYMBOL>GETFREQ</SYMBOL>
         <SIZE>0</SIZE>
         <INFO>FREQ</INFO>
        </COMMAND>

        <COMMAND>
         <SYMBOL>GETMODE</SYMBOL>
         <SIZE>0</SIZE>
         <INFO>MODE</INFO>
        </COMMAND>

E come risposta ai comandi fasulli delle reply fasulle:

        <REPLY>
         <SYMBOL>FREQ</SYMBOL>
         <SIZE>0</SIZE>
         <DATA>
          <DTYPE>BCD</DTYPE>
          <SIZE>0</SIZE>
          <MAX>0</MAX>
          <MIN>0</MIN>
          <RESOL>0</RESOL>
         </DATA>
        </REPLY>

        <REPLY>
         <SYMBOL>MODE</SYMBOL>
         <SIZE>0</SIZE>
         <DATA>
          <DTYPE>BINARY</DTYPE>
          <SIZE>0</SIZE>
         </DATA>
        </REPLY>

Per chiudere il file si usa questo tag:

        </RIGDEF>

Non mi è chiaro se questa sintassi sia corretta, ma così per ora funziona. Non sembrano esserci errori durante il debug. Quando poi avrò controllato a fondo il file, vedrò se sarà possibile farlo pubblicare nell'elenco ufficiale. Ogni consiglio sarà ovviamente ben accetto.

Buona sperimentazione!

73 de Andy IV3ONZ


Link utili e bibliografia:



Nessun commento:

Posta un commento