国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

LabWindows/CVI儀器驅動程序的開發

發布時間:2010-9-16 10:08    發布者:techshare
關鍵詞: CVI , LabWindows , 驅動程序 , 儀器
1 引言  

在BC3192測試程序的開發過程中,最復雜的是儀器驅動程序的開發。同 VXI總線間進行的每一步聯系和操作,都少不了儀器驅動程序的幫助。  

用LabWindows/CVI(以下簡稱Labwin)軟件可以開發出儀器的驅動程序。這主要是因為Labwin具有一部分通用的儀器設備驅動庫。有了它們,用戶可以比較容易地開發出幾個系列的總線兼容設備驅動程序。如RS?232儀器驅動系列、 GPIB儀器驅動系列、VXI總線系列驅動程序,還有一些典型的特定驅動程序的實例,如Fluke45DigitalMultimeter(VISAI/O)(Fluke45數字型萬用表)、Hewlett Packard34401AMultimeter( VISA)(惠普34401A型萬用表)等。

一個典型的驅動程序由4部分組成。

第一部分是主程序,主要是由*.lib,*.obj,*.dll或*.c文件組成。
第二部分是包含文件(*.h),包括函數功能的定義,常量的聲明以及全局變量的聲明。
第三部分是設備功能面板部分(*.fp),包括樹狀功能信息定義。
第四部分是由ASCII碼構成的幫助文件(*.doc),它包括指導用戶的詳細驅動程序幫助。  

2 儀器驅動程序的操作  

對用戶來說,驅動程序完成一種或多種儀器功能,整個驅動程序庫由多組程序有選擇地構成。在Labwin的編程環境中選取儀器菜單,再從菜單中選取一個設備。這時將從屏幕中彈出一個功能面板,功能面板顯示儀器的一些交互控制。函數調用自動生成的功能也隨之加入整個應用程序。即使不提供功能面板,也能以手工方式進行驅動函數的調用。總地來說,設備驅動程序包括用以執行高級設備相關任務的功能函數。當用戶把功能函數包含到程序中后,即使不了解設備的編程協議,也可以控制一個儀器正常運轉。對它們的應用,可以在很大程度上減輕編程人員的負擔。它們可以在軟件開發中形成模塊化,并大大提高軟件的易用性和可維護性。  

3 LabWindows/CVI開發驅動程序的優勢  

Labwin中設備的驅動程序是比傳統概念中的驅動程序更高一層的概念。他們免去了編程人員頻繁地同I/O端口打交道。它是放入用戶應用程序的一種高層的軟件功能。它不僅完全適用于目前各種標準的儀器設備,而且可對一大批老的儀器設備提供支持。  

所有的Labwin應用的驅動程序,傳遞時在可能的情況下都伴有源碼,并且很多都有完整的幫助文件。它們都是在Labwin的標準開發環境下開發的,用戶可以根據具體情況改造自己的程序,使它們更加強大并對自己的應用程序有更大的彈性。  

開發儀器驅動程序包括外部接口模塊和內部設計模塊。  

3.1 外部接口模塊  

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




功能主體:設備驅動的代碼部分
程序員交互接口:圖形化的編程助手,把交互控件狀態轉化為代碼
程序員編程接口:調用各種函數
子程序接口:調用其它軟件模塊  

3.2 內部設計模塊  

內部設計模塊如圖2所示。



功能主體:設備驅動的代碼部分。包括初始化(包括結構復位、自檢等)、設置函數(用一個軟件程序集來實現相應功能。各種設備都有特定的設置函數。)、動作/狀態函數(動作函數使儀器開始和停止測試,狀態函數可獲得儀器操作當前和即將出現的狀態。)、數據函數(向儀器發送和接收數據)、終結函數(終結同儀器間的連接并釋放系統資源)、應用程序函數(高級面向測試和功能函數)。  

4 儀器驅動程序的設計

4.1 設計原則  

在設計之前,必須進行驅動程序結構的設計,因為如果驅動程序的結構比較明了,會使程序員設計應用程序時更有條理。  

其次,一定要把設計的驅動程序基于一個已設計好的核心驅動程序(即Labwin自帶的驅動程序庫)、或者是由一個核心驅動程序演化出來的驅動程序。  

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

4.2 設計步驟  

(1)命名這個驅動程序。  

(2)定義這個驅動程序的功能和類。  

(3)建立一個驅動程序的功能樹。在Labwin中的功能樹都以*.fp模式存儲,并在引用時以層次化形式出現,并且在各分支功能上加幫助信息。  

(4)對于程序中的每個函數:  

——對于函數的參數定義包括變量類型、變量范圍、錯誤代碼等相關信息;
——在功能面板上實現新功能的創建,包括對功能面板和其中各個控件的幫助信息;
——為執行功能函數寫代碼;
——檢驗代碼執行效果。  

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

4.3 兩個輔助工具介紹   

(1)功能樹的編輯器

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





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

4.4 自定義的數據類型  

控件的使用方法相當簡單,只需補充常說的可移植性問題,這一點同數據的定義是分不開的。Labwin對于驅動程序開發有自己專門的一套數據類型,它們可以精確地定義參數的類型和大小,而且它們具有很好的可移植性。各種定義如表1所示。  

表1各種定義   


4.5 函數定義的方法
  

驅動程序函數調用的返回值也與眾不同,VISA/IO(Labwin中的虛擬設備接口)定義了一種非常有用的調用設備函數時使用的宏,如表2所示。  

表2函數的定義  


因為沿用了在Pascal語言中調用在DLL程序驅動的習慣,當用戶在Labwin的環境調用用戶定義函數時,把宏_VI_FUNC(表示任何用戶函數)翻譯成_pascal,而使用外部編譯器編譯時,則把宏解釋成_far_pascal_export。同樣在Labwin中,_VI_FAR(表示用戶函數中任何的數組參數和輸出變量)被翻譯成空,而用其它編譯程序時,被翻譯成_far。  

如下面這個函數 :  

ViStatus _VI_FUNC tek2430a_read_waveform (ViSession instrSession,
ViReal64 _VI_FAR wvfm[],
ViReal64 _VI_FAR * xin,
ViReal64 _VI_FAR * trig_off);  

在 LabWindows/CVI環境時,表示為:  

ViStatus _pascal tek2430a_read_waveform (ViSession instrSession,
ViReal64 wvfm[],
ViReal64 * xin,
ViReal64 * trig_off);  

而在其它編譯環境下,表示為:  

ViStatus _far _pascal _export tek2430a_read_waveform (ViSession instrSession,
ViReal64 _far wvfm[],
ViReal64 _far * xin,
ViReal64 _far * trig_off);  

5 在BC3192測試程序中的應用實例  

VXI的設備驅動程序包括以下幾個主要功能。首先是分配設備的地址指針,這需要定義動態鏈接庫的代碼段和數據段為可移動和可刪除,因為要用基指針指向每一個I/O動作,所以代碼段和數據段是不定的;其次是VXI總線寄存器的寫入和讀取動作,這些操作需要我們使用剛得到的設備地址指針;再次是向緩存中讀取和寫入信息。另外,還有初始化,以及系統固定延遲時間等一系列功能。  

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

如下面代碼所示,正是使用了剛才所表示的函數調用方法。  

void FAR PASCAL __export __loadds ReadReg(UINT La, UINT Offset, UINT FAR * Data)
/* 這 是 用 于 讀 取 總 線 寄 存 器 的 函 數 。 * /
{
/* * Data=(UINT)(* (pPointer+ La* 32+ Offset/2)); * /
/* get the address pointer * /
GetPointer(La); /* 調用La全局變量取得寄存器地址*
/* read register * /
* Data=(UINT)(* (pPointer+ Offset/2)); / *把寄存器中的值通過偏移地址取出* /
/* free the selector * /
FreeSelector(wSelector);/*釋放在取寄存器的值時所用到的字選擇臨時變量。 * /
}

程序的調用要熟悉大量硬件的特性,不屬于軟件總體設計之列,在此不再介紹。  

6 結論  

LabWindows這種以C語言為中心的編程方式有其優勢,所帶的C語言的功能比較靈活,而又便于開發一些大型的工程。它的類庫的功能又可以開放地進行擴充,使系統的功能得到進一步增強。相對地,新型編程方式只能在固定的自帶環境中運行,而且在表達復雜關系時,流程圖的聯系方式有很大的局限性。所以,Labwindows的編程方式在一段時間內將仍然擁有其地位。而今后的發展很可能是把兩種編程方法進行集成,使我們在建立流程圖后可以生成大部分程序代碼,而細微的地方又可以進行C語言的調整。這樣,我們的編程人員將擁有更方便的編程工具。
本文地址:http://www.qingdxww.cn/thread-26993-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 安靜高效的電機控制——這才是正確的方向!
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美xxxxx视频在线 | 日本欧美一区二区 | 亚洲欧美另类专区 | 2021色噜噜狠狠综曰曰曰 | 国产精品久久1024 | 欧美久久久久久久一区二区三区 | 国产人成午夜免费噼啪视频 | 欧美成人三级网站 | 日本视频在线播放 | 欧美日韩精品一区二区三区不卡 | 精品国产一区二区三区免费看 | 九九色视频在线观看 | 亚洲国产欧美在线人网站 | 做羞羞的事情的免费视频 | 九九久久精品 | 中文字幕二区三区 | 亚洲三级网站 | 色婷婷导航| 国产做受视频激情播放 | 三级网站在线看 | 在线国产观看 | 农村寡妇一级毛片免费看视频 | 亚洲视频一区二区在线观看 | 久久久噜噜噜久久网 | 特级无码a级毛片特黄 | 一级毛片一级黄片 | 精品在线免费视频 | 亚洲国产精品影院 | 免费毛片儿 | 成人午夜视频免费看欧美 | 久久中文字幕不卡一二区 | 精品久久亚洲 | 国产全黄a一级毛片 | 二级毛片在线播放 | 成人99 | 亚洲国产成人综合精品2020 | 女人18毛片久久 | 久久精品草 | 国产日韩欧美swag在线观看 | 特黄色一级毛片 | 青草热在线精品视频99app |