一、太长不看:
给4G模组VBAT断电关机,模组关机前未能及时退出当前基站,会有什么影响呢?
基站会误以为设备还在线,下次开机仍会拿着上次驻网信息去连基站。基站一看,上次链接还在——认为你是非法设备,拒绝链接!
二、详细问题原因分析:
最近一两年,时常有客户朋友反馈,无论是合宙低功耗4G模组还是其他友商的模组——模块重启完成,注册不上网。
在这里详细记录下复现问题的过程、问题产生的原因以及规避方法,并提供一些比重启更好的办法,希望能帮到类似情况的朋友们。
以下是常见的4种关机重启情况:
1. - 功耗原因关机重启 -
客户反馈:
自己对功耗特别看重,需要极低的功耗,所以关机。在需要启动的时候,再给模块上电。
FAE解答:
在大多数人的认知里,只要关机肯定是比待机更省电的,实则不然。
比如大多数人家里的电视盒子:
当你按下遥控器的关机按键,其实只是切断了输出,你认为的关机状态,和电视盒子的开机状态,实际功耗区别并不是很大。
对4G模组来说,主要的耗电大头在于——刚开机驻网那一下,以及发送数据时候。
下图为使用Air9000P功耗分析仪测试Air780E,从开机开始的一小时,每隔一分钟往服务器发送一条消息的全段截图,可以明显看出耗电的大头。
所以,如果你的应用不会出现频繁发数据(低于一小时一次)给服务器,那么是可以通过关机来降低功耗的。
但是这种降低功耗的手段,还不是最优解。如果你一天发送数据多于4次,那么还有一种更好的方法来降低功耗——那就是用合宙的低功耗解决方案。
详见合宙4G超低功耗解决方案:
www.airpsm.cn
2- 网络原因关机重启 -
客户反馈:
我们的设备处于网络状态不太好的地方,在遇到网络不好的时候,我就重启自己设备,重新让模块驻网。
FAE解答:
模块驻网逻辑与掉线重连逻辑,是模块内部SDK自行处理的,掉网会给上层发送断网消息,用户只需要订阅对应消息即可。
重新驻网的逻辑其实模组内部也是有的,大多数情况下,不需要应用层做断网处理。如果用户对消息的及时性和准确性有要求,可以将模块与服务器的心跳间隔设置短一点。
AT版本:
设置心跳内容和心跳间隔的指令为:
AT^HEARTBEAT和AT^HEARTCONFIG
具体参数可以查看AT手册:
https://doc.openluat.com/article/4985
LuatOS版本:
可以查看socket.config接口,MQTT可以查看mqttc:keepalive接口。
具体接口描述参见:
https://wiki.luatos.com/api/index.html
3. - 续费原因关机重启 -
客户反馈:
有时候会因为自己续费不及时,导致SIM卡到期未续费,被停机,所以自己代码中做了处理,连不上网XX秒就断电再上电。
FAE解答:
其实可以先尝试进出一次飞行模式,没必要断电。
如果你很频繁的断电再上电,电源部分PCB设计如果有不完善的地方,很有可能出现超过VBAT最大电压的脉冲,进而可能导致模块损坏。
而且,模块内部SDK其实针对SIM卡未及时续费这种情况也做了一些处理。即使你什么都不做,到期两三天内续费成功,模块也会在10-30分钟内注册上网络,不用担心模块连不上网的问题。
4. - 服务器原因关机重启 -
客户反馈:
我们连的是客户服务器,客户服务器不稳定,时而能连时而不能连,所以在服务器连不上后,我们会断电重启模块,尝试看看能不能连上。
FAE解答:
模块驻网(连接4G基站)没什么问题,只是链接服务器失败,可以做一些重连处理,而不是频繁的去断电在上电。
如果以一个很频繁的速度(一分钟10次这种速度)去驻网,很有可能被基站认为是非法用户,导致基站内部防护策略生效,让模块再也连不上基站。
在这里可以推荐一种重连策略:
如果驻网正常,只是链接服务器异常,可以按照2^(n-1)S 的时间间隔去重连服务器。
例如:1S 2S 4S 16S 32S 64S…
当然,需要一个最大上限时间,例如10分钟。没有最大上限的话,可能导致服务器已经好了,而模块重连间隔时间过长,导致数据不能及时送达。
如果超出最大上限时间,服务器依旧连不上,再进出飞行模块几次(进出飞行模式的速度也不应过快,过快也有可能被基站认为是非法用户)。
如果依旧注册不上网络,再考虑给模块断电,然后重启模块。
综上所示,其实大多数情况,没必要给模块进行关机措施。
频繁的开关机,还有可能导致模块功耗异常或者注册基站都注册不上等问题。
如果需要进行关机:
建议还是关机前先进飞行模式,主动和当前基站进行一个注销的操作。