关于串口读取大数据的问题【急,在线等】

xiaoyu_code 2012-10-18 04:59:03
假设对方是一个工控机,我这边是一个PC机。
我现在有几个问题不是很明白:
1、串口通信保证数据的完整性吗?就是对方一次性发送一串很长的数据,有可能超出我设定的缓冲区(SetupComm这个API设定的缓冲区)。如果超出了,数据会存在否?(希望尽量详细)

2、ReadFile是读取上面设定的缓冲区中的数据么?怎么样保证把上面设定的缓冲区数据全部ReadFile出来呢?
...全文
325 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyu_code 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

不知道楼主的readfile是不是重叠方式的如果是IO完成会返回读取到的数据,如果不是重叠只有等收到了你的setupcomm所设定的缓冲区大小数据后才返回,如果你的工控机是51、52RC之类的MCU,他不可能一次性给你发很大的数据他也是一个一个包发的。而且他还要考虑电流干扰等处理,你们的数据包应该有校验处理。
[/Quote]

不是重叠方式
xiaoyu_code 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

1.自定义通信协议
2.自定义通信协议

注释1:根据自己的协议把数据分帧发送。超过缓冲区大小的就完蛋了。没地方存了
注释2:有时候数据刚到达,但是没组成完成的内容,足够PC机去解析,那就不能执行ReadFile,执行了也是浪费。等完整的一帧数据达到后再读。

一般是
识别号+帧长+控制帧+帧内容+CRC校验
[/Quote]
我这样理解,看对不对,就是串口按硬件来说,建立连接后,不论对方发送什么数据、多长的数据都会接收,软件需要获取数据,就需要另外开辟缓存空间来ReadFile,这样可以通过ReadFile前面几个字节,解析出数据长度,分配空间,再次ReadFile所有的数据。

协议定的是:帧头+命令字+数据块长度+数据块+校验字

lgstudyvc 2012-10-19
  • 打赏
  • 举报
回复
你们怎么订的协议?
按照协议收、发,还会超出?
fang 2012-10-19
  • 打赏
  • 举报
回复
不知道楼主的readfile是不是重叠方式的如果是IO完成会返回读取到的数据,如果不是重叠只有等收到了你的setupcomm所设定的缓冲区大小数据后才返回,如果你的工控机是51、52RC之类的MCU,他不可能一次性给你发很大的数据他也是一个一个包发的。而且他还要考虑电流干扰等处理,你们的数据包应该有校验处理。
xiaoyu_code 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
怎么接收是要看下位机怎么发的,如果它的数据是先发一批给你,你收到后匹配应答,正确给它回个应答,然后它再发,你再收,如果它是一次性全部发给你,比如你给下位机发命令要求它给你发数据,它就每次给你发500个数据上来,你只要ReadFile(m_hComm,recvBuf,500,&dwLength,NULL);这样开辟500个缓存来接收就可以了,接收到的数据都在unsigned char *recvBuf=new unsigned char[1024];里,然后你直接recvBuf[i]来拿数据用就可以了
[/Quote]

ReadFile的接收缓存应该和SetupComm设置的缓存空间有关吧,我觉得ReadFile接收缓存应该<=SetupComm设置的缓存。目前,我这边读取的数据可能有5w+,也可能只有500不到,不定长,new一个大空间来存,感觉这样不是很好吧...
傻X 2012-10-19
  • 打赏
  • 举报
回复
1.自定义通信协议
2.自定义通信协议

注释1:根据自己的协议把数据分帧发送。超过缓冲区大小的就完蛋了。没地方存了
注释2:有时候数据刚到达,但是没组成完成的内容,足够PC机去解析,那就不能执行ReadFile,执行了也是浪费。等完整的一帧数据达到后再读。

一般是
识别号+帧长+控制帧+帧内容+CRC校验
jiuzhoulh 2012-10-19
  • 打赏
  • 举报
回复
可能分批次发送,并且一问一答要可靠一些
Ginie 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

1.超出了只会受到你缓存设定那么大小多的数据,后面的就收不到
2.ReadFile是读取缓冲区数据,要想把数据都读出来,把第三个参数设置的比下位机发上来的数据多就行


因为对方是一次性发送很大的数据,我这边的串口是怎么接受数据的呢,是分批次接收,还是一次性接收?你说的后面收不到,感觉像是分批次接收。
[/Quote]
怎么接收是要看下位机怎么发的,如果它的数据是先发一批给你,你收到后匹配应答,正确给它回个应答,然后它再发,你再收,如果它是一次性全部发给你,比如你给下位机发命令要求它给你发数据,它就每次给你发500个数据上来,你只要ReadFile(m_hComm,recvBuf,500,&dwLength,NULL);这样开辟500个缓存来接收就可以了,接收到的数据都在unsigned char *recvBuf=new unsigned char[1024];里,然后你直接recvBuf[i]来拿数据用就可以了
xiaoyu_code 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1.超出了只会受到你缓存设定那么大小多的数据,后面的就收不到
2.ReadFile是读取缓冲区数据,要想把数据都读出来,把第三个参数设置的比下位机发上来的数据多就行
[/Quote]

因为对方是一次性发送很大的数据,我这边的串口是怎么接受数据的呢,是分批次接收,还是一次性接收?你说的后面收不到,感觉像是分批次接收。
cy2015yc 2012-10-18
  • 打赏
  • 举报
回复
一次读取不完,可以循环的读。
BOOL ret = ReadFile(handle, buffer, bytesToRead, bytesOfRead, NULL);
DWORD totalBytesOfRead = bytesOfRead;;
while (bytesOfRead > 0 && ret)
{
ret = ReadFile(handle, buffer, bytesToRead, bytesOfRead, NULL);
totalBytesOfRead += bytesOfRead;
}
Ginie 2012-10-18
  • 打赏
  • 举报
回复
1.超出了只会受到你缓存设定那么大小多的数据,后面的就收不到
2.ReadFile是读取缓冲区数据,要想把数据都读出来,把第三个参数设置的比下位机发上来的数据多就行
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于stm32开发板的智能农业系统C源码+项目说明.zip 实验器材: 探索者STM32F4开发板 实验目的: 学习STM32模拟IIC的使用,驱动24C02实现EEPROM数据读写. 硬件资源: 1,DS0(连接在PF9) 2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面) 3,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD片选/A6接RS) 4,按键KEY0(PE4)/KEY1(PE3) 5,24C02(IIC连接在PB8/PB9上面) 实验现象: 本实验通过KEY1按键来控制24C02的写入,通过另外一个按键KEY0来控制24C02的读取。并在LCD模块上面显示 相关信息。同时,我们可以通过USMART控制在24C02的任意地址写入和读取数据。 注意事项: 1,4.3寸和7寸屏需要比较大电流,USB供电可能不足,请用外部电源适配器(推荐外接12V 1A电源). 2,本例程在LCD_Init函数里面(在ILI93xx.c),用到了printf,如果不初始化串口1,将导致液晶无法显示!!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧