基于二维码的电力设备巡检管理系统
2020-03-05李佑群向道豪丁德红
李佑群,向道豪,丁德红
(1.国网湖南省力有限公司常德供电分公司,常德415000;2.湖南文理学院,常德415000)
0 引言
随着二维码的普及与广泛应用,日常生活中随处都是可见的二维码,二维码以其简单高效的信息携带功能深受人们的青睐。
纵观二维码发展历史,二维码最初便是用来存储货物信息、标记信息,由于二维码携带信息的方便性,并且移动二维码扫描技术的成熟,二维码已经广泛应用于移动支付,广告引流等领域。那么,二维码在设备管理领域中的应用如何呢?在设备管理中目前主要有以下管理方式:
(1)手工纸质记录,管理巡视麻烦,人力成本大,记录不规范。
(2)一维码设备管理,携带少量信息,可以扫描识别,但无纠错机制,容易无法识别。
(3)RFID 电子标签管理,可读可写,存储信息量大,但在金属材质下较难使用,且造价为普通条码标签几十倍,在大规模设备管理中难以使用。
(4)二维码标签管理,携带信息较多,存储信息量介于电子标签和一维码之间,有纠错机制,使用场景全面。
通过4 种方式对比分析可知,手工记录和一维码无法完成越来越多的管理需求和更多的场景。而RFID 和二维码比较具有竞争性,但RFID 因价格高在大规模设备管理中是很难应用,而且因为信息可写入,其安全性有一定隐患,并且需要专属设备支持,在电力设备的复杂电磁环境下更难以使用。二维码因为标签是只读的,也存在一定的安全隐患问题,要实现安全的二维码信息存储有两种方式[1]:①只存储设备的不敏感信息,查询的时候进行加密处理。②对二维码信息进行编码重组,使用对称加密算法进行加密内容。只有使用与加密时相同的密钥才能解析二维码内容,根据两种方法比较,我们的设备是实时更新的,所以第一种方法更适用于本系统。我们将设备ID 嵌入到二维码中,通过加密通道,将信息通过Web 平台关联到数据库进行数据更新操作,而二维码只要简单存储设备ID编码即可。根据《湖南电网实物ID 建设及应用》[2],我们应该使设备ID 满足以下特点:设备ID 唯一,所有设备拥有一个唯一的编码;ID 码不宜过长。虽然已有很多二维码设备管理软件,但我们发现用二维码和Web平台相结合来管理设备的这种架构还是比较少,相比之下,我们通过Web 平台可以实现的功能有以下:
(1)统一的安全查询接口,数据更加安全
(2)远程巡视,只要手机有网,便可完成巡视。
(3)导入导出方便,通过用户认证,可在多个设备导入导出。
鉴于上,我们得出使用二维码具有携带量少、信息准确方便的特点,加上软件系统实时高效的特点。我们可以预见将二维码技术应用到电力设备管理上将使设备管理水平提高,更加科学和高效。本文主要介绍基于二维码的电力设备管理与巡检系统的实现。
1 系统实现
1.1 项目需求
电力公司的设备管理中,由于设备种类众多,设备状态多样,设备数量大。在实际巡视过程中,采用人工纸质模式不能适应高效的管理模式。根据实际场景的要求,我们对系统提出了五个功能需求。
(1)设备的状态及属性管理,使用二维码为设备提供准确唯一标记,掌握设备异动动向;
(2)根据准入系统、i6000、桌管系统的要求,建立完善的设备信息库;
(3)根据信息系统运行要求,建立标准规范的巡视模板,并可持续修改。历史巡视记录实时上传,通过后台或App 可以实时查看;
(4)根据信息设备运行要求,建立设备状态评估模块,通过本系统可以查询当前属性状态,对两个系统的设备进行统计,实现对设备状态的评估;
(5)与i6000、准入系统数据库融合,便于数据导入和后期数据维护。
1.2 二维码标签的原理与生成
二维码为什么可以作为设备标签?二维条码/二维码(2-Dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;通过图像输入设备或光电扫描设备自动识读以实现信息自动处理。
二维码有很多种,例如QR、PDF417、DM 等。我们现在最常用的是日本发明的QRCode 码,这是一个经典的二维码结构图,之所以二维码很容易扫描,其实在于它本身有一个容错度,只要关键点没破坏就很容易扫出来。
图1 二维码结构
生成一个二维码流程通常是[3]:数据编码、纠错编码、填充数据和纠错码字、填充寻像图形、分隔符、矫正图形与码字、掩膜、生成版本信息和格式信息。
本系统二维码标签生成步骤:
二维码生成过程复杂,而现在已经有很多厂商提供了开源的二维码生成和解析工具。在本系统中我们使用Google 提供的ZXing 二维码工具来实现生成二维码标签,具体生成步骤如下:
(1)利用本系统开发的Web 管理后台来生成打印二维码标签所需的数据源文件(Excel)。
(2)利用标签打印机提供的标签格式编排软件来进行标签排版,并设置数据源为第一步生成的数据源文件。
(3)根据打印机型号选择驱动,并安装在桌面系统上。
(4)利用标签编排软件的批量打印功能即可完成二维码标签的批量生成。
1.3 系统设计
数据库选择MySQL,Web 服务使用Spring MVC 框架进行开发,App 使用Android 平台开发。
Web 后台服务使用模型-视图-控制器(Model-View-Controller,MVC)设计模式[4]进行设计与实现。Spring 框架提供了Spring MVC 来实现对MVC 模式的支持,这使我们更专注于业务逻辑,我们根据对分发器进行自定义设计,包括可配置的处理器映射、视图解析、本地化、主题解析等。在通信过程中我们采用Spring 提供的AOP(Aspect Oriented Programming)功能做安全控制,防止数据被非法获取。
MySQL 作为轻量级数据库相比DB2、Oracle 等具有部署灵活即时使用特点。
Web 管理页面采用前端显示采用HTML+CSS+JavaScript 技术,而在Spring 中HTML 页面则由JSP(Java Server Pages)构成,实现良好的显示效果,其主要包含的功能有:数据融合,以Excel 的形式导入导出。
移动App 使用Android 平台开发,通过Android 平台我们可以使尽量多的用户能使用App 来减少巡视需要的成本。并且对于服务器与App 的通信方面我们以标准的RESTful API 形式接口与服务器通信交换数据,一方面它使我们前后端数据交接变得更加容易,另一方面,以后对程序的扩展和维护也变得更加简单。
图2 系统模块图
1.4 数据库设计
分析了电力设备中使用的数据我们发现,使用中的设备指标属性由于设备类型的差异,导致各种设备的衡量属性也比较大。在这种情况下我们就不能直接使用传统的设备属性同一张表来记录数据。在本系统中,我们将设备类型抽象出来作为一个单独实体,一个设备类型决定属性的多少,这样便可实现设备属性的差异化。然后一个数据项同时属于一个设备和一个属性,只需要进行简单的关联操作我们就可以进行数据的查询。
然后就是设备巡视的部分,设备巡视单独作为一个实体用于方便用户查询对设备的更改情况。用户在巡视对设备进行维护的同时创建一个巡视记录。同时为了方便数据查询和安全控制,我们用设备类型、设备属性、设备、设备数据这四个基本表创建一个可以显示设备详细信息的视图以达到数据查询简化和安全控制的目的,图3 为数据库设计ER 图。
图3 数据库ER图
1.5 Web服务设计
后端使用Spring MVC 框架,在这个框架中我们可以快速实现我们的业务逻辑。在Spring MVC 框架中我们将实现分为三层既视图-控制器-模型三部分。如图3 所示。这里的视图层就是前端页面HTML、CSS、JavaScript 组成。然后控制器就是在Java 代码中带有@Controller 标记的类以及方法。而模型在本系统中主要就是数据对应的Java Bean 以及对数据库的操作。图4 为后端服务工作流程,当请求是Web 用户发起时,将包含图中整个工作流程。而移动端发起数据请求时,则不会包含视图渲染这一步骤,这时会直接通过消息转换器(Message Converter)将请求转换为JSON 格式数据并发送给客户端。接口设计根据RESTful/HTTP 规范[5]设计,以利于双方更容易实现通信。
1.6 移动App设计
移动App 是巡视工具的实现。我们通过ZXing 实现二维码扫描功能。ZXing 是谷歌提供的一个开源解析二维码的一个工具包。通过对配置,我们可以很快用上ZXing 的二维码扫描功能。界面设计采用流行的ViewPager+Tabsegment 模式,可以很方便的实现功能选择和切换。4 个fragment 功能页分别是设备扫描修改、巡视历史记录、设备统计信息和用户个人信息的修改。数据存储分在线和手机缓存结合方式,当手机无法与服务器连接时,我们也可以通过App 本地缓存查看我们巡视过的历史记录,其他功能则必须App 连接服务器才能使用,以下是App 界面效果图。
图4 后台服务工作流程
图5 数据管理页面
后端管理采用H5 页面,用左收缩菜单选择操作,也同时便于功能的增加,左右分别为两个容器,目前可支持的操作有数据导入导出,二维码表的生成。
1.7 安全控制
本系统完成后,应该部署在具有SSL 证书的服务器上,从而实现HTTPS 加密通道通信,但这依然不是万全之策,依然有很多破解手段。为了有更安全的保护措施以及更广泛的使用场景(即使在HTTP 协议下),本系统设计了一层加密保护层,加密App 向服务器发送的数据,具体实现如下。
图6 App界面效果
(1)数据接口签名验证,对App 发往服务器的数据请求内容与当前时间戳以及加密密钥混合成一个字符串。然后计算该混合字符串的MD5 值。将数据内容与计算出来的MD5 一起发往服务器。服务器接收到请求后,同样根据数据内容和时间戳以及加密密钥计算出一个MD5 值,若计算出的MD5 值与接收到的MD5 值相同,则验证通过,若MD5 值不同或没有则该数据很有可能是被篡改过的数据,服务器返回签名错误,这样可以使我们的数据遭到篡改的可能大大降低。
(2)数据内容加密,虽然使用方法(1)可以使数据不会被篡改,但同样存在着接口内容暴露的风险,接口数据被收集。因此我们对接口发送的数据进行一次加密,即使数据被截取,依然无法得到数据内容。具体采用的算法为DES 加密算法。这是一种对称加密算法,发送方通过密钥进行加密,接收方通过相同的密钥解密就可以查看明文。
数据接收时,我们利用Spring MVC 提供的面向切面编程(AOP)方法可以很方便地完成安全验证工作。其具体实现是,定义过滤器过滤来自App 的请求,并对请求数据流重新封装(为了避免拦截器使用数据流后控制器获取不到数据)。定义拦截器拦截来自App 的数据,检查MD5 签名值是否正确,如果正确放行,否则返回签名错误。定义消息转换器,解密DES 加密后的数据内容并且去掉签名值等安全验证字段,数据会传送给控制器,如果解密失败则返回解密错误信息。这样做好处很明显,我们可以方便控制安全请求,并且不会干扰到具体的业务逻辑。图7 是系统安全控制流程。
2 结语
本文设计了基于Spring MVC 架构的二维码设备管理系统,开发环境为Idea、Android Studio,使用Java实现主要代码。存储数据库使用MySQL,Web 服务系统使用Apache Tomcat 9.0 作为载体。该二维码设备管理系统打破了传统手工记录设备情况的模式,提高了工作效率,并且会大大改善数据出错的情况,使设备管理更加科学和有效。根据陈玛玲在《电力设备巡视中的问题分析和策略》中列出的电力设备巡视的四大问题[6],我们要用更先进的方式来驱动解决这些问题。相比传统模式,优势很明显,基于此我们开发出的这套设备巡视系统,可以为同行提供参考与借鉴,要实现更加全面和功能更加完善的设备管理系统,我们只是刚刚开始。
图7 App安全控制流程