从串口c#读取不完整数据

时间:2014-07-30 03:26:50

标签: c# serial-port

我在读取从串口传输的数据时遇到问题(每次第一次运行项目时数据都不完整)。

我尝试了两种方法:

byte[] data = new byte[_serialPort.BytesToRead];
_serialPort.Read(data, 0, data.Length);
txtGateway.Text = System.Text.Encoding.UTF8.GetString(data);

txtGateway.Text = _serialPort.ReadExisting();

但是,当我启动程序时,它每次只读取14个字节。当我追踪程序时,_serialPort.BytesToRead每次只给出14个。如果我第二次发送数据,则会正确读取数据。

以上两种方法具有相同的结果。我确信从串口写入数据可以提供完整的数据。

2 个答案:

答案 0 :(得分:0)

串口没有任何消息边界。如果你想要框架,你必须自己添加它。

对于程序启动时串行端口中最近的14个字节,14个字节是串行端口的典型FIFO大小。   另请参阅How do you programmatically configure the Serial FIFO Receive and Transmit Buffers in Windows?

或者只是在程序启动时刷新接收缓冲区。

enter image description here

答案 1 :(得分:0)

您可以使用带回车符\ r的数组和带有STX

的ascii代码\ x02
string data = _serialPort.ReadExisting();
string[] arr1 = data.Split('\r');
checkFinal = checkFinal.Replace("\x02", "").ToString().Trim();