何 輝,龔成瑩,石全民
(蘭州工業學院 信息中心,甘肅 蘭州 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