塑料炼油监控系统监控代理设计与应用
2011-07-18王建中
叶 峰,王建中,吴 锋
(杭州电子科技大学自动化学院信息与控制研究所,浙江杭州310018)
0 引 言
简单网络管理协议(Simple Network Management Protocol,SNMP)应用范围很多。国外虽然目前已经有着如HP Openview、SUN NetManager和IBM NetView/6000等国外厂商的管理系统[1],国内目前有浙大计算机学院研究SNMP的网络仿真构建系统[2],但这些系统仅局限于对如网络运行状况、IP设备等网络、硬件层的管理,无法支持企业应用系统层的运行管理。本文选用HP公司提高的SNMP开源软件包(即SNMP++V3.2和Agent++V3.5)开发设计SNMPAgent,并结合某公司塑料炼油生产实践,以塑料炼油系统中的三相分离器为例论证了该代理设计的可行性。
1 基于SNMP的塑料炼油监控系统简介
监控中心的管理端通过Internet/Intranet向现场控制计算机发送SNMP消息,前端主机的SNMP A-gent负责接收并解析SNMP报文,向服务器发送相应C数据包,服务器则根据数据指令,通过PLC对现场控制设备进行监控。
SNMP++是为网络管理应用程序开发者提供的具有SNMP服务的一套C++类的集合。它具有基于面向对象模型建立的SNMP应用程序接口,在最小化的范围内使用已经存在的SNMP库,保证了程序的高效和可移植性。对于使用TCP/IP协议的Internet来说,Snmp++封装了底层的Socket操作,提供了简单的API供开发者使用。
Agent++是在Snmp++的基础上,扩展了Snmp++中的概念,它是用来开发SNMP代理的一套C++类的集合。它继承了Snmp++的优点,封装了绝大部分的SNMP的标准操作,并且利用面向对象的特性,使开发者能够通过派生的子类,重载其中的虚函数,根据应用程序的需要灵活控制程序。
2 SNMP agent在塑料炼油系统中的设计
2.1 SNMP协议的操作
SNMP Manager通过SetGetGet nextGet bulk request等4种指令与SNMP Agent代理进行信息交互,而SNMP Agent则在161端口通过发送response信息,来回应SNMP Manager。当出现意外状态,SNMP Agent则在162端口发送trap信息,来汇报出现的紧急状况。
2.2 基于Agent++的Agent开发
2.2.1 Agent设计
(1)Agent设计有以下流程:
1)首先,根据被管设备和参数订制私有MIB库,并通过AgentPro工具产生对应C++的代码;
2)然后根据用户的需要,对通用函数访问代码进行修改,加入用户特定的代码,使之能完成对设备管理信息的访问,向管理站发送告警消息等操作;
3)将经过修改的通用访问函数代码、SNMP++类库、Agent++类库,以及按主程序模板编写的主程序组织在一起,使用C++编译器进行编译,即可生成网管代理服务程序。
(2)Agent主程序开发实现流程如图1所示:
图1 agent开发流程图
1)首先,调用Snmp::socket_startup()初始化套接字库。即在socket_startup函数中调用库函数WSAStartup(0x0101,&WSAData)来指明程序请求使用的Socket版本,然后绑定找到的Socket库到该应用程序中;
2)创建Snmp会话,并设置连接端口。调用Snmpx类构造函数snmp(status,port)初始化SNMP对象,并从port参数指定端口号,系统会将结果返回在status变量中。在一般情况下端口号为161,只有在出现trap时会从端口162中将故障信息返回到管理站;
3)创建MIB类对象和消息请求队列列表对象RequestList,并将RequestList对象设置为传入/传出消息体对象;
4)采用ASN.1语言自定义MIB管理信息库,然后将其Add添加到MIB树状节点对象enterprise下,并进行初始化;
5)令RequestList处于监听传入请求状态,一旦接收到查询或设置消息请求,则立即调用process_request(Request*req)进入消息处理模块对其进行处理;
6)通过函数answer(Request*req)处理,将请求的数据信息以SNMP数据包格式进行封装,发送Response回复消息至Manager管理器;
7)若被管理对象或代理自身出现异常,代理自动进入陷阱处理程序。
2.3 Agent与服务器之间的通信设计
在工业控制系统中,OPC技术规范成为了各种设备厂商的通用标准,它能有效解决各种厂商的驱动程序不一致等问题。而本文所设计的代理程序同样需要通过OPC服务器来获取相应设备的实时数据。
首先,Agent向设备发送的信息首先从OPC服务器的IUnkown接口进入,然后OPC服务器通过对Agent的信息进行解析,得到相应的请求信息。然后OPC服务器通过异步通信接口对现场设备进行读写操作,得到相应的OPC项的值,具体有相应设备的值,品质,时间戳,最后通过callback返回客户端,最后将从OPC服务器中获取的数据转换成SNMP的消息格式,返还给代理,从而实现Agent与服务器的通信。
3 SNMP agent在塑料炼油系统中的应用
以塑料炼油系统中的三相分离器为例,来阐述SNMP agent在整个监控系统的实现过程。首先,设定系统处于正常运行状态,连接着现场设备的PLC不断检测三相分离器的液位值,服务器在实时更新着三相分离器的液位的数据项,并发送至客户端,SNMP agent则将得到的数据项变成SNMP数据格式,并将其保存在数据库中,同时,自定义 MIB 节点 OID 为1.3.6.1.4.enterprise.hdu.Three-phase separator liquid level,一旦接收到远端SNMP Manager的请求信息,则向其返回即时电流值信息。
远程监控中心的Manager通过Internet网络向预先设置好的IP地址的物理设备三相分离器控制PC发送SNMP数据包与SNMP Agent建立连接,若成功,则Manager可设置刷新数率,封装PDU类型为GET的SNMP数据包并发送至Agent,接着代理通过消息处理模块将查询命令传至客户端,查询客户端的液位值并返回保存在Agent MIB中,最终由Agent封装带有此变量值的SNMP数据包并调用Response消息相应函数将数据包返回给SNMP Manager,完成相应的监控操作。
当三相分离器的液位一旦超过所设定的上限值时,Agent通过从服务器读取的实时数据与设定的液位阈值比较,于是就进入异常状态,产生Trap并向监控重心发送电流预报警信号。监控重心人员可视情况采取措施,即可由PLC自动打开控制三相分离器阀门进行排液处理,也可由人员到现场手动打开三相分离器阀门进行强制开启进而排液。
4 结束语
本文结合SNMP协议的特点和原理,分析了Agent代理的特征,根据塑料炼油系统的监控要求制定了特定的MIB库,通过agent++设计了系统的监控代理,并将其嵌入客户端,实现了对塑料炼油系统中的设备实时监控。
但监控系统仍然有其缺陷与不足,如信息处理速度过慢,监控的设备实时信息量过多过细,容易造成整个监控系统死机等问题,有望在以后进一步的研究中得到解决。
[1] 颜凯,张军.网络管理平台的分析及应用环境[J].计算机应用,1999,19(9):14-17.
[2] 宋国荣,何钦铭.基于SNMP可扩展代理的网络仿真[J].微电子学与计算机,2005,22(6):184-187.
[3] HP company.Agent++v3.5.[EB/OL].http://www.agentpp.com/agentpp3_5/agentpp3_5.htm,2011 -09 -18.
[4] 岑贤道,安常青.网络管理协议及应用开发[M].北京.清华大学出版社,1998:46-67.
[5] Wiliam Stallings.胡成松,汪凯 译.SNMP网络管理[M].北京:中国电力出版社,2001:12-16.
[6] 寇晓乐,罗军永,蔡延荣.用SNMP实现安全的网络管理[C].北京:信息保密专业委员会,2003:34-38.
[7] 余威,危韧用.基于PLC和OPC的实验台挂件识别体统[J].自动化技术与应用,2010,29(5):45-48.
[8] 顾键,王京春,黄德先.OPC-COM技术在工业自动化软件件中的应用[J].计算机工程与应用,2002,(12):207-209.
[9] 杜效伟.基于0PC的实时数据集成系统设计[J].许昌学院学报,2010,(2):42-43.