郭曉金 ,楊 柳
(1 遼寧興城市92853部隊4分隊 125106 ;2 福州市91267部隊17分隊 350015)
在測量工作實踐中,經常會遇到對某一電壓量值的變化是否超過設置值進行監測的情況,若利用計算機控制數字電壓表進行一般測量是沒有任何問題的,如果要求真實反映并記錄報警發生的時刻、電壓值和報警次數,并不是一件容易的過程。針對這一實際工作要求,在LabVIEW 8.5開發環境下,設計了實現監測電壓變化報警測量程序,計算機通過GPIB接口卡控制Fluke8846A實現電壓測量數據采集,并以表格的形式實時顯示報警結果,此方法簡單實用,提高了人機交互性能,為使用者帶來了極大的方便,具有較高的應用、借鑒價值。
在LabVIEW開發環境中,可以通過事件結構來捕獲用戶的各種操作,例如單擊按鈕、輸入數據、關閉面板等,但是除了用戶的各種操作引發事件外,可能還需要通過編程產生事件,例如電壓超過上限時,系統自動觸發報警事件等。對于簡單情況可以通過事件發生技術來實現,但是如果還需要傳遞事件數據或希望一個循環還能用來響應其他事件時,就需要利用到用戶事件(User Event)[3]。
用戶事件是LabVIEW事件驅動編程的一部分,因此仍然需要使用到事件結構,不同的是,在使用用戶事件前,首先必須通過Create User Event函數創建用戶事件,然后通過Register For Events節點注冊事件。將注冊事件的Refnum與 事件結構的Dynamic Event Terminals(右擊事件結構邊緣并選擇Show Dynamic Event Terminals選項可以顯示該端子)連接后,在事件結構的事件編輯對話框中就可以看到該用戶事件。事件產生是通過Generate User Event函數產生的。不再需要該事件時可以通過Unregister For Events函數注銷該用戶事件,最后需要通過Destroy User Event函數銷毀用戶事件。在函數模板→編程→對話框與用戶界面→事件中可以找到相應的事件函數[8]。
圖1是 在LabVIEW 8.5開 發 環 境 中, 利 用Fluke8846A 數字電壓表LabVIEW驅動程序設計的監測電壓變化報警程序的前面板,在圖1所示的人機交互界面中從“測量功能”下拉框中選擇所需要的測量功能類型(可供選擇的測量功能類型有:DC /AC Voltage、2 - Wire Resistance、4 - Wire Resistance、DC /AC Current、Frequency、Period、Diode Checking等)[4-5],測量功能類型確定后,根據提示將信號連接到Fluke8846A的相應端,在“FLUKE8846A測量值”文本框中就能顯示測量值。可以根據工作需要調節“報警上限”值,當測量值大于報警上限值時,“發生報警”指示燈亮的同時計算機發出聲音報警,這里不僅記錄報警數,還對報警發生的時刻和電壓值進行記錄,此時“報警歷史數據”顯示報警發生時刻和報警時的電壓值。“報警次數”累計顯示程序運行時發生報警的次數。當用戶在任何時候按“清除報警數據”時,“報警歷史數據”和“報警次數”分別被清除數據。圖1是監測被測DCV大于8V時發生報警的情況。

圖1 監測電壓變化報警程序前面板
在圖2程序框圖中橢圓1實現清除“報警次數”和“報警歷史數據”顯示的內容。橢圓2、3利用“創建用戶事件” 函數創建用戶事件,該用戶事件攜帶的數據類型為Double,名稱為“電壓報警",然后通過“注冊事件”函數實現以連接的用戶事件數據類型、事件的事件名稱,實現注冊用戶事件,同時可將事件及其相關數據發送至為該事件注冊的所有事件結構。
橢圓6通過“取消注冊事件”函數, 使用事件注冊引用句柄的事件結構不再收到任何動態事件,建議在事件無需處理時取消注冊事件,如不取消注冊事件,只要VI運行,即使沒有事件結構等待處理事件,LabVIEW也將繼續生成和排列事件,這不僅消耗內存而且在前面板事件鎖定被啟用時將導致VI掛起。通過“銷毀用戶事件”引用句柄,釋放用戶事件引用,所有注冊為該用戶事件的事件結構不再收到該事件。橢圓4是利用Fluke8846A數字電壓表LabVIEW驅動程序實現的電壓測量程序,其中用到“Initialize.vi”初始化、“Configure Measurement.
vi”設置測量功能、“Read(single point).vi”讀測量數據、“Close.vi”關閉[1-2]。橢圓7一是利用“<電壓報警>:用戶事件”中的事件數據節點“電壓報警”將電壓測量數據,經“數值至小數字符串轉換”到“創建數組”;二是利用“獲取日期/時間(秒)”和“格式化日期/時間字符串” 到“創建數組”; 三是報警次數經“數值至十進制數字符串轉換” 到“創建數組”;從而實現將報警次數、報警發生的時刻和電壓值進行記錄并添加“報警歷史數據”表格中。橢圓8利用寄存功能實現圖1“報警歷史數據”表格自動移動功能,即隨著報警歷史數據的不斷增加,“報警歷史數據”表格垂直滾動自動滑動。橢圓9通過“調用庫函數節點”調用winmm.dll中的“sndPlaySoundA”[6]函數實現聲音報警。
簡而言之,程序的工作過程是,在設置一個報警電壓值后,主循環中如果測量的電壓值超過上限時將產生一個報警事件,另一個循環獲得該事件后將報警數加1,并將有關信息添加到“報警歷史數據”中進行顯示。

圖2 監測電壓變化報警程序框圖
由于Fluke8846A 數字電壓表LabVIEW驅動程序是利用VISA(Virtual Instrumentation Software Architecture虛擬儀器軟件結構)編寫的,因此運行時必須在開發環境中安裝該軟件。對于驅動程序、應用程序開發者而言,VISA庫函數是一套可方便調用的函數,其中核心函數可控制各種類型器件,而不用考慮器件的接口類型,VISA也包含部分特定接口函數,這樣用戶可以用同一套函數為GPIB、RS232、LAN、USB接口儀器儀表、VXI器件等各種類型器件編寫軟件,熟悉了VISA就可以處理各種情況,用戶利用VISA開發的軟件具有更好的適應性,且具有以下幾個特點:(1)VISA的I/O控制功能適用于各種類型儀器,適于單處理器系統結構,也適于多處理器結構或分布式網絡結構;(2)與儀器硬件接口無關的特性,即利用VISA編寫的模塊驅動程序既可以用于嵌入式計算機VXI系統,也可以用于通過MXI、GPIB-VXI或1394接口控制的系統中,當更換不同廠家符合VPP規范的硬件時,模塊驅動程序無須改動。上述程序設計中使用的VISA是 4.2版本,低版本不適應,可到ni.com網站免費下載。
從上述程序中可以看出,研究利用了LabVIEW中的用戶事件結構,在程序滿足設置的條件時才會產生事件,克服了“應用程序”、“本VI”、“窗格”、“分隔欄”和“控件”事件[7-8]不能實現測量和程序處于等待狀態時,占用系統資源問題,取得良好的效果。當被控制的儀器發生變化時,只需要根據被控制儀器的GPIB地址,在程序中改變儀器的資源名和相應LabVIEW驅動程序就可以了,其他不需要做任何改動,就可以應用到自己開發的測量系統中,從而可以縮短程序開發時間,達到最佳設計效果。
[1] VISA 4.2 Help,National Instrument Corporation ,2005.
[2] LabVIEW 8.5 Help,National Instrument Corporation ,2006.
[3] 陳錫輝,LabVIEW 8.2 程序設計從入門到精通[M].北京:清華大學出版社,2007:259-273.
[4] Fluke 8846A Digit Multimeter Quick Start Tutorial, 2007.
[5] Fluke 8846A Digit Multimeter Programmer Manual, 2007.
[6] 王磊,精通LabVIEW 8.X[M].北京:電子工業出版社,2008:129-138.
[7] 阮奇楨,我和LabVIEW[M].北京:航空航天大學出版社,2009:96-106.
[8] 鄧焱. LabVIEW7.1測試技術與儀器應用[M].北京:機械工業出版社,2004:200-205