首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# Serialport串口通讯,接收数据丢失

2013-07-01 
C# Serialport串口通信,接收数据丢失用DataReceived方法接收数据时有时候会丢失,尤其是在debug的时候,有时

C# Serialport串口通信,接收数据丢失
用DataReceived方法接收数据时有时候会丢失,尤其是在debug的时候,有时候甚至多定义几个变量,数据接收也会出现丢失,有什么办法可以解决吗?
请找缓冲区。。。之前有说过的C# Serialport串口通讯,接收数据丢失求链接
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与下位机之间的通信都有协议的,是你没看懂他协议还是啥的。

热点排行