btcq.net
当前位置:首页 >> C串口接收数据不完整 >>

C串口接收数据不完整

你调用ReadFile函数,一次接收多少字节,取决于两个因素: (1)串口缓冲区实际有多少 (2)你打算取多少ReadFile()函数的第三个参数表示你打算取多少,但如果你想去1024个,串口缓冲区只有500个,那你最多只能取500个.实际取了

你试试改下SerialPort 的Handshake设置,应该是这个原因.之前我也遇到过,一个属性一个属性的改,才找出来是这个原因.

你这种情况我以前也遇到过,根据实际情况有很多解决办法:1.你可以在接收事件函数的开始位置延迟一段时间,根据数据长度的不同可以适当改变延迟的时间.2.根据你接收的数据格式可以使用不同的Read方法.ReadTo()方法是直到读到相应的字符为止,ReadLine()方法是读到一个新行,Read()读取缓冲区的字节数.希望对你有帮助.不懂的话可以继续问.

你运行两个串口调试工具(一发一收),然后用你的软件也同样做这种测试看看,或者也可用你的软件发送数据到串口调试工具(也可以多试几种串口调试工具,有些也有问题的)

串口通讯不能保证一次能取到数据,包括你所想的500ms内的数据也是有问题的,这种问题一般的处理方法是1、在数据到达时接收数据,存入一个缓冲区(比如list或者queue)2、从缓冲区中处理数据,检查出是否有完整数据结构(比如有固定长度、或者有固定开头结尾)3、对完整的数据处理完成后,把处理这条完整数据从缓冲区删除,剩下的仍然放在缓冲区4、下一次数据到达时,将收到的数据与缓冲区数据合并,再次开始2

串口数据接收不完整,需要继续等后面的数据,进行拼接.拼接不成功的话,放弃全部数据,重新开始.、

你接受的是ASCII字符还是2进制的数据,如果是2进制的数据需要格式化成字符串才能显示出来.

要不你在那个循环里面 加一个休眠吧 再追踪一下Thread.Sleep(100);其它:建议你用工具跟踪一下,看什么情况下回发送失败,是数据没有发送成功还是发出去了没有接收

确认一下接收端是TTL串口还是RS232串口 这两个的逻辑电平是反过来的 如果你这个是9针串口后面还有MAX232这个芯片的说明是RS232接口 如果是直连的说明是TTL接口

正则表达式匹配 string s表达式"^oxaaoxaa.*?oxaa$" (^是开头 $是结尾 中间表示任意字符)如果匹配到了就说明数据完整,如果有换行注意改写

3859.net | rxcr.net | zxtw.net | so1008.com | prpk.net | 网站首页 | 网站地图
All rights reserved Powered by www.btcq.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com