吴帮明,伍川辉
(西南交通大学机械工程学院,四川 成都 610031)
利用GPRS覆盖广、高效、经济的突出特点,该文介绍了一种采用GPRS通信模块进行远程数据传输,可供多用户对车辆状态进行远程实时监控的系统,着重介绍了基于GPRS的组网方式和以C++Builder为开发平台快速组建服务器、监控端的软件编程方法。
GPRS的理论带宽171.2 Kb/s,实际带宽约40~100 Kb/s,分组交换接入时间少于1 s,能够提供快速即时的TCP/IP连接,它具有网络覆盖广、计价按流量计算、实时在线的优点,特别适用于间断的、突发性的或频繁的、少量的数据传输,也适用于偶尔的大量数据传输,完全满足数据采集及监控的双向数据信息传输。GPRS传输系统示意图如图1所示。
根据数据中心服务器接入Internet的不同方式,基于GPRS的传输系统有以下4种应用组网方案:
图1 GPRS传输系统示意图
(1)数据中心服务器直接使用固定的IP地址;
(2)数据中心服务器没有合法的IP地址,但连接的路由器有固定合法的IP地址;
(3)数据中心服务器采用动态IP地址;
(4)数据中心服务器通过专线方式直接连接到GPRS网络。
该文应用的是第3种组网方式。这种组网方式的服务器端没有固定的IP址,它通过ADSL等调制解调器连接到Internet获得动态IP地址,这时服务器端就需要安装动态域名解析服务程序,GPRS模块上的服务端IP和端口号设置为数据中心服务器的域名和侦听端口号。
采用这种方案,首先要联系DNS服务商申请一个域名,服务器端接入Internet后,与DNS服务器进行连接,将当前获得的动态IP报告给DNS服务器。GPRS模块上电后,首先采用域名寻址方式连接DNS服务器,再由DNS服务器找到服务器公网动态IP,这样就可以在两者之间建立通信。
对于一些应用相对简单、终端数量的容量和实时性要求不高或者运行经费有限的应用,可采用动态IP的简单网络模式。
系统由数据采集端、服务器端和用户监控端3个单元组成。数据采集端的微处理器通过串口和GPRS模块连接,将经过AD转换的数据(如振动加速度、位移、应力等)按规定的协议组合为报文,通过GPRS模块经由GPRS网络发送到Internet上具有IP地址的服务器上。服务器端通过网络编程接收从Internet上发送过来的数据,经过处理后转发给用户监控端。用户监控端也是通过网络编程接收从服务器端发来的数据,经过处理后将数据直观地显示在界面上,完成实时监控。
对于开发无线数据传输系统,监控软件只能自主开发,没有现成的软件可以使用。另外,该软件自主开发后,对于系统后期优化和调整以及升级换代较为有利。
服务器端软件的主要功能是从网络上接收来自GPRS模块或监控端传来的数据报文,并解析报文得到原始数据,再根据使用需要对数据进行相应处理;监控端软件的主要功能是接受来自服务器端传来的数据报文并进行分析处理实现远程监控。
编写软件使用的是C++Builder自带的SrverSocket控件和ClientSocket控件,它们使用Socket(套接字)来实现信息的传输,利用这两个控件就能实现网络编程。
添加一个服务端Socket控件ServerSocket到Form就使应用成为一个TCP/IP服务器。服务端ServerSocket的重要属性、事件和方法使用如下:
(1)ServerSocket和ClientSocket都有Port(端口)属性,需要一致才能互相通信;
(2)OnClientRead事件,当 ServerSocket受到冲击消息时,在OnClientRead事件中可以获得Client发送过来消息;
(3)ServerSocket使用 SocketServer->Socket->Connection[0]->ReceiveBuf(byte 类型的数组,信息长度)来接受数据;使用SocketServer->Socket->Connection[0]->SendBuf(byte类型的数组,信息长度)来发送数据。
为了运行可靠,可以在服务器端使用多个ServerSocket控件,并根据功能分为两类。一类负责处理和GPRS模块的通信,一类负责与监控端的通信。该设计使用了两个控件,ServerSocket1负责与GPRS通信,ServerSocket2负责与监控端通信,要将GPRS传来的数据转发给监控端,主程序片段如下:
添加一个客户端Socket控件 ClientSocket到Form就使应用成为一个TCP/IP客户。客户端ClientSocket的重要属性、事件和方法使用如下:
(1)ClientSocket有 Port和 Address属性,必须与指定服务器的端口和所在IP地址一致;
(2)OnRead事件,当ClientSocket受到冲击消息时,在OnRead事件中可以获得Server发送过来消息;
(3)ClientSocket使用 SocketClient->Socket->ReceiveBuf(byte类型的数组,信息长度)来接收信息;使用 SocketClient->Socket->SendBuf(byte类型的数组,信息长度)来发送信息。
监控端主要是接受来自服务器端从GPRS传来的数据来进行远程实时监控,主程序片段如下:
在数据传输中必须制定数据报文协议,数据传输系统中的报文协议如表1所示。
表1 系统中的报文协议
此外,还要设定数据传输类型,该系统中数据采集端采集的振动加速度、位移、应力信号经过AD转换后是电压值,最后是将电压值转换为十六进制的编码进行传送。因此,在接收到数据后,要将其还原为原来的电压值,再根据每个通道的传感器灵敏度值,经过进一步处理,得到最原始的物理量值。
C++Builder中的套接字以字节格式来发送和接收数据,所以通常先定义一个字节数组来存放接收到的数据,而数据处理就是将这个字节数组转换成原始的物理量值。字节数组处理步骤如下:
(1)从数据流中取出两字节,判断是否为起始位标识;
(2)从起始位后取出规定长度的数据,计算校验和是否与最后一位的校验码相等;
(3)把各通道位的两个字节还原为原来的数字,再进一步处理得到具有物理意义的数值。
该设计方法为远程实时监控中服务器端和监控端软件的设计提供了一般性方案,与数据采集端软硬件相结合,可移植于各种应用无线数据传输服务的远程监控系统中。利用该思想构建的应用平台已在广州地铁直线电机车辆振动追踪试验中测试通过,运行半年多来,总体上情况良好,运行稳定,故障率低,数据可信度高,达到了实时监控列车运行状态的目的。
[1]钟章队,蒋文怡,李红君.GPRS通用分组无线业务[M].北京:人民邮电出版社,2001.
[2]栗玉霞,徐建政,刘爱兵.GPRS技术在自动抄表系统中的应用[J].电力自动化设备,2003,23(12):52-54.
[3]温 泉,李炳煜,焦 毅.基于GPRS的无线数据传输系统解决方案[J].现代电子技术,2006,29(23):15-17,20.
[4]杨兴裕,吴海滨,许松清.GPRS无线传输在远程图像监控系统中的应用[J].微计算机信息,2005,21(3):64-65.
[5]程 展,蒋 鹏.基于GPRS的城市污水排放监控系统子站设计[J].机电工程,2008,25(2):41-43.
[6]李平江,周伦彬,张宝峰.基于ARM和GPRS的路灯远程监控系统[J].中国测试,2009,35(2):53-56.
[7]严雪萍,成 立,韩庆福,等.基于GPRS的远程数据采集系统设计[J].单片机开发与应用,2008,24(1-2):115-116.
[8]王 磊,许小琳.GPRS无线数据传输中服务器端软件的设计和实现[J].测控技术,2007,26(11):55-56,63.
[9]何 瑛,王航宇.基于GPRS的分布式灌区监控系统设计与实现[J].电子设计工程,2009,17(3):19-21.