UPS远程监测报警系统的开发
1、Snmp协议在UPS等设备上的应用原理简介
 
  SNMP(Single Network Manage
  ment Protocol)网络管理协议是一个基于TCP/IP的Internet标准的网络管理协议。随着Internet所使用的TCP/IP协议族成为事实上的网络间互连协议标准,SNMP也成为计算机网络管理方面大家实际遵循的标准。目前这种网络管理协议应用很广,几乎所有的网络厂商推出的网络管理系统都支持SNMP协议并开发了与SNMP有关的产品投放市场。
  在SNMP管理模型中有三个基本组成部分:管理者(Manager),被管代理(Agent)和管理信息库(MIB)。管理站一般是一个单机设备或一个共享网络中的一员,它是网络管理员和网络管理系统的接口,能将网络管理员的命令转换成对远程网络元素的监视和控制,同时从网上所有被管实体的MIB (管理信息库) 中提取出信息数据。
 
  该所开发的UPS电源管理软件以电脑网络操作为平台,能在机房电脑屏幕上对UPS室的UPS进行远程监视。其中SNMP卡是UPS网络接口的全权代理(Agent),它平时一直监视着UPS的状态,如果远程网络监控管理计算有查询、控制等请求过来时,经由它认证确认后,再解释传达给UPS执行,而一旦UPS发生某些故障状态时,它会马上向指定的远程监控计算机发出报警信息,说明UPS现在发生了什么故障状态,让值班人员及时了解状况,进行处理。
 
 
  2、UPS监测系统主要组件介绍
 
  本系统主要由UPS、SNMP适配器、路由器、网卡、IBM PC机组成,通过网络通讯线联接,其物理联接图如下:
  (1)60KVA MGEUPS
  梅日梅兰MGEUPS银河Galaxy系列在该站使用两年来运行状态良好。UPS为后级负载提供优质稳定的电源,并有足够的后备时间在外电中断时为设备运行提供电源保障。是我站电力重要组成部分。
  (2)SNMP Adapter (SNMP适配器)
  UPS附加的外接式SNMP Adapter或内接式SNMP界面卡让UPS马上具有上网功能。网络管理人员可通过网络平台进行远端监控和管理UPS。
  SNMP Adapter或内接式SNMP界面卡会将UPS的讯息转换成SNMP MIBⅡ兼容规格的讯息,通过网络(甚至Internet网)传给相关的网管工作站(NMS)。当电源发生不正常状态时,网络管理员可根据传来的信息得知事件发生,并进行处理。适配器具有HTTP功能,用户通过普通的浏览器(Netscape Browser、Microsoft Internet Explorer)即可对Internet上的UPS进行访问。
  厂家提供的SNMP View等界面是为网络操作平台专门开发的电源管理软件,能在屏幕上远程监视UPS的工作状态,但不能进行参数报警。我们通过开发集成在SNMP Adapter的协议可进行界面定制及报警功能的实现。
  (3)IBM PC机
  IBM PC机作为本系统软件运行的平台,配上Windows操作系统是我们最常用的微机配置。
  (4)路由器或HUB
  路由器或HUB用来连接多个UPS适配器。方便由一台电脑集中管理多台设备。
  (5)网卡
  使用通用PCI网卡即可。为了保证通讯速度,推荐用100M以上的网卡。
  3、开发程序的实现
  本系统由VC++与Broland Delphi结合开发。可应用由Windows9X,WindowsXP系统。其流程图如下:
  (1)利用IdIcmpClient组件的ping命令来检测UPS地址通讯联接是否正常
  判断当前计算机有没有连接到网络,主要是在物理连网下使用IdIcmpClient组件的ping命令
来实现。ping是一个基本的网络命令,用来确定网络上具有某个特定IP地址的主机是否存在以及是否能接收请求。ping命令通过向计算机发送ICMP回应报文并且监听回应报文的返回,以校验与远程计算机或本地计算机的连接。对于每个发送报文,ping最多等待1秒,并打印发送和接收。把报文的数量,比较每个接收报文和发送报文,以校验其有效性。默认情况下,发送四个回应报文,每个报文包含64字节的数据(周期性的大写字母序列)。我们可以使用Ping实用程序测试计算机名和IP地址。如果能够成功校验IP地址却不能成功校验计算机名,则说明名称解析存在问题。当ping命令返回值小等于0时,我们就判断网络设备无法联接或无响应。就等下一个时钟指命到来时再进行判断通讯是否正常。
  (2)利用vc++计算oid节点
  OID是MIB树上面的节点,形如1.3.6.1.每个数字表示MIB树的一层,向下递推。MIB分两种,一种是标准MIB,是有国际标准的MIB-1、MIB-2,可查看RFC文档,另一种是私有MIB,由设备生产商定。我们利用厂商提供的UPS的RFC文档,使用vc++计算出oid节点,然后在oid节点返回的数据采集就是我们所需要的UPS的参数值。
  由UPS的MIB库访问实现的研究管理信息库(MIB)定义了由USP代理者维护的各种变量,
它们由管理者来进行存取操作,从而实现具体的网络管理。对MIB库变量访问利用VC++程序是比较容易实现的。
  UPS可以通过SNMP 操作直接与管理代理通信,获得即时的设备信息,对网络设备进行远程配置管理或者操作;也可以通过对数据库的访问获得网络设备的历史信息,以决定网络配置变化等操作。SNMP管理代理指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。实际上,SNMP 的管理任务是移交给管理代理来执行的。代理翻译来自管理站的请求,验证操作的可执行性,通过直接与相应的功能实体通信来执行信息处理任务, 同时向管理站返回响应信息。
  UPSMIB对象定义格式:ASN.1是一种用于描述结构化客体的结构和内容的语言,基于编码规则BER(Basic Encoding Rules)是ASN.1标准定义的一种传送文法。每个MIB变量格式是SMI规定的,用ASN.1描述如下表:
 
  ●OBJECTNAME是被管对象的名字,ASN.1要求所有对象的名字在MIB中必须是唯一的,JECT-TYPE是每一个节点对象所必需的关键字;
  ●DESCRIPTION是对被管对象的功能、特征等进行描述的关键字,(description)是被管对象的文本描述;
  ●UNITS是参数的单位;
  ●SYNTAX是被管对象类型的关键字,随后跟着的是一个类型(syntax);
  ●ACCESS是被管对象的访问方式关键字,在SNMP 第2版中为MAX-ACCESS 关键字,(access)是被管对象的访问方式,可为如下列举值之一:read-only、read-write、no-accessible,SNMP第2版中又增加了read-create; tcp ip协议是一种开放的协议标准
  ●STATUS是被管对象关键字,(status)是被管对象的状态,如必备的、可选的或废弃的;
  ●在:::={(Parent)number }中,Parent表示位于MIB树中的父节点,number表示是第几个子节点。
  UPS MIB树:每个MIB对象都用对象标识符(OID)来唯一的标识,这是用定义在ASN.1语
法中的树型结构来组织的可用信息,其中每个可用信息是一个带标号的节点,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径,它命名节点并指示它在ASN.1树中的准确位置。一个带标号节点可以拥有包含其它带标号节点为它的子树,如果没有子树它就是叶子节点,它包含一个值并被称为对象。图3是带有ASN.1编号的MIB树实例:可以看出MIB-Ⅱ的OID是:1.3.6.1.2.省略.ib2。在SNMP中,实现应用到的MIB对象都是MIB-Ⅱ的子树节点。如UPS电池充放电电流OID为1.3.6.1.2.1.33.1.2.6,其中1.3.6.1.2.1为MIB-Ⅱ的OID分支,后面的.33.1.2.6是指UPS中的叶子结点。
 
  以上阐述了对MIB的读取实现,通过VC++计算,首先要写底层的读取MIB的类, 服务器端主要是读取网络设备的MIB值,存放在数据库中,或者从数据库中读取记录,并进行分析考虑到命令模块的可重用性,此方法开发的网络管理系统基模块具备了发送网络管理查询请求到远程设备的能力,实现了对动态管理数据的收集,只有很好的实现对MIB的存取,网络管理系统才能更好的发挥作用,若对MIB进行深入的分析,可以将其应用到流量监控、性能分析、访问控制等重要的网络管理功能。
  (3)利用INDY组件进行数据采集
  INDY的全名是Internet Direct(也叫Winshoes),它是一套开放源代码的Internet控件集,它支持大部分流行的Internet协议,包括TCP、UDP、DNS、ICMP、FINGER、FTP、GOPHER、HTTP、POP3、SMTP、TELNET、WHOIS等,支持BASE64、MD2、MD4、MD5等编解码,提供INTERNET流行协议的客户端和服务器控件。INDY控件集的客户端和服务器控件都有完整、详细的源代码例程和帮助文件,用户可以根据这些例子,简单方便快速的建造各种服务器程序,例如WEB服务器、TELNET服务器、IRC服务器、TCP、UDP服务器等,而这些服务器都是支持多线程的。用户也可以很简单的编写出各种客户端程序,例如EMAIL、FINGER、FTP、PING、TELNET等。有了INDY你可以使用UDP服务器和UDP客户端写出各种网络通讯应用程序。
  INDY在Broland软件公司的已是标准化组件。INDY是完全基于SOCKET阻塞工作模式的开发库,现在已经支持BORLAND DELPHI、C++ BUIDER和最新的Kylix(LINUX里的DELPHI)等开发平台。目前,INDY的最新正式发行版本是8.0版,最新BETA版本是8.1版。INDY8.0支持DELPHI 4、DELPHI 5、C++BUIDER 4、C++BUIDER 5、Kylix等版本。Kylix
已经把INDY作为标准组件打包到发行包里了。而且DELPHI 7.0把INDY作为它的INTERNET基本组件,INDY为程序员提供更便捷的开发组件。
  INDY中QuickSend对UPS参数访问实现,QuickSend命令可通过输入计算好的oid节点取得返回参数值。QuickSend由管理站去获取代理管理信息库的值,通过发送消息来实现。管理站通过发送QuickSend报文从拥有SNMP管理代理的网络设备中获取指定对象的信息。