李壯志,李玉現(xiàn),白彥魁
(河北師范大學(xué) a.物理科學(xué)與信息工程學(xué)院;b.物理國家級(jí)實(shí)驗(yàn)教學(xué)示范中心;c.河北省新型薄膜材料實(shí)驗(yàn)室,河北 石家莊 050024)
現(xiàn)代化科技實(shí)驗(yàn)室在進(jìn)行物理量數(shù)據(jù)采集時(shí)通常需要使用多種型號(hào)的測量儀表,早期的測量儀表一般是用手動(dòng)方法進(jìn)行操作,在長時(shí)間的測量過程中,需要操作人員不間斷地操作,勞動(dòng)強(qiáng)度大,容易出現(xiàn)記錄錯(cuò)誤,另外也容易損壞儀表硬件. 在數(shù)字集成電路技術(shù)發(fā)明以后,高級(jí)儀表開始配備自動(dòng)化測量控制接口,其中重要的規(guī)范是惠普(HP)公司聯(lián)合其他儀表生產(chǎn)商推出的IEEE488接口協(xié)議(HP-IB),應(yīng)用此協(xié)議的接口后來一般改稱為通用接口總線(GeneralPurposeInterfaceBus,GPIB)[1]. 從20世紀(jì)70年代開始,大量的高級(jí)儀表都設(shè)計(jì)有GPIB接口. 通常1臺(tái)GPIB接口儀表均具有聽(listen)功能,通過控制機(jī)(一般是通用計(jì)算機(jī))控制,可以用寫(write)命令向儀表發(fā)送指令,實(shí)現(xiàn)儀表前面板的功能,另外通過讀(read)命令,可以將儀表緩存內(nèi)的數(shù)據(jù)讀入計(jì)算機(jī)進(jìn)行處理.
要實(shí)現(xiàn)計(jì)算機(jī)控制的GPIB接口測控系統(tǒng),通常需要在計(jì)算機(jī)中插入1張GPIB控制卡,通過GPIB電纜連接儀表,在配置儀表的GPIB地址后,通過編寫的控制程序,計(jì)算機(jī)可以訪問某臺(tái)特定的儀表,通過GPIB協(xié)議,通常1臺(tái)計(jì)算機(jī)最多可以同時(shí)控制14臺(tái)儀表.
在科研實(shí)驗(yàn)室中,串行通訊(serialcommunication)是也是常用的方式[2]. 該接口是20世紀(jì)80年代前后,為了方便個(gè)人計(jì)算機(jī)(PC)與低速設(shè)備通訊而發(fā)展起來的,隨著PC機(jī)的快速普及,串行接口(serialinterface)以其成本低廉、使用方便獲得了廣泛應(yīng)用,PC機(jī)上配置的一般是RS232串口,在工控領(lǐng)域還有RS422/485接口,RS232和RS422/485接口之間可以通過接口電路進(jìn)行協(xié)議轉(zhuǎn)換.
盡管GPIB和串行通訊提供了同儀器設(shè)備方便的通訊手段,但由于它們數(shù)據(jù)傳輸率較慢,在工控領(lǐng)域新的高速通訊協(xié)議得到了大力發(fā)展,如20世紀(jì)80年代后期,HP和Tekronix等公司成立的VXIbus合作組發(fā)布的VXI總線協(xié)議,HP公司發(fā)布的SICL(StandardInstrumentControlLibrary)協(xié)議,等等. 另外,隨著PC機(jī)對高速通訊的要求,Ethernet和USB通訊協(xié)議也獲得了快速發(fā)展,并且它們的使用也擴(kuò)展到儀器儀表設(shè)備控制領(lǐng)域.
為了確保不同廠商、不同接口標(biāo)準(zhǔn)的儀器能相互兼容、可靠通訊和數(shù)據(jù)交換,需要研制出新的標(biāo)準(zhǔn),以方便對各種不同儀器設(shè)備的編程控制,為此NI,HP/Agilent,Tekronix等35家全球最大的儀器儀表公司在1993年成立聯(lián)盟,并于1996年2月推出了VISA協(xié)議,該協(xié)議的目標(biāo)是能夠驅(qū)動(dòng)95%的已有智能儀器儀表[3]. 通過VISA協(xié)議提供的函數(shù),可以驅(qū)動(dòng)具有GPIB,RS232,VXI,Ethernet和USB等各種接口的儀器設(shè)備.
一直以來,對儀表控制軟件的編寫一般有2種方式:一種是使用通用高級(jí)編程語言如VisualC++,VisualBasic,Delphi等,設(shè)計(jì)程序界面和處理數(shù)據(jù)的采集、顯示和存儲(chǔ),通過調(diào)用諸如GPIB接口卡驅(qū)動(dòng)函數(shù)控制儀表,這通常需要較多的編程知識(shí)和對GPIB和RS232等總線協(xié)議有較多了解,并且編譯完成的程序只是針對特定的測控系統(tǒng),操作者無法改變其配置,如果更換測試系統(tǒng)中的某臺(tái)儀表或者組建新的系統(tǒng),則需要重新編寫程序,缺乏靈活性. 另一種方式是使用圖形化編程語言如LabVIEW(使用G語言)[4-5],它對GPIB和RS232等協(xié)議進(jìn)行了封裝,相比傳統(tǒng)編程語言有較好的靈活性,但是在測控系統(tǒng)中需安裝體積龐大的專用軟件,并且其價(jià)格昂貴,另外它仍需要每個(gè)具體測控系統(tǒng)搭建者花費(fèi)較長時(shí)間深入學(xué)習(xí)該編程語言.
LabMeasure軟件中提供了測量控制軟件的另一種編程方式——腳本(script)編程. 對不同的測控要求,控制軟件的編寫不再是傳統(tǒng)的編譯-執(zhí)行方式,而是將具體的控制要求寫成腳本程序,在測控操作運(yùn)行前完成指令的即時(shí)編譯,既增加了測控系統(tǒng)的靈活性,又降低了專用程序編寫的難度.
LabMeasure軟件結(jié)構(gòu)如圖1所示,其中心部分是腳本集成開發(fā)環(huán)境(script IDE),用戶在該環(huán)境提供的代碼編輯器中編寫自己的腳本程序. LabMeasure使用Object Pascal 腳本語言編程,該語言遵循傳統(tǒng)的Pascal規(guī)則,并做適度的擴(kuò)展和簡化. Pascal語言是接近自然語言的高級(jí)編程語言,方便學(xué)習(xí)掌握. Object Pascal 腳本語言預(yù)定義數(shù)據(jù)類型包括Boolean,Byte,Cardinal,Double,Int64,Integer,ShortInt,SmallInt,String,Variant,Word;結(jié)構(gòu)類型支持集合、枚舉、靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組、記錄、類等;運(yùn)算符支持算術(shù)運(yùn)算符、布爾運(yùn)算符、位邏輯運(yùn)算符、關(guān)系運(yùn)算符、運(yùn)算符優(yōu)先級(jí);條件語句支持If語句和Case語句;循環(huán)語句支持For語句、While語句、Repeat語句、Break和Continue語句;等等. 為了方便調(diào)試腳本程序,在script IDE窗口中帶有詳細(xì)的調(diào)試方式和調(diào)試信息的顯示,如步入、步出、運(yùn)行到當(dāng)前行,以及在任一行設(shè)置斷點(diǎn)等,并可以通過觀察窗口查看變量結(jié)果.
圖1 LabMeasure軟件的構(gòu)成
為了顯示獲得的結(jié)果,LabMeasure軟件提供了終端窗口和二維圖形顯示窗口,終端窗口用于顯示得到的結(jié)果,圖形顯示窗口用來顯示獲得的二維數(shù)據(jù)曲線.
LabMeasure IDE本身支持常用的數(shù)學(xué)函數(shù)和字符串處理等函數(shù)如Cos, Sin, Tan, Abs, Exp, Ln, Copy, Delete等,還提供了用于輸出程序結(jié)果的終端輸出函數(shù)和二維繪圖函數(shù),以及對所采集的數(shù)據(jù)保存為csv格式文件的存儲(chǔ)函數(shù). 其中的二維繪圖函數(shù)包括:
1)LmSetAxisName(xAxisName: string; yAxisName: string),該函數(shù)設(shè)置Plot窗口的x和y坐標(biāo)軸的內(nèi)容.
2)LmPlot(x: double; y: double),如果沒有啟動(dòng)Plot窗口,該函數(shù)將動(dòng)態(tài)創(chuàng)建Plot窗口,并向窗口中的直角坐標(biāo)系發(fā)送浮點(diǎn)數(shù)x和y,并同時(shí)進(jìn)行顯示. 該直角坐標(biāo)系的橫軸和縱軸按輸入的數(shù)值自動(dòng)縮放,直角坐標(biāo)系的橫軸和縱軸名稱由LmSetAxisName函數(shù)設(shè)置,如果用戶未設(shè)置,則使用缺省設(shè)置“x-Axis”和“y-Axis”.
(3)LmPlotM(x: double; yArr: array of double),該函數(shù)功能同LmPlot,但可以在1個(gè)Plot窗口中以x為橫坐標(biāo),以y0[, y1][, y2]…[, y4]等為縱坐標(biāo),可以同時(shí)繪制最多5條曲線.
除常用函數(shù)外,LabMeasure還內(nèi)置了幾個(gè)功能擴(kuò)展函數(shù)庫,包括系統(tǒng)應(yīng)用函數(shù)庫,數(shù)學(xué)函數(shù)庫及變體類型函數(shù)庫等,對其功能進(jìn)行擴(kuò)展.
1)系統(tǒng)應(yīng)用函數(shù):這些函數(shù)在LabMeasure的SysUtils庫中,該庫提供了文件、字符串、類型轉(zhuǎn)換、時(shí)間以及系統(tǒng)方面的函數(shù)共約220個(gè).
2)數(shù)學(xué)函數(shù)庫:這些函數(shù)在LabMeasure的Math庫中,該庫提供算術(shù)、三角、對數(shù)、統(tǒng)計(jì)和金融方面的計(jì)算函數(shù)共超過100個(gè).
3)變體(variants)類型函數(shù)庫,LabMeasure script語言支持Object Pascal語言規(guī)范的variants類型,使用該類型時(shí)涉及到的variants類型函數(shù)在variants函數(shù)庫中.
現(xiàn)在NI(National Instrument)公司的GPIB板卡在實(shí)驗(yàn)室設(shè)備控制方面應(yīng)用最為廣泛,部分其他公司的產(chǎn)品會(huì)和NI板卡保持兼容性,所以在LabMeasure軟件中提供了對NI GPIB函數(shù)的直接支持,包括絕大部分GPIB 488.1函數(shù)和全部的GPIB 488.2函數(shù).
LabMeasure軟件中提供了對RS232通訊函數(shù)的直接支持,包括端口控制、數(shù)據(jù)輸入、數(shù)據(jù)輸出、端口狀態(tài)查詢等系列串口操作函數(shù),例如其中的端口控制函數(shù)包括LS_open,LS_close,LS_ioctl,LS_flowctrl,LS_flush,LS_DTR,LS_RTS,LS_lctrl,LS_baud等具體的操作函數(shù),分別完成串口打開、關(guān)閉、通訊參量設(shè)置等功能.
為了應(yīng)對除GPIB和RS232通訊外其他種類的儀器儀表,LabMeasure軟件提供了對VISA函數(shù)的支持[6-7]. VISA函數(shù)可分6大類,即資源模板函數(shù)和操作函數(shù)、基本I/O操作函數(shù)、格式I/O操作函數(shù)、存儲(chǔ)I/O操作函數(shù)、共享存儲(chǔ)操作函數(shù)和接口特殊操作函數(shù). 由于LabMeasure通過功能函數(shù)庫提供了豐富的字符串操作函數(shù)及格式化函數(shù),所以不再提供部分格式I/O操作函數(shù)及存儲(chǔ)I/O操作、共享存儲(chǔ)操作函數(shù),LabMeasure支持除此之外的其他全部VISA函數(shù).
為了方便用戶在連接物理設(shè)備前調(diào)試腳本測控程序,LabMeasure對全部支持的GPIB,RS232和VISA函數(shù)都支持模擬(simulation)方式.
LabMeasure支持通過2種方式對系統(tǒng)功能進(jìn)行擴(kuò)展:一是將需要用到的功能編制成子程序,儲(chǔ)存成LabMeasure script模塊文件,然后在調(diào)用時(shí)直接引用該模塊,軟件支持在1個(gè)腳本程序中使用最多256個(gè)模塊文件. 另一種方式是通過使用其他通用編譯器將需要的功能編譯成動(dòng)態(tài)鏈接庫,在LabMeasure的腳本程序中先引用該動(dòng)態(tài)鏈接庫,再調(diào)用其中的函數(shù). 軟件支持對動(dòng)態(tài)鏈接庫調(diào)用的各種約定,如Pascal約定、C約定等.
LabMeasure采用標(biāo)準(zhǔn)視窗方式編寫,使用方法同常用Windows程序一致,熟悉微軟視窗操作系統(tǒng)的用戶可以快速熟悉其使用.
軟件啟動(dòng)后,其界面如圖2所示,僅Graph View和Table View功能可用,分別是用圖形方式和圖表方式打開LabMeasure存儲(chǔ)的csv格式文件,除此之外的其他快捷方式都不能使用.
圖2 LabMeasure軟件的啟動(dòng)界面
在File菜單欄下,通過單擊LM Script可以啟動(dòng)LmIDE,此時(shí)窗口狀態(tài)如圖3(a)所示. 當(dāng)啟動(dòng)LmIDE時(shí),LabMeasure會(huì)檢測計(jì)算機(jī)中是否安裝了GPIB板卡和/或VISA驅(qū)動(dòng),如果發(fā)現(xiàn),則在LmIDE下側(cè)中間的狀態(tài)欄中顯示,如果沒有發(fā)現(xiàn),則需要用戶檢測其系統(tǒng)中的GPIB板卡及其驅(qū)動(dòng)程序和/或VISA驅(qū)動(dòng)是否正確安裝.
(a)LmIDE啟動(dòng)窗口 (b)打開腳本程序后的窗口圖3 LmIDE界面
啟動(dòng)LmIDE后,LabMeasure的菜單欄也會(huì)做相應(yīng)的變動(dòng),此時(shí)可以通過菜單欄或者快捷按鈕新建或者打開LM程序工程. 1個(gè)LM工程文件中可以包含多個(gè)模塊文件. 圖3(b)中是打開示例文件后的窗口圖,此時(shí)將鼠標(biāo)放置在快捷按鈕上會(huì)得到相應(yīng)按鈕的功能提示,這些快捷按鈕僅列舉了一些常用功能,其他更多的功能可以從菜單欄上選擇,單擊相應(yīng)的菜單按鈕即可實(shí)現(xiàn)其標(biāo)題顯示的功能.
圖4是運(yùn)行簡單的示例程序后的結(jié)果,該程序計(jì)算并顯示了由37個(gè)點(diǎn)組成的正弦曲線,為了模擬數(shù)據(jù)采集過程,使用delay(延時(shí))函數(shù)每隔20 ms計(jì)算1個(gè)數(shù)據(jù)點(diǎn),并將計(jì)算結(jié)果顯示在最右側(cè)的終端窗口中,將數(shù)據(jù)曲線顯示在中間的繪圖窗口中. 該例子通過簡單的數(shù)行程序模擬了數(shù)據(jù)采集的過程,可見LabMeasure程序編寫簡單,同時(shí)具有較高的編程效率.
圖4 LabMeasure中的窗口
已經(jīng)在實(shí)驗(yàn)室中使用LabMeasure軟件編程,搭建完成了多種自動(dòng)化測量系統(tǒng),包括方塊電阻四探針測試臺(tái)、范德堡法薄膜電阻率測試系統(tǒng)、真空場發(fā)射測試系統(tǒng)、高精度塞貝克系數(shù)和電阻率測量系統(tǒng)等,并應(yīng)用于教學(xué)和科研工作.
總之,LabMeasure軟件大幅度降低了科研人員在實(shí)驗(yàn)室中搭建自動(dòng)化測試系統(tǒng)所需要的知識(shí)儲(chǔ)備,學(xué)習(xí)過高級(jí)編程語言,具有初級(jí)編程經(jīng)驗(yàn)的人員經(jīng)過短期學(xué)習(xí),就能夠高效率地搭建適合自己工作需要的自動(dòng)化測試系統(tǒng).
參考文獻(xiàn):
[1] 張宜生,王運(yùn)贛. GPIB通用接口與自動(dòng)測試系統(tǒng)[M]. 北京:科學(xué)出版社,1989.
[2] 范逸之. Visual Basic與RS-232串行通信控制[M]. 北京:中國青年出版社,2000.
[3] IVI Foundation. www.ivifoundation.org[EB/OL].
[4] Ertugrul N. Labview: for electric circuits, machines, drives, and laboratories[M]. London: Prentice Hall PTR, 2002.
[5] King R H, Introduction to data acquisition with LabView [M]. New York: McGraw Hill Higher Education, 2012.
[6] Agilent Technologies, Inc. Agilent VISA Online Reference [Z]. 2005-2009.
[7] 趙會(huì)兵. 虛擬儀器技術(shù)規(guī)范與系統(tǒng)集成[M]. 北京:北京交通大學(xué)出版社,2003.