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

圖1 程序前面板

圖2 程序后面板1
具體的程序設計可以根據實際實驗環境變化。依靠l abview豐富的時序控制,可以配合其他設備,完成自動化儀器控制。
在l abview中調用原有驅動程序的動態鏈接庫文件,重新優化設計驅動控制程序,擴展了儀器的適用范圍,增加儀器的自動化進程。并且l abview中圖形化編程簡單快捷,即使是編程語言不是很精通的設計人員也能得心應手的使用。節約開發時間和開發成本。
[1]吳亮.基于LabVIEW的通用儀器控制軟件設計[J].艦船科學技術,2009,31(10):73-75.
[2]陳式清,齊洪喜..NET與LabVIEW混合環境的一種串口通信編程[J].網絡與通信,2014,5:48-50.
[3]ARCoptix LC Driver 1.1 API.[DB/CD].USA:ARCoptix,2010.