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

c++builder读串口数据讨论!解决方法

2012-02-04 
c++builder读串口数据讨论!!!最近用c++builder做一个串口程序,要从串口读两种数据包,包头和包尾相同,数据

c++builder读串口数据讨论!!!
最近用c++builder做一个串口程序,要从串口读两种数据包,包头和包尾相同,数据大小不同一个22字节,一个62字节,数据包的发包间隔不太固定,而且间隔在毫秒级的,在用串口控件YbCommDevice调试时不能正确读到数据,
在串口的YbCommDevice1CommNotify事件中读取串口数据
n = YbCommDevice1->Read(RevBuf,62);我设置的RevBuf[62]最大读62个字节的数据,但是返回的n值并不是22或者62,
请高手们指点一下,该怎么样处理串口才能读到正确的数据包!!

[解决办法]
这个简单,根据返回的n,应该表示的是读取到的数据,然后把这个数据保存在一个缓冲中,比如,第一次收到3个数据,保存到buffer里,第二次收到50个数据,依然保存在buffer里面,这个时候,buffer里有53个数据,然后根据包头包尾判断,比如,包头aa,包尾aa,那么先找到aa的数据,然后下移22个数据,看是否是包尾aa,如果不是,则下移62个数据,判断是否aa,如果是,则说明找到了62字节的包的数据,取出,然后从buffer中删除即可
[解决办法]
1.RevBuf[62]小了,这个BUFF应该大一点,1024比较好,因为要考虑到溢出的情况
2.一楼说的方法是对的,这并不是复杂的开销问题。用串口接收数据,必须这样做才行。
[解决办法]
用线程读应该更加方便的吧,好多类都可以直接拿过来用了;
对于接收的数据,我觉得还是一个字节一个字节的读取,然后边接收边对你的数据进行解析,直到解析成功,才说明接收到的数据完全,将之提取出来就是你所用的数据,然后清空缓冲区。这样的话你就不用在乎它到底会收到多少个数据了,

热点排行