(北京国网富达科技发展有限责任公司北京100070)
摘要:针对在测试输电线路气象监测系统过程中存在的搭建测试环境复杂、测试步骤繁琐、测试周期长、测试效率低、测试结果格式混乱等问题,设计了一个使用客户端/服务器架构的自动化测试系统,详细论述了该系统的设计方案和实现原理。客户端基于嵌入式linux系统,采用多线程技术,通过以太网,使用定制的通信协议与服务端通信,能够在收到服务端指令后自动完成输电线路气象在线监测系统硬件模块的功能测试。服务端采用python和PyQt开发,能够跨平台运行,使用多线程技术,实现了图形化控制客户端、查看客户端测试状态、保存测试日志、生成标准化的xls和pdf格式的测试报告等功能。实际应用表明,该系统有效可靠,测试结果准确,提高了测试效率,提升了输电线路气象监测系统的可靠性。
关键词:嵌入式气象在线监测自动化测试
0引言
气象灾害往往对输电线路造成巨大破坏,如微风振动、舞动、覆冰、风偏、污闪等现象,大多是受当地恶劣气象环境影响所致。我国地域广阔,由气象台提供的对某个地区的定时定点监测记录并不能完全准确的反映特定输电线路走廊的微气象环境,给输电线路故障判断、预防及研究带来了一定的困难[1-2]。随着输电线路气象在线监测系统的应用越来越广泛,传统的人工测试硬件方法的局限性越来越显现:测试环境搭建复杂、测试步骤繁琐、测试周期长、测试效率低、测试结果格式混乱且不易保存,严重制约了输电线路气象在线监测设备的批量化生产和测试。
自动化测试可理解为测试过程自动化和测试结果分析自动化[3-6]。本文针对实际生产过程中发现的人工硬件测试的不足,设计和实现了基于嵌入式linux的输电线路气象监测装置的自动化测试系统。
1测试需求分析
为提高输电线路气象在线监测设备产品的整体质量,确定输电线路气象自动化测试系统应具有如下功能:
1、客户端硬件模块的自动检测,主要包括网口、3G模块、2.4G模块、加密卡模块、串口、485功能接口、系统监控板、时钟、Nandflash的坏道数量等,老化实验过程中客户端系统状态信息的保存。
2、服务器端查询指定时间段内老化记录,存储测试结果储并将测试结果保存为pdf和xls格式,便于存档和统计,对客户端测试状态信息的展示。
2输电线路气象自动化测试系统
2.1总体设计
输电线路气象自动化测试系统由运行在嵌入式linux上的测试客户端和运行在pc上的测试服务端组成,二者之间通过以太网相连进行通信。整个系统的基本操作流程如图一所示。
测试人员选定待测试的气象在线监测设备,烧写linux内核和测试客户端程序,安装待检测的配件模块,如3G模块、加密卡模块、2.4G模块等,给设备上电,用网线将设备与电脑相连,点击运行电脑上的测试服务端程序,待服务端程序给客户端程序分配好ip和mac地址后,给待测试设备命名并根据测试目标下发测试项目给客户端程序,然后可以选择继续添加待测试设备。当所有待测试设备都添加完毕后,点击“测试”按钮,下发测试指令给所有待监测设备,等待客户端程序返回测试结果。客户端程序收到测试指令后,按照之前收到的测试项目逐一进行测试,记录测试结果并将测试结果发送给服务端程序。服务端程序收到测试结果后,对测试结果进行统计并生成pdf和xls格式的测试报告,完成本次测试。
2.2客户端设计
客户端是基于嵌入式linux的自动化检测程序,主要包括动态ip和mac请求线程、数据接收线程、测试线程和心跳线程。
动态ip和mac请求线程主要向服务器发送申请ip和mac的请求及接收和设置服务器返回的ip和mac;数据接收线程主要负责接收服务器发送的测试项的配置参数和各种测试指令、解析它们并将其存入待测试指令队列汇总;测试线程主要负责当客户端收到服务器发送的测试指令后,开始从待测试队列中读取测试命令,执行测试函数,并负责处理测试结果。心跳线程主要负责发送心跳报文给服务端,确保客户端ip和mac有效。
客户端处理流程如图2所示:
客户端程序启动后,首先屏蔽SIGHUP等常见信号干扰,初始化全部外围设备并打开外围设备电源,初始化ip和mac请求线程、数据接收线程、定时器线程、测试线程和心跳线程。检查是否存在上一此分配的ip和mac,若存在,则加载此ip和mac;否则加载默认的ip和mac。创建ip和mac请求线程,向服务端广播请求报文,等待服务端分配指定ip和mac。待收到ip和mac后,设置为本机的ip和mac,同时ip和mac线程进入休眠。然后主程序创建心跳线程。心跳线程每十秒发送心跳报文至服务端,确保ip和mac有效。主程序创建测试线程。测试线程检查是否有未完成的测试项目。若有,则读取未完成的测试指令,完成测试,将测试结果发送给服务端,继续等待服务端的测试指令。若没有未完成的测试项目,测试线程检查待测试命令队列。若队列内无测试命令,则测试线程休眠。主程序创建数据接收线程,等待服务端测试指令。当数据接收线程收到服务端发送的指令后,按照通信协议进行校验,若校验通过,进行解析;否则返回相应错误代码给服务端。解析后,根据指令类型的不同分别做相应的处理。若为开始测试指令,则唤醒测试线程,读取待测试队列中的命令,开始测试,测试完毕后将测试结果发送回服务端。若为下发测试项目指令,则将收到的测试指令添加到待测试命令队列中。若为ip和mac失效报文,则唤醒ip和mac请求线程,重新请求ip和mac。若为心跳回复报文,则通知心跳发送线程收到服务端的心跳回复。
2.3服务端设计
运行在pc上的服务端程序主要负责处理ip和mac分配请求、按照规则为客户端分配ip和mac、设置测试项目、将测试项目下发给客户端、发出测试指令、展现客户端的测试状态同时格式化存储测试结果。采用python语言开发。
按照功能,主程序主要分为以下几个模块:
1)存储模块
存储模块采用列表结构,列表中每一项为一个key-value形式的字典,其中key主要包括序号、名称、ip、mac、ip和mac是否分配、测试项目是否下发、测试是否开始、测试结果。测试结果亦为一个key-value形式的字典,保存客户端自动测试后发送回的结果。
2)展现模块
展现模块采用PyQt框架开发。PyQt为Qt框架的python版本。展现模块主要包括四个功能区:
3)测试状态展示功能区
主要展示具体测试设备的ip、mac、ip和mac分配状态、测试项目下发状态、测试过程状态
4)测试项目设置功能区
主要包括具体测试硬件模块的设置,如3G模块、时钟模块、系统监控板模块等。
5)控制指令下发功能区
主要包括设置默认测试项目、下发测试配置、开始测试、导出测试结果、查询老化记录等功能按钮。
6)老化状态信息查询功能区
主要包括查询起止时间的设置,系统老化过程中的状态信息(如cpu利用率、内存使用量、内存空闲量、Nandflash使用量、Norflash使用量等)的展示。
7)ip和mac分配模块
接受客户端的ip和mac请求报文,返回ip和mac的设置报文,同时定时检查所有客户端的ip和mac是否在指定时间内失效。若失效,则给客户端发送失效报文。
8)日志记录模块
主要记录各个子模块在运行过程中出现的各种问题,便于后期对发现的问题进行修改。如下面这条记录记录了何时哪个模块收到了客户端发送回来的测试结果,同时记录了对该设备下发的测试项目以及其他相关测试状态的信息。
2015-12-2110:19:48,929-main-INFO-{'id':173341178894,'mask':4294967040,'test_items':{'encry_card':'83','min_sys':'88','two_four_g':'82','timer':'87','four_eight_five':'85,485NUM=3','flash':'89','net':'80'},'number':0,'test_status':2,'device_name':'test1','result':{'83':'Nspi_other_ver()error!','82':'Npeekfdzigbeeerror!','88':'Y','85':'Y','89':'Y'},'mac':'BE:FD:01:F1:00:02','last_time':1450664377.820872,'fail_flag':1,'assigned_config':1,'assigned_ip':2,'start_time':1450660765.653268,'ip':'192.192.192.1','test_time':'01'}。
9)通信模块
按照指定协议格式,发送相关的控制指令等
10)测试结果的格式化模块
主要功能为将内存中保存的测试结果转换为pdf和xls格式文件存储在硬盘上,以便于后期存档和统计。
程序处理流程如图三所示。
主程序启动后,启动界面展现线程、ip和mac分配线程、接收线程、定时器线程。界面展现线程主要负责人机交互、下发测试配置、导出测试结果、展现被测试设备的状态。ip和mac分配线程使用1124端口,监听客户端的ip和mac请求,待收到请求后,将分配的ip和mac发送到客户端的1125端口。接收线程主要负责接收处理客户端的心跳数据、测试结果数据、下发测试项目及发送测试指令等,监听1126端口,同时将回复报文发送至客户端的1127端口。定时器线程主要负责检查客户端ip和mac是否失效
程序启动后,ip和mac分配线程等待客户端的连接。当收到客户端的ip和mac请求报文后,查看已分配ip和mac表,判断客户端的ip是否分配过并且是否属于测试中的重启状态(时钟测试需要客户端的重启)。若未分配过此ip或此ip并未处于测试状态,则给客户端分配新的ip和mac,并将新的ip和mac加入已分配ip和mac列表中,同时更新此客户端的测试状态信息。若通过查询已分配ip和mac表,发现分配过此ip和mac,那么将原ip和mac返回给客户端。为保证每一个客户端的ip和mac都具有唯一性,ip和mac分配策略如下:在1-253之间同时排除本机ip和mac的第四个字段的数值从1开始分配,逐渐递增,直到253。同时定时器线程每隔30s定时检查已分配ip和mac是否处于超时状态,若处于超时状态,则给测试客户端发送ip和mac失效报文,将该ip和mac从已分配列表中删除,更新展现端测试状态信息。服务端设置号测试设备名称、默认测试参数,下发测试参数个指定客户端。待配置好所有测试客户端后,发送测试指令。测试客户端根据收到的测试配置参数开始自动进行测试。此后服务端等待测试客户端的测试结果。待收到测试结果后,服务端解析测试结果并将测试结果保存为pdf和xls格式的测试报告,供生产人员进行存档及统计分析。其中在生成pdf格式报告时采用了开源的第三方库reportlab,生成xls格式报告时采用了xlrd、xlutils、xlwt等开源的第三方源码库,提高了开发效率。
pdf测试报告如图五所示
2.4实验结果与分析
实验结果如图5、图6所示,表明本次测试为服务端程序启动后的第一次测试,测试设备数量为1个,测试耗费时间为1分钟,所测试的项目分别为加密卡模块、2.4G模块、最小系统测试(测试RAM大小、nor和nandflash大小、CPU使用率和频率是否在正常范围内)、时钟模块、485接口模块、flash模块。测试结果表明最小系统测试、485接口模块、flash模块工作正常,可以投入使用,加密卡、2.4G模块、时钟模块出现故障。经实际查看,发现加密卡模块某个接口出现开焊问题,导致断路;2.4G模块和时钟模块出现错误提示是由于未安装上述两个硬件模块。在更换加密卡、添加2.4G模块和时钟模块后,测试结果均为正常。
3结语
基于嵌入式linux的输电线路气象自动化测试系统具有扩展性好、维护成本低、开发周期短、测试效率高、测试结果准确度高等特点,实际应用表明,该系统能有有效减轻生产人员的工作负担,解决了以往人工测试过程中的试步骤繁琐、测试周期长、测试效率低、测试结果格式混乱等实际问题,提高了测试工作的效率,对于提高输电线路气象在线监测系统的可靠性具有重要意义。
参考文献
[1]黄欢,王威等.基于嵌入式linux的杆塔倾斜度在线监测仪设计.计算机测量与控制[J],2015,23:4246-4248
[2]蒋涛,于平,刘宇,等.区域自动气象站蓄电池在线监测系统的研究[J].国外电子测量技术,2016,35(2):85-89.
[3]闫帅,刘锦高.基于PXE的自动化CV测试系统设计与实现.电子设计工程[J],2015,23:88-91
[4]PressmanRS.软件工程——实践者的研究方法[M].北京:机械工业出版社,2000.
[5]启亮.国际化软件测试[M].北京:电子工业出版社,2006.
[6]郑蓓蓓,黄晓霞,刘蔚.基于LUA脚本的无线模块自动化测试.计算机技术与发展[J],2011,21:197-200
作者简介
王威(1987-),男,工学硕士,现就职于北京国网富达科技发展有限责任公司,工程师,主要从事输电线路在线监测技术研发工作。
本文章由输变电设备状态监测系统一体化运维关键技术研究与应用项目组提供。