天线|RF射频
直播中

冯瑾娜

7年用户 182经验值
私信 关注
[问答]

GPRS以TCP上传数据到服务器OK但不能收到服务器下发的数据

1.sim800c 以TCP方式连接到服务器,然后每2秒上传几十到几百字节的数据到服务器,服务器能正常接收。
2.服务器每隔1分钟下发一条4字节以上(含)的数据到sim800,sim800可以正常接收到。
3.工作一段时间后,sim800上传数据OK,服务器确实收到了。但却收不到服务器下发的数据。以后就一直收不到。
4.做测试时(12小时),sim800可以一直上传数据保持不掉线,服务器也能接收到数据。但过不定的时间后,sim800收不到服务器数据。
5.假若没收到服务器数据,延时1分后,sim800主动断掉连接,然后重连OK。
6.GPRS开两个socket(0和1),快速发送模式。实际只连接了一个服务器。发送时,延时以等待回应。
部分流程:
       ......初始化等
       SIM_Usart_Send("AT+CIPMUX=1rn", 13);          //串口发送启动多路链接
       SIM_Usart_Send("AT+CSTT="CMNET"rn", 17);   //启动任务
       SIM_Usart_Send("AT+CIICRrn", 10);              //激活移动场景
       SIM_Usart_Send("AT+CIFSRrn", 10);              //获取IP
       SIM_Usart_Send("AT+CIPQSEND=1rn", 15);        //快速发送模式
       "AT+CIPSTART=1,"TCP","%d.%d.%d.%d","%d"rn"  // 只连接了一个服务器
7.STM32F103RC,采用DMA接收sim800串口数据。在串口中断函数中判断“+RECEIVE"和"1,CLOSE",只置标志位。
8.之前采用状态机(不等待sim800状态响应)发送和接收处理的时候,也是同样的情况。
9.GPRS心跳维持连接,但我这边有2秒上传数据,下发也有。
10.每天我们需要发送5M左右的数据。不知道是不是数据量太大了.sim800的PE说一天五六兆是可以的。不知道大家有没有遇到过。卡这里一周了。

回帖(5)

杨思

2019-4-28 10:33:48
试试直接用串口调试助手测试,看看是SIM800C无响应,还是你的接收代码有bug?
举报

牛晓渊

2019-4-28 10:44:32
串口调试助手不能用(首次连接时服务器会给token,然后MCU根据token对采集的数据加密,与服务器之间还有心跳机制,所以搞不了)。
接收代码:
void USART2_IRQHandler(void)
{
        if((0x10 & USART2->SR))
        { DMA的处理,字符串匹配}
DMA方式接收的,使用的串口空闲中断。串口接收缓存1460字节。
昨个晚上测试了两台(sim800和sim868),今早查看有12和14小时保持不掉线,都能正常收到服务器发的心跳,且上传数据都正常。
数据发送有一定的几率失败("SEND FAIL"),不常见,但出现就会连续。
今个我再看看。
举报

于敏

2019-4-28 11:04:11
楼主好,问题解决没有啊?我也遇到了,看到加Q974878595沟通一下
举报

h1654155275.5879

2019-4-28 11:14:41
哈哈,这问题我N年前遇到过,是基站漂移的问题,,,解决也很简单,服务器每收到一次SIM800的数据时,更新它的socket就行了。我现在有大量使用SIM800这个芯片,只要刷新它的socket,多久都不会断线重连,数据通信正常。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分