我有一C#编写的上位机软件与下位机通讯,下位机是C语言的程序,上位机的串口接收类是SerialPort,偶尔会有问题是会收到一些下位机程序中没有的数据,如00E4C8EBB5C4D0D4B1F03D300D0ACAE4C8EBB5C4D1AABAECB5B0B0D,请问这是什么原因?硬件中如串口或数据线或单片机会导致这样吗?还是说serialport这个类本身就不完善。
太古老了,不懂,可能是有干扰
串口通信很容易受到干扰的(比如有的设备抖两下就有干扰)
在受到干扰时,可能会产生多余的无效数据,或影响正常传输的数据
因此,串口通信需要做传输数据的校验,例如按这样的格式传输
1字节固定值|2字节数据长度|真正有效数据|2字节crc16校验
(你碰到的问题不一定是干扰导致的,但做好传输校验后,就能解决这个问题)
第一检确定你就接了一个串口设备。排除其他设备的干扰,
第二 用串口助手一类的工具接收一下。看看有没有多余数据,排除你代码有没有问题。
第三 你在确定下是不是粘包了,如果采用串口接收触发事件读取,就要在该事件内做好切包 和缝包的工作,或者根据你的波特率和将要接收的包的长度算好一个大概的时间去读取会好一点。