何 辉,龚成莹,石全民
(兰州工业学院 信息中心,甘肃 兰州 730050)
Linux平台自动考核测试系统设计
何 辉,龚成莹,石全民
(兰州工业学院 信息中心,甘肃 兰州 730050)
针对Linux操作系统下自动考核测试系统的需求进行系统设计,提出了整体测试方案和外部仪表设备的测控方案。利用Python语言实现基于VISA的仪表测控、自动流程控制、Modbus通讯和多线程等功能,创新地采用Web服务器的方式提供测试系统操作界面,并给出了设计思路和实现方法。测试结果表明,系统满足自动测试系统的要求,在提高效率的同时还避免了操作人员在有害实验环境下的长期工作。
阴极考核;自动测试系统;Python;VISA;Web服务器
自动测试系统(Automatic Test System)是一种能够在操作人员极少参与或不参与的情况下,自动进行测量和处理数据,并以适当方式显示或输出测试结果的系统。自动测试系统解决人工测试带来的测试过程不连续、动态瞬时状态难定位、人工判断不准确和大量数据难以准确记录等问题[1],能大大提高劳动生产率和产品质量,因此在工业生产、科学研究等领域都有重要用途。
当前,自动测试系统普遍采用标准化通用接口(如GPIB、RS-232/485、TCP/IP)连接有关设备,系统中各组成部分均配标准化接口功能,一般不需要自行设计接口。在自动测试阶段,由计算机或嵌入式控制器承担系统的控制、计算和数据处理任务,将计算机与测试设备融为一体,用计算机软件代替传统设备中某些硬件的功能,产生激励,生成测试程序,完成测试功能。
在阴极设备的考核实验中,要求自动测试系统根据实验要求和规范,对设备的加热和点火实验进行自动控制,通过实验获取加热与点火相关参数,并进行调整和优化。测试系统基于TCP/IP及串行通讯方式,在Linux平台下,利用Python语言完成仪表测控、自动测试、数据处理和记录存储等功能,有效地解决产品的长时间寿命自动化考核问题。
根据实验规范,被考核设备一般都带触持极,主要目的是降低部件腐蚀和点火电压(功率)。试验系统基本组成如图1所示。
图1 阴极试验基本组成
试验需要加热器、触持极和阳极等电源[2],除此之外,还需要对舱体的环境参数进行检测,对气体流量进行控制。因此,系统需要测控的仪器主要分为以下3种类型:
① 可编程电源。使用高可靠性和稳定性的可编程电源构成阴极测试系统的电源单元,根据试验需求,选择是德科技(Keysight)的直流可编程电源。Keysight直流电源有着卓越的精确性、可靠性和灵活性,能够提供快速检查和细致的测量,拥有众多适合的工作台和系统使用的直流电源。
根据系统要求,使用Keysight N6700系列小型模块化电源系统(MPS)用于自动化测试系统环境及研发所需的解决方案。N6700 小型模块化电源系统可简化测试系统的组装、编程、调试和操作过程,具有灵活、小巧和指令处理速度快等特点,非常适合 ATE 和产品测试环境。其中N6705 直流电源分析仪主机将多达 4 个先进的电源与数字万用表、示波器、任意波形发生器和 Data logger 软件融为一体,支持使用SCPI 命令集(提供驱动程序),通过 GPIB、LAN和USB 接口进行远程编程,可以显著提高生成和测量直流电压和电流的效率。
② 气路控制装置。气路控制主要是控制和监测进入舱体的气体的流量,由专门的气体压力测量装置进行信号采集,其输出结果是标准的4~20 mA电流信号,因此对该装置的测控主要是针对此电流信号[3]。
系统使用ADAM-4000模块进行上述信号的测控,该模块是研华公司基于串行通讯的远程数据采集模块,提供模拟量输入及输出、数字量输入及输出、继电器输出及计数器接口,其特点是:ADAM-4000系列 I/O 模块是小尺寸、多功能的传感器到计算机接口装置,该系列专为在严苛环境下提供可靠运作而设计,能在-40~85 ℃的宽温范围下正常运作,具备更广的电源输入范围及对噪声干扰的抵抗性[4]。
③ 真空测试仪。真空测试仪用来监测环境的真空度,真空测试仪能够通过RS-232串行接口及协议与上位机通讯。由上位机根据实验阈值对实验舱的真空状态进行判断。
在Linux平台下使用Python语言完成自动测试系统,需要对仪表设备进行实时测控,编制合理的自动化测试流程、处理好仪表的并发操作,对实验记录有效存储。
2.1 可编程电源测控
对Keysight N6700系列可编程电源可以使用SCPI(可编程仪器标准命令)命令,通过TCP/IP网络方式进行远程控制,使用SCPI命令还需要安装相应的VISA(虚拟仪器软件结构)驱动。
2.1.1 SCPI
SCPI标准定义了使用可编程仪器时的语法、命令结构和数据格式。SCPI没有定义确切的物理接口(如GPIB、RS-232和USB等),具有接口无关性。其目标是节省自动测试设备程序开发的时间,为仪器控制和数据利用提供广泛兼容的编码环境,SCPI仪器程控消息、响应消息、状态报告结构和数据格式均有标准化的定义,其使用只与仪器测试功能、仪器性能和精度有关,而不考虑仪器的硬件组成、制造厂家、通信物理链接和程序开发环境[5]。
2.1.2 VISA
VISA是一种被广泛使用的接口I/O API技术规范,通过GPIB、VXI总线、串口、LAN或者USB接口连接到PC的仪器进行通讯。VISA在虚拟仪器软件系统结构中的地位如图2所示。对用户而言,只需要了解VISA函数的格式和参数就可以编写仪器的驱动程序,而不必关心VISA库与仪器如何沟通的细节。
图2 虚拟仪器软件系统结构
2.1.3 Linux平台的仪器控制
Windows环境下,安装可编程仪器的驱动后一般会自动装好VISA库的DLL动态链接库文件,通常是“visa.dll”,诸如安装Agilent的IO Libraries Suite或者NI的Measurement & Automation Explorer。在Linux环境下,每个I/O设备都需要一个专门为Linux编写的驱动以及用户配置设备参数的工具,虽然部分厂商为所生产的仪器提供了Linux驱动,但总地来说,要比在Windows下开发的开销和成本高许多。开源项目Comedi[6]就是一个允许Linux系统和各种数据采集或数字接口硬件进行通讯的底层驱动的集合,目前Comedi已经能够支持大多数仪器厂商的产品。
在Linux平台下使用Python语言进行系统设计,Python是一种可以扩平台的开源脚本编程语言,所编写代码在Windows、Linux(含嵌入式Linux)和Mac等主流操作系统均可运行,具有较强的可移植性,同时可以嵌入C/C++编程的程序中,支持多语言混合编程[7]。针对可编程电源所支持VISA接口的设备,系统借助PyVISA工具包编写自动测试代码。PyVISA为Windows上的IVI标准VISA驱动和Linux上的IVI兼容驱动提供了API,在Linux上,以NI的库为例,会以一个名为libviso.so.7共享库的方式提供IVI兼容的VISA驱动,通常在/usr/local/xvipnp/linux/bin目录下。
VISA读取IP地址为210.26.22.21的N6700电源电压电流参数的部分子程序如下:
import visa
dmm=visa.instrument("TCPIP0::210.26.22.21∶∶inst0∶∶INSTR")
#电源输出读取子程序
def readDmm()∶
dmm.write ("MEAS∶VOLT?")
volt=dmm.read()
print dmm.ask("MEAS∶CURR?")
curr=dmm.read()
return
#电源输出设置子程序
def setDmm(dy,dl):
voltStr="%2.2f"%float(dy)
currStr="2.2f"%float(dl)
cmdStr=":VOLT"+voltStr
dmm.write (cmdStr)
cmdStr=":CURR"+currStr
dmm.write (cmdStr)
return
也可以在Python程序的开头直接引用VISA的库文件:
visa_library.load_library("/usr/lib/libvisa.so.7")
2.2 串口通讯
使用Modbus协议对ADAM-4000模块进行串口测控。Modbus是一种灵活可靠的工业通信协议,常用的Modbus协议包括Modbus RTU和Modbus TCP[8]。借助Python强大的库函数,可以在Linux平台上方便的实现Modbus主机和从机,系统使用modbus-tk库实现RTU从机Modbus RTU:
import modbus_tk
import serial
#使用串口ttyS0
server=modbus_rtu.RtuServer(serial.Serial("/dev/ttyS0",9600))
#从机编号为1
slaver = server.add_slave(1)
#线圈寄存器COILS
slaver.add_block("coil",cst.COILS,0,16)
#线圈寄存器的初始值置0
slaver.set_values("coil",0,16*[0])
#读取线圈寄存器值,地址从0到7
values = slaver.get_values("coil",0,8)
2.3 多线程
自动测试系统运行时,需要同时读写多个外部设备,而这些外设的访问都需要一定的响应时间,为提高设备访问效率,避免IO阻塞的出现,使用Python的多线程机制实现程序的并发控制[9]。Python提供了thread 和threading两个模块来实现多线程,这里使用threading在线程中根据标志量分时间片对外部设备进行实时测控,其中对可编程电源的具体流程如图3所示。
图3 多线程测控流程
2.4 PID控制
无论是线性还是非线性系统,在工业控制领域大多数控制器都使用PID控制[10],系统对进入实验舱的气体流量进行PID控制,以保障气体的稳定供应,已知气体流量具有线性特点,部分控制程序如下:
Kp=1.0
Kb=1.0
P=0
#根据情况修改
rinput=0
cinput=1
#Acquire函数体此处省略
def Acquire(port):
return 1
def PContrl():
rval=Acquire(rinput)
bval=Acqure(cinput)*Kb
eval=rval-bval
return(Kp*eval)+P
2.5 参数设置与日志保存
正常情况下,自动试验过程会按照提前预设的参数和操作流程自动执行,无需人为干预。系统将预设参数预先存储在轻量级的开源数据库SQLite中,程序在试验的各个阶段自动调用测控参数。对于试验记录(日志)的保存,采用的办法是按照日期自动生成文本文件[11]。无论是对SQLite还是文件的处理,Python都提供了简单、快速的库,操作十分方便。
2.6 UI可视化
UI即操作界面并不是Linux操作系统的长项,通常采用的做法是Python结合QT设计窗体界面或者使用Web方式在远端操作,考虑到系统需要在嵌入式Linux上运行,所以采用后者,即设计Web界面,在Web上进行试验状态的监测和试验操控。
系统测试软件采用B/S结构,利用Python提供的扩展模块Web.py实现网络服务的构建。Web.py模块是Python平台上的HTTP服务框架之一,使用Web方式的好处是既可以在本地Linux上由浏览器显示测试界面,又可以在远端通过浏览器进行管理。采用3层结构,前端使用JavaScript的BootStrap框架实现响应式UI[12],中间由Web.py实现Web服务器和程序流程,后端由PyVISA及相关库实现对外部仪表和设备的测控。
自动测试系统的运行主界面如图4所示,通过浏览器在远端或者本地打开测试系统主机的Web服务器的URL,系统主要功能包括:自动测试、手动测试、参数设置及日志回放4部分。用户提前打开参数设置页面进行试验过程参数的预设,切换至自动测试界面后,点击“实验开始”按钮即可执行自动试验。手动界面供用户对单个外部设备进行设置和调试。测试系统的日志可通过日志回放页面查看。
图4 运行界面
经过实际运行,系统能够顺利完成自动测试的执行流程,在局域网中可流畅操作。加热模式下的一组自动记录数据与被考核设备的实际测量值的比较如表1所示,可以看出,系统运行的采集数据与实测值有一定的出入。经分析,这些误差可以分为2类:电源部分误差以及气体和压力部分误差。
表1 采集数据比较
经排查分析,电源部分的数据误差是由于可编程电源与被测设备之间的线缆上存在电阻所致,测量线缆阻值后,在软件中进行补偿即可排除此误差。对于气体压力部分,对采集的数据采用滑动平均滤波法进行软件滤波,系统运行稳定后,使用这种滤波方法能够很好的解决气路的小误差问题[13]。
另外,在实际测试中发现,有些设备无法在预定的参数下测试成功,对于此类被测设备,提出渐进的增大气体流量和加热电流的方法,设定阈值,超过阈值即认为该设备此次试验失败。以供气流量为例,在激活阶段,若无法在预设的时间内点着,则每间隔10 s(可设置)增加一定量的气体供应(如图5所示),直至在阈值范围内点着或者达到阈值点火失败。
图5 流量步进曲线
针对Linux环境下阴极设备考核自动测试系统的特点,采用Python语言实现程序流程控制、仪表测控、串口Modbus协议通讯和数据存储等需求。利用Python的独特优势,实现Web服务器,提供基于浏览器的用户操作界面,操作人员在联网终端即可对试验过程进行控制和监测,提高效率的同时还避免了人员在高噪声、高辐射环境下的长期工作。系统测试结果表明,本文提出的设计方案稳定可靠,具有一定的创新性,并可方便地移植到其他操作系统。
[1] 周 锎, 赵 楠, 李 欣.一种基于PYTHON脚本语言的自动化测试系统[J].南开大学学报(自然科学版), 2014,47(5):65-70.
[2] 张天平, 袁 子, 田华兵.电推进系统空心阴极研制试验技术[J].真空电子技术, 2007(2):9-14.
[3] 杭观荣, 康小录.电推进在深空探测主推进中的应用及发展趋势[J].火箭推进, 2012,38(4):1-8.
[4] 何 辉, 邢敬宏, 龚成莹.ADAM I/O模块在电推进试验系统中的应用[J].无线电工程, 2015(12):10-12.
[5] 张重雄, 张思维.虚拟仪器技术分析与设计(第2版)[M].北京:电子工业出版社, 2012:43-45.
[6] 张玉华,黄熊泉.基于Comedi的数据采集技术的分析研究[J]. 计算机工程与设计, 2011,32(6):1 983-1 986.
[7] 陈笑飞, 李 滔.基于Python 的虚拟仪器技术研究及实现[J].电子设计工程, 2012,20(16):48-50.
[8] 蒯 勇.工业以太网数据采集器的设计与实现[D].合肥:安徽大学, 2014.
[9] 肖明魁.Python语言多进程与多线程设计探究[J].计算机光盘软件与应用, 2014(15):66-67.
[10]田景兵,张一凡.天线伺服系统多电机同步控制研究[J].无线电通信技术, 2013,39(3):50-52.
[11]张彩月,陈 良.基于数据库的遥测数据传输系统的设计[J].无线电通信技术, 2013,39(3):46-49.
[12]陈 亮.数控机床远程实时故障诊断系统设计[D].西安:西安交通大学, 2015.
[13]史明泉.基于DSP的FSK调制系统的C语言算法实现[J].无线电工程,2011,41(11):56-57.
何 辉 男,(1978—),硕士,副教授。主要研究方向:计算机测控。
龚成莹 女,(1979—),硕士,副教授。主要研究方向:电子信息工程。
Design of Cathode Automatic Test System Based on Linux
HE Hui, GONG Cheng-ying,SHI Quan-min
(InformationCenter,LanzhouInstituteofTechnology,LanzhouGansu730050,China)
A system is designed according to the requirement of automatic examination test system for Linux operating system, and the overall test plan and the measurement and control scheme of external instrument are proposed.VISA based instrumentation measurement and control, automatic process control, Modbus communication, multi-threading and other functions are achieved by using Python language.The test system operating interface is provided innovatively by using Web server.The design idea and implementation method are given.The test results show that the system can meet the requirements of automatic test system, and it can improve the efficiency and avoid the long term operation of operators in the harmful experiment environment.
cathode examination;automatic test system;Python;VISA;Web server
10.3969/j.issn.1003-3106.2017.01.17
何 辉,龚成莹,石全民.Linux平台自动考核测试系统设计[J].无线电工程,2017,47(1):71-75.
2016-10-20
甘肃省高等学校科研基金资助项目(2014A-124)。
TP277
A
1003-3106(2017)01-0071-05