劉規劃



摘要:為了采用Python編程來完成計算機測試測量任務,對LabVIEW和TestStand編程環境中調用Python編程的工具和方法進行了研究。介紹了在LabVlEW中通過LabPython模塊、Python集成工具包、Python生成的動態鏈接庫和LabVIEW2018內置函數節點調用Python腳本的方法,以及在TestStand中通過調用Python生成的動態鏈接庫、由LabVIEW封裝Python模塊生成的VI和通過TestStand附加軟件工具調用Python腳本的方法。結合Python代碼實列,分析了在程序調用中的關鍵配置信息及步驟,給出在LabVIEW中和TestStand中調用Python的數據類型對應關系,推薦了相應的調用Python代碼的方式。
關鍵詞:LabVIEW;TestStand;Python;調用;動態鏈接庫
中圖分類號:TP311.1 文獻標識碼:A 文章編號:1006-8228(2020)07-54-05
0引言
Python是一種解釋型、面向對象、動態數據類型的高級計算機程序設計語言。近幾年隨著人工智能應用的火熱,Python語言在大數據、圖像識別、深度學習等方面得到了廣泛的應用。而在計算機測試測量領域,則更多地使用TeststaJld結合LabvIEW編程,實現通信、數據采集、信息交互等功能。鑒于Python的易用、免費、具有豐富的庫資源以及在數據處理和協議分析方面的優勢,使用TeststaJld和LabvIEw調用Python模塊快速實現自動化測試,會越來越多地應用到實際的測試項目中,這也是近年來使用圖形化編程工具的用戶群呼聲最高的熱點技術之一。因此,研究并發掘LabVlEW和TeststaJld中各種調用Python編程的工具和方法,找到更佳、更便捷的調用方法,對于自動化測試腳本程序編寫,具有很好的實用價值。
1LabVlEW中調用Pvthon模塊
LabvIEW是由美國國家儀器(NI)公司研制開發的一種圖形化程序開發環境,是開發計算機測量與控制軟件的理想選擇。LabVIEW調用Python模塊通常有四種方法,每種調用方法在使用前都需要先安裝Pymon開發環境并配置環境變量。
1.1通過LabPython模塊調用
LabPymon是免費的OpenG工具庫中的子模塊,它是一個執行Python腳本的LabVIEW工具,內含一套調用Python腳本的函數節點。使用LabPython模塊來將Python程序引入LabVlEW中,可以使用市面上現有Python工具庫,方便LabVlEW編程。
通過VIPM可以安裝OpenG工具庫,安裝后LabPython函數選板會集成到User.1ib庫中,用戶可以在View→FunctionPalette→User Libraries→LabPython位置找到它,并可使用LabPython函數選板中列出的常用函數節點。實際使用LabPython工具庫調用Python腳本編寫應用程序時,LabPython功能并不專業且僅支持LabVIEW2009以前版本和Python2.x版本,故本文不推薦使用也不過多探討。
1.2通過Python集成工具包調用
PythonIntegration Toolkit for LabVlEW是由En-thought公司開發的商業軟件,它為Python和LabVlEW提供了一個新的無縫聯接的方式。使用該工具包可以在Python和LabVIEW程序間實現快速的雙向通信,通過集成工具包中的工具節點可從LabV~W中直接調用Python函數或方法,加載Python腳本到內存中。開發者可并行運行Python和LabVIEW,為調用的函數傳遞參數,并從Python解釋器中得到響應。
集成工具包函數選板中包含了調用Python腳本的函數節點,常用的函數節點包括New Session,Pack,GetValue,Set Value,Call,Unpack,CloseSession等。使用LabPython中的函數編寫調用Python模塊的方法和LabVlEW常規編程方法一致。調用Python腳本創建應用程序時首先使用NewSession.vi函數節點創建引用Python模塊的會話,然后用Pack.vi函數節點傳遞參數數據給Python腳本,接著用Call.vi指定調用的Python函數或方法的名稱并執行調用,再從Python解釋器中取回執行結果,最后關閉會話。編寫調用Python腳本的應用程序如圖l。
該工具包是收費的商業軟件,兼容Python2.x和Python3.x版本,調用Python腳本比較便捷,其功能比LabPython強大。但Enthought集成工具包產品由Enthought公司提供支持,NI并不直接提供技術支持/服務。由于是商業收費軟件且價格不菲,LabVIEW/Python集成工具包并不常用。
1.3通過Python生成動態鏈接庫調用
動態鏈接庫(DLL)是軟件開發中一種非常重要的跨語言協作方式。把Python語言寫成的腳本編譯成DLL,能夠提供給諸如c++、c#、LabVIEW等編程語言調用,這能夠在很大程度上提高軟件的開發效率。但是,雖然Python可以調用其他語言生成的動態庫,Python作為一種腳本語言,本身是不能直接編譯生成動態庫的。為了生成動態庫,可以借助Cython,將Python腳本變成c語言文件并創建DLL。具體如何使用Cython把Python程序創建生成為DLL的過程,可以參考Cython官網相關資料,本文不展開闡述。
LabVIEW語言是一種圖形化編程語言,結合DLL這種跨語言的編程協作,可以大大彌補它固有的不足,比如一些復雜算法處理。LabVIEW中調用由Python創建生成的DLL的方法和調用其他編程語言生成的DLL的方法并無本質區別。可以使用LabVlEW函數選板中Functions→Connectivity→Libraries&Executables下的Call Library Function Node函數節點。把CallLibrary Function Node函數節點放置到LabVlEW框圖編程區域,雙擊打開節點,在彈出的窗口中配置調用庫函數節點,如圖2所示。
以調用目標函數Test()為例,Test()函數功能是實現取模運算并返回結果,函數原型見下面Python代碼:def Test(a,b):
Mod-Value=a%b
return Mod——Value
首先在圖2的函數選項卡中配置庫文件和庫函數,在Libraucname or path中選擇需要調用的SharedLib.DLL文件,在Funcfionname下拉框中選擇需要調用的目標函數Test()。由于是使用Cython把Python腳本生成為DLL,而Cython底層就是由c語言實現,所以在Callingconvention調用規范中仍選用c。然后在參數配置選項卡中分別為各個參數指定數據類型,并選擇參數傳遞方式為傳值或傳參嘲。退出Call Library Function窗口后,為輸入參數賦值,運行LabVIEW程序,即可執行Python編寫的腳本函數。
需要特別指出的是,對于使用ActiveX/COM技術類型的DLL,需要先使用resvr32.exe命令注冊,然后才可以調用DLL并使用其內部的函數。
1.4通過LabVlEW2018內置Python節點函數調用
自LabVlEW2018版開始,新版LabVlEW提供了三個可以調用Python腳本模塊的接口函數,位于函數選板Functions→Connectivity→Python位置。開發者擁有LabVIEW2018許可證后,這三個接口函數是默認免費提供的。由于是NI官方提供的LabVlEW中調用Python接口方式,其幫助文件和開發范例程序都比較完善。這是本文推薦的一種直接調用Python模塊的較好方式。
LabVIEW2018中提供的調用Python的相關函數有三個,分別是:①Open Python Session,用于打開Python引用,為后續的操作程序創建Python會話;②Python Node,用于調用Python腳本模塊,并指定所調用的Python模塊的函數;③Close Python Session,用于關閉Python會話,以免內存泄漏。
LabVIEW2018中使用這三個函數調用Python腳本需要Python3.6或Python2.7開發環境,Python版本號需要在調用Python模塊時正確配置。另外,Python和LabVIEW的數據類型的匹配有嚴格對應關系,如表l所示。在LabVIEW2019版中新增加了對NumPy庫的Array數據類型的支持。
基于Python3.6版本編寫一個計算斐波那契數列的函數,保存為UTF-8格式并命名為FibSeq.PY,源代碼如下。
以LabVIEW2018內置的Python節點調用FibSeq.PY內的Fib(n)函數為例,先使用OpenPythonSession節點打開一個會話,并配置腳本解析環境為Python3.6版本,確保輸入的Python版本號數據類型為字符串;然后采用PythonNode函數節點調用指定路徑下的Python模塊,并輸入函數名Fib和參數值n,同時輸出函數返回值;最后用ClosePythonSession關閉會話。LabVIEW編寫的框圖程序如圖3所示。
2Testsland中調用Python模塊
TestStand是一款測試管理軟件,用于開發、執行和部署計算機測試系統軟件。TestStand中調用Python模塊通常有3種方法。與在LabVIEW中調用Python模塊類似,需要先安裝Python開發環境并配置環境變量。
2.1TestStand直接調由Python生成的DLL
前文提到,可以借助Cython將Python腳本變成c語言文件并生成動態鏈接庫。同樣,也可以通過這種方式在TestStand中調用由Python腳本生成的DLL。
由于代碼模塊是DLL,在TestStand的插入面板中,模塊適配器類型選擇為C/C++DLL。在Module選項卡內選定需調用的DLL路徑后,Function下拉列表中會自動枚舉出該DLL所有的函數名稱,選擇DLL中的函數名,然后該函數對應的輸入輸出參數就列出在參數列表內,選中一個參數,可以在右側參數屬性配置區域為該參數配置相應的屬性,如參數類型,參數傳遞方式等。如圖4所示。最后為DLL內函數的輸入輸出參數配置對應TestStand內設定的變量名,并且在Limit選項卡中設定測試結果的判定條件。
這種調用方式占用資源少,代碼執行效率也很高,適用于采用Python語言實現復雜算法函數的調用。
2.2TestStand調用由LabVIEW封裝Python模塊創建的VI
TestStand調用由LabVIEW創建的vI來編寫測試序列是開發者常用的方式,也是對NI自動化測試測量軟件生態環境的充分應用。如前文所述,既然LabVIEW中有多種方式可以調用Python腳本模塊,那么TestStand中調用由LabVIEW封裝Python模塊后創建的Ⅵ,就成為另外一種TestStand結合Python語言編程的途徑。
首先,在TestStand的序列編輯器中,通過工具條中的選擇適配器下拉列表來選擇模塊適配器為LabVIEW。模塊適配器的作用在于能夠讓TestStand正確識別并執行LabVIEW代碼模塊,它在TestStand引擎和LabVIEW代碼模塊之間提供了一條通道,TestStand可以傳遞參數給LabVIEW代碼模塊,并從LabVIEW代碼模塊獲取數據。確定模塊適配器后,在步驟類型中選擇需要的測試步驟類型插入到序列程序中,并在步驟設置窗格中完善輸入輸出參數的數據傳遞配置。這樣即可在TestStand中加載LabVIEW封裝Python模塊的vI。
2.3通過PythonStep Types for TestStand軟件工具調用
NI于2018年8月發布了一個TestStand的附加軟件工具包Python Step Types for TestStand V1.0,支持TestStand2014/2016/2017。它是一組有NI官方開發的自定義步驟類型,可用于在TestStand程序序列中指定并執行Python腳本。通過Python Step Types forTestStand工具庫中的Python步驟類型,可以調用Python模塊函數、類成員或靜態函數。Python StepTypes for TestStandVl.0支持的Python開發環境是Python3.6或Python2.7,需要在調用Python模塊時對Python版本號正確配置。
開發者可以在Python中實現特定的處理計算功能,并使用參數變量在步驟之間傳遞數據。為負責傳遞數據的輸入輸出參數配置屬性時,選擇TestStand和Python之間相匹配的數據類型。表2是TestStand和Python之間的數據類型匹配關系。
安裝Python Step Types for TestStand VI.0后,TestStand2016插入選板中包含五個自定義步驟類型,分別是Action,String Value Test,Multiple NumericLimit Test,Numeric Limit Test和Pass/Fail Test步驟類型。以Multiple Numeric Limit Test步驟類型為例,用Python3.6編寫一個函數,將多個值以列表形式返回,保存該模塊名為SampleFunction.PY,代碼如下:
然后采用PythonStepType中的Multiple NumericLimit Test步驟類型,調用SampleFunction.PY模塊內samplefunction函數。打開該步驟類型所提供的ConfigurePythonStep界面,如圖5所示。指定Python解析器版本為3.6并選擇調用Python模塊的路徑,Function Name下拉列表區域將自動枚舉出此Python模塊內部包含的函數,然后選擇調用的函數,則此函數相應的參數會出現在參數列表中,可以為參數配置匹配的數據類型和TestStand變量。
對于函數返回的列表,若列表中的每個值都需要比較是否符合要求,Multiple Numeric Limit Test步驟類型則可以將列表中的每個數值和限值進行比較,以決定該步驟的測試結果是否合格。在參數配置窗口中,函數返回的列表數據類型使用TestStand中數組類型相匹配。
最后為Python輸入的參數值指定數據源并設置每個數據源的上下限值。運行TestStand可執行Python腳本內的samplefunction函數,并得到返回值。基于Python Step Types for TestStand工具在TestStand2016中調用Python腳本的方便快捷,代碼執行效率高,推薦使用此方法。另外,在TestStand2019版中,Python適配器已經被內置在TestStand中,用于提供從TestStand調用Python代碼模塊的高級功能。由此可以預見,Python語言將在基于TestStand的自動化測試軟件中發揮更重要的作用。
3結束語
本文詳細闡述了目前LabVIEW和TestStand調用Python腳本編程的工具和方法,結合Python代碼實例及實際應用經驗,指出了在LabVlEW中推薦采用LabVlEW2018內置Python節點函數調用Python代碼模塊,而在TestStand中推薦采用PythonStep Typesfor TestStand軟件工具包調用Python代碼模塊。
當前隨著全球各大公司數字化轉型以及業務的快速發展,一個項目從開發出產品原型到測試驗證完成,要求的時間周期越來越短,除需要軟硬件開發人員快速地開發出原型產品外,也要求測試驗證人員快速搭建自動化測試系統,并盡快編制測試腳本以完成測試驗證。而Python的簡單易用,現成可用的豐富資源庫等特點,正是這種應用場景所需要的,再結合NI公司豐富的測試工具資源庫,相互配合應用到LabVlEW和TestStand中,將會使測試人員搭建自動化測試系統變得越來越快速便捷,能更快適應當前新形勢下的研發測試需要。