胡勝文 萬(wàn)加林
摘 要:針對(duì)LabVIEW8.6調(diào)用報(bào)表工具包生成的DLL過(guò)程中出現(xiàn)“NI_Word.lvclass”路徑無(wú)法找到的問(wèn)題,做了詳細(xì)描述和分析,并提供了相應(yīng)的解決方案。
關(guān)鍵詞:LabVIEW 8.6Word動(dòng)態(tài)鏈接庫(kù)報(bào)表工具包面向?qū)ο?/p>
中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2012)07(a)-0007-02
LabVIEW是美國(guó)國(guó)家儀器(NI)公司推出的專門(mén)用于虛擬儀器開(kāi)發(fā)的圖形化軟件編程平臺(tái),吸引了大批開(kāi)發(fā)者追隨,NI也根據(jù)市場(chǎng)需求每年推出一個(gè)新版本。但新技術(shù)的引用不可避免的也帶來(lái)了新的問(wèn)題和BUG,尤其是升級(jí)后,很多硬件驅(qū)動(dòng)不得不更新。LabVIEW 8.6版本是NI推出的所有版本中,大部分用戶公認(rèn)比較成熟穩(wěn)定的版本。
NI 報(bào)表工具包從1.1.3開(kāi)始采用面向?qū)ο蠹夹g(shù),重新設(shè)計(jì),1.1.3和1.1.4版本是專為L(zhǎng)abVIEW 8.6而定制使用的,而以前的版本如1.1.1、1.1.2(面向過(guò)程技術(shù))在LabVIEW 8.6下與自帶的Report函數(shù)不兼容。
1問(wèn)題描述
應(yīng)用開(kāi)發(fā)環(huán)境以及報(bào)表工具包版本:LabVIEW 8.6 + Report Generation Toolkit 1.1.3。
在LabVIEW 8.6新建工程項(xiàng)目文件,并按照?qǐng)D1和圖2建立相應(yīng)的VI和文件。
當(dāng)運(yùn)行main.vi或Main.exe時(shí),出現(xiàn)下面(圖3)報(bào)錯(cuò)框。
而單獨(dú)運(yùn)行1.vi或1.exe時(shí),卻能正常運(yùn)行。
2問(wèn)題分析
根據(jù)問(wèn)題報(bào)錯(cuò)框描述,問(wèn)題可能出現(xiàn)在“Get LV Class Default Value.vi”的上一層文件“Word class path.vi”傳遞出的NI_Word.lvclass路徑,圖4為報(bào)表工具包自帶的“Word class path.vi”程序框。
利用LabVIEW自帶診斷和調(diào)試工具,可獲得“Word class path”顯示的文件路徑,如表1所示。
(1)當(dāng)運(yùn)行main.vi時(shí),由于是“Develo- pment system”環(huán)境下,根據(jù)路徑的分離規(guī)則,“NI_Word.lvclass”文件路徑應(yīng)在當(dāng)前DLL文件的下層目錄,并且布爾量選擇為False,即“..1.dllword NI_Word.lvclass”。
(2)當(dāng)運(yùn)行main.exe時(shí),由于是在“Run Time system”環(huán)境下,布爾量的選擇為T(mén)rue,系統(tǒng)默認(rèn)“NI_Word.lvclass”是在“.. 1.dllNI_Word.lvclass”。
(3)當(dāng)運(yùn)行1.vi時(shí),由于是在“Develop- ment system”環(huán)境下,系統(tǒng)默認(rèn)“NI_Word.lvclass”是在安裝路徑下,而且在該路徑下可以找到此文件。
(4)當(dāng)運(yùn)行1.exe時(shí),由于是在“Run Time system”環(huán)境下,系統(tǒng)默認(rèn)“NI_Word.lvclass”是在當(dāng)前EXE文件的下層目錄,即“.. 1.exeNI_Word.lvclass”。
現(xiàn)根據(jù)以前NI在對(duì)exe生成過(guò)程的描述,是將所有vi都轉(zhuǎn)移到exe目錄[1],例如a.vi路徑為“c:a.vi”,當(dāng)生成exe時(shí),路徑變?yōu)椤癱:a.exea.vi”,這點(diǎn)也可以從運(yùn)行1.exe,“NI_Word.lvclass”的路徑可以看出。
由于DLL生成過(guò)程類似于exe,以及上述運(yùn)行結(jié)果分析,“NI_Word.lvclass”應(yīng)該是在1.dll目錄下,而在實(shí)際應(yīng)用中,在“..1.dll”或“..1.dllword”卻找不到該路徑。
如果在DLL的生成過(guò)程中,添加“NI_Word.lvclass”到“始終包括”中,需要注意的是,需在項(xiàng)目瀏覽器(工程項(xiàng)目)中手動(dòng)添加“NI_Word.lvclass”文件“…Nationalinstruments
LabVIEW8.6Vi.libutilityNIReport.llbWord”,重新生成DLL,運(yùn)行“main.vi”或“main.exe”失敗。
如果修改“Word class path.vi”,指定一個(gè)固定路徑給“NI_Word.lvclass”,如圖5所示,卻能夠正常運(yùn)行。
可見(jiàn)在生成DLL的過(guò)程中,并沒(méi)有將“NI_Word.lvclass”包含到DLL的目錄下。
3解決方案
3.1 版本降級(jí)使用
當(dāng)使用LabVIEW 8.5和Report Generation Toolkit 1.1.2以下版本時(shí),不存在此類問(wèn)題(升級(jí)為L(zhǎng)abVIEW 2010+Report Generation Toolkit 2010也存在此類問(wèn)題)。
3.2 指定“NI_Word.lvclass”為一固定路徑
(1)從安裝路徑復(fù)制“NI_Word.lvclass”到DLL生成路徑。
(2)修改“New Report.vi”中的“Word class path.vi”(圖7)。
3.3 改造函數(shù)庫(kù)和使用方法
(1)修改“New Report.vi”中的“Word class path.vi”,使得生成DLL時(shí)文件路徑不同,但同時(shí)不影響編輯狀態(tài)(Development system)和生成EXE狀態(tài)(Run Time system)下的文件路徑,如圖7所示。
(2)在項(xiàng)目瀏覽器(工程項(xiàng)目)中添加“NIReport.llb”(“…LabVIEW8.6Vi.libutilityNIReport.llb”)。
(3)在“源文件”目標(biāo)中,在“始終包括”添加NI_Word.lvclass、NI_Html.lvclass、NI_Report.lvclass、NI_Standard Report.lvclass,需要注意的是,如果1.vi作為某一個(gè)VI的子VI時(shí),并且該VI生成DLL時(shí),還需添加“Word class path.vi”。
(4)在“目標(biāo)”中,添加對(duì)應(yīng)的文件夾,命名要相同,如“NI_Word”,“右側(cè)類別”勾選llb,在目標(biāo)路徑中修改為“..dlldata NI_Word.dll”;其它類似。
(5)在“源文件設(shè)置”中,把四個(gè)lvclass文件設(shè)置為對(duì)應(yīng)的文件夾目標(biāo),如圖8所示。
需要進(jìn)一步說(shuō)明的是,如果生成的文件中有“NI_ReportGenerationToolkit”類似的文件夾,則在“附加排除項(xiàng)”中,勾選“斷開(kāi)連接自定義類型”。
4結(jié)語(yǔ)
(1)當(dāng)用到有關(guān)Excel的VI時(shí),也會(huì)存在此類問(wèn)題,只需按照對(duì)Word的處理方法即可(“Excel class path.vi”和“NI_excel.lvclass”)。
(2)在生成exe時(shí),如果想解決生成的exe目錄內(nèi)一大堆的VI和文件夾時(shí),可以采用類似的第三種方法。
(3)LabVIEW 2010+ Report Generation Toolkit 2010解決了生成的exe目錄內(nèi)一大堆的VI和文件夾問(wèn)題(但對(duì)DLL找不到路徑這個(gè)問(wèn)題還未解決)。對(duì)DLL問(wèn)題可以采取類似于上述的三種解決方案。
參考文獻(xiàn)
[1] 阮奇幀.我和LabVIEW:一個(gè)NI工程師的十年編程經(jīng)驗(yàn)[M].北京:北京航空航天大學(xué)出版社,2009.