當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]LabWindows/CVI儀器驅(qū)動(dòng)程序的開發(fā)

1引言

在BC3192測(cè)試程序的開發(fā)過程中,最復(fù)雜的是儀器驅(qū)動(dòng)程序的開發(fā)。同VXI總線間進(jìn)行的每一步聯(lián)系和操作,都少不了儀器驅(qū)動(dòng)程序的幫助。

用Labwindows/CVI(以下簡稱Labwin)軟件可以開發(fā)出儀器的驅(qū)動(dòng)程序。這主要是因?yàn)長abwin具有一部分通用的儀器設(shè)備驅(qū)動(dòng)庫。有了它們,用戶可以比較容易地開發(fā)出幾個(gè)系列的總線兼容設(shè)備驅(qū)動(dòng)程序。如RS?232儀器驅(qū)動(dòng)系列、GPIB儀器驅(qū)動(dòng)系列、VXI總線系列驅(qū)動(dòng)程序,還有一些典型的特定驅(qū)動(dòng)程序的實(shí)例,如Fluke45Digital Multimeter(VISAI/O)(Fluke45數(shù)字型萬用表)、Hewlett?Packard34401AMultimeter(VISA)(惠普34401A型萬用表)等。

一個(gè)典型的驅(qū)動(dòng)程序由4部分組成。

第一部分是主程序,主要是由*.lib,*.obj,*.dll或*.c文件組成。

第二部分是包含文件(*.h),包括函數(shù)功能的定義,常量的聲明以及全局變量的聲明。

第三部分是設(shè)備功能面板部分(*.fp),包括樹狀功能信息定義。

第四部分是由ASCII碼構(gòu)成的幫助文件(*.doc),它包括指導(dǎo)用戶的詳細(xì)驅(qū)動(dòng)程序幫助。

2儀器驅(qū)動(dòng)程序的操作

對(duì)用戶來說,驅(qū)動(dòng)程序完成一種或多種儀器功能,整個(gè)驅(qū)動(dòng)程序庫由多組程序有選擇地構(gòu)成。在Labwin的編程環(huán)境中選取儀器菜單,再從菜單中選取一個(gè)設(shè)備。這時(shí)將從屏幕中彈出一個(gè)功能面板,功能面板顯示儀器的一些交互控制。函數(shù)調(diào)用自動(dòng)生成的功能也隨之加入整個(gè)應(yīng)用程序。即使不提供功能面板,也能以手工方式進(jìn)行驅(qū)動(dòng)函數(shù)的調(diào)用??偟貋碚f,設(shè)備驅(qū)動(dòng)程序包括用以執(zhí)行高級(jí)設(shè)備相關(guān)任務(wù)的功能函數(shù)。當(dāng)用戶把功能函數(shù)包含到程序中后,即使不了解設(shè)備的編程協(xié)議,也可以控制一個(gè)儀器正常運(yùn)轉(zhuǎn)。對(duì)它們的應(yīng)用,可以在很大程度上減輕編程人員的負(fù)擔(dān)。它們可以在軟件開發(fā)中形成模塊化,并大大提高軟件的易用性和可維護(hù)性。

3LabWindows/CVI開發(fā)驅(qū)動(dòng)程序的優(yōu)勢(shì)

Labwin中設(shè)備的驅(qū)動(dòng)程序是比傳統(tǒng)概念中的驅(qū)動(dòng)程序更高一層的概念。他們免去了編程人員頻繁地同I/O端口打交道。它是放入用戶應(yīng)用程序的一種高層的軟件功能。它不僅完全適用于目前各種標(biāo)準(zhǔn)的儀器設(shè)備,而且可對(duì)一大批老的儀器設(shè)備提供支持。

所有的Labwin應(yīng)用的驅(qū)動(dòng)程序,傳遞時(shí)在可能的情況下都伴有源碼,并且很多都有完整的幫助文件。它們都是在Labwin的標(biāo)準(zhǔn)開發(fā)環(huán)境下開發(fā)的,用戶可以根據(jù)具體情況改造自己的程序,使它們更加強(qiáng)大并對(duì)自己的應(yīng)用程序有更大的彈性。

開發(fā)儀器驅(qū)動(dòng)程序包括外部接口模塊和內(nèi)部設(shè)計(jì)模塊。

3.1外部接口模塊

外部接口模塊如圖1所示。

功能主體:設(shè)備驅(qū)動(dòng)的代碼部分

程序員交互接口:圖形化的編程助手,把交互控件狀態(tài)轉(zhuǎn)化為代碼

程序員編程接口:調(diào)用各種函數(shù)

子程序接口:調(diào)用其它軟件模塊

3.2內(nèi)部設(shè)計(jì)模塊

內(nèi)部設(shè)計(jì)模塊如圖2所示。

功能主體:設(shè)備驅(qū)動(dòng)的代碼部分。包括初始化(包括結(jié)構(gòu)復(fù)位、自檢等)、設(shè)置函數(shù)(用一個(gè)軟件程序集來實(shí)現(xiàn)相應(yīng)功能。各種設(shè)備都有特定的設(shè)置函數(shù)。)、動(dòng)作/狀態(tài)函數(shù)(動(dòng)作函數(shù)使儀器開始和停止測(cè)試,狀態(tài)函數(shù)可獲得儀器操作當(dāng)前和即將出現(xiàn)的狀態(tài)。)、數(shù)據(jù)函數(shù)(向儀器發(fā)送和接收數(shù)據(jù))、終結(jié)函數(shù)(終結(jié)同儀器間的連接并釋放系統(tǒng)資源)、應(yīng)用程序函數(shù)(高級(jí)面向測(cè)試和功能函數(shù))。

4儀器驅(qū)動(dòng)程序的設(shè)計(jì)

4.1設(shè)計(jì)原則

在設(shè)計(jì)之前,必須進(jìn)行驅(qū)動(dòng)程序結(jié)構(gòu)的設(shè)計(jì),因?yàn)槿绻?qū)動(dòng)程序的結(jié)構(gòu)比較明了,會(huì)使程序員設(shè)計(jì)應(yīng)用程序時(shí)更有條理。

其次,一定要把設(shè)計(jì)的驅(qū)動(dòng)程序基于一個(gè)已設(shè)計(jì)好的核心驅(qū)動(dòng)程序(即Labwin自帶的驅(qū)動(dòng)程序庫)、或者是由一個(gè)核心驅(qū)動(dòng)程序演化出來的驅(qū)動(dòng)程序。

最后,以一個(gè)明確的步驟來編寫你的儀器驅(qū)動(dòng)程序(將在后面介紹)。

4.2設(shè)計(jì)步驟

(1)命名這個(gè)驅(qū)動(dòng)程序。

(2)定義這個(gè)驅(qū)動(dòng)程序的功能和類。

(3)建立一個(gè)驅(qū)動(dòng)程序的功能樹。在Labwin中的功能樹都以*.fp模式存儲(chǔ),并在引用時(shí)以層次化形式出現(xiàn),并且在各分支功能上加幫助信息。

(4)對(duì)于程序中的每個(gè)函數(shù):

——對(duì)于函數(shù)的參數(shù)定義包括變量類型、變量范圍、錯(cuò)誤代碼等相關(guān)信息;

——在功能面板上實(shí)現(xiàn)新功能的創(chuàng)建,包括對(duì)功能面板和其中各個(gè)控件的幫助信息;

——為執(zhí)行功能函數(shù)寫代碼;

——檢驗(yàn)代碼執(zhí)行效果。

(5)為最終的設(shè)備源程序創(chuàng)建包含文件,包括函數(shù)定義和常量聲明。

4.3兩個(gè)輔助工具介紹

(1)功能樹的編輯器

用圖3所示的是功能樹編輯器,可以靈活地添加和刪除各種函數(shù),可從各個(gè)分支進(jìn)入具體的函數(shù)定義功能面板編輯器。

圖4所示的功能面板編輯器,可以控件的形式描述諸如函數(shù)參數(shù)、返回值、參考說明等函數(shù)的相關(guān)信息。隨著各種控件的加入,相應(yīng)的源代碼也被實(shí)時(shí)地翻譯在面板下方的文本框中。

4.4自定義的數(shù)據(jù)類型

控件的使用方法相當(dāng)簡單,只需補(bǔ)充常說的可移植性問題,這一點(diǎn)同數(shù)據(jù)的定義是分不開的。Labwin對(duì)于驅(qū)動(dòng)程序開發(fā)有自己專門的一套數(shù)據(jù)類型,它們可以精確地定義參數(shù)的類型和大小,而且它們具有很好的可移植性。各種定義如表1所示。

表1各種定義

4.5函數(shù)定義的方法驅(qū)動(dòng)程序函數(shù)調(diào)用的返回值也與眾不同,VISA/IO(Labwin中的虛擬設(shè)備接口)定義了一種非常有用的調(diào)用設(shè)備函數(shù)時(shí)使用的宏,如表2所示。[!--empirenews.page--]

因?yàn)檠赜昧嗽赑ascal語言中調(diào)用在DLL程序驅(qū)動(dòng)的習(xí)慣,當(dāng)用戶在Labwin的環(huán)境調(diào)用用戶定義函數(shù)時(shí),把宏_VI_FUNC(表示任何用戶函數(shù))翻譯成_pascal,而使用外部編譯器編譯時(shí),則把宏解釋成_far_pascal_export。同樣在Labwin中,_VI_FAR(表示用戶函數(shù)中任何的數(shù)組參數(shù)和輸出變量)被翻譯成空,而用其它編譯程序時(shí),被翻譯成_far。

如下面這個(gè)函數(shù):

ViStatus_VI_FUNCtek2430a_read_waveform(ViSessioninstrSession,

ViReal64_VI_FARwvfm[],

ViReal64_VI_FAR*xin,

ViReal64_VI_FAR*trig_off);

LabWindows/CVI環(huán)境時(shí),表示為:

ViStatus_pascaltek2430a_read_waveform(ViSessioninstrSession,

ViReal64wvfm[],

ViReal64*xin,

ViReal64*trig_off);

而在其它編譯環(huán)境下,表示為:

ViStatus_far_pascal_exporttek2430a_read_waveform(ViSessioninstrSession,

ViReal64_farwvfm[],

ViReal64_far*xin,

ViReal64_far*trig_off);

5在BC3192測(cè)試程序中的應(yīng)用實(shí)例

VXI的設(shè)備驅(qū)動(dòng)程序包括以下幾個(gè)主要功能。首先是分配設(shè)備的地址指針,這需要定義動(dòng)態(tài)鏈接庫的代碼段和數(shù)據(jù)段為可移動(dòng)和可刪除,因?yàn)橐没羔樦赶蛎恳粋€(gè)I/O動(dòng)作,所以代碼段和數(shù)據(jù)段是不定的;其次是VXI總線寄存器的寫入和讀取動(dòng)作,這些操作需要我們使用剛得到的設(shè)備地址指針;再次是向緩存中讀取和寫入信息。另外,還有初始化,以及系統(tǒng)固定延遲時(shí)間等一系列功能。

在BC3192的測(cè)試程序中,結(jié)合Labwin自帶的VXI總線的設(shè)備驅(qū)動(dòng)程序,編寫了一個(gè)簡單的VXI驅(qū)動(dòng)程序。它存于程序的根目錄中,有4個(gè)支持文件,分別是vxirw.c、vxirw.dll、vxirw.h以及vxirw.lib。在我們的程序中,由于考慮到工作的效率,決定使用在VisualC++1.5的編譯環(huán)境下,編譯vxirw.c和vxirw.h程序,生成vxirw.dll及vxirw.lib的高效方法。這是由于Labwin使用一種LCC內(nèi)建解釋器對(duì)程序進(jìn)行解釋,其效率遠(yuǎn)不如直接使用動(dòng)態(tài)鏈接庫方便。用VC編譯器編譯的動(dòng)態(tài)鏈接文件,可以在Labwin的函數(shù)中方便地進(jìn)行調(diào)用。而且其效率同VC自身的調(diào)用不相上下。

如下面代碼所示,正是使用了剛才所表示的函數(shù)調(diào)用方法。

voidFARPASCAL__export__loaddsReadReg(UINTLa,UINTOffset,UINTFAR*Data)

/*這是用于讀取總線寄存器的函數(shù)。*/

{

/**Data=(UINT)(*(pPointer+La*32+Offset/2));*/

/*gettheaddresspointer*/

GetPointer(La);/*調(diào)用La全局變量取得寄存器地址*

/*readregister*/

*Data=(UINT)(*(pPointer+Offset/2));/*把寄存器中的值通過偏移地址取出*/

/*freetheselector*/

FreeSelector(wSelector);/*釋放在取寄存器的值時(shí)所用到的字選擇臨時(shí)變量。*/

}

程序的調(diào)用要熟悉大量硬件的特性,不屬于軟件總體設(shè)計(jì)之列,在此不再介紹。

6結(jié)論

Labwindows這種以C語言為中心的編程方式有其優(yōu)勢(shì),所帶的C語言的功能比較靈活,而又便于開發(fā)一些大型的工程。它的類庫的功能又可以開放地進(jìn)行擴(kuò)充,使系統(tǒng)的功能得到進(jìn)一步增強(qiáng)。相對(duì)地,新型編程方式只能在固定的自帶環(huán)境中運(yùn)行,而且在表達(dá)復(fù)雜關(guān)系時(shí),流程圖的聯(lián)系方式有很大的局限性。所以,Labwindows的編程方式在一段時(shí)間內(nèi)將仍然擁有其地位。而今后的發(fā)展很可能是把兩種編程方法進(jìn)行集成,使我們?cè)诮⒘鞒虉D后可以生成大部分程序代碼,而細(xì)微的地方又可以進(jìn)行C語言的調(diào)整。這樣,我們的編程人員將擁有更方便的編程工具。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉