Ich versuche, mit einem Laborinstrument zu kommunizieren, das ein paar verschiedene Befehle akzeptiert. Das Gerät verwendet nur einen Wagenrücklauf zum Beenden - kein Zeilenvorschub.Carriage Return Problem mit SerialPort
Wenn ich RealTerm verwende und die Verbindung nach Bedarf festlege, kann ich einen der ASCII-Befehle zusammen mit einem CR
Zeichen senden. Das Gerät liefert die richtige Antwort.
Bei der Verwendung von .NET SerialPort
Objekt scheint jedoch \r
in C# nicht unbedingt korrekt, denn jedes Mal, wenn ich es sende, gibt mein Instrument einen Fehlercode für einen Drucker Timeout/Fehler (der RS-232-Port ist ein "Drucker", aber das Handbuch legt auch fest, wie eine Verbindung zu einem PC hergestellt wird.
Ich habe sicher verifiziert, dass die NewLine
-Eigenschaft meines Ports auf \r
festgelegt ist. Hier ein paar Dinge, die ich habe versucht:
_port.WriteLine(command); // error at the instrument once this executes.
_port.Write(command + _port.NewLine); // also error.
_port.Write(command); // executes without error, but next line errors:
_port.Write(_port.NewLine);
Gibt es einen grundlegenden Unterschied zwischen den CR
in Realterm vs. \r
in C#? Oder könnte da noch etwas anderes ins Spiel kommen?
Haben Sie versucht, _port.NewLine zu konfigurieren, d. H. _port.NewLine = "\ r"? – Graffito
Führen Sie ein Tool wie [portmon] (https://technet.microsoft.com/en-us/sysinternals/bb896644.aspx) aus, das einen guten manuellen Befehl mit dem vergleicht, was Ihr Code sendet, der Unterschied ist das Problem. –
Ein Programm wie RealTerm übersetzt eine Enter-Taste auf ein beliebiges Zeichen. Wie für die Verbindung konfiguriert. Wie die, die Sie noch nicht ausprobiert haben und häufig vorkommen, wie "\ n" und "\ r \ n" –