基于WEB的生产实时监控系统的研究与设计
2013-07-11孙栓柱周春蕾王其祥
孙栓柱,孙 彬,周春蕾,王其祥
(江苏方天电力技术有限公司,南京 211102)
传统的生产实时监控系统一般采用C/S(Client/Server,客户端/服务器)结构。这种结构过于依赖客户机的软件配置,系统的开发成本和维护成本较高,同其他信息系统交互性差。同时由于客户端直接访问数据库,导致数据库安全级别降低,存在一定的安全风险。C/S结构通常只限于小型和相对封闭的企业局域网。
随着互联网技术和WEB技术的飞速发展和广泛应用,许多用于监控软件开发的组态软件也开始提供WEB功能。目前大部分组态软件均采用ActiveX+JSP技术实现WEB发布,为了运行ActiveX需要降低浏览器安全级别,会对客户端造成安全威胁。同时,由于采用了JSP技术,在实时监控过程中浏览器和服务器之间频繁传输整个监控页面,形成了大量网络流量,严重影响实时数据的发布。
针对以上问题,本文提出了一种基于B/S(Browser/Server,浏览器/服务器)架构的生产实时监控系统的设计方案。该方案以开源的关系型数据库MySQL为数据库管理平台,同时结合Flex、EXT、Ajax等富客户端技术,在浏览器中以实时交互方式对生产现场进行远程监控和WEB数据发布。目前在WEB应用中广为流行的富客户端技术,支持页面中各图表组件以并行请求、异步响应、动态更新的方式,无须重新加载整个页面即可实现按需请求数据和局部页面更新,从而达到降低网络数据流量、提高页面数据处理效率的目的,为实现页面实时数据刷新提供了解决方案。在系统实现过程中,以基于J2EE规范的WebLogic为WEB应用服务框架,用于开发、集成、部署和管理分布式WEB应用和数据库应用。
1 系统应用架构
在生产过程现场数据量不大、工业控制计算机配置较高的情况下,可以将现场的工业控制计算机与WEB服务器、数据库服务器和通讯服务器合为一体,监测数据的采集和控制指令的下达频率为1次/秒。典型的系统应用架构如图1所示。
图1 典型应用架构
数据采集和控制装置包括DCS、PLC或者板卡等设备,通过电缆与现场设备连接,实时采集生产过程温度、压力、流量和浓度等数据,再通过工业以太网络、RS485和RS232等通讯链路上传至工业控制计算机的监控系统。监控系统接收传输上来的生产实时数据,对其进行存储和计算,并利用实时监控图、曲线和报表等方式进行数据发布。运行人员通过浏览器可以直接访问生产过程现场数据。
如果运行人员需要对现场设备进行操作,可以在工艺监控页面中直接发出控制命令,通过监控服务器将指令下达给数据采集和控制装置,实现远程控制。
2 系统逻辑架构
系统通过数据采集和控制层完成数据采集、转换、传输和现场设备操作;数据存储层实现实时数据和统计数据的存储管理,WEB应用层则实现WEB数据发布。系统总体架构如图2所示。
图2 系统逻辑架构
2.1 数据采集和控制层
数据采集和控制层从现场设备采集运行数据,经过数据转换及格式化后,将其传输到数据存储层。同时,接收来自数据存储层的远程控制指令,对现场设备进行操作。
2.2 数据存储层
数据存储层通过采集数据接收、控制指令下达程序与数据采集和控制层交互:一方面,获取监测数据,对其进行实时缓存;另一方面,接收来自客户端浏览器的控制指令,将其下达给数据采集和控制层。这种方式避免了数据采集和控制层直接访问数据库,提高了数据库的安全性和稳定性。
实时数据库实现采集数据在线实时存储和历史数据存储管理;操作记录数据库存储用户远程操作日志;统计数据库存实现统计数据存储管理。
系统以MySQL为数据库管理器。MySQL具有大容量(可以在一张数据表中保存超过5千万条记录)、运行速度快和操作简单的特点[1],可以很好得满足秒级数据存储的性能要求。
系统采用Ibatis和JDBC相结合的方式,提供对数据的持久化支持。Ibatis支持系统大部分数据操作功能,而对系统中诸如实时数据写入和查询等对数据读取效率要求较高的功能,则通过具有很高执行效率的JDBC完成。
2.3 WEB应用层
WEB应用层采用Struts2技术框架,利用Flex、EXT和Ajax等技术,实现数据列表、工艺图、趋势图和统计报表等富客户端表现方式,为用户提供丰富的WEB数据发布功能。
1)工艺监控。对现场生产设备的运行情况、及生产过程的温度、压力和流量等进行远程监控,实时反映监控对象的总体运行性能;同时通过输入指定值或执行操作命令的方式对现场设备进行操作,实现远程控制。
2)实时和历史趋势。以实时滚动的方式动态展示测点最近1小时的数据变换趋势,并提供任意时段的历史趋势分析。
3)统计分析。提供日、月、年等时间粒度的监测台帐和生产报表等固定格式报表的查询功能和统计数据趋势图等分析功能。
4)系统管理。测点维护功能,设置测点的标签、单位、量程及报警上下限等属性;权限设置功能,设置用户操作权限和业务数据查询范围。
3 关键技术研究
3.1 实时数据存储
实时数据常用的存储方式有两种:数据文件和数据库。文件访问的并发性较差,不能很好地支持秒级数据写入,且因其缺乏完善的数据索引机制,无法实现对实时和历史数据的快速批量查询。因此,系统选用数据库作为实时数据存储方式。
在实时监控系统中,数据存储结构通常采用以测点为列、时间戳为记录标识(索引)的数据存储结构。一个监控系统采集测点数一般不超过1000个,实时数据表的存储构如图3所示。图中列t表示时间戳,P1、P2、…、P1000表示第1到1000个测点的实时数据列。
图3 实时数据表结构
按照上述存储结构,1年的数据记录将高达3200万条,这将严重影响实时数据存储和查询的效率。因此,系统将数据表按月拆分,月数据表命名规则为RT_yyyy_m,其中yyyy表示年份,m表示月份,如:RT_2013_1为2013年1月的数据表,RT_2013_12为2013年12月的数据表,其他情况以此类推。
对于跨月的历史数据查询,如:历史趋势图,数据来自多个月数据表,系统以存储过程方式提供统一的历史数据查询服务,将单月数据查询看作多月查询的特例,封装了数据表的寻址过程。
3.2 实时数据缓存
考虑到数据更新频率达到秒级,为了确保实时数据能成功写库,不出现数据丢失现象,创建实时数据缓存表,保存来自现场设备的最新数据。每当有新的监测数据到达时,即自动将上一批实时数据复制到当月数据表中,然后用最新到达的监测数据覆盖原来的数据,完成实时数据的动态更新和迁移。
实时数据缓存表中通常只有1条记录,因此系统中实时数据都直接取自实时数据缓存表,而无需从存有近270万条记录的月数据表中检索1条实时数据,有效地缩短了工艺监控图、实时趋势图等WEB组件的实时数据检索时间。
3.3 秒级数据刷新
为实时展现现场采集数据和控制现场设备,工艺监控图采用秒级别数据刷新设计。为实现此目标,系统采用Flex图表组件进行图形和数据展示,工艺设备使用图像标签img,监测数据使用文本标签Label;采用Remote Object方式,使用AMF(Action Message Format)协议与服务端进行数据交互,这种方式直接访问后台对象,将数据序列化为二进制格式,从而提高数据在网络上的传输速度,缩短客户端数据处理时间,相比较传统的XML-over-HTTP方式,这是最高效的通信方式[2]。
在工艺图组件初始化过程中, RemoteObject对象调用send方法读取XML格式监控图,然后由Flex绘制工艺图。在其后的实时监控过程中,仅刷新实时数据,不再重新绘制工艺图。完成工艺图绘制后,启动定时器定期进行Flex刷新,实现实时数据自动更新。实时数据刷新过程如下所述。
1)RemoteObject对象以工艺图测点编码集合为参数发出实时数据查询请求;
2)服务端收到请求后,将测点编码转换成测点标识,从实时数据缓存表中读取实时数据,然后以实时数据 (测点编码、实时数据)集合的形式返回客户端;
3)工艺图组件收到返回结果后,调用updatePointsData方法更新页面测点数据:遍历实时数据集合,以测点编码为元素标识id定位数据标签,用实时数据设置标签的value属性,依次为每个测点更新实时数据。
3.4 实时趋势分析
系统使用实时趋势图组件动态显示测点最近1小时的数据变化曲线。为了实现趋势图组件,系统引入了具有丰富表现力的Flex图表组件,利用客户端完成各种显示效果的渲染,使数据的交互更为直观。此外,图表中的颜色、图标、符号、图例、标题和提示等也都可以进行个性化定制[3]。
系统在Flex自带的线型图组件的基础上,根据业务需要进行扩展,开发了实时趋势图组件。该组件仅在初始化过程中进行1小时历史数据查询,其后的数据刷新过程仅请求实时数据,从而使组件能快速更新趋势曲线。实时趋势图组件曲线实时刷新过程如图4所示。
3.5 统计报表查询
系统的统计分析逻辑采用MySQL数据库存储过程实现。存储过程是一组具有特定处理功能的SQL语句集,在创建时进行了预编译,具有较高的执行效率。而且,SQL语句以事务的形式批量执行,可以有效地保证数据的一致性和完整性。
统计数据返回客户端后,一般以WEB报表的形式进行发布。WEB 报表使用HTML的table标签展示数据集;以Struts2的iterator标签展示数据行,实现数据记录到tr标签的循环转换,通过设置iterator标签的value属性实现数据绑定;以Struts2的property标签及其value属性将记录行的列绑定到td标签,在单元格内展示数据。
图4 实时趋势图组件曲线实时刷新过程
3.6 数据安全控制
1)登录密码加密
用户登录密码采用MD5算法加密,以密文形式存储。MD5 是Message-Digest Algorithm 5的缩写,通过对文本应用不可逆的字符串变换算法进行加密[4]。
这种密码加密和存储方式,不但可以避免用户密码被系统管理人员知道,而且由于MD5算法的不可逆性还在一定程度上增加了密码的安全性。此外,由于密码以密文形式在网络中传输,有效地避免了传输过程中的泄密问题。
2)应用层安全控制
用户在登录系统时采用验证码机制,防止程序自动登录造成的性能安全问题,并使用Session会话实现用户身份验证保存。
系统通过Servlet的过滤器机制,防止用户通过直接输入Url的方式访问未经授权的功能和数据。采用Spring的拦截器技术进行权限控制,保证业务数据的安全。
4 系统应用
以江苏某电厂的烟气排放实时监控系统为例:系统部署在就地监控系统工控机上,电厂操作人员利用浏览器通过厂内局域网监测现场烟气分析系统数据和对系统进行远程维护。
图5是该厂#4机脱硫后烟气排放监控系统工艺监控页面。监测参数包括:烟囱进口SO2、NOX、烟尘浓度、O2、流速等参数;需远程控制的包括标定相关阀门等设备。页面右侧是实时趋势图,通过单击工艺图中的测点标签实现测点选择。
图5 净烟气工艺监控页面
5 结束语
采用J2EE、WebLogic、MySQL集成配置方案、结合Struts2框架和Ajax、Flex等技术,设计开发的基于WEB的生产实时监控系统,实现了生产过程的远程监控、秒级数据在线存储和统计分析,目前已经在多个工业控制现场得到了应用,运行稳定、可靠。利用浏览器模式的远程监控方式方便了运行人员的操作,促进了企业内部生产过程信息的共享,同时也大大减轻了系统维护人员的工作量。
[1] 吴津津,田睿,李云,刘昊.PHP与MySQL权威指南[M].北京:机械工业出版社,2011.
[2] 胡毓励.基于Flex的企业协作平台及其用户使用挖掘的设计与实现[D].杭州:浙江大学计算机科学与技术学院,2010.
[3] Adobe Help Resource Center.Flex 3 Developer's Guide[OL].http://livedocs.adobe.com/flex/3/html/help.html?content=Part2_DevApps_1.html.
[4] 张裔智,赵毅,汤小斌.MD5算法研究[J].计算机科学,2008,35(7):295-297.