一、問題的提出
筆者最近在Labwindows/CVI環(huán)境下開發(fā)HP75000 D20型數(shù)字功能測試系統(tǒng)時,就遇到了程序調(diào)試過程中硬件系統(tǒng)“死機”的情況。該系統(tǒng)是一個基于VXI總線的通用測試平臺的一部分,為了和系統(tǒng)的整體開發(fā)保持一致,在進行程序開發(fā)的時候沒有直接使用HP公司提供的開發(fā)軟件,而是采用了Labwindows/CVI開發(fā)環(huán)境。這樣,在編程語言的選擇上,就選擇了基于VISA的SCPI編程。在進行程序調(diào)試的過程中,在讀D20系統(tǒng)對某一測試結(jié)果與預(yù)存數(shù)據(jù)的比較結(jié)果時,進程出錯,系統(tǒng)給出提示如圖1所示。

圖1:系統(tǒng)給出的出錯信息
繼續(xù)執(zhí)行,就發(fā)現(xiàn)D20的狀態(tài)已經(jīng)被鎖,程序?qū)x器失控,為了可以通過斷點調(diào)試來定位程序的錯誤所在,需要儀器復(fù)位后盡量恢復(fù)至故障前的狀態(tài)。
二、選擇解決方案
有幾種方案可供選擇。
一是在出現(xiàn)故障之后先硬件復(fù)位,然后修改程序代碼,重新執(zhí)行源程序。此方案首先是編程工作量大,難以實現(xiàn)對程序故障的定位,其次是對系統(tǒng)硬件設(shè)備的損耗比較大,所以沒有什么實際意義。
二是預(yù)先在源程序中加入多處錯誤陷阱代碼,在程序執(zhí)行的過程中,逐一排除假設(shè)的程序故障點。但是,預(yù)防問題并不能代表解決了問題,遇到?jīng)]有預(yù)料到的情況,錯誤陷阱也無能為力。
只有第三個方案簡單而切實可行,即綜合利用Visa Assistant和Labwindows/CVI兩個操作平臺,實現(xiàn)對系統(tǒng)的聯(lián)合調(diào)試。
Visa Assistant是HP公司為VXI Plug&Play設(shè)備提供的儀器驅(qū)動輔助開發(fā)系統(tǒng),隨虛擬儀器產(chǎn)品一同發(fā)售,主要目的是為了幫助用戶完成儀器硬件設(shè)備的安裝和驅(qū)動。由于系統(tǒng)可以通過與儀器之間的底層通訊完成對儀器的實時操作,所以從這個角度上說,Visa Assistant對儀器的操作運行機理與我們選擇的在Labwindows/CVI下基于Visa的SCPI編程是相同的,這就保證了兩者可以實現(xiàn)對儀器的聯(lián)合調(diào)試。而且由于引入了Visa Assiatant,即使在最惡劣的情況下也可以實現(xiàn)對系統(tǒng)的軟復(fù)位,減少了對系統(tǒng)的硬件損耗。
三、解決方案的實現(xiàn)
采用Visa Assistant和Labwindows/CVI進行聯(lián)合調(diào)試的具體操作方法如下。

圖2: Visa Assistant運行界面
首先,啟動Visa Assistant, 在完成了對硬件設(shè)備的檢測之后,界面如圖2所示。
在左邊的列表中列出了虛擬儀器設(shè)備的地址,例如D20系統(tǒng)的地址為“GPIB0::9::17::INSTR”,選中該地址,并選擇Formatted I/O標簽頁。在Instr.Lang.中選則IEEE 488.2,標簽頁狀態(tài)如圖3所示。

圖3:Formatted I/O標簽頁
我們可以在標簽頁下方的文本框中輸入SCPI命令,通過點擊viPrintf、viScanf和viQueryf按鈕來執(zhí)行對儀器的操作。

圖4:程序運行到斷點處
另一方面,在CVI源程序中設(shè)置斷點,執(zhí)行Run\Run project。程序運行到斷點處,如圖4 所示,程序暫停。

繼續(xù)執(zhí)行,當程序運行出錯儀器狀態(tài)被鎖時,切換到Visa Assistant,單擊*RES按鈕,對儀器進行軟復(fù)位,而后,可在文本框中輸入命令,恢復(fù)程序狀態(tài),程序運行情況將在標簽頁中顯示出來,如圖5所示。當然,此項操作也可以在程序正常運行到斷點的時候進行,來改變當前進程下儀器的狀態(tài)。
結(jié)束語
Visa Assistant和Labwindows/CVI原本是相互獨立的兩個系統(tǒng),利用它們都可以實現(xiàn)基于Visa的SCPI編程,實現(xiàn)對虛擬儀器的控制,如果把兩者有機地結(jié)合起來,就可以使我們的程序調(diào)試工作變的更加方便、靈活。開發(fā)研制虛擬儀器設(shè)備是儀器領(lǐng)域的發(fā)展趨勢,綜合利用目前已有的各種開發(fā)工具將有效地加快此類開發(fā)工作的進行。





