lklhzu 发表于 2013-9-13 08:21:37

怎样提高gprs设备网络连接的稳定性?

给公司做了一批数据采集的设备,将采集的数据用gprs模块通过TCP连接上报到服务器,一分钟上报一次,数据量一次几十个字节,24小时工作,发现晚上22:00-次日6:00这段时间,设备经常会断开连接好几次。在其他时间也会偶尔断开连接,查看信号强度都在20+,是TCP连接不稳定,还是基站不稳定啊?如何能提高gprs设备网络连接的稳定性?采用TCP+UDP双连接行不行呢?求大神指点!

Xiangxiang8 发表于 2013-9-13 08:26:24

是真的断开TCP链接了吗?还是假断?我们这边也是有一分钟一次的心跳帧,但是发送失败有,断开TCP的情况很少

ttoto 发表于 2013-9-13 08:44:32

"TCP+UDP双连接" 没有意义, 你知道服务器的地址建立TCP连接就好了。

lklhzu 发表于 2013-9-13 08:45:49

Xiangxiang8 发表于 2013-9-13 08:26 static/image/common/back.gif
是真的断开TCP链接了吗?还是假断?我们这边也是有一分钟一次的心跳帧,但是发送失败有,断开TCP的情况 ...

服务器端我用TCP/UDP socket工具侦听数据,串口接在gprs模块上,看MCU给模块发送指令和数据时,模块的返回值,有时发送完数据,模块会返回CLOSED(此时服务器的TCP/UDP socket并没关闭),收到“CLOSED”,MCU就认为连接断开了,就会重连接,难道有时收到“CLOSED”,连接不是真断开?

dadongleilei 发表于 2013-9-13 09:01:16

是真的断开了,本身GPRS网络就会有类似的问题,所以要处理好断线重连机制,这个概率跟你当地网络情况、基站负荷、信号等都有关系,当然跟gprs模块本身的质量也有关系

chendaon 发表于 2013-9-13 09:21:59

和GPRS网络有关,有时候会无缘无故的断开连接

windboy 发表于 2013-9-13 09:52:53

移动网络为了节约资源,对于不活动的链接要干掉的
另外,你需要一系列的状态机,控制网络连接

保证网络可用

orzorzorzorz 发表于 2013-9-13 09:59:11

GPRS来传送数据,必须做到可靠性,因为很可能会被手机网络服务器踢掉
可靠性靠你应用层去保证,主要是针对出错异常的处理。

1.能实时发现网络断开,要能立即连上(最多离线几秒)
2.能缓冲数据,而不是发送不成功就丢弃数据

ljt80158015 发表于 2013-9-13 10:11:52

也有可能是基站的原因,
发现晚上22:00-次日6:00这段时间,设备经常会断开连接好几次,说明不是这个原因“移动网络为了节约资源,对于不活动的链接要干掉的”
如果是这个原因,不会分白天、晚上会一样。

所以说基站的可能性很大,不同的地方基站容量不一样。 之前在宁夏做项目就遇到这样的问题,基站只应许多少数量的终端连接,当连接满的后,新来的连接会踢掉最老的连接。

windboy 发表于 2013-9-13 10:23:51

移动基站有容量限制,这个是肯定的
但你看他的时间,应该是属于闲时,这个成立的可能性不大哈

看情况,他自己没有处理好的可能性占多数

lklhzu 发表于 2013-9-13 10:47:04

windboy 发表于 2013-9-13 09:52 static/image/common/back.gif
移动网络为了节约资源,对于不活动的链接要干掉的
另外,你需要一系列的状态机,控制网络连接



一分钟报一次数据,属于活动的连接吗?程序里面时刻检测模块的返回值,碰到“CLOSED”或者“ERROR”之类的就会重新连接,这样可以吗?你说的那一系列的状态机能请教下吗?

lklhzu 发表于 2013-9-13 10:49:56

orzorzorzorz 发表于 2013-9-13 09:59 static/image/common/back.gif
GPRS来传送数据,必须做到可靠性,因为很可能会被手机网络服务器踢掉
可靠性靠你应用层去保证,主要是针对 ...

程序里面时刻检测模块的返回值,碰到“CLOSED”或者“ERROR”之类就会重新连接,这样可以吗?

lklhzu 发表于 2013-9-13 10:53:43

ljt80158015 发表于 2013-9-13 10:11 static/image/common/back.gif
也有可能是基站的原因,
发现晚上22:00-次日6:00这段时间,设备经常会断开连接好几次,说明不是这个原 ...

我也感觉是基站的原因,因为之前出现过连接上网络后,一发数据连接就断开的情况。后来找移动客服刷新了一下卡的网络,然后重启就好了。

orzorzorzorz 发表于 2013-9-13 13:04:44

lklhzu 发表于 2013-9-13 10:49 static/image/common/back.gif
程序里面时刻检测模块的返回值,碰到“CLOSED”或者“ERROR”之类就会重新连接,这样可以吗? ...

被基站踢掉是没关系,关键在于你的设备能检测到被踢掉。
说说我的经验,设备布局在杭州,服务器在北京,数据库在杭州,也就是设备数据通过gprs发到北京后,又转发回杭州,心跳是5分钟。
最长gprs连接不断线是3-4天(程序里我有很多和gprs相关的参数,比如连接时长,断开时长,连接的时间信息,断开的时间信息等),断线后,能立马连上,一般3秒内就重连成功了,2个月下来,基本没有太多的离线时间。

你程序要做的,就是能及时发现tcp连接被close 的信息,发现后就再次重连
此外你应用程序也要做ack可靠性保证,如果发出去数据没ack,并且重试n次也没ack,那么你要重新连接了
此外数据要有缓冲队列,用来缓冲发送不成功的数据
有了这两点保证,基本上,及时被基站踢掉或者其他原因,你的系统还是可靠的

honami520 发表于 2013-9-13 13:20:38

呵呵,有的人觉得GPRS简单,就是因为忽视了这个里面的各种潜在意外因素!楼主还得多努力

windboy 发表于 2013-9-13 13:37:59

lklhzu 发表于 2013-9-13 10:47 static/image/common/back.gif
一分钟报一次数据,属于活动的连接吗?程序里面时刻检测模块的返回值,碰到“CLOSED”或者“ERROR”之类 ...

你用的是模块自己的协议栈说

这个只有你自己多处理一下了

一般模块自己的栈优化都不怎么样的,只是保证能通就行了

或多或少都会存在这样或那样的问题。

lklhzu 发表于 2013-9-13 18:19:44

orzorzorzorz 发表于 2013-9-13 13:04 static/image/common/back.gif
被基站踢掉是没关系,关键在于你的设备能检测到被踢掉。
说说我的经验,设备布局在杭州,服务器在北京, ...

好的,谢谢你分享这么宝贵的经验,我在程序里面再多加点判断!

lklhzu 发表于 2013-9-13 18:22:23

windboy 发表于 2013-9-13 13:37 static/image/common/back.gif
你用的是模块自己的协议栈说

这个只有你自己多处理一下了


“一般模块自己的栈优化都不怎么样的,只是保证能通就行了”,此话怎讲?你们自己写协议栈吗?

orzorzorzorz 发表于 2013-9-13 18:46:04

lklhzu 发表于 2013-9-13 18:19 static/image/common/back.gif
好的,谢谢你分享这么宝贵的经验,我在程序里面再多加点判断!

建议你多加一些和gprs相关的参数,出了错误还可以分析原因
下图是我的一些参数,可以参考下

lklhzu 发表于 2013-9-14 08:11:48

orzorzorzorz 发表于 2013-9-13 18:46 static/image/common/back.gif
建议你多加一些和gprs相关的参数,出了错误还可以分析原因
下图是我的一些参数,可以参考下
...

厉害,你这个设备参数做的真详细,向你学习!

32MCU 发表于 2013-9-14 10:08:58

经验比较重要!

cpu100 发表于 2013-9-14 10:19:45

向楼上高手学习了

lklhzu 发表于 2013-10-14 11:54:30

orzorzorzorz 发表于 2013-9-13 13:04 static/image/common/back.gif
被基站踢掉是没关系,关键在于你的设备能检测到被踢掉。
说说我的经验,设备布局在杭州,服务器在北京, ...

你好,请问你们设备有没有出现过因为移动基站网络更新或者切换造成设备连接不上服务器,需要找客服刷新SIM卡网络,然后再重启设备的情况?

Appcat 发表于 2013-10-14 12:05:46

提高稳定性

首先从硬件上保证:电源供电能力充足,走线满足突发电流要求,电压跌落尽量小,SIM卡线路良好的布线与屏蔽,RF部分良好的匹配与天线SWR尽量小
然后是软件上的措施:应用层协议上的ACK机制,网络无响应的故障预判,明确的掉线指示及时处理,GSM模块内部故障预判以及硬件冷启(需要硬件配合)。

即使是网络优化升级后需要客户更新一下SIM卡后台参数,也不会需要去动设备,设备会自己重启GSM模块的。

orzorzorzorz 发表于 2013-10-14 12:32:47

lklhzu 发表于 2013-10-14 11:54 static/image/common/back.gif
你好,请问你们设备有没有出现过因为移动基站网络更新或者切换造成设备连接不上服务器,需要找客服刷新SI ...

现场设备在线工作已经将近4个月,目前没遇上你说的情况
4个月下来,断线次数大概30次,但是每次断线一般就4秒后马上重新连上,对数据传输无任何影响
你应用程序有了断线检测的话,设备会可靠很多。

lklhzu 发表于 2013-10-14 13:33:40

orzorzorzorz 发表于 2013-10-14 12:32 static/image/common/back.gif
现场设备在线工作已经将近4个月,目前没遇上你说的情况
4个月下来,断线次数大概30次,但是每次断线一般 ...

挺稳定的,请问你们用的哪家的模块?

lklhzu 发表于 2013-10-14 13:50:50

Appcat 发表于 2013-10-14 12:05 static/image/common/back.gif
提高稳定性

首先从硬件上保证:电源供电能力充足,走线满足突发电流要求,电压跌落尽量小,SIM卡线路良好 ...

猫大侠现身了啊!我们用的simcom的模块,也有买来的DTU,用的也是simcom的模块,用了快一年了也出现过一次需要刷新SIM卡,感觉这个模块不太可靠啊!

Appcat 发表于 2013-10-14 14:16:51

SIMCOM没有用过,不评论。但是不管什么模块,外围的硬件和软件才是提高稳定性的关系。

blueagle888 发表于 2013-10-14 18:18:54

你可以参考一下腾讯和移动的口水贴,那个QQ 几秒就要活动一下,以维持链接。

orzorzorzorz 发表于 2013-10-16 16:59:15

lklhzu 发表于 2013-10-14 13:33 static/image/common/back.gif
挺稳定的,请问你们用的哪家的模块?

移远M72
为了字数,只好再写一遍 移远M72
页: [1]
查看完整版本: 怎样提高gprs设备网络连接的稳定性?