楊 雪 田書林 李 力
摘 要:結合自研CPCI 422模塊,參照已經發布的IVI類驅動規范,探討422驅動函數的規劃方案。由于IVI有關422通信類儀器尚未制定類驅動規范,在此嘗試不借助NI公司提供的驅動向導開發422類驅動庫,制定一種較為簡單通用的422儀器類驅動規范,并針對自研模塊開發專用驅動庫,同時自己研制簡易的能代替NI公司配置引擎的程序,實現通過編輯配置文件鏈接類驅動和專用驅動,并且自動加載專用驅動庫的功能。該方法和規則對于其他虛擬儀器驅動程序的開發具有參考與推廣價值。
關鍵詞:CPCI 422;驅動設計;模塊互換;IVI規范
中圖分類號:TP311.11
0 引 言
可互換虛擬儀器(Interchangeable Virtual Instrument,IVI)驅動程序規范是由IVI基金會在VPP‐[1]基礎上為儀器驅動制定的編程接口規范。它擴展了VPP儀器驅動程序的標準,并增加了儀器的可互換性、仿真和狀態緩存等特點,從而實現不同型號儀器之間的互換,在測試系統硬件組成發生變化時,測試程序代碼可以重用。RS 422總線通常用于串行數據通信,采用平衡的差分數據傳輸方式,最大傳輸速率能達到10 Mb/s,最大傳輸距離為300 m。目前有關422的接口模塊種類很多,為了實現各種型號422模塊的互換,使用IVI標準進行驅動設計是很必要的。
1 IVI驅動程序的結構
IVI驅動程序體系結構主要包括IVI類驅動庫、IVI專用驅動庫、IVI引擎、IVI配置實用程序、IVI配置信息文件。其中,IVI 類驅動器是儀器的功能和屬性集,通過這些功能和屬性集實現對一種儀器類進行控制。它是一組接口函數,并不直接控制儀器工作。目前,已經發布了示波器、數字萬用表等8類儀器規范‐[2]。IVI專用驅動庫封裝了用于控制某一種儀器所需要的信息,能夠直接與儀器硬件通信。IVI 引擎主要完成狀態緩存、儀器屬性跟蹤、類驅動器到專用驅動器的映像功能,是實現 IVI 儀器驅動程序完成狀態緩存和其他增強性能的關鍵支持庫。IVI 配置實用程序用于配置儀器無關測試系統,創建和配置 IVI邏輯名稱,在測試程序中通過傳送邏輯名稱將操作映像到具體儀器驅動程序。具體IVI體系層次結構如圖1所示‐[3]。
[HT5”K][JZ]圖1 IVI體系結構[HT5]
目前,國內外只有NI公司,比較系統地提出了實現儀器互換的體系結構。該公司已經實現了8類儀器的IVI驅動開發,而且也提供一個名為“MAX”的IVI配置程序,用于配置儀器無關測試系統。同時也提供了一個專用驅動庫開發向導,用以開發專用驅動‐[4]。但該向導不能對已有驅動程序進行升級和IVI標準封裝,NI公司也沒有提供類驅動庫的開發向導,加上類驅動庫數量的局限性,導致部分模塊無法用NI公司提供的開發向導進行IVI驅動設計,比如文中所涉及的〤PCI 422基于IVI標準的驅動開發‐[5]。
2 CPCI 422驅動開發
在此,以自研CPCI 422模塊為例,介紹422驅動程序開發過程。CPCI 422模塊具有CPCI總線接口,能通過422總線發送數據,并且能接收被測設備通過422總線傳來的數據,并把數據傳送給上位機進行處理。該模塊具有8個通道,每個通道均能實現接收或者發送功能,通道能夠單獨工作也可一起工作,并且能對數據傳輸參數進行設置。
針對IVI體系結構,首先設計422類驅動函數庫。然后在類驅動函數庫基礎上開發專用驅動函數庫,驅動函數最后以.dll形式存在,采用 LabWindows/CVI,Visual Basic和 Visual C++等開發環境均可以開發。同時設計具備IVI引擎功能函數或者程序。對于IVI 配置信息文件可以通過專門的IVI配置實用軟件(如NI公司提供的MAX)或者其他文本編輯器進行編輯。
基于IVI標準的驅動程序配置引擎是整個IVI體系中的核心支柱。其主要功能就是實現類驅動庫到專用驅動庫的映射,使應用程序在調用類驅動庫時能自動加載相應配置的專用驅動庫。
該設計中,IVI配置引擎設計的主要思路是通過讀取配置信息文件,由配置文件中所設置的模塊邏輯名找到對應的專用驅動庫信息字段。此字段主要包括專用驅動庫路徑文件名、專用驅動庫函數前綴等,然后通過這些一一對應的映射關系,自動加載專用驅動庫。其工作流程如圖2所示。
該設計運用函數ivi422Class_SpecificDriver實現自動加載功能。下面為具體的函數設計:
該函數核心是以代表專用驅動庫文件名稱為形式參數,調用LoadLibrary( )函數加載專用驅動庫。應用程序只需通過類驅動庫及模塊的配置信息作為參數,調用ivi422Class_SpecificDrive()函數,即可實現專用驅動庫的自動加載。根據上面介紹可知,讀取配置文件以及根據配置文件自動加載專用驅動庫,即可實現配置引擎的功能。
類驅動庫是IVI體系的外觀框架,用來控制一個特定類型儀器的一系列功能和屬性。它是一組編程接口,而不對儀器進行直接操作。該設計中,為了實現422模塊的正常通信,作為連接虛擬儀器硬件和應用測試程序的紐帶,將422類驅動函數規劃如表1所示。序號函數功能描述
1Init打開并初始化儀器
2Close關閉儀器
3SerialRead開始接收數據
4SetClock設置每個通道波特率模式
5SetUART通道工作參數設置
6SetDivisor通道具體波特率設置
7ChannelControl設置每個通道的工作狀態
8SerialWriteData開始發送數據
9SpecificDriver動態加載專用驅動庫[HJ0][HJ][HT5SS]
根據IVI規范,類驅動函數由函數名前綴加具體函數名構成。在參數設置上均采用VISA數據類型。在該設計中,類驅動函數均采用ivi422Class作為函數前綴名。現舉例如下:
該函數的功能是提供儀器初始化函數接口,其中返回值定義為ViStatus型,具體表示形式,參照IVI標準,如IVI_SUCCESS。參數為ViSession型指針,用來返回儀器資源句柄。
根據前面介紹可知,類驅動函數只提供接口功能,不涉及具體儀器操作,現仍以初始化函數為例,介紹類驅動函數如何實現接口功能。其具體實現如下:
該函數的核心部分就是調用GetProcAddress(hDLL,FuncName)函數,獲取專用驅動庫函數對應函數地址。其中,hDLL為在配置引擎功能中調用ivi422Class_SpecificDriver()函數獲取的專用驅動庫句柄,FuncName為對應函數名稱。
對于專用驅動動態鏈接庫的開發,該設計未借助Labwindows/CVI中的專用驅動開發向導,而是直接在VC中進行編制。專用驅動庫函數的主體函數名和參數類型與類驅動是完全一致的,否則類驅動和專用驅動之間的參數傳遞會出錯‐[8]。為了與類驅動前綴名相區別,在該設計中,專用驅動函數前綴名一律為ivi422。舉例如下:
函數則具體針對儀器操作,完成模塊初始化功能。
對于上層應用程序,專用驅動函數隱藏了具體硬件工作細節,只以函數的形式提供了完成一項具體功能的接口。上層應用程序只需要通過類驅動庫間接調用專用驅動庫提供的函數,即可完成對硬件的操作控制。規劃表中已經列出了422操控的基本函數,如果需要再增加函數,只需要在類驅動的專用驅動中同時增加,便能實現功能擴展。
[BT3]2.3 CPCI 422模塊IVI驅動程序中配置文件編輯
對于IVI 配置信息文件,可以通過專門的IVI配置實用軟件(如NI公司提供的MAX)進行編輯。在該設計中,利用圖形化編程軟件自己設計以對話框為基礎的配置實用程序,通過此程序對配置文件進行編輯。圖3為此程序的主界面。
通過此程序,修改配置文件中的邏輯名字段、描述字段、驅動庫加載路徑字段,以及驅動函數前綴字段、仿真調試字段。然后通過配置引擎對于配置文件的讀操作,建立類驅動庫和專用驅動庫的正確映射。當改變模塊時,只需要改變模塊的邏輯名,以及模塊專用驅動庫的加載路徑和前綴,而不需要修改類驅動庫,也不會影響上層應用程序,從而實現了儀器的互換特性。
2.4 應用程序調用驅動工作流程
首先,應用程序通過一個邏輯名調用 IVI 類驅動庫,配置引擎,將該邏輯名與配置文件中的所有邏輯名進行匹配,得到實際的 IVI專用驅動庫指針,并實現該驅動器的動態加載;然后將 IVI 類驅動器中的函數和屬性與IVI 類專用驅動器的對應函數和屬性進行鏈接,使應用程序可以間接地訪問這些函數和屬性。在編制應用程序時,應同時包含類驅動庫的動態鏈接庫和頭文件,編制過程中,對開發人員只需調用類驅動函數。┩4為應用IVI體系基于422模塊的應用程序調用驅動工作流程。
3 結 語
在上述基于IVI規范的CPCI_422驅動程序設計的基礎上,討論了基于IVI標準的驅動體系結構,并且給出結合自研CPCI 422模塊的IVI驅動庫開發方法。重點討論了類驅動庫以及配置引擎的設計方案。目前,基于該驅動庫的應用程序已經研制成功,能夠通過類驅動庫提供的函數接口對各種CPCI 422模塊進行操作控制。隨著儀器設備標準化的推廣,以及虛擬儀器測試技