OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6855|回复: 5

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

[复制链接]

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-1-12
在线时间
12 小时
发表于 2018-1-12 17:44:39 | 显示全部楼层 |阅读模式
1金钱
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=1\r\n", 13);          //串口发送启动多路链接
       SIM_Usart_Send("AT+CSTT=\"CMNET\"\r\n", 17);   //启动任务
       SIM_Usart_Send("AT+CIICR\r\n", 10);              //激活移动场景
       SIM_Usart_Send("AT+CIFSR\r\n", 10);              //获取IP
       SIM_Usart_Send("AT+CIPQSEND=1\r\n", 15);        //快速发送模式
       "AT+CIPSTART=1,\"TCP\",\"%d.%d.%d.%d\",\"%d\"\r\n"  // 只连接了一个服务器
7.STM32F103RC,采用DMA接收sim800串口数据。在串口中断函数中判断“+RECEIVE"和"1,CLOSE",只置标志位。
8.之前采用状态机(不等待sim800状态响应)发送和接收处理的时候,也是同样的情况。
9.GPRS心跳维持连接,但我这边有2秒上传数据,下发也有。
10.每天我们需要发送5M左右的数据。不知道是不是数据量太大了.sim800的PE说一天五六兆是可以的。不知道大家有没有遇到过。卡这里一周了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-1-13 00:51:19 | 显示全部楼层
试试直接用串口调试助手测试,看看是SIM800C无响应,还是你的接收代码有bug?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2018-1-12
在线时间
12 小时
 楼主| 发表于 2018-1-13 09:20:33 | 显示全部楼层
正点原子 发表于 2018-1-13 00:51
试试直接用串口调试助手测试,看看是SIM800C无响应,还是你的接收代码有bug?

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

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2018-9-25
在线时间
1 小时
发表于 2018-9-25 10:04:46 来自手机 | 显示全部楼层
楼主好,问题解决没有啊?我也遇到了,看到加Q974878595沟通一下
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-9-27
在线时间
0 小时
发表于 2018-9-27 23:56:56 | 显示全部楼层
本帖最后由 植耀良 于 2018-9-27 23:58 编辑

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

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2018-9-28
在线时间
1 小时
发表于 2018-9-28 00:07:29 | 显示全部楼层
本帖最后由 wxj0LceC0J 于 2018-9-28 09:03 编辑

基站漂移是DTU很常见的连接故障,一个DTU所处的地方可能会有多个基站信号,时间久了,可能会在不同的基站之间切换,它会更新自己的连接,发数据给服务器是没问题的,因为服务器总是侦听端口的,谁来数据都会收,但服务器要下发时,如果还使用旧的连接,肯定是到达不了DTU的。因为旧的连接已经失效,但服务器不知道。解决的思路就是SIM800数据上来时,必须带有自己的标识,服务器根据这个标识找到集合中对应的sim设备对象,立即将当前携带数据的socket更新给这个对象。如果数据透传没有标识,那就做心跳,服务器每次收到心跳,用心跳数据的socket更新原来保存的连接。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 23:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表