摘要:该文介绍了一种基于J2EE的电力营销管理信息系统和抄表机的集成解决方案。提出了集成方案的总体设计,阐述了该方案所涉及的ActiveX控件、zlib解压缩、Base64编解码、DBF格式转换组件等关键技术。
关键词:电力营销管理系统抄表机DBFActiveX控件zlib解压缩Base64编解码
0引言
抄表机实际上是一台功能强大的掌上数据电脑,由于其具有存储容量大、数据保存时间长、携带方便、机器运行速度快等特点,在供电企业已经得到广泛应用,主要用于现场电能表表码数据的采集。与传统的卡本抄表方式相比,具有提高工作效率、减少出错率、方便等多方面的优势。
抄表员每次抄表前将抄表户的详细数据从电力营销管理信息系统下装到抄表机中,然后携带抄表机到现场,利用抄表机简便的查找方式查到该抄表户资料,将现场表码数据输入到抄表机中,抄表结束后,将抄表机连接到微机上,抄表机内存储的抄表数据就全部自动的录入到电力营销管理信息系统中。
目前在供电企业中使用的抄表机大多数是通过标准串口线RS232和微机互连,采用标准的DBF作为交换数据格式与电力营销管理信息系统进行数据交互,电力营销管理信息系统通过调用抄表机提供的接口程序,实现抄表数据的上下载过程。
1总体设计
基于J2EE的电力营销管理信息系统和抄表机的集成主要由两个重要的组件构成:客户端基于COM组件模型开发的ActiveX控件和服务端的DBF格式转换组件。系统结构示意图如图1所示。
(1)ActiveX控件提供了DBF格式二进制数据流的zlib解压缩、Base64编解码和调用抄表机的发送接收程序功能。
(2)DBF格式转换组件实现了抄表数据的记录形式和DBF格式之间的转换,提供了DBF文件元数据解析、DBF格式二进制数据流的解压缩和Base64编解码功能。
使用抄表过程简要描述如下:抄表机下载时,首先服务端数据提取程序从抄表中间库中获取抄表数据,通过DBF格式转换组件将数据转换为DBF格式的Java类数组,再转换为字节数组输出流格式,并进行压缩和Base64编码,在客户端利用网页上嵌入的ActiveX控件进行解码和解压,并在指定目录下形成DBF格式的数据文件,利用COM通信机制,调用抄表机发送程序发送数据到抄表机。抄表机上载时,过程正好相反。
2系统实现关键技术
2。1客户端实现技术
(1)抄表机的发送接收程序调用接口。ActiveTemplateLipary(ATL)和MicrosoftFoundationClasses(MFC)是目前编写ActiveX控件的两个流行的框架,但是从基本的设计结构上讲,MFC不适合于开发专业的COM组件,它适合于在Windows应用的基础上提供相应的COM支持,ATL完全面向COM组件[1]。采用ATL构建ActiveX控件,提供抄表机的发送接收程序调用接口。由于COM组件具有接口和实现分离的特性,屏蔽了对不同抄表机型号的不同的接口调用的实现差异,对外提供统一的抄表机的发送接收程序调用接口。接口的实现是对抄表机提供的动态链接库的接口调用,实现了COM组件与组件之间的互操作。
(2)解压缩接口。为有效地传输数据和提高网页文件的下载速度,需要对抄表数据进行压缩处理。采用zlib作为解压缩引擎,为ActiveX控件提供解压缩接口。GNUzlib是通用的压缩库,流行的deflate压缩算法,提供了一套in—memory压缩和解压函数,并能检测解压出来的数据完整性。
(3)Base64编解码接口。采用Base64编码将二进制抄表数据进行编码,并在网页上作为对象缓存。Base64是网络上最常见的用于传输8bit字节代码的编码方式之一,它将二进制数据编码为字母和数字。ActiveX控件提供Base64编解码接口,通过编码将其转换成为一种被称为BASE64的ASCII子集的字符的'组合,解码实现逆过程。
(4)采用脚本对页面对象进行访问。将ActiveX控件嵌入抄表机应用程序网页,通过VBScript和Jscript脚本直接调用页面对象(如ActiveX控件)的访问。
2。2服务端实现技术
服务端的DBF格式转换组件,由一组通用的DBF操作组件构成,逻辑上分为DBF格式定义组件、DBF格式解析组件、DBF转换组件和实用类。
(1)DBF格式转换组件。DBF格式定义组件DBFField,定义了DBF字段的元数据以及get和set方法,字段元数据包括字段名、数据类型、长度、数据部分位数等。
采用XML[2]来描述DBF文件的元数据结构和语义,并以XML文件存放在Web应用程序WEB—INF目录下。DBF格式解析组件,提供了通过XML文件或者直接解析DBF文件获取DBF的元数据结构两种方式。DBFStruParser利用DOM解析器将XML解析成DBFField数组。另一种实现是直接在WEB—INF目录存放DBF格式文件,DBFReader解析DBF格式流文件生成DBFField数组。
DBF转换组件DBFConvertRecords,实现数据库中抄表数据结构和DBF格式之间的映射,以及抄表数据集合ArrayList、XML格式与DBF格式的相互转换。
实用类Base64Util用于Base64编解码。java。util。zip。Deflater用于解压缩。
(2)利用XSLT进行格式转换。抄表数据元数据和DBF元数据之间的映射可简单地通过两者一致的字段名或别名约定来实现,但是这种实现要求抄表中间库表的定义和DBF的定义要严格的对应,由于不同电力企业使用的是不同厂商不同型号的抄表机,传送的DBF格式和语义也不一定相同。
XSLT[3]样式表描述了将源XML格式转换为目标格式的一系列的规则。利用XSLT转换器作为转换引擎,对XML格式数据进行过滤、排序和重构[4]。过滤是选择并提取数据的一个特定子集的处理过程,排序就是重新编排数据的过程,重构包括数据元数据转换和翻译数据[4]。以抄表机下装为例,说明转换过程,如图2所示。
首先针对不同类型的抄表机,分别定义不同XSLT样式表。利用DOM解析器将从数据库中检索的抄表数据集合ArrayList转换为XML,根据XSLT样式表所描述的规则,转换为抄表机特定格式的XML数据,再将XML格式转换为DBF格式,间接实现了抄表数据集合和DBF格式的映射。
(3)组件调用。采用基于MVC模型2的Struts的Web应用框架,WriteDbfAction用于处理JSP页面的抄表机发送和接收处理请求,调用DBF格式转换组件进行DBF解析、转换,并利用实用类进行编解码和解压缩。为了向业务层隐藏特定表示层的细节,降低表示层和业务层耦合度,首先定义IWriteDbf接口,WriteDbfForm实现该接口,该接口不包括与请求处理和协议相关的表示层数据结构的引用。采用接口的方式提供合适的值对象给业务代理WriteDbfBD,再调用相应的业务逻辑类,如DBF格式转换DBFConvertRecords。
3结束语
文中介绍的一种基于J2EE的电力营销管理信息系统中实现抄表机上下装的集成解决方案,实现了基于J2EE的电力营销管理信息系统和抄表机之间的紧密集成,该方案也实现了J2EE环境下进行DBF格式的数据集成,已经应用于工程实践。例如供电企业的电能计量管理部门采购常寿命电能表时,需要电能表生产厂商提供电能表资料、电能表检定和误差记录数据,然后将这些数据转入到电力营销管理信息系统中。