長(zhǎng)春理工大學(xué)電子信息工程學(xué)院 侯 博 廖醒宇
雖然配套儀器控制程序已經(jīng)涵蓋了儀器本身所有的功能控制,但由于后續(xù)開(kāi)發(fā)環(huán)境和具體實(shí)驗(yàn)操作的要求,配套控制軟件不能很好的達(dá)成預(yù)期效果。此需要重新設(shè)計(jì)儀器控制軟件。一旦從底層重新設(shè)計(jì)控制軟件將消耗大量的人力以及時(shí)間,并且會(huì)造成儀器功能的損失。廠(chǎng)商提供的配套控制軟件的動(dòng)態(tài)鏈接庫(kù)中基本已經(jīng)涵蓋了所有的控制接口,直接調(diào)用原有動(dòng)態(tài)鏈接庫(kù),較比重新設(shè)計(jì)控制程序?qū)p少大量的研發(fā)周期和人力資源。本文介紹了使用LabVIEW軟件開(kāi)發(fā)平臺(tái)調(diào)用基于.net平臺(tái)的動(dòng)態(tài)鏈接庫(kù),完成控制軟件的二次開(kāi)發(fā)。并以ARCopt ix公司生產(chǎn)的液晶可調(diào)相位延時(shí)器控制軟件為例,給出具體的設(shè)計(jì)方法。
現(xiàn)如今儀器控制系統(tǒng)開(kāi)發(fā)通常采用虛擬儀器技術(shù)[1]。近30年來(lái)NI公司(Nat ional Inst r uments)一直致力于推廣和引領(lǐng)他們提出并制定的這種基于計(jì)算機(jī)系統(tǒng)的儀器和測(cè)量技術(shù)。與傳統(tǒng)技術(shù)相比,虛擬儀器技術(shù)無(wú)可比擬的占據(jù)著上風(fēng)。虛擬儀器技術(shù)能夠在極短的開(kāi)發(fā)周期內(nèi),在通用計(jì)算機(jī)平臺(tái)上構(gòu)建各式各樣的測(cè)量和控制系統(tǒng)。用戶(hù)無(wú)需關(guān)心儀器的底層硬件接口情況,虛擬儀器平臺(tái)LabVIEW已經(jīng)完成了這部分的工作。對(duì)于大多數(shù)用戶(hù)來(lái)說(shuō),硬件的測(cè)量和控制工作已經(jīng)成為軟件設(shè)計(jì)。儀器在某種意義上可視為軟件。虛擬儀器依托計(jì)算機(jī)強(qiáng)大的圖形操作界面和在豐富的網(wǎng)絡(luò)資源,建立虛擬儀器面板,完成與儀器的數(shù)據(jù)交互、數(shù)據(jù)解析與顯示、近兒完成對(duì)儀器的控制。虛擬儀器以其多樣的可變性和廣泛的適用性正逐步替代傳統(tǒng)的儀器技術(shù),并且提高儀器的功能和使用效率,簡(jiǎn)化儀器的二次開(kāi)發(fā)和利用,同時(shí)大大降低了儀器的價(jià)格。虛擬儀器在電子測(cè)量,電氣工程,科學(xué)探索,醫(yī)學(xué),振動(dòng)分析,光學(xué)分析,聲學(xué)分析,故障診斷及科學(xué)研究和教學(xué)等許多領(lǐng)域有著廣泛的應(yīng)用。
儀器控制是指通過(guò)個(gè)人計(jì)算機(jī)與智能儀器之間傳輸相關(guān)的數(shù)據(jù)和命令,以實(shí)現(xiàn)對(duì)智能儀器的控制。兩者之間通過(guò)不同的的總線(xiàn)接口實(shí)現(xiàn)通信,大體可分為串口、網(wǎng)口、USB、PXI和VXI等接口。儀器控制負(fù)責(zé)上位機(jī)與儀器的連接工作,同時(shí)還可以根據(jù)需要對(duì)儀器的功能進(jìn)行擴(kuò)展和增強(qiáng)。計(jì)算機(jī)平臺(tái)擁有強(qiáng)大的數(shù)據(jù)解析、運(yùn)算、顯示和存儲(chǔ)能力的,以計(jì)算機(jī)作為上位機(jī)可以最大限度的增強(qiáng)儀器的性能。一個(gè)完整的儀器控制系統(tǒng)包括儀器、總線(xiàn)、計(jì)算機(jī)、底層驅(qū)動(dòng)程序和上層應(yīng)用程序??偩€(xiàn)完成計(jì)算機(jī)和儀器的硬件連接。上層應(yīng)用程序調(diào)用底層底層驅(qū)動(dòng)程序預(yù)備好的控制接口,發(fā)送控制命令控制儀器行為并且完成數(shù)據(jù)的采集、處理、分析、顯示和存儲(chǔ)等。
LabVIEW是美國(guó)NI公司在儀器控制領(lǐng)域最具競(jìng)爭(zhēng)力的核心技術(shù)之一。與其他使用字符代碼設(shè)計(jì)程序的平臺(tái)不同,LabVIEW使用圖形代碼設(shè)計(jì)程序。LabVIEW采用數(shù)據(jù)流編程方式,用連線(xiàn)連接程序各個(gè)模塊,程序的執(zhí)行順序由程序框圖中節(jié)點(diǎn)之間的數(shù)據(jù)流向決定。它用圖標(biāo)代替?zhèn)鹘y(tǒng)程序設(shè)計(jì)語(yǔ)言的函數(shù),用連線(xiàn)取代了函數(shù)的復(fù)雜調(diào)用。它擁有豐富的儀器驅(qū)動(dòng)庫(kù),其中涵蓋了各種總線(xiàn)連接方式。即使是對(duì)單一總線(xiàn)編程,也可以采取多種編程方法。因此它是一個(gè)非常適合用于儀器控制的開(kāi)發(fā)平臺(tái)。
動(dòng)態(tài)鏈接庫(kù)介紹:
微軟公司提出了一種在windows操作系統(tǒng)中用以實(shí)現(xiàn)共享函數(shù)庫(kù)的方式——?jiǎng)討B(tài)鏈接庫(kù)技術(shù)(Dynamic-l ink Libr ar y)。動(dòng)態(tài)鏈接是一種共享可執(zhí)行代碼的技術(shù)進(jìn)程可以調(diào)用與自身無(wú)關(guān)的其他進(jìn)程的可執(zhí)行代碼。函數(shù)的可執(zhí)行代碼匯集于一個(gè)DLL文件,這就是動(dòng)態(tài)鏈接庫(kù)。不同進(jìn)程可以調(diào)用不屬于自身的可執(zhí)行代碼,這樣有助于共享資源和數(shù)據(jù),并且減少了代碼量,簡(jiǎn)化開(kāi)發(fā)者的工作量。不同應(yīng)用程序可同時(shí)調(diào)用內(nèi)存中DLL文件中的函數(shù)。同一DLL文件被多個(gè)應(yīng)用程序調(diào)用時(shí),內(nèi)存也只會(huì)加載一次,如此便可節(jié)約內(nèi)存資源。
廠(chǎng)商為保證設(shè)備的兼容性和可拓展性,在提供包含動(dòng)態(tài)鏈接庫(kù)文件的驅(qū)動(dòng)程序的同時(shí),還會(huì)使設(shè)備驅(qū)動(dòng)程序兼容微軟.NET平臺(tái)。也就是使用與.NET兼容的c#,VB.net或是C++/CLI語(yǔ)言來(lái)編寫(xiě)驅(qū)動(dòng)程序。在動(dòng)態(tài)鏈接庫(kù)文件中,儀器廠(chǎng)商已經(jīng)完成了應(yīng)用層與儀器控制底層之間的通信。完成數(shù)據(jù)通信的函數(shù)就是我們通常說(shuō)的API(Appl icat ion Pr ogr amming Int er f ace)函數(shù)[2]。在LabVIEW中調(diào)用DLL文件,實(shí)質(zhì)就是調(diào)用廠(chǎng)商預(yù)先準(zhǔn)備好的API函數(shù)。后續(xù)開(kāi)發(fā)者不需要具備C#,VB.NET,C++、CLI語(yǔ)言開(kāi)發(fā)基礎(chǔ),也不需要閱讀API函數(shù)源碼或是了解API函數(shù)內(nèi)部工作機(jī)制,只需要了解API函數(shù)的功能及傳入傳出參數(shù)即可。這便使得控制程序的開(kāi)發(fā)停留在了LabVIEW的圖形化界面中,使編程語(yǔ)言不是很好的開(kāi)發(fā)者也能輕松實(shí)現(xiàn)儀器控制程序的設(shè)計(jì)。
本文所使用的是ARCopt ix公司生產(chǎn)的液晶相位可變延時(shí)器。實(shí)驗(yàn)?zāi)康氖鞘构馔ㄟ^(guò)兩片相位延時(shí)器,之后使用相位檢測(cè)儀來(lái)觀測(cè)光偏振角度。故控制程序需同時(shí)控制兩片延時(shí)器,并且能夠準(zhǔn)確控制各個(gè)延時(shí)器的延時(shí)特性。延時(shí)器自帶windows下驅(qū)動(dòng)程序,安裝完成后,在其安裝目錄下可找到函數(shù)庫(kù)LCDr iver.dl l[3]和CyUSB.dl l。其中LCDr iver.dl l中包含延時(shí)器控制的所有函數(shù),下面對(duì)其進(jìn)行簡(jiǎn)要說(shuō)明。
按照函數(shù)功能不同,大體將函數(shù)分為兩類(lèi):
第一類(lèi)為回調(diào)函數(shù),開(kāi)發(fā)者可以通過(guò)這些函數(shù)獲取儀器具體性能參數(shù)以及儀器工作狀態(tài)。
doubl e MaxVol tage{get; } 獲取儀器最大允許電壓其傳出參數(shù)為doubl e型。
doubl e MaxDacCount{get;} 獲取儀器最大模數(shù)轉(zhuǎn)換精度 其傳出參數(shù)為doubl e型。
bool Tr igOut 1{get; } 獲取延時(shí)器1工作狀態(tài) 其傳出參數(shù)為bool型。
bool Tr igOut 2{get; } 獲取延時(shí)器2工作狀態(tài) 其傳出參數(shù)為bool型。
st r ing Get Serial Number() 返回已連設(shè)備的設(shè)備碼其返回值為st r ing型。
第二類(lèi)為控制函數(shù),開(kāi)發(fā)者通過(guò)傳入具體參數(shù)完成儀器控制。
bool Set DACVol t age(doubl e V, byt e DACno) 函數(shù)功能為設(shè)置兩片相位延時(shí)器的輸出電壓。參數(shù)doubl e V控制延時(shí)器的輸出電壓,參數(shù)byt e DACno負(fù)責(zé)選擇需要控制的延時(shí)器。由于設(shè)備為電控的液晶可調(diào)相位延時(shí)器,控制輸出電壓實(shí)質(zhì)是控制相位延時(shí)器的延時(shí)特性。
bool Set Tr i gger s(bool Out 1Ext er nal, bool Out 2Ext er nal) 函數(shù)功能與單片機(jī)中的使能標(biāo)志位類(lèi)似,負(fù)責(zé)控制所選延時(shí)器是否工作。
首先打開(kāi)l abvi ew新建一個(gè)vi。在程序框圖的函數(shù)選版中選擇互聯(lián)接口》.NET》構(gòu)造器節(jié)點(diǎn),然后在瀏覽窗口中搜索原驅(qū)動(dòng)程序安裝路徑,找到所要使用的DLL文件,l cvr的DLL文件名為L(zhǎng)CDr iver.dl l。
然后在新創(chuàng)建的屬性節(jié)點(diǎn)圖標(biāo)上點(diǎn)擊右鍵》創(chuàng)建》ARCopt ix.LCDdr iver.LCdr iver類(lèi)的方法,并在下級(jí)菜單中找到所要使用的函數(shù)。
DLL文件的調(diào)用以及具體功能函數(shù)的調(diào)用就如上面所述,剩下的就是l abview圖形環(huán)境下的g語(yǔ)言設(shè)計(jì)了。LabVIEW程序設(shè)計(jì)分前后兩個(gè)面板。前面板為人機(jī)交互界面,用戶(hù)通過(guò)前面板完成個(gè)人計(jì)算機(jī)與儀器的數(shù)據(jù)交互并控制儀器運(yùn)作。前面板主要包括各種數(shù)值的輸入控件,程序控制按鍵,顯示框體等。程序后面板是程序運(yùn)行的主干部分,也是程序設(shè)計(jì)的主要部分。后面板包括數(shù)據(jù)的流向,屬性節(jié)點(diǎn)的寫(xiě)入和讀取,儀器的“打開(kāi)”和“關(guān)閉”。
本程序主要功能是控制兩片相位延時(shí)器,可同時(shí)控制兩片相位延時(shí)器或者指定控制單一一片。程序前面板需要有兩組電壓輸入控件分別對(duì)應(yīng)兩片延時(shí)器的輸出電壓。兩個(gè)使能按鍵Tr igger Out 1、Tr igger Out 2,控制與之相對(duì)應(yīng)的相位延時(shí)器使能與否。用戶(hù)在輸入控件輸入所需電壓數(shù)值后,按下Set Vol t age按鍵控制電壓輸出。程序完成功能后使用STOP按鍵退出程序。程序前面板如圖1所示。
程序后面板設(shè)計(jì)在whi l e循環(huán)下嵌套3層事件結(jié)構(gòu)。第一層事件調(diào)用Set DACVol t age函數(shù)分別控制兩片延時(shí)器的輸出電壓。前面板的Set Vol t age按鍵被按下為事件觸發(fā)條件。當(dāng)Set Vol t age按鍵按下,程序?qū)山M電壓值寫(xiě)入Set DACVol t age函數(shù),控制延時(shí)器輸出。第二層事件調(diào)用Set Tr igger s函數(shù)使能兩片延時(shí)器。前面板Tr igger Out 1和Tr igger Out 1為條件觸發(fā)按鍵。Tr igger Out 1或Tr igger Out 1按下,程序調(diào)用Set Tr igger s函數(shù)完成對(duì)延時(shí)器使能。第三層是使程序跳出循環(huán),程序結(jié)束。紅色st op按鍵為觸發(fā)條件。程序后面板如圖2所示。
圖1 程序前面板
圖2 程序后面板1
具體的程序設(shè)計(jì)可以根據(jù)實(shí)際實(shí)驗(yàn)環(huán)境變化。依靠l abview豐富的時(shí)序控制,可以配合其他設(shè)備,完成自動(dòng)化儀器控制。
在l abview中調(diào)用原有驅(qū)動(dòng)程序的動(dòng)態(tài)鏈接庫(kù)文件,重新優(yōu)化設(shè)計(jì)驅(qū)動(dòng)控制程序,擴(kuò)展了儀器的適用范圍,增加儀器的自動(dòng)化進(jìn)程。并且l abview中圖形化編程簡(jiǎn)單快捷,即使是編程語(yǔ)言不是很精通的設(shè)計(jì)人員也能得心應(yīng)手的使用。節(jié)約開(kāi)發(fā)時(shí)間和開(kāi)發(fā)成本。
[1]吳亮.基于LabVIEW的通用儀器控制軟件設(shè)計(jì)[J].艦船科學(xué)技術(shù),2009,31(10):73-75.
[2]陳式清,齊洪喜..NET與LabVIEW混合環(huán)境的一種串口通信編程[J].網(wǎng)絡(luò)與通信,2014,5:48-50.
[3]ARCoptix LC Driver 1.1 API.[DB/CD].USA:ARCoptix,2010.