搜索
bottom↓
回复: 19

如何加快GPRS通信速率?

[复制链接]

出0入0汤圆

发表于 2012-7-9 17:07:09 | 显示全部楼层 |阅读模式
用GPRS模块发送数据,发送的速度115200bps很快,但每个数据包发送后需要等服务器回执,这个时间一般几秒,太长了。有什么好的办法吗?

网上查一般都是1KB一个包,如果这样发送1MB文件,按3秒一包,需要50分钟!为什么不把包做大些呢?是不是GPRS模块长时间发数据会使丢数据的几率变大呢?

自己打算在发送所有文件包后统一由服务器给一个回执,标出缺失的文件包。例如先发送1000个包,然后服务器回执或者查询服务器知道缺失几号包,之后再重发,是否可行?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-7-10 13:57:37 | 显示全部楼层
"每个数据包发送后需要等服务器回执"是应用层的回执否,如果应用层完全自主设计,应该好办,充分利用GPRS信道的并发性,像文件传输这类数据相关性较弱的应用,完全可以将数据拆成很多子块,全双工多线程方式并行传输,比单线程每个数据包一应一答效率要高很多。

出1070入962汤圆

发表于 2012-7-10 14:06:49 | 显示全部楼层
采用内部有多个发送缓冲区的模块,可以进行并行发送,速度就快多了。因为网络本身是并发的,要充分利用带宽。
为什么包不能做大,这里涉及到网络层以下协议管理开销以及风险代价的问题,所以你现在能接触到的网络类型,都是很小的数据包,不会出现大数据包的。
一般网络上最大TCP封包也就1K多一点点,所以GPRS模块设为1K没有什么不合适。

出0入0汤圆

发表于 2012-7-10 18:00:36 | 显示全部楼层
你用内部的协议栈,就是这个速度,大概2~3k,如果你用外部的协议栈,大概模式就是拨号上网(把gprs模块当做一个modem),速度上能快点,如果你玩linux,还可以自己改协议,如果是嵌入式设备还可以用lwip,自己可以控制tcp的窗口数,来优化协议!

出0入0汤圆

发表于 2012-7-12 17:30:59 | 显示全部楼层
有可以每次发10K的GPRS模块,可以试试!

出0入0汤圆

发表于 2012-7-12 21:58:56 | 显示全部楼层
哈哈.用EDGE的模块上EDGE的网快些.

出0入0汤圆

 楼主| 发表于 2012-7-13 09:03:35 | 显示全部楼层
Appcat 发表于 2012-7-10 14:06
采用内部有多个发送缓冲区的模块,可以进行并行发送,速度就快多了。因为网络本身是并发的,要充分利用带宽 ...


谢谢大神苹果猫!我是自己用ARM做的DTU,裸奔,我理解你的意思是不是,例如我可以开10个1K的缓冲空间,不用等待当前1K缓存数据发送出去后的服务器回复,就可以发送下一个1K缓存,可能是我在发第10个1K缓存的时候才收到第1个1K缓存从服务器上发来的回复?这样跟之前的发1条等1条的方式比,就将速率调高了10倍,对吗?

出0入0汤圆

 楼主| 发表于 2012-7-13 09:28:03 | 显示全部楼层
jathenal 发表于 2012-7-10 13:57
"每个数据包发送后需要等服务器回执"是应用层的回执否,如果应用层完全自主设计,应该好办,充分利用GPRS信 ...

我是裸奔,并行操作是不是可以理解为一次性发送多条信息后,再等待多条信息对应的服务器回复?

出1070入962汤圆

发表于 2012-7-13 09:40:25 | 显示全部楼层
你的理解是对的
但是这里开多少个缓冲区并行,不是你说了算,而是看你手里的模块是不是可以支持。能支持的模块,内部有多个发送缓冲区,每条发送指令占用一个,这些缓冲区是可以并行的,不必等待每条发送都成功。

出0入0汤圆

发表于 2012-7-13 09:47:35 | 显示全部楼层
这依赖于你使用的GPRS模块的buffer大小,比如华为的GTM900C,内置有16个包缓冲,之前也是发一个包,等回应通常需要1~3秒,状况不好的时候可能需要几十秒,很慢,实际上你可以一次发16个包给模块,你发的过程可能前面包的回应已经过来了;这种方式速度提高10倍多,当然这依赖于模块的buffer大小,当然越大越好了。。。。

你自己MCU的内存也得够大,发送的buffer应该同模块的buffer一样,不过也要看应用需求了,这种方式是让模块带宽利用趋于极致,这样当你发现应该超时的时候,可以再次重发;TCP包是基于流的,因此超时后,应答少了几个就重发后面那几包数据就可以了,实际上我自己处理时偷了下懒,是如果应答超时,那16个包是全部重发的,处理上并不会有多大的简化,只是感觉上更保险了,但服务器那也要做检查重复数据的处理;

出0入0汤圆

发表于 2012-7-13 10:13:44 | 显示全部楼层
一次发送1M大小的文件 可以考虑用3G模块了,或者干脆采用带ftp协议的模块

出0入0汤圆

 楼主| 发表于 2012-7-13 11:52:46 | 显示全部楼层
Appcat 发表于 2012-7-13 09:40
你的理解是对的
但是这里开多少个缓冲区并行,不是你说了算,而是看你手里的模块是不是可以支持。能支持的 ...

我现在用的是华为的MG323,查了资料,没看到里面BUFFER是多大。
是不是像MG323这样的模块,也和DTU的原理一样,有一个大的BUFFER,不能持续的向里面发数据?这样的话如果知道BUFFER是否满呢?
还是说每个通道有一个BUFFER,这样的话是不是就不能用透传模式了(因为要区别通道)?

出0入0汤圆

 楼主| 发表于 2012-7-13 11:58:04 | 显示全部楼层
leehuabo 发表于 2012-7-13 09:47
这依赖于你使用的GPRS模块的buffer大小,比如华为的GTM900C,内置有16个包缓冲,之前也是发一个包,等回应 ...

现在我打算像你那样做。我用的是华为MG323,目前查不到它内部buffer的资料。像你说的GTM900C有16个包缓冲,那一个包最大到多少字节也是有限制的吧?

出1070入962汤圆

发表于 2012-7-13 12:03:32 | 显示全部楼层
GTM900C内部是16个缓冲区,每个1024字节
MG323内部是9个缓冲区,每个1024字节

使用缓冲区在GTM900C上没有任何问题,MG323上采用和GTM900C兼容的指令集也没有问题。但是如果采用和西门子兼容的指令集,目前不太清楚对缓冲区是如何操作的。

GTM900C每次AT%IPSEND后会出现%IPSEND 1,15这样的回复,其中15就表示他还有15个空闲缓冲区,AT%IPSEND?就可以查询目前模块还有多少个空闲缓冲区可以使用,当发送完成,缓冲区自动被释放。在MG323上上述指令也一样可以工作。

出0入0汤圆

 楼主| 发表于 2012-7-13 17:06:34 | 显示全部楼层
Appcat 发表于 2012-7-13 12:03
GTM900C内部是16个缓冲区,每个1024字节
MG323内部是9个缓冲区,每个1024字节

MG323的透传模式能这么做吗(它不会返回哪个buffer是空的)
另外我查了很多地方,也查不到关于MG323buffer的资料,请问是从哪里知道的是9K?
十分感谢

出1070入962汤圆

发表于 2012-7-13 17:23:12 | 显示全部楼层
为什么非得要用华为自己的透传呢,他那个透传做的像垃圾一样。什么复杂情况都处理不了。其实他的单独发送指令很不错的,自己做控制了,当然是要搞的细一些,完备一些,不能光图省事了。
至于那个9K的缓冲区,华为没有公开MG323的一部分指令,所以你自然不清楚了。尝试着用GTM900C的指令去操作一个MG323你就明白了。

出0入0汤圆

发表于 2012-7-13 19:33:45 | 显示全部楼层
资源够的话,最好还是整个TCPIP再加PPP拨号;
AT指令操作TCPIP数据看起来方便,其实麻烦多多,我花了大把的时间除错,几乎穷尽所有能遇到的错误,手册上很多细节都没有说明;

被动接收的数据,以及主动发送的AT指令的返回串,都是从同一个串口接收,很难分开,要做互斥处理,发送命令前要检查是否在接收数据,
还有正在发送数据时也不知道是否会出现接收数据的情况,加上掉线检测处理,麻烦多多,搞不懂为什么都要使用字符串。。。。

出1070入962汤圆

发表于 2012-7-13 20:01:35 | 显示全部楼层
leehuabo 发表于 2012-7-13 19:33
资源够的话,最好还是整个TCPIP再加PPP拨号;
AT指令操作TCPIP数据看起来方便,其实麻烦多多,我花了大把的 ...

看来这也是自己走过来的人啊。
当初这个东西是在一颗8位单片机上实现了,根本无法去奢望跑自己的协议栈。现在经历几年的升级,优化,移植,回头再看看,真有“古今多少事,都付笑谈中”的感觉

出0入0汤圆

发表于 2012-7-14 14:59:54 | 显示全部楼层
是啊,当时就是图省事啊,感觉扩展的TCPIP的AT指令用起来挺简单的,以为一个月连写带测肯定够了,后来第三个月还在找错……

出0入0汤圆

发表于 2012-7-14 15:05:40 | 显示全部楼层
其实那个AT指令就是给人工操作方便的,程序操作太不方便了,一点也不严谨;到最后发现,没省时间反倒是费了大把时间,
唯一就作用就是证明了这条路不是正道。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表