摘要:GPRS(通用分组无线业务)在当前远程数据传输、遥测遥控中越来越受到人们的重视,特别是基于单片机的GPRS数据传输方案在GPS车载终端、自动抄表系统等远程遥测遥控系统中的应用更是倍受关注。论述了基于WAVECOM的Q2406B无线模块、AT89S51单片机的GPRS数据传输终端的设计方案,并提供了硬件电路图,软件流程图及程序代码。
关键词:GPRS模块;RS232;AT89S51单片机;AT指令
1引言
随着无线通信技术的发展,移动运营商提供的无线网络实现远程监控和数据传输已被广泛应用于各个领域。通用分组无线业务(GeneralPacketRadioService,GPRS)是在现有GSM系统上发展出来的一种分组数据承载业务,GPRS网络具有以下优点:
实时在线,接入速度快;
传输速率高,理论值最高可达1712kb/s;
计费合理,以流量计费;
快捷登录,GPRS用户开机后,就始终附着在GPRS网络上,每次使用时只需一个1~3s的激活过程。
因此,GPS车载终端、自动抄表系统等远程遥测遥控系统利用GPRS实现数据传输将成为今后发展的趋势。本文以AT89S51单片机与WAVECOM的Q2406B无线通信模块为例具体介绍实现GPRS数据传输的方法以及关键技术。
2GPRS数据传输的协议分析和实现
GPRS无线数据传输终端利用网络实现与上位机的全双工数据通信。终端需附着GPRS网络,登陆Internet与连接其上的任意一台普通PC机建立数据链路并随时进行数据传输。欲完成这一过程必须实现GPRS的附着和PDP(PacketDataProtoco1,分组数据协议)上下文的激活。通过GPRS的附着登记用户信息,对用户进行移动性管理,激活过程用于激活IP协议,保证数据能以IP报的形式进行传送,使移动台与GGSN(GatewayGPRSSupportNode,网关GPRS节点)建立一条逻辑通路,进行数据传输。可见,激活过程是系统实现的关键,他由中央控制器软件来实现。分组数据协议的激活涉及到网络的多个协议,如PPP协议、LCP(LinkControlProtocol链路控制协议)、NCP(NetworkControlProtocol,网络控制协议)、PAP(PasswordAuthenticationProtocol,密码认证协议)和IPCP(InternetProtocol,Internet协议控制协议)等。
2.1分组数据协议上下文激活过程
(1)终端设备向移动终端发送AT指令激活IP协议,在指令中包含终端想要连接的APN(AccessPointName,访问点名称)。
(2)终端设备向移动终端发送PPPPLC帧给移动终端,表明PAP是在PDP激活过程中的身份认证协议。
(3)终端设备开始进行PAP认证,认证通过后,移动终端将对终端设备给以回应,表明承认其身份,并且会将用户ID和密码储存下来。
(4)终端设备通过发送NCP-IPCP配置请求信息给移动终端,帧内IP地址为空,表明请求动态分配IP地址。
(5)移动终端向SGSN(ServicingGPRSSupportNode,服务GPRS节点)发送激活PDP上下文的请求信息,信息中包含如下信息:APN、PDP类型,PDP地址为空,代表请求动态分配IP地址。
(6)SGSN请求DNS(DomainNameSystem,域名系统)服务器对APN进行解析,得到AON对应的GGSN的IP地址。
(7)SGSN发送建立PDP上下文的请求消息给被选定的GGSN,消息中应包含:APN、PDP类型,PDP地址为空,代表请求动态分配IP地址、用户更改的QoS和其他选项。
(8)GGSN对用户进行认证,认证通过后,使用RADIUS(RemoteAuthenticationDia-inUserService,远程认证拨入用户服务)服务器、DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)服务器或直接由GGSN为用户分配动态IP地址,GGSN向SGSN返回建立PDP上下文相应消息。
(9)SGSN向移动终端发送激活PDP、上下文接受消息。
(10)移动终端发送NCP-IPCP配置回应帧给终端设备,回应帧包含了被动态分配的IP地址。
至此PDP上下文的激活过程全部完成,移动终端与外部数据网建立起数据通路,数传终端就可以和监控中心以IP数据报的形式进行通信。
2.2协议实现过程
系统设计的主要思路是单片机通过发送AT指令控制GPRS模块建立无线信道、完成数据传输。用AT指令实现以上协议并完成数传的步骤如下:
(1)设置接入网关:AT+CGDCONT=1,“IP”,“COMNET”;
(2)GPRS网络附着:AT+CGATT=1;
(3)激活GPRS模式:AT#GPRSMODE=1;
(4)设置网络接入点名称:AT#APNSERV=“COMNET”;
(5)请求网络连接:AT#COMNETIONSYART;
[newpage] (6)设置上位机的IP地址:AT#TCPSERV=“202.207.28.43”;
(7)设置上位机侦听的端口准备与客户端通信:AT#TCPPORT=“6800”;
(8)打开与上位机的连接:AT#OTCP;
(9)断开网络连接:AT#COMNETIONSTOP;
(10)取消GPRS附着:AT CGATT="0"。
在完成GPRS数传过程中,以上AT命令均必须设置,但相邻AT命令间要有一定延时,经验证约3s即可。
3数传终端的硬件设计
在本系统中,单片机89S51串口利用MAX232完成TTL/CMOS电平转换后与GPRS模块相连接,实现模块初始化和数据收发,同时可扩展串口与其他嵌入式系统PC机进行数据交换。图1是系统的硬件框图。
本终端的微控制器选用ATMEL公司的AT89S51。他是ATMEL公司在AC89C51停产后推出的新款微处理器,他的工作频率为33MHz,具有全双工UAET串行通道、看门狗计时器、双数据指示器、电源关闭标识。
GPRS模块选用WAVECOM的Q2406B,该模块内置TCP/IP协议并提供了9针的标准RS232接口。
4数传终端的软件实现
系统软件设计的核心部分是单片机与GPRS模块的通信,两者间需定义通信协议、规定帧格式,通过AT指令实现GPRS网络的附着、PDP激活、Interne的接入及数据传输。
4.1AT指令的调试
单片机以一定的协议向模块发送AT指令,接收模块执行指令后的返回值,并进行相应校验。单片机串口实质上是以位为单位完成收发,由协议预定义的起始位、校验位、停止位决定数据帧的封装格式。
4.1.1波特率的设置
在Window自带的超级终端中利用AT IPR=“波特率”指令设置无线通信模块的波特率,并通过命令后加“;&W”将所设值存储在模块E2PROM中,掉电后不会丢失(如:AT IPR=“115200”;&W)。系统设计过程中通信的不畅通通常是由于波特率不匹配造成的。
4.1.2AT指令的格式
用单片机发送AT指令时,字符格式的AT指令需按照ASCII编码转化为二进制数后才可存储在ROM中,进而通过串口收发,但AT指令及其返回字符串中混有不可打印字符,所有的AT指令返回值并非以可打印字符起始,清楚掌握这些不可打印字符在指令中的出现位置及表示方法是用MC控制无线模块的关键,通过串口侦听可知AT指令实质是以字节发送,回车符代表指令的结束,模块接收到回车符后开始执行指令,指令发送过程中,字节间允许有任意间隔。模块接收到指令字节后,会立即答复相应的握手信号。模块执行指令后的一切返回值(无论是指令执行后的OK还是报错信息)都是以不可打印字符“0D0A”开始和结束。
4.1.3屏蔽回显
GPRS模块回复收到字符的握手信号又称为回显(Echo),握手机制能确保指令收发的可靠性,但在实际的设计中,通过MCU实现对模块的控制,需接收执行AT指令的返回值,并需进行必须的字符校验,每发送一字节指令后模块所返回的握手信号须程控滤除,频繁的开关串口中断,降低了程序的可靠性。为简化这一过程,需使用ATE0指令屏蔽模块回显。
4.2程序设计
系统程序全部由标准C51进行编写,采用模块化设计思想,主要分为系统初始化模块、建立连接模块、数据传输模块、断开连接模块4部分。系统中定义了两个字符型指针数组unsignedchar*AT,unsignedchar*Data分别作为AT命令缓存区以及欲发送数据缓存区,编写了单片机初始化函数Initialize()、字符串发送函数Send[CD#*2]string(unsignedchar*ch)、串口接收中断函Serial(void)interrupt4using3、延时k秒钟函数Delay(intk)、建立连接子函数voidSend[CD#*2]AT(void)等。系统程序流程图如图2所示。
4.2.1初始化
单片机初始化部分将AT89S51串口设置为工作方式1,即8位数据位和1位停止位;定时器选用定时器1的工作方式2即8位自动重装定时器,波特率设为4800B(晶振频率为12MHz),所以定时器1初值分别为TH1=0xF3,TL1=0xF3。初始化时先将串口中断关闭,在与上位机建立连接后再打开。
4.2.2建立连接
为了方便程序设计,增强程序可读性,将建立连接所需的AT命令以字符串形式存放于AT命令缓存区,所需多条AT指令长度不一且发送顺序不可改变,为了有效控制每条AT指令、提高CPU利用率需将AT指令缓存区设置为指针数组形式,在建立连接时通过循环调用字符串发送函数将这些AT命令发送,相邻AT命令间要有2~3s的延时,所以每发送完一条AT命令都要调用一个3s的延时子程序,然后通过串口中断接收函数接收AT命令返回值来判断连接是否成功。需要注意的是AT命令均以回车符作为结束标志,并以字符串形式传送,因此在定义AT命令缓存区时一定要注意转义字符的使用。
4.2.3数据传输
在与上位机连接成功后,通过字符串发送函数发送数据缓存区中的数据,数据缓存区仍需设置为指针数组形式,发送数据的原理与建立连接时的基本相同,但数据的接收是通过串口中断接收函数完成的,同时将接收到的数据必须先放入接收缓存区以便作做显示处理。需要指出的是串口中断程序既要接收指令返回值又要接收上位机传来的数据,这两种接收信息的处理方式不同,所以在中断函数中应通过设置两个不同的标志来解决这一问题。接收中断函数如下:
Voidserial(void)interrupt4using3
{
Unsignedchara;
If(RI)
{
RI=0;
a=SBUF;
if(m==0)//判断接收指令返回值与接收数据的标志,初值为0,进入数传状态后置1
{
If(isprint(a))//判断接收到的字符是否为可打印字符,是则放入接收缓存区
{
Re[cont]=a;
cont ;
}
If(cont==22)//[ZK(]判断连接指令返回值(……)是否接收完整[ZK)]
{
flag=1;//AT命令返回值接收完成标志置位
cont=0;
}
}
elseif(a!=0x0D)//传输数据以回车符为结束符,判断该次数据是否接收完成
{re[cont]=a;cont }//将接收数据放入接收缓存区
else{
d=1;//数据接收完成标志置位
n=cont;//接收数据个数
cont=0;
}
}
}
4.2.4断开连接
数据链路的释放可通过发送数传结束标志“ ”实现,但必须延时一定时间后再发送断开连接指令:
5结语
本文在介绍GPRS网络应用技术的基础上,为单片机实现GPRS数传提供了一种通用的解决方案,并通过以上单片机的软硬件设计,可以实时地发送和接收数据。文中所提供的代码都通过了实际调试验证,此方案稍做修改便可移植到GPS车载终端、自动抄表工程中。
文章评论(0条评论)
登录后参与讨论