tnjk.net
当前位置:首页 >> 串口接收 不完整 >>

串口接收 不完整

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

《 串口中怎样接收一个完整数据包的解析 》 这篇博文应该会对这个问题有帮助。 使用时间来判断一个完整的包 比较通用吧。

原因:串口内部是用一个线程DataReceived触发事件,但它是不断触发的,界面收到通知的时候串口内部状态实际上可能已经发生变化。 解决:自己建立一个byte或string的队列,拼接拆分(这就要求必须有自定义的终止符)

串口的默认停止符是0A,你出现0A,它就会停止接收,所以需要在VISA Configure Serial Port(VISA配制串口)控件的启用终止符(T)端口上连一个值为False的常量

串口收数据,有时候一次本来就收不完整,你需要有个接受缓存,收到的数据全部放到缓存中,当收集完整了,才开始干你的事情,收不完整,我经常遇到到,都是这样解决的 for(k=0;k

查找原因呗,硬件有没有问题,程序有没有问题,那得你自己查找,别人怎么如何解决,一句如何有什么用?

你所说的多发几次就有反应的状况其实是你运气好,因为loop是一直循环的,所以里面的代码一遍遍一行行往下运行,比如你正好在运行Serial.Read()命令前传送了,那就可以进行判断。 所以,要先判断有没有数据传输过来,再进行判断。 另外,Serial.R...

你这种情况我以前也遇到过,根据实际情况有很多解决办法:1.你可以在接收事件函数的开始位置延迟一段时间,根据数据长度的不同可以适当改变延迟的时间。2.根据你接收的数据格式可以使用不同的Read方法。ReadTo()方法是直到读到相应的字符为止,R...

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

不要使用inputStream.available(),如果我没有记错的话,available返回的是没有被阻断的字节数(已经被缓冲的内容),可以尝试read(byte b[])方法,然后通过返回值是否-1来判断,如下。 int bytesRead = inputStream.read(readBuffer); while (b...

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