城市路灯是和人民生活密切相关的公共设施。它在一定程度上反映了城市的繁荣程度及发展水平。在过去很长一段时间内,路灯的更新多是局限于其照明部分。随着城市发展速度的加快,城市路灯覆盖范围扩大,社会对亮灯率、亮灯质量、亮灯效果的要求也大大高于以往。依靠时钟、光电的低压侧开关控制方式,依靠人工巡检的工作方式已远远不能满足城市的发展需求。随着公共网络的通讯手段在远程监控中得到初步的应用,特别是GPRS技术的不断成熟,将其与因特网结合起来,越来越多的城市采用基于GPRS的路灯无线监控系统。
一、GPRS简介
GPRS(general
packet radio
service)是通用分组无线业务的简称,是一种基于GSM系统的无线分组交换技术,提供端到端的、广域的无线IP连接,能提供比现有GSM网9.6kbit/s更高的数据传输速率。
GPRS具有“实时在线”、“按量计费”、“快捷登录”、“高速传输”、“自如切换”等优点,使其特别适用于间断的、突发性的或频繁的、少量的数据传输,也适用于偶尔的大数据量传输,这一特点正好适合传输路灯监控系统的间断、突发、频繁的数据。
二、基于GPRS路灯监控系统
(一)远程测控终端
远程测控终端RTU采用模块化结构,具有独立监控的功能,在监控中心没有参加工作的情况下,能进行自动控制和数据采集记录工作,由电压/电流互感器、混合信号处理器和GPRS模块组成。
(二)GPRS无线数据传输
本系统是通过GPRS无线DDN传输业务来实现远程测控终端和监控中心的无线数据传输的。GPRS无线DDN组网迅速灵活,建设周期短、成本低,网络覆盖范围广,特别适用于突发性、高频率、点多分散、小流量的数据传输。
GPRS无线DDN系统由数据中心、数据传输通道(GPRS网络)、用户数据终端单元(GPRS
DTU)构成。DTU可直接与用户设备通过RS-232或RS-485接口连接,数据中心的组网略微复杂一些,根据数据中心接入方式不同可分为:专线接入,GPRS接入和Internet接入。
采用专线接入需要向电信申请专线且需要一台支持GRE隧道功能的路由器,投入成本比较高;采用GPRS接入需向电信申请APN服务,传输带宽受到限制;而采用Internet接入成本较低,且不存在跨区域的问题。综合各方面的因素,本系统采用Internet固定IP接入。
(三)监控中心
采用固定IP地址的Internet接入要求系统稳定、永久地连接到Internet。在本系统中,监控中心具有一台连接Internet的服务器,该服务器具有固定公网IP地址。考虑到服务器的稳定运行问题,通常不允许在服务器上安装其他应用软件,将数据中心安装在工业控制计算机上,工业控制计算机与服务器之间采用局域网进行通信。由于工业控制计算机没有公网IP地址,必须在服务器上进行必要的设置,利用Windows
2000 Server或者winRoute Pro等软件提供的网络地址转换(NAT)功能,将端口映射到工业控制计算机上,以便GPRS
DTU的数据经过Internet传输以后能够传输到装有数据中心的工业控制计算机上。
三、GPRS通信系统流程(见图2)
四、GPRS通信系统实现的关键技术
(一)平台调用服务
本系统所采用的H7112C
GPRS模块是深圳宏电技术开发公司H7000无线DDN通信系统推出的系列模块之一,该公司专门为该通信系统系列模块的使用提供了函数开发包,主要是DSC(Data
Service Center)软件。DSC是用于接收DTU数据和向DTU发送数据的服务软件,和DTU之间通讯使用开发包动态链接库gprs_dll.dll,
该文件包括和DTU通讯所需要的全部API函数,包括服务的启动、数据发送、数据接收、关闭服务等,DSC实际上是架构在gprs_dll.dll所提供的功能之上的数据处理软件。
由于系统软件的开发平台.NET开发环境是一个托管环境,而gprs_dll.dll是一个非托管的动态链接库,因此,在托管环境中调用非托管的.dll函数是在.NET开发环境下实现H7112C
GPRS模块成功通信的关键。
.NET提供了平台调用(P/Invoke)服务,利用平台调用服务,托管代码可以调用在动态链接库(DLL)(如Win32
API
中的DLL)中实现的非托管函数。“平台调用”依赖于元数据在运行时查找导出函数并封装其参数。使用平台调用服务,必须引用System.Runtime.InteropServices
命名空间,它提供各种各样支持COM interop及平台调用服务的成员
。
在C#.NET中调用gprs_dll.dll的托管代码如下:
using
System.Runtime.InteropServices;
public class
GprsDll
{
//启动服务函数
[DllImport("gprs_dll.dll")]
public static
extern int start_gprs_server(IntPtr Hwnd,uint wMsg ,
int
ServerPort,[In,Out] StringBuilder mess
);
}
(二)消息响应
因为windows是基于消息驱动的,底层服务接收到远端DTU的数据后,会向启动服务时作为参数传递给启动函数的窗口发送一个消息,因此,通信程序框架中应该有一个响应消息的函数。
本系统的数据收发中心窗口应用程序应使用WM为前缀的消息—WM_USER,
其消息值的划分如表1所示:
表1 消息值的范围
根据函数开发包中提供的数据,选用标志符为WM_USER+0x67(0x0467)消息值作为数据收发中心窗口可以响应的消息值。采用C#中提供的Form.WndProc()方法进行侦听消息,部分代码如下:
[PermissionSet(SecurityAction.Demand,
Name="FullTrust")]
//注:此处属性设置目的是为程序集设置请求权限
protected override void
WndProc(ref Message m)
{
int read_result;
GPRS_DATA_RECORDrecdPtr=newGPRS_DATA_RECORD();//初始化数据包接口结构
//侦听消息
switch(m.Msg)
{
case
MYMESS://事先设定的常量值,为0x0467
//*GPRS模块上传的消息,读取该数据并处理*//
break;
…
default:
base.WndProc(ref
m);
//返回消息给原来的系统处理函数
break;
}
五、结语
采用GPRS通信技术,不仅很好地实现了路灯监控系统的“三遥”控制,而且使监控的实时性和可靠性得到了大大提高。随着通信技术的发展以及通信技术不断与网络技术相结合,必将带来路灯监控系统的又一大飞跃。