C# Serialport串口通讯,接收数据丢失
C# Serialport串口通信,接收数据丢失用DataReceived方法接收数据时有时候会丢失,尤其是在debug的时候,有时
C# Serialport串口通信,接收数据丢失 用DataReceived方法接收数据时有时候会丢失,尤其是在debug的时候,有时候甚至多定义几个变量,数据接收也会出现丢失,有什么办法可以解决吗? 请找缓冲区。。。之前有说过的 求链接 http://bbs.csdn.net/topics/390316188[解决办法] 如果是二进制,最好用流或buffer来操作。
while (i > 0) { int readBufCount = SerialPortClient.BytesToRead; if (readBufCount > 8) { m_autoPortEvent.WaitOne(40, false); readBufCount = SerialPortClient.BytesToRead; recvData = new byte[readBufCount]; SerialPortClient.Read(recvData, 0, recvData.Length); return recvData; } i--; } if (recvData == null) { throw new Exception("time out for getData"); }------解决方案--------------------
这里需要做一下同步处理。
[解决办法] 楼主,我这个思路绝对可以解决问题:
1、首先,建立缓存,接收数据直接入缓存,不要处理,委托之类!!!
2、改动接收门限,不要用默认的1!!!!
3,数据处理转换操作,不要在接收里面进行!!!!可以建立一个线程,检测步骤1里面的缓存,有数据就处理!!!
其他不多言!!!
我做过串口这块!!,绝对可以帮到你!!!
[解决办法] 引用: Quote: 引用: 1、可以,全局变量的缓存,可以写成一个类,实现数据入和出的操作,建议循环数组实现!!!(查找生产者和消费者问题MSDN) 2、触发门限为1时,有一个字节到达,马上触发接收,这个时候串口接收缓存中很可能是1个字节(2个,3个也有可能?),你这个时候接收就可能是1各字节然后,委托进入主线程处理,接收这块就卡了--。关于这个问题,你仅仅把接收门限改为30,应该就是30个字节,你可以试试? 最后 1、关于串口接收这个问题,用我上面的思路绝对没有问题,对于串行字节流,这个方法可以一直接收,门限要调 2、如果上位机发送的一帧帧的数据,也可以将这数据入缓存,后续数据帧处理时,在从中提取数据帧。 代码我就发提供了,相信你可以解决引用: 1、可以,全局变量的缓存,可以写成一个类,实现数据入和出的操作,建议循环数组实现!!!(查找生产者和消费者问题MSDN) 2、触发门限为1时,有一个字节到达,马上触发接收,这个时候串口接收缓存中很可能是1个字节(2个,3个也有可能?),你这个时候接收就可能是1各字节然后,委托进入主线程处理,接收这块就卡了--。关于这个问题,你仅仅把接收门限改为30,应该就是30个字节,你可以试试? 最后 1、关于串口接收这个问题,用我上面的思路绝对没有问题,对于串行字节流,这个方法可以一直接收,门限要调 2、如果上位机发送的一帧帧的数据,也可以将这数据入缓存,后续数据帧处理时,在从中提取数据帧。 代码我就发提供了,相信你可以解决 第一次PC传个字符串a去下位机,下位机返回一个a,也就一个字节,接收到a说明通信成功再进行下面的操作,如果门限不是1,这样是接收不到数据的PC与下位机之间的通信都有协议的,是你没看懂他协议还是啥的。