首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > Wireless >

急关于利用GPRS模块向PC机传输数据的有关问题!

2012-03-24 
急!!!关于利用GPRS模块向PC机传输数据的问题!!各位高人,帮我看看。我现在要实现GPRS模块向可以上网的电脑发

急!!!关于利用GPRS模块向PC机传输数据的问题!!
各位高人,帮我看看。我现在要实现GPRS模块向可以上网的电脑发送数据。弄了好久,也没弄出来,只好向各位求救啦。

现有的情况:  
  支持GPRS的模块 SIM300 ,该模块通过串口和PC相连接,用超级终端输入AT命令。在输入ADT*99***1#之后出现很多乱码,然后就是NO CARRIER.不知道是什么原因。在输入AT+CIPSTART="TCP","221.6.159.249","8080"之后返回OK ,还返回STATE:PDU DEACH.不知道是什么意思。  
  我的卡是中国移动动感地带的支持GPRS的SIM卡;  
  我要实现数据传输,还需要什么样的指令呢?为什么用AT+CIPSTART和AT+CIPSEND 不行呢,还有什么其他设置吗?
  我是新手,没什么分给大家,拜托做过的帮我看看啦。谢拉
 

[解决办法]
如果你的结果是仅仅返回OK,我会说这远远不够的,因为这只是说你的指令格式是正确的,你必须at+cipstatus查看一下状态,如果是connect ok,才真的是OK了,否则可能是Connecting状态,表示一直在连接。
在一个问题就是你的卡虽然支持GPRS,但是不代表就一定能实现你的数传模式。因为GPRS接入方式有两种:CMNET和CMWAP。默认的情况是CMNET,当然你可以设置,如果你的卡不支持CMNET方式接入的话,那你是一直Connect Fail,还会出现你上面的情况。如果是CNWAP模式的话,你只能上Wap,不过通过代理,你还是可以上web的,就是说你的手机随能上网,但是就是无法实现GPRS CMNET数传.

一下是我个人的一些理解和总结,希望对你有帮助:
Sim300 GPRS应用相关AT CMD

1.AT+CGATT=1 (Attach or detach from GPRS service, GPRS 附着状态)
说的简单点,这一步就是让SGSN (服务GPRS节点,你可以把它理解成与基站紧密相连的一台设备,他可能记录你的移动终端的位置,状态等等很多很多信息)知道你的存在并且认为你拥有GPRS功能。由于GSM和GPRS用的都是相同的基站,所以通常你的MS开启,注册上网络了,你就已经是GSM的一个节点了,可以打电话了。但是,如果你想使用GPRS数据业务,你就要附着GPRS服务,这个命令就是干这个的。

2.AT+CGDCONT=1,"IP","CMNET" (Define PDP context, 定义PDP 上下文)
如果打算用PDP(Packet Data Protocol )传输数据,你就要为他建立一个背景,就是所谓的上下文,你得告诉SGSN和GGSN (网关GPRS节点,可以把它理解成一台与SGSN和INTERNET紧密相连的设备,它把从SGSN的一些信息处理后发送到INTERNET的服务器同时把服务器的信息处理后再发送给SGSN,SGSN再给你的终端设备)一些基本信息,比如你的本地标识(cid),你希望的pdp_type(这里就是IP),还有你的接入点信息。这里的接入点是CMNET,实际上他应该是一台服务器,是INTERNET和SGSN的纽带。而中国移动公司提供了一个名字CMNET(China Mobile NET),我们通过它就能连接INTERNET了。而在国外,这个参数通常是一个域名性质的东西。另外,得特别注意,就是中国移动人为的分出两种就如方式,我们刚刚使用的是CMNET,另一种是CMWAP,很明显,这个只能上WAP,但是通过他们的HTTP代理服务器,我们已能够上INTERNET,但是仅仅局限于HTTP而已。(有些移动的SIMCARD不支持CMNET接入方式,所以要特别小心,)

3.at+CGACT=1,1 (PDP context activate or deactivate, 激活或解除PDP 移动场景)
前面的定义PDP 上下文其实只是说我们有一种想要使用GPRS通信的想法,并且声明了我们想如何使用,但是这仅仅是个概念,如果你真的想付诸实施,就必须让网络知道你的意愿,并且记录你的信息,为你分配资源等等,所以,激活他吧。这个命令里的第一个参数,就是我们前面定义的cid标识值,第二个就是激活状态,如果你想激活,就设置1,如果你想解除就设置0。

4.AT+CIPSTART="TCP", ”111.111.111.111”,” 2222”( Start up TCP or UDP connection, 建立TCP 连接或注册UDP 端口号)
如果说前面的都是前期准备工作的话,那么现在就要尝试TCP连接了。这个命令很简单,第一个参数指定连接方式,第二个参数是IP地址,第三个参数是端口号。跟在计算机上写程序是一样的。

5.AT+CIPSEND( Send data through TCP or UDP connection, 发送数据)
如果前面连接建立成功你就可以发送数据了,AT+CIPSEND然后加一个回车符<CR>,就会出现个命令提示符>(当然这个可以设置),然后就是你的发送数据,最后加个结束符<Ctrl+Z>。当然你也可以发送定长数据串,这样就不需要结束符了。

6.AT+CIPCLOSE( Close TCP or UDP Connection, 关闭TCP 或UDP 连接)
关闭连接仅仅意味着你的这个连接通道断开了,但是你还可以建立新的连接,同时也意味着你的本地的IP地址并没有变。你的IP地址是在激活的时候分配的。

7.AT+CIPSHUT( Disconnect wireless connection, Close Moving Scene)
关闭移动场景,当你执行这个的时候你就进入IP INITIAL 状态,如果你再重新尝试连接的时候你的本地IP地址很可能已经就不是原来的了。

需要注意的一些问题:
1.通常上面提到的前三个命令我们基本不需要使用,因为默认值都符合我们刚刚的要求,而芯片基本把这些事情都做了。可以通过相应的查询命令获得这些信息,如果有不符合的,可以另行处理。

2.有些移动的SIMCARD不支持CMNET接入方式,所以要特别小心,当你发现你所有的参数都正确,能够发送短信和打电话,就是无法连接或者连接总是失败,你就该检查你一下你的卡到底支不支持CMNET接入方式。全球通基本两种接入方式都支持,而动感地带和神州行就不一定了。

3.如果你查询的状态总是+PDP: DEACT,就是说无法激活,那你应该看看天线是否接牢固或者是否有断线的地方。

4.在进入业务操作之前,确保你的模块没有工作在最小功能模式(minimum functionality),你可以通过AT+CFUN查询模块的工作状态。

5.在尝试连接一个服务器和某个端口之前,最好先在计算机上用SOCKET工具连接一下,看看是否是通的,有些网络和防火墙很可能会封杀端口的,如果你寻找或调试了一天后,发现是这个问题,唉,大家知道会有多郁闷。(另外SP可以为你的ADSL分配动态或者固定公网IP,有些在ipconfig或者网络设置里显示两个IP,别混淆了)

6.在尝试连接(AT+CIPSTART)之前,一定要查询(AT+CIPSTATUS)当前状态,一共有下面几种状态
0IP INITIAL Initializing state
1 IP START Starting State
2 IP CONFIG Configure Scene
3 IP IND Accept Scene Configuration
4IP GPRSACT Scene Activated
5 IP STATUS Get Local IP Address
6 TCP/UDP CONNECTING establish connection state with SERVER
7 IP CLOSE Connection has been closed
8 CONNECT OK Connection Established Successfully
9 PDP DEACT Detach from GPRS network
而AT+CIPSTART只在IP_INITIAL、IP_CLOSE、IP_STATUS三种状态下才能正确建立连接,否则返回ERROR。所以有时候会连接失败(比如信号不好等原因),而模块通常会进入TCP/UDP CONNECTING状态,就是一直不停的尝试连接,而此时如果执行连接命令就会返回错误信息。虽然此时的状态是TCP/UDP CONNECTING,但是实际上很多模块已经不再连接了。只不过处在连接状态上而已,这时你最好通过CIPCLOSE或者CIPSHUT命令,回到一个可连接的状态。


edit by LongMaosen
[解决办法]
NO CARRIER 的意思是没有载体为什么会出现这种情况呢?
原因是:
当你发送ADT*99***1#指令后
会出现一大堆乱码,而且是重复的(大概10次)
这些乱码其实是服务器向你发送进行LCP协商的请求信息,因为是你没有应答,所以对方会不断的请求,直到请求10次后,对方认为你没有响应,就会NO CARRIER.

你没有应答的解决方法:
1.因为你的gprs模块没有自带ppp协议,只要去买块带ppp协议的gprs模块就可以解决这个问题,比如mc55模块.
2.也可以自己实现ppp协议,自己写或者去网上下ppp协议的代码.

该怎么应答??
1.自带ppp协议的模块,你可以不考虑这个问题
2.你还是使用原来的模块的话,就需要了解PPP链路的建立的过程,以及ppp协议的结构.网上 有很多资料.

热点排行