应用实例
在这一部分,我们将列出一些使用索尼爱立信GR47模块的应用实例以供参考。第一个例子显示了使用AT命令建立一个TCP会话的步骤,第二个则是嵌入式应用的范例。
1.使用AT命令接入GPRS网
GR47提供一系列AT命令来完成TCP/IP协议的功能,以简化应用集成的流程。相关的命令可以让应用设计者建立和取消UDP和TCP 协议,控制GPRS PDP context 的建立,传送数据,检查IP的状态信息等。
启动TCP会话功能的步骤如下所示:
1. at+cgdcont=1,“IP”,“CMNET” *write PDP context information, connect to China Mobile GPRS network*
2. at*e2ipa=1,1 *active IP session using stored PDP context*
3. at*e2ipi=0 *return currently assigned IP address*
4. at*e2ipo=1,“166.111.8.238”,23 *initiate a TCP connection to the module*
5. at*e2ipc *close a currently opened IP connection*
当模块处于数据传输状态中时,需要激活DTR来转换回在线命令模式,ATO则被用于再次转换回数据模式。
2.嵌入式应用接入GPRS网
以下描述示范怎样激活PDP文本、开始TCP对话以及接收数据。这只是整个程序的一部分,不能单独运行。
/* Reset the IP error flag by reading it */
gtf( APPS_IP_ERROR_TRIGGER );
Err = pdpa( 1, 1 );
prtf( “n PDP activate result = %dn”, Err );
if ( Err == 0 )
{ Val = ipi( 0 );
prtf( “ IP Address = %x”, Val );}
else
{ prtf( “n PDP activation faiLED!n” );
return;}
Err = ipo( 1, &SCKNum );
if( Err != 0 )
{ prtf( “ n TCP Socket open failed!n” );}
else
{ prtf( “n TCP Socket Opened!n” );
Err = tcpc( SckNum, Port, Address );
if( (Err == 0) || (Err == TCP_CONNECTING) || (Err == TCP_CONNECTED) )
{ while( !Complete && (gtb( APPS_IP_ERROR_STATUSBYTE ) == 0) )
{ int len;
/* Receive some data */
if( gtf( APPS_IP_DATA_RECVD ) )
{ prtf( “n IP DATA RECVD” );
len = RXTX_SIZE;
Err = tcpr( SckNum, RxTxBuf, &len);
if( Err != 0 )
{ prtf( “n *** Error in TCP Receive (%d)。 ***nn”, Err );}
else
{ if( gtb( APPS_IP_TCPSTATUS_BYTE ) == TCP_CONNECTING )
{ prtf( “n Delaying while TCP Connect oCCurs.。.nn” );}
else
{ prtf( “n Received %d bytes of data.nn”, len ); }
}
}
}
}
Err = ipc( SckNum );
if ( Err != 0 )
{ prtf( “n Socket close failed!n” );} }
Err = pdpa( 0, 1 );
prtf( “n PDP deactivate result = %dn”, Err );
本文小结
基于GSM/GPRS的TCP/IP协议为很多应用提供了更高级的解决方案,例如,车辆定位、远程抄表和远程银行等。它具有无线通信的灵活性和移动性,TCP/IP协议提供对因特网“永远在线”的通信方式,以及相对于SMS、CSD等更为经济的解决方案。索尼爱立信GSM模块,支持TCP/IP协议及嵌入式应用,是很完善的无线通信解决方案之一。