Frage

background: Windows Server 2003 R2, Drahtdienst Virtueller serieller Anschluss mit Realport-Software, Serieller Anschluss, der als COM5, 9600 Baud, 8 Datenbits, keine Paritätsbits, 1-Stopp-Bit, keine Durchflusssteuerung, konfiguriert, Verwenden von RXTX 2.1-7.

Der Port COM5 wird gefunden, der serielle Anschluss wird mit den PortIm.Open-Methoden- und Port-Parametern erstellt und die Durchflusssteuerung setzt auf, um die oben genannten Gerätetreibereinstellungen anzupassen. Ich bekomme den SerialPort IntoPream und wickle es in einen Eingabestreamreader ein, damit ich die Eingabecodierung steuern kann. Die Standardcodierung ist natürlich CP1252 Ich habe gelesen, dass, wenn Sie 8 Datenbits verwenden, die Codierung ISO-8859-1 AKA Latin1 sein sollte. und verwende die EingangstreamReader-Methode: int c= isr.Read (); In einer Weilenschleife in dem Fall serialport.event.data_available Drucken der Ganzzahl c und es ist auf einen Zeichen ((char) c) gegossen; Das Problem ist, dass die Zahlen und die daraus resultierenden Zeichen zu hoch verschoben werden (Bereich beträgt 135 bis 250). Die Nachrichten enden alle mit "Alle Rechte vorbehalten.)" Und die letzten Zeichen in jeder Nachricht sind gleich. Die Verschiebung ist jedoch nicht von dem Zeichen zum Zeichen konsistent. Haben andere Kodierungen ausprobiert: UTF8 / UTF-8 Verschieben Sie die Zahlen noch höher. Wie tut ASCII / US-ASCII. CP1252 verschiebt die Zahlen in den Bereich von 130 - 350, mit Ausnahme von 3 Zeichen, die auf 65533, 8222 und 8240 verschoben werden. HINWEIS: Verwenden des InputStreamReader.getcoding () UTF8 und UTF-8 sind UTF8 und ASCII und US-ASCII ASCII.

Gibt es andere Kodierungen, die ich versuchen sollte? Wer sonst hat diese Art von Ding gesehen?

War es hilfreich?

Lösung

Ich mache fast genau das Gleiche.9600 Baud, 8N1 (8 Datenbits, keine Parität, 1 Stopp-Bit) und wir haben keine Probleme mit Charakterverschiebungen.Wir setzen nicht einmal die Kodierung, überall.

Unser Eingabestrom ist einfach vom Typ InputStream und es ist mit serialport.getinputstream () eingestellt;

Versuchen Sie, von InputStreamReader zurückzuhalten, und verwenden Sie einfach einen einfachen "Inputestream".Die Kodierung sollte sich um sich selbst kopieren.

hoffe das hilft irgendwie,

- gmale

Andere Tipps

haben zwei der Draht-Service-Ports.Ich habe einen von mir herausgefasst, dass er sich als Konflikt zwischen der Hardware-Konfiguration in der TCP bis zum seriellen Gerät namens A Digi erwiesen hat.Ich konnte das Problem an diesem Port beheben, indem ich die seriellen Einstellungen für COM5 auf 9600,1,0,0 ändert.Die Verschiebung von Werten war auf die Verwendung von 8 Datenbits Vs 7 zurückzuführen. Dies bedeutete natürlich, dass ich die Port-Parameter in den Code ändern musste.Sie korrigieren, dass der Leser unnötig war, aber es hat mir dabei geholfen, in der Lösung anzunehmen, indem er die Schichtänderung mit der Kodierung angesehen hatte, bis es mir dämmerte, dass weniger Datenbits auch den gleichen Effekt haben würden.

Jetzt suche ich nach der Magie am zweiten Anschluss.

Die zweiten Anschlusseinstellungen betrug 1200,8,1,0,0 mit 9600, als der Bach mit rund 128s meistens 0s 0s war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top