Computer Aided Transceiver - Amateurfunk-Station DK1IO

Direkt zum Seiteninhalt

Hauptmenü

Computer Aided Transceiver

Computer Aided Transceiver (Computerunterstützter Transceiver)

Mit Hilfe von CAT ist es möglich, den Transceiver vom PC aus zu steuern. Idealerweise kann man damit alle manuellen Bedienungshandlungen nachahmen.
Nachdem in der Vergangenheit jeder Hersteller sein eigenes CAT-Süppchen gekocht hat, hat sich hier einiges getan.
Kenwood, ELECRAFT, YAESU (bei den neueren Geräten)
folgen der gleichen Syntax, wenngleich sich die Befehle im Einzelnen unterscheiden können.
Die grundlegenden Befehle zur Frequenz- und Modeeinstellung sind jedenfalls (fast) gleich.
Das war für mich eine große Erleichterung, als ich vom TS-2000 zum K3 gewechselt bin.
Außer dem K3 besitze ich z. Zt. einen FT-991, und bei beiden lässt sich wirklich alles, was sich bedienen und einstellen lässt, mit dem PC nachahmen.
Beim K3 allerdings mit einer Ausnahme: er lässt sich nicht per CAT-Befehl einschalten. Dafür gibt es einen Pin der ACC-Buchse. Wenn dieser Pin hochgelegt wird, schaltet der K3 ein.
Das bedeutet allerdings zusätzliche Hardware.
Ich hatte anfangs die geniale Idee, beides miteinander zu kombinieren und habe den Pin der ACC-Buchse mit einer Steuerleitung des CommPorts verbunden.
Das funktionierte gut, zu gut. Wie das?
Nun, Windows testet beim Booten offensichtlich die seriellen Schnittstellen, so dass bei jedem Windows-Start der K3 eingeschaltet wurde. Das wollte ich dann auch nicht, und jetzt schalte ich wieder manuell ein.
Beim FT-991 soll man zum Einschalten einige Dummy-Befehle senden.
Das erledige ich in einer FOR-NEXT-Schleife:
    
For i = 0 to 2
      WriteSerialPortString(COM_3, "PS1;")
      Delay(10)
    Next

Damit schaltet der TRX sicher ein.
Für beide Geräte kann man sich die Handbücher für die CAT-Programmierung von den Firmen-Webseiten herunterladen
(ELECRAFT K3 AND KX3 PROGRAMMER'S REFERENCE; FT-991 CAT OPERATION REFERENCE BOOK).

FT-857D

Beim FT-857D, den ich für portable Einsätze benutzt habe, ist die CAT-Fähigkeit eher spartanisch.

IC-7100
Den IC-7100 habe ich mir angeschafft, um damit portable Aktivitäten innerhalb von SOTA durchzuführen. Bedienteil und Haupteinheit sind getrennt. Die gute Nachricht: zum Steuern des TRX braucht man das Bedienteil gar nicht.
Voraussetzung ist aber, dass vorher mit angeschlossenem Bedienteil im SET-Modus "Power OFF" auf "OFF" gestellt wird. Damit wird das Ausschalten des Gerätes bei fehlender Verbindung zwischen Bedienteil und Haupteinheit verhindert bzw. wird ein Einschalten per CAT ermöglicht.
Jetzt können vom steuernden PC, bei mir ein Tablet HiBook, CAT-Befehle an den TRX gesendet werden. Der erste Befehl muss naturgemäß der Einschaltbefehl sein.
Da ich ohne das Bedienteil aber keine Anzeige wichtiger Parameter habe (Spannung, Leistung, SWR, ALC), werden diese aus dem TRX ausgelesen und auf dem Tablet angezeigt.
Die ICOM-Syntax ist ist eine ganz andere, nach einer Eingewöhungszeit komme ich aber auch damit gut klar.
Da hier nur hexadezimale Werte übertragen werden, muss der Befehl
WriteSerialPortData() verwendet werden.
Vor dem eigentlichen Befehlscode ist ein Präambelcode zu senden. Die ersten beiden Bytes sind
FEFE, gefolgt von der Adresse des Transceivers (88) sowie der des steuernden Gerätes (E0). Am Schluss steht das Befehlsendezeichen FD.
Eine Besonderheit stellt der Befehl zum Einschalten des TRX dar. Hier soll vor dem eigentlichen Befehl eine Anzahl FE gesendet werden, abhängig von der Baudrate. Bei 19200 Bd sollen es 25 sein
Der PureBasic-Code sieht dann so aus:
    
FillMemory(*CommBuf, 25, $FE)
    PokeQ(*CommBuf + 25, $FD0118E088FEFE)
    WriteSerialPortData(#COM_IC7100, *CommBuf, 32)

Bei den Pokebefehlen muss die Reihenfolge der Bytes umgekehrt werden. Im
*CommBuf stimmt die Reihenfolge dann wieder.
Um diese Schwierigkeit bei den normalen Befehlen zu umgehen, werden dort die Befehlsbytes in Strings verarbeitet und erst zum Schluss als Hexwerte byteweise in den Comm-Puffer geschrieben. Eine kleine Prozedur bwerkstelligt das.
    
Procedure SerDatOut(CmdDat$, bRead)
      Define i
      PurgeComm_(hCOM_IC7100, #PURGE_RXCLEAR
      PurgeComm_(hCOM_IC7100, #PURGE_TXCLEAR
      Delay(10)
      CmdDat$ = "FEFE88EO" + CmdDat$ + "FD"
      For i = 0 to Len(CmdDat$) >> 1
        PokeB(*CommBuf + i, Val("$" + Mid(CmdDat$, (i << 1) + 1, 2)))
      Next
      WriteSerialPortData(#COM_IC7100, *CommBuf, i)
      Delay(10)
      PurgeComm_(hCOM_IC7100, #PURGE_RXCLEAR
      Delay(10)
      If bRead
        i = AvailableSerialPortInput(#COM_IC7100)
        If i
          ReadSerialPortData(#COM_IC7100, *CommBuf, i)
        Endif
      Endif
    EndProcedure
Eine Besonderheit des ICOM CAT-Systems ist, dass das Funkgerät alle Befehle wiederholt. Erst dann kommt die eigentliche Antwort.
Die Zeilen
    
Delay(10)
    PurgeComm_(hCOM_IC7100, #PURGE_RXCLEAR
beseitigen das Echo. Danach kann, falls erforderlich, die Antwort ausgewertet werden.

Vebindung PC <-> TRX

Die Verbindung zwischen PC und Transceiver erfolgt über die serielle Schnittstelle, die sich durch einfache Programmierbarkeit auszeichnet.
Die originale serielle Schnittstelle findet sich aber heute kaum noch am PC, sie wird zumeist durch USB-Seriell-Adapter ersetzt.
Und auch wo ein USB-Kabel die Verbindung zwischen PC und TRX herstellt, wie beim FT-991 und IC-7100, wird transceiverseitig meist eine serielle Schnittstelle emuliert.

Das Öffnen der Schnittstelle
Vor der Benutzung des CommPorts, wie die Schnittstelle auch genannt wird, muss dieser geöffnet werden.
In PureBasic sieht die allgemeine Anweisung zum Öffnen wie folgt aus:

         
OpenSerialPort(#SerialPort, SerialPortName$, Bauds, Parity, Data, Stop, HandshakeMode, InputBufferSize, OutputBufferSize)

Die einzelnen Parameter werden folgendermaßen besetzt:
         
         
#SerialPort                     eine frei wählbare Zahl, mit der der Port im Programm angesprochen wird
         
SerialPortName$              die Bezeichnung des Ports als Zeichenkette, z. B. "COM3"
         
Bauds                             die Baudrate, muss die gleiche sein wie die des Transceivers
         
Parity                             die Parität, wird vom Transceiver vorgegeben
         
Data                               die Anzahl der Datenbits, wird vom Transceiver vorgegeben
         
Stop                               die Anzahl der Stopbits, wird vom Transceiver vorgegeben
         
HandshakeMode              Datenflusssteuerung, wird vom Transceiver vorgegeben
        
InputBufferSize                Größe des Eingangspuffers, kann frei gewählt werden, muss aber für den Zweck ausreichend sein
         
OutputBufferSize              Größe des Ausgangspuffers, sonst wie vor

In meinem Logprogramm sieht der Befehl zum Öffnen des Ports für den K3 so aus:

         
OpenSerialPort(#COM_K3, "COM3", 38400, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 128, 128)

Jetzt können Befehle an den Port gesendet werden.

PC -> TRX
Je nach Empfänger können die Anweisungen als Daten oder String gesendet werden.
Die Kenwood-Syntax erfordert das Senden als String.
Der entsprechende Befehl lautet:
         
WriteSerialPortString(#SerialPort, String$)
In der Kenwood-Syntax wird jede Anweisung mit einem ";" (Semikolon) beendet. Fehlt dieses, reagiert der TRX nicht.
Grundsätzlich gibt es Befehle, die mit oder ohne Parameter zum Transceiver geschickt werden.

Befehl mit Parameter
Als Beispiel für einen Befehl mit Parameter:  WriteSerialPortString(0, "FA00007039750;")
  stellt den VFO A auf die Frequenz von 7039,750 KHz ein.
Die Frequenz wird mit 11 Stellen mit 1 Hz Auflösung angegeben, wobei führende Nullen unbedingt erforderlich sind.

Befehl ohne Parameter

Der Befehl   
WriteSerialPortString(0, "FA;")   fordert den K3 auf, die am VFO A eingestellte Frequenz auszugeben.
Als Antwort werden grundsätzlich Daten gesendet. Das Programm muss einen Puffer bereitstellen, in den diese Daten geschrieben werden.

TRX -> PC
Mit der Anweisung
         
ReadSerialPortData(#SerialPort, *Puffer, Länge)
werden die Empfangsdaten in den Puffer geschrieben. Der Parameter  
*Puffer ist ein Zeiger auf den Puffer, also die Adresse des Speicherbereichs. Die Größe wird mit  Länge  festgelegt und sollte der zu erwartenden Datenmenge entsprechen.
Da PureBasic ab Version 5.50 Strings grundsätzlich in Unicode darstellt, die Daten vom TRX aber als ASCII-Daten gesendet werden, müssen die Daten des Puffers in ASCII konvertiert werden, um weiter verrbeitet werden zu können.
Der Befehl
         
str$ = PeekS(*Puffer, Länge, #PB_Ascii)
erledigt diese Aufgabe.

Eine zentrale CAT-Aufgabe ist die Steuerung der

PTT,  
wie die Sende/Empfangsumschaltung im Amateurjargon genannt wird (PTT = Push To Talk = Sprechtaste drücken).
Dabei kann man zwei Methoden anwenden:
1. die Befehle  
RX und TX
   Bei Kenwood/Elecraft werden diese Befehle ohne Parameter gesendet.
   Beim FT-991 gibt es nur den
TX-Befehl mit den Parametern 0 (Sender aus) und 1 (Sender ein).
   Beim IC-7100 lautet der entsprechende Befehl
1C 00 mit den Parametern 0 und 1.
2. die Steuerleitungen DTR und RTS mit der Anweisung  
SetSerialPortStatus(#SerialPort, Attribute, Value)
  Attribute
ist entweder #PB_SerialPort_DTR oder #PB_SerialPort_RTS
  Value
ist 1 zum Aktivieren und 0 zum Deaktivieren der Leitung.
  Welche Leitung benutzt wird, hängt davon ab, welche im Transceivermenü ausgewählt wurde.

Das folgende Bild zeigt die PTT-Auswahl von WSJT-X:





 
Zurück zum Seiteninhalt | Zurück zum Hauptmenü