hy8649241 发表于 2010-1-22 23:53:58

我测试了一个小时,实在是没办法了问下苹果猫

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527659.jpg
(原文件名:1.jpg)


我测试了一个小时,实在是没办法了问下苹果猫
从图中可以看出,后面的时间就是接收数据的时间

我想知道被移动踢下线是被断开了哪一项,我自己测试了一个多小时实在是没办法了

AT%IPOPEN   是链接被断开,
AT%ETCPIP   还是分配IP的IP被断开,
AT+CGDCONT    还是注册移动的CMNET网关被断开

Appcat 发表于 2010-1-23 19:43:03

被移动踢下线,实际上单从GPRS向服务器发送数据是不容易看出来的,因为GPRS号称永远在线,你应该试试从服务器发送数据给GPRS模块,
一般间隔几十秒或者几分钟就收不到了。实际上断开的只是一个移动内部的映射关系,模块的IPOPEN是没有断开的,而且在模块主动发送数据时断开的映射关系还能自动恢复。
如果你等待足够长时间,几十分钟,会收到%IPCLOSE: 5,这个就是PPP的断开了,就是ETCPIP指令分配的IP,这个和上面的不一样的概念。
AT+CGDCONT仅仅是指定一个接入点的命令,设置参数,不存在断开的说法

hy8649241 发表于 2010-1-24 19:51:24

感谢,说得很详细

还有一想问你,我只要GPRS模块发数据到服务器,也就是PC,在没有收到%IPCLOSE: 5以前,我随时都可以从GPRS发数据,你说映射关系能自动恢复

我理解的对吗

chendaon 发表于 2010-1-25 10:23:46

请教一下【1楼】 Appcat 苹果猫,你的GPRS DTU怎么固定,看资料貌似无法安装在机箱内?我需要一下可以固定在机箱内的

maomaobubian 发表于 2010-1-28 10:52:16

不知道楼主使用的是那一款猫。我打算发送完一帧GPRS数据之后,查看一下有没有得到TCP应答(用AT%IPSEND?命令),如果得到了再继续发送下一帧,没有得到再重发,再加上一个重发次数阈值来断线重新连接就能保证数据的发送成功率了,而且也不用什么心跳包了;我是用的HUAWEI900C。

maomaobubian 发表于 2010-1-28 11:14:54

请脚苹果猫我的方法是否可行?

Appcat 发表于 2010-1-28 11:16:59

还有一想问你,我只要GPRS模块发数据到服务器,也就是PC,在没有收到%IPCLOSE: 5以前,我随时都可以从GPRS发数据,你说映射关系能自动恢复

我理解的对吗
--------------------------------------------------
只要你收到了%IPCLOSE; 1或者发送报链路错误,就要断开TCP重新连接了,映射不是你我能决定的,GPRS网络是出了名的复杂。要自己在程序端多做处理,不能去假想网络会怎么样。

Appcat 发表于 2010-1-28 11:19:46

请教一下【1楼】 Appcat 苹果猫,你的GPRS DTU怎么固定,看资料貌似无法安装在机箱内?我需要一下可以固定在机箱内的
--------------------------------------------------------------
那天在旺旺上面已经说了,这个款的DTU目前有两种安装方式,一种是带外壳,这个外壳背面有个安装槽,我们提供一个安装条,插入安装槽,安装条会从合资两头各伸出10mm,有安装螺丝孔。
第二种安装方式就是不用外壳,直接安装电路板,板上有定位孔,我们提供电路板的安装孔以及外部尺寸图纸。

litteworm 发表于 2010-1-28 11:57:20

我的一般做法是发送一包数据后 开始计时
到达我所承受的超时(因为每秒都有新数据到来 新数据比旧数据重要)
就马上断开 重新链接 重新发送

一般发送成功返回标志到达的时间是3-6S
比如我的超时是12S 一到12S没有返回发送成功标志 我就断开重连
其实 测试的时候发现 很多时候15S 或者 18S就返回发送成功标志
但是没办法 不能老等 要是20S还没返回 那就更亏了


请问苹果猫 我这样做对不对?
频繁 重连是不是对模块很损伤?
ps:重连一次的时间代价也挺大的 不好平衡啊

acer 发表于 2010-1-28 11:59:10

关注一下

Appcat 发表于 2010-1-28 13:21:03

【4楼】 maomaobubian :   正解!不过GTM900C的内部缓冲很大的,这样就只能利用1K了,实际使用时要注意效率与可靠性的平衡。
【8楼】 litteworm :你为什么每次要断开呢?自己做个交互的协议不就OK了吗,发送数据对方是否收到不是一目了然吗。

hy8649241 发表于 2010-9-7 19:42:49

【4楼】 maomaobubian

不知道楼主使用的是那一款猫。我打算发送完一帧GPRS数据之后,查看一下有没有得到TCP应答(用AT%IPSEND?命令),如果得到了再继续发送下一帧,没有得到再重发,再加上一个重发次数阈值来断线重新连接就能保证数据的发送成功率了,而且也不用什么心跳包了;我是用的HUAWEI900C。
*-------------------------------------------------
我用的310我发送完一个数据后不用AT%IPSEND="数据"也会反回一个结果,
这个结果和发送AT%IPSEND?结果一样吗,没测试过,

平常返回15接收端可以收到数据,担过了好长时间后,大概一个小时也是同样返回15,但接收端收不到数据,大根过5秒左右,模块返回一个%IPCLOSE: 5

1、猫能解释一下这个吗,
2、如果说AT%IPSEND="数据"返回的结果和AT%IPSEND?返回的结果是一样的,那么这种情况下AT%IPSEND?有何意义了,

不是不测试,是要等的时候太久了,在深圳,我试过要大于50分钟以后才有这个现象,试一下的时间太长

Appcat 发表于 2010-9-10 09:17:53

要理解AT%IPSEND?指令返回的数据是什么意思,这个很重要,这里华为借鉴了TCP协议里边滑动窗口的概念,他具有16个发送窗口,每发送一个数据包,就占用一个窗口,所以在发送指令后面常常看到返回15,就是当前数据包占用了一个,余下15个空闲。如果连续发送,就能看到返回数变小了,说明前面发送还没完成,后面数据又进去占用余下的窗口了。

当TCP数据发送成功,模块就会释放占用的窗口,这样,空闲的窗口数就能回复到16了,不信,可以在没有发送数据前执行AT%IPSEND?查询。返回15只能说明当前数据包已经被模块接收,还没有发送成功。

华为模块的这个窗口机制,搞得指令系统理解、编程都很复杂,但是它带来了巨大的性能优势,16个窗口,每个窗口最大数据包是1024字节,也就是说模块能够缓存16K用户数据,这个缓冲大小,目前在我所接触过的模块中无出其右。同时,如果程序能够检查被占用的窗口释放情况,在配合一些经验算法,就能对当前网络通信状况作出评估和预测,这个也是TI为华为定制的内核独特功能

关于过了很长时间,发会15但是接收端没有数据,这个就是中移动的GGSN的罪过了。模块的TCP协议是和GGSN连接的,而不是直接和你的服务器连接的,这里GGSN起了一个接力和中转的作用。但是GGSN的资源是有限的,当你的模块很长时间没有数据传输时,它给你准备的端口就会被释放,留给其他GPRS终端使用,但是你模块这边的TCP连接还是完整的,所以就会出现这种情况,至于IPCLOSE:5,自然是网络给你把PPP断开了,希望你重新PPP,这个和GGSN超时释放没有直接关系。PPP的超时很长,但是TCP端口映射的超时很短,一般就几分钟。

对于有些网络,GGSN在超时后,发现你有数据,就会重新给你分配一个端口,这样就又可以传输了,有些网络,就不再给你分配,需要你自己重新连接TCP,这个就是不同地区网络或者不同类型SIM卡的区别,没有任何正式文档列出了这种区别,这就是GSM网络的复杂性。

鉴于这个复杂性,很多时候需要用户在自己的协议中进行可靠性的检测,最简单的例子就是一问一答+超时重发,基本就能建立一个可靠的信道。不能完全依赖于模块自身的指令体系。

yalihendaya 发表于 2010-10-18 17:30:21

mark

DoDo915 发表于 2010-10-18 20:35:43

Mark

yaya001 发表于 2010-10-18 22:33:43

Mark

wangourdev 发表于 2012-3-8 09:52:57

回复【1楼】Appcat 苹果猫
    你应该试试从服务器发送数据给GPRS模块,一般间隔几十秒或者几分钟就收不到了。实际上断开的只是一个移动内部的映射关系,模块的IPOPEN是没有断开的,而且在模块主动发送数据时断开的映射关系还能自动恢复。 如果你等待足够长时间,几十分钟,会收到%IPCLOSE: 5,这个就是PPP的断开了,就是ETCPIP指令分配的IP,这个和上面的不一样的概念。

-----------------------------------------------------------------------

    请教苹果猫,GPRS模块连接上服务器之后,如果几十秒或者几分钟之内服务器没有发数据给模块,链接就好像断了,模块就收不到数据了,这个时间是不是会不停的变化啊?年前我试过八分钟都没问题,可是年后最多也就一分钟了,一分钟之后就收不到了。这个时间跟什么有关呢?谁有权利设置这个时间呢?

Appcat 发表于 2012-3-8 10:44:23

不管谁有权力设定这个时间,反正你没有,所以你在设计的时候就不能想当然的去利用这个时间,而要依靠自己来解决这个问题。最简单的就是用模块发送心跳包。
页: [1]
查看完整版本: 我测试了一个小时,实在是没办法了问下苹果猫