串行通信和CRLF C#

我在向串口发送字符串后对CRLF有疑问。 让我解释一下我想做什么,在这里有一个例子。

[ACR] CRLF 10:90 CRLF 11:20 CRLF 12:2.1 CRLF 

这就是我想要做但我无法到达任何地方,有人可以帮我这个。 我想我必须做CRLF才能开始换行,但如果你有其他建议他们会更受欢迎这就是我所做的:

码:

 private void SendMessageTest() { var content = _durCleaningTextbox.Text; byte[] array = ComPort.StringToBytes(content); _comport.WriteBytes(array); _comport.ReadBytes(array, array.Length, 1000); string result = Encoding.ASCII.GetString(array); MessageBox.Show(result); } 

 using System; using System.IO; using System.Text; using System.IO.Ports; namespace Communication { public class ComPort { private readonly SerialPort _serialPort; public ComPort(string portName, int baudRate) { _serialPort = new SerialPort(); _serialPort.PortName = portName; _serialPort.BaudRate = baudRate; _serialPort.StopBits = StopBits.One; _serialPort.DataBits = 8; _serialPort.Parity = Parity.None; _serialPort.Handshake = Handshake.None; // _serialPort.WriteBufferSize = 1; _serialPort.DtrEnable = true; _serialPort.RtsEnable = true; _serialPort.Open(); _serialPort.ReadTimeout = 20000; _serialPort.WriteTimeout = 20000; } public void Clear() { while (ReadByte() != -1) continue; } private byte[] _array = new byte[] {0}; public void WriteByte(byte value) { _array[0] = value; _serialPort.Write(_array, 0, 1); // _serialPort.BaseStream.WriteByte(value); _serialPort.BaseStream.Flush(); } public void WriteBytes(byte[] array) { _serialPort.Write(array, 0, array.Length); } public void WriteBytes(byte[] array, int index, int length ) { _serialPort.Write(array, index, length); } private int _readTimeOut = -1; public int ReadByte(int timeOut = 200) { if (timeOut != _readTimeOut) _serialPort.ReadTimeout = _readTimeOut = timeOut; try { //return _serialPort.BaseStream.ReadByte(); return _serialPort.ReadByte(); // _serialPort.Read(array, 0, 1); // return array[0]; } catch (TimeoutException) { return -1; } } public int ReadBytes(byte[] array, int length, int timeOut = 200) { if (timeOut != _readTimeOut) _serialPort.ReadTimeout = _readTimeOut = timeOut; try { //return _serialPort.BaseStream.ReadByte(); int bytesRead = 0; while ( bytesRead < length ) bytesRead += _serialPort.Read(array, bytesRead, length - bytesRead); // _serialPort.Read(array, 0, 1); // return array[0]; return bytesRead; } catch (TimeoutException) { return -1; } } ///  /// sends string followed by CR - LF ///  ///  public void WriteLine(String line) { WriteBytes(StringToBytes(line + "\r\n")); } public static byte[] StringToBytes(string input) { return Encoding.ASCII.GetBytes(input); } public void Close() { try { _serialPort.DtrEnable = false; _serialPort.RtsEnable = false; _serialPort.Close(); } catch(IOException) { } } public bool Dtr { get { return _serialPort.DtrEnable; } set { _serialPort.DtrEnable = value; } } public bool Rts { get { return _serialPort.RtsEnable; } set { _serialPort.RtsEnable = value; } } } } 

 byte[] array = ComPort.StringToBytes(content + "\r\n"); 

或者使用已经执行此操作的WriteLine方法。 所以:

 byte[] array = ComPort.StringToBytes(content); _comport.WriteBytes(array); 

变为:

 _comport.WriteLine(content); 

您需要发送命令CR(回车)和LF(换行,或换行)。

这只是发送你的命令加上CR和LF,如下所示:

 string command = "myCommand"; port.write(string.format("{0}\r\n", command)); 

\ r \ n = CR + LF – >在Windows中用作换行符