基于ICS SNMP完成SNMP协议的UPS数据采集

2017-01-20 08:08
安徽冶金科技职业学院学报 2016年4期
关键词:结点IP地址组态

毋 娟

安徽马钢技师学院 安徽马鞍山 243041)



基于ICS SNMP完成SNMP协议的UPS数据采集

毋 娟

安徽马钢技师学院 安徽马鞍山 243041)

基于工矿企业UPS的使用和维护现状,提出了一种利用网络进行监控和维护的设想,以解决维护中巡检不及时和对人力物力大量消耗的状况。为此深入研究了SNMP协议,在对相关的技术原理和实现方法进行详细剖析的基础上,完成了对网络监控系统的需求分析和模块设计。最后基于ICS开发组件完成了系统的开发,实现了MIB浏览器进行MIB文件的装载与解析,基于SNMP协议的UPS通道及变量组态,通过SNMP轮询操作及Trap侦听与解析完成对UPS监控数据的采集。

UPS数据采集;SNMP协议;ICS组件

马钢公司在各个重要生产线的电气设备、自动化控制系统及数据中心都安装部署了UPS,这些UPS投入使用时间大多数在2003年至2007年间,目前已进入了故障频发期。因此迫切需要建立一个UPS监测和管理的网络平台,通过信息化的手段对分布式UPS进行运行数据采集,对运行状态进行判断和隐患预报,及时有效的避免由于UPS的突发故障而影响生产或造成设备事故。

采用SNMP协议(简单网络管理协议)的网络管理卡的出现,使UPS通过网络管理卡(SNMP代理)接入网络就可以成为网络上的一个结点,实现正真意义上的UPS网络化。SNMP不仅解决了网络的接入问题,而且不同UPS均提供了符合规范的MIB(管理信息库)文件,监控系统的数据采集开发得到大大简化。本文仅涉及如何在WindowS环境下开发基于SNMP的UPS网络管理程序,不涉及SNMP代理开发方面的内容。

1 SNMP及其开发工具

1.1 SNMP

SNMP是目前使用最为广泛的网络管理协议,是由一系列相关标准组成的,这些标准在RFC文档中定义。SNMP体系框架包含三个组成部分:SNMP实体,包括SNMP管理者和SNMP代理;SNMP协议,用于在两个实体间传输管理信息的通信协议;解决管理信息如何表示和描述的MIB和规定MIB书写规范的SMI(管理信息结构)。

SNMPv1只定义了5种操作,SNMP管理者使用GetRequest从拥有SNMP代理的网络设备中查询一个或多个对象。使用GetNextRequest则是请求下一个对象。使用SetRequest可以对设备中的参数进行远程配置和控制设备的行为。SNMP代理以GetResponse消息响应Get/GetNext/Set-Request操作。Trap是由代理发出的,可以向管理者发送网络设备重启、连接关闭,设备通信中断或其它异常事件消息。Trap的扩展机制,使设备生产商能为产品提供更丰富的Trap支持。

每种操作都有对应的PDU(协议数据单元),PDU是指在分层网络结构中,为实现某个协议,各层对等实体间交换信息的数据单元。PDU被封装在SNMP报文(消息)中传送。

在MIB中描述的管理信息称为被管理对象。每个对象都有其唯一的标识符OID(对象标识符)。MIB使用树型结构来管理对象。厂商或者个人可以定义私有的MIB,来描述自己设备特有的管理信息。每台支持SNMP的网络设备,必须提供相应的MIB文件。依据这些MIB文件管理系统才能确定被管理设备中哪些信息能通过OID进行查询或设置。

1.2 开发工具ICS

在Delphi开发环境下,目前有许多支持SNMP功能的第三方开发包,较有影响力的是Synapse、Indy和ICS。使用这些开发包,可以大大简化WindowS环境下的SNMP编程工作。

ICS(Internet Component Suite)是Overbyte公司推出的为Delphi和 C++Builder开发者提供的网络开发套件。包含了原生的sockets、TCP、UDP协议及更高层次的FTP、 SMTP、 POP3、NNTP、HTTP等协议的支持。

ICS采用非阻塞模式(异步模式),可以在单一的线程中同时处理上百个连接。ICS组件提供了大量的事件来控制程序的流向,在分配了事件句柄后,只要等待事件发生就行了。本文的对象不会超过50个结点/连接,完全可以在一个线程中处理,因此ICS是非常合适的SNMP应用的开发工具。ICS在提供了实现SNMP协议的3个类TSNMPMib、 TSNMPRec与TSnmpCli。

TSNMPMib类仅有三个属性。OID:表示被管理对象的标识;Value: OID所指对象的数值;ValueType:数值的数据类型。

TSNMPRec类属性中最为重要的是SNMPMibList,一个容纳多个OID/值对的查询队列,其成员的数据类型为TSNMPMib。在TSNMPRec中由EncodeBuf方法负责Get/GetNext的编码,DecodeBuf方法能同时处理SNMPv1和v2c两种Trap。由MIBAdd、MIBDelete完成对查询队列中OID/值对的添加与删除,即变量绑定工作;由MIBGet从队列中获取指定OID对象的值。

TSNMPCli是完成SNMP客户端开发的类。TSNMPCli类的属性Query负责存储将要查询的对象的OID/值对队列;属性Reply负责存储接收到的应答中对象的OID/值队列,两者成员都是TSNMPRec类型。TSNMPCli的SendTo方法执行Get操作,查询对象可由Query属性指定,可以进行批量查询;Get方法执行Get操作,查询对象由OID属性指定,一次只查询一个对象;GetNext方法执行GetNext操作,查询起点由其OID参数指定。TSNMPCli事件OnRequestDone:查询完成后触发的事件。

2 开发的实施

2.1 轮询(Polling)

查询操作流程,如下图:

图1 查询操作流程

开始查询之前必须经过组态,组态是构建PDU的必须过程,也是进行管理的一种手段。组态操作主要借助GUI来完成,操作的顺序为:添加驱动,每种驱动对应一个MIB文件;添加UPS设备,指定代理的IP地址、本地监听端口、超时检测、数据采集频率等;建立分组,可以对要查询的对象进行分组管理,如输入信号编入一组,电池信号编为一组等;添加变量(被管理对象),包括变量名和实例ID(可以直接从MIB浏览器中拷贝粘贴)。组态信息通过TreeView和ListView显示,组态数据全部由后台组态数据库进行维护。

图2 组态的GUI

组态完成后就可以用InitSNMP方法为每个UPS创建一个SNMP连接并对其查询PDU进行初始化。首先从数据库中提取组态信息,将所有UPS结点信息存入以PNodeInfoRt类型变量为成员的NodeList,结点下的变量存入以PVarInfoRt类型变量为成员的VarList中。PNodeInfoRt和PVarInfoRt为运行时结点和变量的数据结构。

InitSNMP与SNMP相关的主要代码如下:

for i := 0 to NodeList.Count - 1 do

begin

nInfo:=NodeList.Items[i];

SnmpCliList[i]:= TSnmpCli.Create(Self);

//PDU头部

SnmpCliList[i].Version := SNMP_V1;

SnmpCliList[i].Community := nInfo.Community;

nmpCliList[i].Query.PDUType :=PDUGetRequest;

//PDU变量绑定

for j := 0 to VarList[i].Count - 1 do

begin

vinfo:=VarList[i].items[j];

SnmpCliList[i].Query.MIBAdd(AnsiString(vinfo.OID),'',ASN1_NULL);

end;

//指定接收到查询响应时的处理事件

SnmpCliList[i].OnRequestDone := SnmpCliBatchRequestDone;

end;

执行查询操作是GetDateBatch,该方法将调用TSNMPCli类的SendTo发出查询请求。主要流程是调用PostMessage,将FMsg_WM_LISTENING消息寄送到消息队列里并返回。当应用程序窗体收到一条消息后,调用WndProc判断是否为FMsg_WM_LISTENING,如果是,使用Query.EncodeBuf进行编码,然后将存放在buffer中的查询报文发送给代理。

在InitSNMP部分,我们为SnmpCliList 的OnRequestDone事件分配了句柄——SnmpCliBatchRequestDone,该过程将对接收到的响应数据报文进行处理,从中提取出变量(被管理对象)的值,其定义如下:

procedure SnmpCliBatchRequestDone(Sender : TObject;

ReqType : TSnmpCliReq;

var Action : TSnmpCliAct;

ErrCode : Word);

在这个过程中,首先根据IP地址到NodeList中去查找对应结点在NodeList中的索引。在触发OnRequestDone事件之前,TSNMPCli已经用Reply.DecodeBuf方法进行解码,并将解码的结果保存到Reply.SNMPMibList属性中。现在只要通过索引就能将所有查询的OID值对提取出来。

for i := 0 to NodeList.Count - 1 do

begin

nInfo:=NodeList.Items[i];

{利用Sender参数来判断是哪一个结点的响应}

if nInfo.IP=(TSnmpCli(Sender).HostIP) then

begin

h:=i; // 匹配的索引值保存在h中

……

end;

end

……

if ReqType = srqGet then

begin

for j:=0 to SnmpCliList[h].Reply.SNMPMibList.Count -1 do

begin

vinfo:=VarList[h].items[j];

vinfo.Value:=TSNMPMib(SnmpCliList[h].Reply.SNMPMibList.Items[j]).Value;

end;

Msg:='Get Date Value OK!';

end;

2.2 陷阱(Trap)

TSNMPCli类不能接收Trap(此时管理系统是服务器,TSNMPCli类不支持服务器端开发)。我们自己建立一个TSnmpTrap类,其中DecodeTrap方法参考了TSNMPRec类的Decode方法。

Trap的接收和处理,使用ICS提供的TWSocket组件的DataAvailable事件实现,事件处理过程中调用TSnmpTrap类的方法进行报文解析和数据提取。

图3 SNMP查询日志

trap.DecodeTrap(s);

//--头部

ti.Enterprise := trap.Enterprise; //企业标识

ti.TrapHost := trap.TrapHost; //代理的IP地址

ti.GenTrap := trap.GenTrap; //常规陷阱标识 ti.SpecTrap := trap.SpecTrap; //扩展陷阱标识 ti.TimeTicks := trap.TimeTicks; //时间戳

ti.ReceiveTime := now; //接收到trap的时间,不属于报文的内容

//--变量绑定

if trap.SNMPMibList.Count > 0 then

begin

mib.Oid := TSNMPMib(trap.SNMPMibList.Items[0]).Oid; //名

mib.Value := TSNMPMib(trap.SNMPMibList.Items[0]).Value; //值

mib.ValueType := TSNMPMib(trap.SNMPMibList.Items[0]).ValueType; //类型

ti.SNMPMibList.Add(mib);

ti.Msg:=mib.Oid+':'+mib.Value;

end;

其中trap为TSnmpTrap类型、mib为TSNMPMib类型、ti为 PTrapInfo(指向一个对应于Trap PDU字段的记录类型)。

2.3 SNMP数据采集性能测试

采用梅兰日兰Galaxy PW 100kVA UPS,配置Transverse 66074网卡,IP地址为172.17.244.154;APC Smart RC10000 UPS,配置AP9630网卡,IP地址为172.17.244.250;同时还选择运行SNMP采集程序的主机,用于和UPS数据采集进行对比,主机IP地址为172.17.244.150。

图4 监听到的Trap 及解析结果

实测当每个结点刷新频率为1秒时,分别进行了不同数量采集数据的响应时间测试,测试结果如表1所示。从测试结果看,相同的采集数量单结点和多结点同时采集的响应时间相差不多,响应时间的长短还取决于网卡的处理性能,对单UPS每秒采集300个数据没有压力,已经能满足要求。

表1 SNMP查询性能测试结果

3 结论

基于SNMP协议的UPS数据采集系统是完成了UPS网络监控系统的构建的基础。本文所完成的数据采集系统可达到1秒同时采集7台UPS共500左右个过程数据的性能。在此基础上完成的监控系统可以解决UPS电源数量多、品牌多、多地域网上巡检、监测和管理难题,不仅有效的降低UPS电源维保成本,而且通过隐患发现早、分析依据多、查清原因准,排除故障快等优势减少UPS电源没有起到后备作用而引发的重大设备事故。

[1] 周 波,刘春玉,王 毅.UPS实时监控系统的设计[J].武汉理工大学学报(信息与管理工程版),2013(1):32-35

[2] 孔彦虎.UPS在线远程状态监测及报警技术的应用[C].石家庄:2014钢铁企业设备故障远程诊断技术与无损检测交流会论文集,2014(1):276-282

[3] 郭亚杰,相有桓,韩慧奇.UPS网络集中监控系统设计与实现[J].电子技术,2013(10):26-28

[4] 郭连强,谭敬华,胡晓林等.实现UPS远端维护管理的方法[J].黑龙江科技信息,2010(26):106

[5] 何来坤.基于校园网内SNMP的UPS远程监控系统设计与实现[J].杭州师范大学学报(自然科学版),2009(1):62-65

[6] 王小维.基于SNMP的网络监控系统的设计与开发[D].北京:北京化工大学,2011-12-20

[7] 江伟石.网络UPS之集中管理[J].UPS应用,2014(4):1-3

[8] 龚尚福,刘二恩,冯健.基于SNMP的MIB树结构研究与实现[J].计算机应用与软件,2013(12):163-166

Implementation of SNMP Protocol ups Data Acquisition Based on ICS SNMP

WU Juan

Based on the usage of UPS and maintenance situation of industrial and mining enterprises, the author comes up with an idea of surveillance and maintenance via network in order to solve the problems caused by inspection not in time and waste of manpower and material resource. The SNMP protocol is deeply researched, and on the basis of the detailed analysis of relevant technical theory and achievement method, The author has finished the demand analysis and module design of data acquisitiuon system and has developed the system by ICS component.. the system has achieved MIB load and analysis via MIB browser and has completed collecting UPS surveillance data through SNMP polling operation, Trap monitoring and analysis on the basis of UPS channel and variable configuration of SNMP protocol.

UPS data acquisitiuon, SNMP protocol, ICS component

2016-10-06

毋 娟(1980-),女,安徽马钢技师学院,安徽冶金科技职业学院,计算机系,讲师,多年来一直从事计算机相关专业的教育教学工作。

TP311.138

A

1672-9994(2016)04-0034-05

猜你喜欢
结点IP地址组态
LEACH 算法应用于矿井无线通信的路由算法研究
基于八数码问题的搜索算法的研究
基于PLC及组态技术的恒温控制系统开发探讨
铁路远动系统几种组网方式IP地址的申请和设置
IP地址切换器(IPCFG)
基于PLC和组态的智能电动拧紧系统
基于SNMP的IP地址管理系统开发与应用
公安网络中IP地址智能管理的研究与思考
PLC组态控制在水箱控制系统的应用
铸造行业三维组态软件的应用