发布时间:2020-02-24 15:59:48
1引言
随着无线通信技术的发展,利用移动运营商提供的无线网络实现远程监控和数据传输已被广泛应用于众多领域。通用分组无线业务(General Packet
Radio Service———GPRS)是在现有GSM系统上发展出来的一种分组数据承载业务。因此,利用GPRS实现数据传输被广泛应用于自动抄表系统等远程遥测遥控系统。
基于GPRS的仪表数据采集系统通常由数据中心和GPRS终端组成。数据中心可通过Internet同移动公司连接,主要完成把采集得到的数据进行解包处理并存入数据库进行管理。数据中心接入
Interne的t方式主要有两种:①申请专线服务。②通过普通Modem或者ADSL Modem拨号接入Internet。
第一种方式可以申请到静态IP,但因为费用较高而很少使用。第二种方式信息费较低,速度适中,现在比较流行,很多公司都采用这种方式。但是在这种方式下,由于每次拨号上线后,获得的IP地址是变化的,这是一个亟待解决的问题。现在常用的解决方案是:首先为数据中心所在的主机申请一个动态域名,然后在GPRS终端中静态存储此域名。每次GPRS终端上电后,首先运行DNS查询程序获得数据中心的当前IP地址,然后进行连接。但这种方式也有其不足:①申请域名每年需交纳一部分费用,免费的域名通常不太稳定。②GPRS终端的TCP/IP协议栈中需实现DNS协议,增加了下位机程序的复杂度。
2解决方案的设计思想
本文提出一种新的解决方案,无需申请动态域
名,GPRS终端静态存储数据中心的IP地址。利用GPRS终端及数据中心大多数时间处于稳定状态这一特性,即虽然GPRS终端及数据中心的IP地址是动态变化的,但是在它们拨号上线之后到下一次下线之前这段时间内,IP地址是固定不变的,利用这个特性,通过适当的连接管理功能模块,再在数据中心增加一个GSM模块,可实现无动态域名下,GPRS终端与数据中心的稳定连接。实现的思路为:GPRS终端与数据中心分别存储对方的IP地址及端口号。
①若GPRS终端与数据中心任一方IP地址发生变化,则由IP地址改变的一方主动向未改变IP地址的一方发送IP地址更新信息。②若GPRS终端与数据中心IP地址同时发生变化,则由数据中心向GPRS发送IP地址更新短信,GPRS终端接收到短信后,更新数据中心IP地址,并主动向数据中心发送数据包。
解决方案如图1所示。与传统解决方案相比,基站与数据中心的连接省去了动态域名的参与。数据中心处增加了一个GSM模块,目的为:①在整个系统刚建立时,需要以短信形式发送数据中心I的P地址到各GPRS终端。②当某GPRS终端与数据中心恰巧在某时刻同时掉线时,需要以短信形式发送数据中心的IP地址到该GPRS终端。GPRS终端同数据中心的连接不再需要网络地址映射技术。其它功能模块不变。
图1解决方案的系统结构
3功能模块设计
3.1网络数据包及短信数据格式
考虑到编程实现的复杂度及代码量,整个模型采用UDP协议传输数据包。对于GPRS终端而言,是通过在PPP协议中嵌入UDP数据包来实现数据传输,对于上位机而言,采用windowssocket编程接口进行数据通讯。UDP数据包中的数据部分第一字节定义为数据包类型字节(PACK_TYPE),在此模型中,根据PACK_TYPE的不同取值(记为PT值),共定义八种不同的数据包(以C代表GPRS终端,以
S代表数据中心)。如表1所示。
其中:①GPRS终端程序设计中,链路层采用PPP协议,所以还要将UDP数据包首部再加上PPP协议首部,构造为PPP数据包发送。②数据包中记录SIM卡号,可视为每一GPRS终端及数据中心的唯一身份ID。因为IP地址是动态变化的,不能作为GPRS终端的身份标识。
表1数据包类型表
PT类型名发送接收功能
1 DREQ1 C S C主动向S发起连接请求
2 UACK1 S C S对DREQ1包的回复
3 UREQ2 S C S主动向C发起连接请求
4 DACK2 C S C对UREQ2包的回复
5 UREQ3 S C S定时向C发出状态查询包
6 DACK3 C S C对UREQ3包的回复
7 UREQ4 S C S向C发出数据传输请求包
8 DACK4 C S C对UREQ4包的回复
使用的UDP数据包数据格式如图2所示。
图2 UDP数据包格式
八种数据包,每两种数据包构成一组,完成一种特定情况下的通信连接过程。共组成四对不同情况下的通信连接过程。GPRS终端收发数据始终使用端口号10000,数据中心接收数据使用端口号
20000,发送短信使用20001号端口。
短信数据格式比较简单,其内容为:数据中心
SIM卡号+IP地址。
3.2下位机硬件系统
本设计采用周立功单片机公司生产的EasyARM2200开发板作为硬件开发平台。EasyARM2200采用PH IL IPS公司的ARM7TDM I-S核、总线开发开放的单片机LPC2210。具有16KB片内RAM,512KB片外RAM及2MB片外FLASH存储器。板上提供键盘、LED,RS232等常用功能部件。芯片内部具有UART、SPI、PWM、定时器等众多外围部件。可以与标准的Modem直接接口,提供
PPP协议软件包。具有JTAG调试等功能。
3.3下位机程序设计
下位机上电启动后,首先调用拨号上网函数,使GPRS终端接入GPRS网络,并得到动态分配的IP地址。从FLASH存储器固定单元中读出数据中心的IP地址、端口号,发送DREQ1数据包至数据中心。若未成功连接,说明数据中心的IP地址已变或数据中心已掉线,此时转入等待短信状态,待接收到数据中心发送来的短信后,刷新FLASH存储单元中的数据中心IP地址信息,重新连接;若成功,则进入数据包等待态。可能收到的上位机数据包共有三
种,分别为UREQ2,UREQ3,UREQ4。对于UREQ2,除发送回复数据包DACK2外,还需将数据中心的新IP地址写入FLASH存储器。下位机主处理函数流程图如图3所示。
6期周功业等:GPRS远传系统动态IP的一种解决方案·59·
图3下位机主处理函数流程图
下位机主处理函数如下:
void GPRSManage()
{
int Ret=0;
DialUp();//采用PPP拨号程序,连接GPRS网络,获取本机IP地址
while(!Send(DREQ1))//从FLASH中读出数据中心IP地址,发送DERQ1包,若定时未收到
UACK1包,等待上位机短信
{
GetSMS();//等待接收上位机短信,记录新IP地址;
RefreshIP();
}
while(1)
{
Ret=RecvPacket();//查询GPRS模块,接收
IP数据包
switch(Ret)
{//对不同类型的数据包分别处理,Ret表示接收的数据包的PT值
case UREQ2:
RefreshIP();
Send(DACK2);case UREQ3:Send(DREQ1);case UREQ4:
Send(DREQ1);
⋯⋯.
default:
⋯⋯⋯
}
}
}
3.4上位机程序设计
上位机主程序使用VC6.0开发完成,数据库使用SQL Server2000。为记录GPRS终端的状态信息,建立GPRS终端状态表。表字段定义如下表2所示。
表2 GPRS终端状态表字段定义字段名数据类型长度说明SIM卡号字符串11B主键
IP地址字符串15B
连接状态布尔型1bit True表示正常连接
上位机程序模块主要工作如下:
程序启动后,首先将状态表中的“连接状态”标志置为false,向所有GPRS终端发送UREQ2数据包,发起连接。在规定时间内,根据接收数据包情况,更改“连接状态”标志。若仍有未连接上的GPRS终端,则向其发送IP地址信息短信。然后创建一个新线程,定义其句柄为RecvThread,负责不断查询20000号端口并接收数据包,根据包类型的不同,分别对GPRS终端发送的四种数据包做出响应,更新“GPRS终端状态表”中的相应状态信息以及将远传数据记录至数据库。主线程则负责接收管理者的操作请求,向GPRS终端发出数据传送请求包UREQ4。以及定时向GPRS终端发出状态查询包
4结束语
新的解决方案在实现GPRS终端与数据中心正确连接的同时,因无需申请动态域名,GPRS终端无需实现DNS查询程序,简化了下位机程序设计。省去了申请域名后年度费用缴付,短信费用较之也相对较少。网络连接中不必经过第三方的域名提供商,使整个系统更易维护。本方案已经在实际的GPRS远传系统中付诸使用。数据传输非常可靠,保证了系统稳定性,安全性,成本费用之间的平衡。在实际的GPRS远传系统设计中具有重要的参考意义。
大客户
微信
置顶