中级会员
- 积分
- 377
- 金钱
- 377
- 注册时间
- 2013-3-1
- 在线时间
- 50 小时
|
1金钱
最近在调 sim800c gprs长连接,正常的时候一切都好。当出现断线的时候 如何重拨就成了关键的一环。
实际调试的时候通过拔掉天线测试断线 接上天线回复则认为实现了重新连接。
事实上我之前使用了断线后进入超时造成看门狗复位单片机,然后循环查询gprs信息,直到恢复后在进行其他程序 也能达到效果,反正gprs不通的话设备也没啥鸟用了。
但总觉得这样有点不科学,gprs不通单片机重启死等 有点傻 呵呵。
后来移植原子的例程。
断线重播部分是靠if判断,断线或者心跳丢失8次重播,重播后清零心跳计数和连接状态。
然后再查询函数里得到连接状态为0 ,2秒查询一次。查到断开又进入重播函数。
查到连接进入心跳函数。
视乎很完美。但是测试发现,不行啊 。死了重播不成功。分析发现可能问题。查询函数既没得到连接=1也没得到 =2 ,一直是0 ,也就是一直是没连接。
这样再也进不了重播函数里了。无法完成重播。
[mw_shl_code=applescript,true] if(connectsta==2||hbeaterrcnt>8)//连接中断了,或者连续8次心跳没有正确发送成功,则重新连接
{
sim900a_send_cmd("AT+CIPCLOSE=1","CLOSE OK",500); //关闭连接
sim900a_send_cmd("AT+CIPSHUT","SHUT OK",500); //关闭移动场景
sim900a_send_cmd(p,"OK",500); //尝试重新连接
connectsta=0;
hbeaterrcnt=0;
}
sprintf((char*)p1,"ATK-SIM900A %d测试 %d ",num,count);
// Show_Str(30+54,100,200,12,p1,12,0);
}
if(connectsta==0&&(timex%200)==0)//连接还没建立的时候,每2秒查询一次CIPSTATUS.
{
sim900a_send_cmd("AT+CIPSTATUS","OK",500); //查询连接状态
if(strstr((const char*)USART2_RX_BUF,"CLOSED"))connectsta=2;
if(strstr((const char*)USART2_RX_BUF,"CONNECT OK"))connectsta=1;
}[/mw_shl_code]
|
|