我在读取从串口传输的数据时遇到问题(每次第一次运行项目时数据都不完整)。
我尝试了两种方法:
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个。如果我第二次发送数据,则会正确读取数据。
以上两种方法具有相同的结果。我确信从串口写入数据可以提供完整的数据。
答案 0 :(得分:0)
串口没有任何消息边界。如果你想要框架,你必须自己添加它。
对于程序启动时串行端口中最近的14个字节,14个字节是串行端口的典型FIFO大小。 另请参阅How do you programmatically configure the Serial FIFO Receive and Transmit Buffers in Windows?
或者只是在程序启动时刷新接收缓冲区。
答案 1 :(得分:0)
您可以使用带回车符\ r的数组和带有STX
的ascii代码\ x02string data = _serialPort.ReadExisting();
string[] arr1 = data.Split('\r');
checkFinal = checkFinal.Replace("\x02", "").ToString().Trim();