范志辉,李云龙
GSM(Global System for Mobile Communication)全球数字移动通信系统,是目前国内覆盖范围最广、系统可靠性最高、用户数量最大的数字移动蜂窝通讯系统。基于GSM网络的短信服务SMS(short Message Service),作为一种廉价的无线应用方案越来越受到用户的欢迎和关注,在数据采集、远程监控等领域得到了广泛的应用[1][2]。电信、电力、军队等部门的库房往往存放着重要的机器设备,需要实时检测房间的漏水、高温、断电、烟火、盗贼入侵等情况,并能够及时报告异常情况。早期的监控系统基于有线网络存在着布线困难、线路容易被破坏等问题。基于GSM研究开发一套功能全面,适合无人值守的机房环境监控系统具重要的意义。安全可靠、稳定有效应该是对无人值守系统的基本要求。系统软件控制着硬件的运行和调配,扮演着十分重要的角色,文章详细介绍了监控系统软件设计的策略和实现方法,并给出了系统的实验情况和使用效果。
系统通过各类传感器获取房间供电电压、浸水、温湿度等环境信息,通过网络获取重要服务器的通断情况,当遇到异常情况通过GSM向机房管理员发送报警短消息,通过网络向远程管理中心发送网络报警信息,同时机房值班室报警喇叭响,报警指示灯闪亮。用户随时可通过短信发送命令控制机房设备开关机如开启空调等。系统工作原理见图1,具有如下特性:
● 实时检测机房环境信息;
● 支持中英文短信;
● 远程短信修改系统控制参数;
● 登录监控主机需要密码;
● 报警方式多样;
● 预留16路继电器输出供用户自定义;
● 稳定可靠,适合无人值守。
图1 系统工作原理示意图
软件基于 WindowsXP系统平台,开发语言使用VC++6.0,数据库采用SQL Sever2000。系统软件策略:基于单文档模式使用定时器定时查询传感器状态,有异常发送报警指令。软件流程见图2。下面介绍软件设计中解决的难点问题。
图2 软件流程图
GSM Moderm通过标准RS232接口与PC机相连,支持标准AT指令。监控主机与GSM模块通信通过内嵌AT指令的串口命令完成。用到的串口命令及嵌入方法为:WriteFile (ATcmd,nLength of ATcmd,&dwNumRead, NULL)和 ReadFile(ATcmd,nLength of ATcmd,ReadFile),这里ATcmd一般为char类型,通过sprintf()函数将AT指令装入ATcmd中,示例:sprintf(ATcmd, "AT+CMGF=0 ",12),该语句将AT指令“AT+CMGF=0回车换行”放入ATcmd中,表示采用中文格式显示短消息内容。其它AT指令也用该方法嵌入串口命令中。本系统用到的AT指令见表1。
表1 常用的AT指令
实时短信报警和短信远程控制功能要求GSM双向收发短信。系统软件建立了两个子循环 A和 B,分别负责发送和接收短信,两循环相互独立运行,操作串口。由于不管是发送还是接收一条短消息都需要多次写读串口,为避免“答非所问”的两子循环抢占串口现象,系统创新研制了“双向锁”机制。通过两个全局变量控制子循环对串口的操作:当子循环A操作串口时,使变量B无效,子循环B不能操作串口,待子循环A完成串口操作后,使变量B有效,子循环B可操作串口,同时使变量A无效,子循环A不能操作串口,待子循环B完成操串口作后,使变量A有效。此机制有效解决了读写GSM模块冲突的问题。
常见的发送和接收GSM SMS信息格式有两种[3] :Text Mode和PDU Mode,Text Mode为纯文本字符用于传输英文和汉语拼音,便于编程实现但不方便用户使用。PDU Mode适合传输中文,但编码比较麻烦,PDU串不仅包含消息本身,还包含服务中心号码、目标号码、自身号码、编码方式和服务时间等。PDU 串其实是一串 ASCII码,由‘0''-‘9''、‘A''-‘F''组成,一般由编码得到,常见的编解码算法有7-bit、8-bit和UCS2。这些算法的实现都需要编写复杂的C程序代码,有一定难度。网页http://www.vckbase.com/document/viewdoc/?id=1133有关于这方面的详细介绍。由于本系统的报警内容相对固定,用到的汉字总数不超过40个,为了简化编码算法,加快研发进度,提出查找匹配法“编码”中文短消息。由于每个汉字的PDU码(Unicode码)可由区位码算出,设计时预先根据区位码算出这40个汉字的Unicode码放入程序中(如“机”字的Unicode码是字符串“673A”,“房”字的Unicode码是字符串“623F”),对于汉字str查找匹配法实现方法如下:
最多经过39次查找,最终定能找到str对应的字符串。编排时将最常用的汉字放在前面可以较少系统开支。将该段代码放入子程序中,消息内容有几个汉字只要调用几次子程序即可实现中文编码。此算法编码效率比7-bit、8-bit和UCS2方式高,适合于内容不多且相对固定的情况。
操作员随时可以向系统发送短消息查看机房环境状态或者控制系统完成如重启服务器、关闭空调等操作,实现远程无线控制功能。为保证系统安全、准确处理接收到的命令短信,设计中采用如下策略:用定时查询方式处理GSM接收到的短信,采用密钥策略对短信内容和来电身份双重验证。具体来说,就是在定时循环中先正确配置GSM工作模式,然后读取当前GSM中短信数量,找未读短信(避免重复处理以前的命令),判断该短信是否来自预定手机号码(避免被非操作员指挥),比对口令是否正确,以上任何一步不正确退出循环,否则分析短信内容,决定是重启、还是关机以及具体对哪一台设备操作。口令不定期修改,确保安全。采用该策略有效保证了短信命令的稳健性。
本系统试运行阶段主要解决了以下问题:
1)短消息在VC程序中发送不出去的问题;
同样的AT指令执行顺序在超级终端可以正常发送短消息,在自研的 VC程序中却不能正确发送。经过分析知道GSM网络有一定的频率漂移现象[4] ,信号在信道上的传输会出现时间延迟。超级终端已经自动判断了前一语句是否正确执行,才允许写下一条指令。在程序中每条 AT+CMGS指令后加入 ReadComm(ATcmd,cmdlength)函数,起判断作用,然后再写短信内容,问题解决。
2)报警的次数控制
由于机房距离较远,当警报发出后,管理员不能及时赶到现场,报警次数过多会造成资源浪费(短信0.1元/条),警报过少可能不能起到提醒作用。有时异常很快又恢复正常(如电压),如果这时候不能及时告知管理员,也会造成管理员频繁在两校区之间奔走。通过实验确定这样的策略:当异常发生时先连续发送4条网络报警信息,2条短消息,同时新校区值班室报警灯闪亮,若异常保持,则每5分钟发送一条短消息,新校区值班室报警灯闪亮,不再发送网络报警信息;若异常恢复,则发送一条机房环境恢复正常信息,解除警报。
本系统已于08年3月投入河南科技大学新校区网络中心机房使用,已准确报警夏季机房浸水、空调死机、供电故障共计六次,远程重启邮件服务器、实名认证服务器累计5次,避免了用户的财产损失,提高了工作效率。特别是有一次主路由器死机,网络报警和有线电话报警无效,用户通过短信远程重启主路由器,恢复网络畅通,显示了GSM网络与有线网络相比的优越性。该项目为学校节约开支约15万元,实现网络中心机房的无人值守管理,节约人力资源,远程无线控制机房设备提高了工作效率。
本文介绍了一种基于GSM的机房环境综合监控系统,详细介绍了软件设计中解决的难点。系统能够实时检测机房电压、漏水、声响、烟火及温湿度等环境指标,充分发挥GSM 网络无线、可靠、覆盖范围广等优点,投入使用半年多来多次及时准确报告机房危险情况。系统具有远程无线控制、功能全面、无人值守等特点,具有较好的通用性和扩展性,适合于各类机房和仓库的环境监控,有很好的应用前景。
[1] 严锡君等.基于GPRS的灌区自动化信息管理系统的研究与实现[J] .微型电脑应用,2008(11),24-26.
[2] 王志勇,巴力登,石磊.基于 B/S结构下分布式控制系统的实时监控[J] .工业控制计算机, 2006 (4),95-99.
[3] 李元臣,刘维群.基于GSM模块的远程监控系统[J] .微计算机信息,2007,10-1,90-94.
[4] 胡修林,李喜林,唐祖平.基于嵌入式多任务系统的串口通信[J] .单片机与嵌入式系统应用,2006 (6),111-114.