Bei Problemen bei der seriellen Datenübertragung ist es nützlich zu wissen, was genau übertragen wird. Die im Netz verfügbaren kostenlosen Programme sind meist nur Testversionen, die nach kurzer Zeit ihre Funktion einstellen.
Bisher habe ich das per Hardware gelöst, d.h. einen zusätzlichen USB-RS232-Konverter an die Sende- (TX) oder Empfangsleitung (RX) angeschlossen. Will man den Datentransfer in beide Richtungen beobachten benötigt man zwei dieser Konverter.
Das SourceForge-Projekt com0com stellt ein virtuelles Null-Modem bereit. Mit dessen Hilfe kann man sich in den Datentransfer einklinken.
URS ComPort-Sniffer protokolliert die Datenströme zwischen einem virtuellen Port des com0com-Nullmodems und einem extern angeschlossen seriellen Gerät. Mit dem anderen virtuellen Port des Null-Modems wird das Programm verbunden, das mit dem externen Gerät kommuniziert.
Das Programm ist in C# geschrieben. Damit ist zwar eine einfache Entwicklung möglich, aber es ergeben sich auch Nachteile, weil man doch sehr weit von der Hardware-Ebene entfernt ist. Der Quellcode ist im Download enthalten, so dass das Programm an eigene Bedürfnisse angepasst werden kanne.
Zum Testen habe ich folgenden Aufbau verwendet. Als externes Gerät wurde ein USB-RS232-Konverter gewählt, beim dem die TX- und die RX-Leitung verbunden wurden. Das Gerät sendet somit jedes empfangene Byte an den Absender zurück (Echo-Modus).
Es empfiehlt sich diese Reihenfolge einzuhalten, weil viele Programme direkt nach dem Verbindungsaufbau mit der Kommunikation beginnen. Zu diesem Zeitpunkt sollte demzufolge der Rest der Übertragungskette stehen.
Neben den Datenströmen werden auch die Steuerungssignale DTR<->DSR und RTS<->CTS durchgereicht.
Auswahl der Ports:
|
|
Protokoll einer Übertragung. Daten, die vom virtuellen Port, also dem Terminal-Programm, an das physikalische Gerät (USB-RS232-Konverter) gesendet werden, werden in Blau dargestellt. Daten, die vom physikalische Gerät (USB-RS232-Konverter), an den virtuellen Port, d.h. an das Terminal-Programm, gesendet werden, werden in Rot dargestellt. Nicht darstellbare Zeichen werden als ASCII-Name in spitzen Klammen angezeigt, z.B. <LF> für Linefeed (hex. 0A). |
|
Die Anzeige im hexadezimalen Modus. |
Einen Schachpunkt hat das Programm allerdings. Windows ist kein Real-Time-OS. Die eingehenden Daten werden zunächst gepuffert. Bei hohen Transferraten und schnellem Duplex-Betrieb kann es deshalb sein, dass die Reihenfolge dieses Wechselspiels nicht korrekt wieder gegeben wird. Die Reihenfolge der Datenströme der einzelnen Ports ist aber stets korrekt.
Das ZIP-Archiv UrsComPortSniffer.zip enthält das ausführbare Programm und das komplette Visual-Studio-Projekt.
Anzeige der Steuerleitungen DTR, CSR, RTS, CTS.
Schreiben der Datenströme in eine Datei.