技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于PCI總線運(yùn)動(dòng)控制卡WDM驅(qū)動(dòng)程序設(shè)計(jì)

基于PCI總線運(yùn)動(dòng)控制卡WDM驅(qū)動(dòng)程序設(shè)計(jì)

時(shí)間:2008-07-22 09:57:00來(lái)源:yangliu

導(dǎo)語(yǔ):?本文給出了一種使用DriverStudio設(shè)計(jì)WDM驅(qū)動(dòng)程序的方法,用以實(shí)現(xiàn)數(shù)控系統(tǒng)應(yīng)用程序?qū)\(yùn)動(dòng)控制卡的訪問(wèn)
摘 要: 本文給出了一種使用DriverStudio設(shè)計(jì)WDM驅(qū)動(dòng)程序的方法,用以實(shí)現(xiàn)數(shù)控系統(tǒng)應(yīng)用程序?qū)\(yùn)動(dòng)控制卡的訪問(wèn)。文中以基于PCI總線的運(yùn)動(dòng)控制卡為對(duì)象,在構(gòu)架其硬件結(jié)構(gòu)的基礎(chǔ)上,闡述了設(shè)計(jì)WDM驅(qū)動(dòng)程序的主要步驟,開(kāi)發(fā)了WDM驅(qū)動(dòng)程序,在Windows環(huán)境下進(jìn)行測(cè)試,達(dá)到了預(yù)期目的。 關(guān)鍵詞:WDM; PCI; DriverStudio 0 引言   目前,開(kāi)放式數(shù)控系統(tǒng)正得到日益廣泛的應(yīng)用,其中,基于Windows和PC機(jī)的開(kāi)放式數(shù)控系統(tǒng)將成為數(shù)控技術(shù)發(fā)展的趨勢(shì)。本文研究的數(shù)控系統(tǒng)采用NC嵌入PC的開(kāi)放式結(jié)構(gòu),并以Windows 2000操作系統(tǒng)為平臺(tái)。NC嵌入PC型數(shù)控系統(tǒng)是指將運(yùn)動(dòng)控制卡插入計(jì)算機(jī)的擴(kuò)展槽中,由PC機(jī)完成非實(shí)時(shí)性處理任務(wù),實(shí)時(shí)控制則由運(yùn)動(dòng)控制卡來(lái)承擔(dān)。由于在Windows環(huán)境下,用戶態(tài)的應(yīng)用程序不能直接訪問(wèn)硬件,而要通過(guò)調(diào)用執(zhí)行于核心態(tài)的設(shè)備驅(qū)動(dòng)程序間接地訪問(wèn)硬件資源,因而,應(yīng)用程序要對(duì)該數(shù)控系統(tǒng)中的運(yùn)動(dòng)控制卡進(jìn)行訪問(wèn),必須為其開(kāi)發(fā)設(shè)備驅(qū)動(dòng)程序。   本文以該數(shù)控系統(tǒng)中基于PCI總線的DSP運(yùn)動(dòng)控制卡為研究對(duì)象,主要討論該運(yùn)動(dòng)控制卡在Windows 2000環(huán)境下的WDM驅(qū)動(dòng)程序的設(shè)計(jì)。 1 WDM驅(qū)動(dòng)程序的結(jié)構(gòu)及開(kāi)發(fā)工具簡(jiǎn)介   1.1 WDM驅(qū)動(dòng)程序的結(jié)構(gòu)   Windows Driver Model (WDM)驅(qū)動(dòng)程序是一種PnP(即插即用)驅(qū)動(dòng)程序,它同時(shí)還遵循電源管理協(xié)議,并能在Windows 98,Windows 2000和Windows XP間實(shí)現(xiàn)源代碼級(jí)兼容。在WDM驅(qū)動(dòng)程序模型中,每個(gè)硬件設(shè)備至少有兩個(gè)驅(qū)動(dòng)程序。其中一個(gè)驅(qū)動(dòng)程序稱為功能驅(qū)動(dòng)程序,負(fù)責(zé)初始化I/O操作,處理I/O操作完成時(shí)帶來(lái)的中斷事件,并為用戶提供一種連接設(shè)備的控制方式;另一驅(qū)動(dòng)程序稱為總線驅(qū)動(dòng)程序,它負(fù)責(zé)管理硬件與計(jì)算機(jī)連接[1]。   WDM驅(qū)動(dòng)程序采用分層的結(jié)構(gòu)模型,如圖1所示[2]。圖1中左邊是一個(gè)設(shè)備對(duì)象堆棧,設(shè)備對(duì)象是操作系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。處于堆棧最底層的設(shè)備對(duì)象稱為物理設(shè)備對(duì)象,簡(jiǎn)稱為PDO。在設(shè)備對(duì)象堆棧的中間有一個(gè)對(duì)象稱為功能設(shè)備對(duì)象,簡(jiǎn)稱為FDO。在FDO的上面和下面還會(huì)有一些過(guò)濾器設(shè)備對(duì)象,簡(jiǎn)稱為FiDO。位于FDO上面的過(guò)濾器設(shè)備對(duì)象稱為上層過(guò)濾器,位于FDO下面的過(guò)濾器設(shè)備對(duì)象稱為下層過(guò)濾器。在單個(gè)硬件的驅(qū)動(dòng)程序堆棧中,總線驅(qū)動(dòng)程序管理計(jì)算機(jī)與PDO所代表的設(shè)備的連接。功能驅(qū)動(dòng)程序管理FDO所代表的設(shè)備。過(guò)濾器驅(qū)動(dòng)程序用于監(jiān)視和修改I/O請(qǐng)求包(IRP)流。 [align=center] 圖1 WDM設(shè)備對(duì)象和驅(qū)動(dòng)程序的層次結(jié)構(gòu)[/align]   1.2 開(kāi)發(fā)工具簡(jiǎn)介   開(kāi)發(fā)驅(qū)動(dòng)程序的軟件很多,如NuMega公司的DriverStudio、Jungo公司的WinDriver和Microsoft公司的DDK等。在使用中,雖然利用DDK開(kāi)發(fā)的驅(qū)動(dòng)程序代碼非常簡(jiǎn)潔,結(jié)構(gòu)清晰,效率也高,但是開(kāi)發(fā)難度較大[3]。利用DriverStudio、WinDriver等第三方開(kāi)發(fā)工具則使用簡(jiǎn)單,開(kāi)發(fā)速度較快。因此選用NuMega公司提供的DriverStudio作為開(kāi)發(fā)工具。   NuMega公司的DriverStudio是一套用來(lái)簡(jiǎn)化微軟Windows平臺(tái)下設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)、調(diào)試和測(cè)試的工具包。DriverStudio包括DriverWorks、DriverNetworks、SoftICE和VToolsD等工具模塊。其中,DriverWorks包含一個(gè)非常完善的源代碼生成工具(DriverWizard)以及相應(yīng)的類庫(kù)和驅(qū)動(dòng)程序樣本,它提供了在C++下進(jìn)行設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)的支持。 2 運(yùn)動(dòng)控制卡的硬件結(jié)構(gòu)   所設(shè)計(jì)的運(yùn)動(dòng)控制卡采用TI公司的TMS320LF2407 DSP芯片為核心處理器。該運(yùn)動(dòng)控制卡的硬件系統(tǒng)包括PCI接口子模塊、數(shù)字信號(hào)處理器(DSP)子模塊和軸控制接口子模塊。   該運(yùn)動(dòng)控制卡的PCI接口采用PLX公司的PCI9052接口芯片,這是PLX技術(shù)公司為擴(kuò)展適配板卡推出的能提供一種混合高性能PCI總線目標(biāo)模式的接口芯片。它可與多種局部總線相連,并具有異步操作、中斷產(chǎn)生器、FIFO等特點(diǎn)。運(yùn)動(dòng)控制卡與上位PC機(jī)通過(guò)PCI總線進(jìn)行連接,PCI接口子模塊通過(guò)雙端口存儲(chǔ)器RAM器件IDT7026與DSP子模塊連接。雙端口存儲(chǔ)器(RAM)是一個(gè)雙向FIFO數(shù)據(jù)存儲(chǔ)器,起數(shù)據(jù)緩沖的作用。軸控制接口子模塊則通過(guò)CPLD(復(fù)雜可編程邏輯器件)與DSP子模塊連接。運(yùn)動(dòng)控制卡硬件結(jié)構(gòu)示意圖如圖2所示[4]。 [align=center] 圖2 運(yùn)動(dòng)控制卡硬件結(jié)構(gòu)示意圖[/align] 3 運(yùn)動(dòng)控制卡驅(qū)動(dòng)程序的設(shè)計(jì)   使用DriverWorks為該運(yùn)動(dòng)控制卡開(kāi)發(fā)WDM驅(qū)動(dòng)程序主要有三個(gè)步驟:創(chuàng)建WDM驅(qū)動(dòng)程序框架;實(shí)現(xiàn)驅(qū)動(dòng)程序的具體功能;生成WDM驅(qū)動(dòng)程序。下面是借助DriverWorks設(shè)計(jì)運(yùn)動(dòng)控制卡WDM驅(qū)動(dòng)程序的具體方法。   3.1 使用DriverWizard生成WDM驅(qū)動(dòng)程序框架   DriverWizard是DriverWorks創(chuàng)建WDM框架程序的工具。在創(chuàng)建一個(gè)PCI設(shè)備的WDM驅(qū)動(dòng)程序框架時(shí),共有十一步,其中以下幾點(diǎn)需特別注意:  ?。?)第四步:選擇硬件設(shè)備所支持的總線類型,這里選PCI,并根據(jù)具體硬件填寫PCI Vendor ID、PCI Device ID、PCI Subsystem ID和PCI Revision ID。這些參數(shù)可以從硬件生產(chǎn)廠家得到,如果所填寫的參數(shù)和目標(biāo)PCI設(shè)備寄存器中不一致的話系統(tǒng)將安裝不上此驅(qū)動(dòng)程序。   (2)第六步:選擇驅(qū)動(dòng)程序支持的功能項(xiàng),選中Read、Write、Device IO Control和Clean up四個(gè)復(fù)選框。  ?。?)第七步:選擇I/O請(qǐng)求IRP處理的方式,選擇DriverManaged,由驅(qū)動(dòng)程序管理的StartIO處理排隊(duì)隊(duì)列,并選擇讀寫請(qǐng)求分別進(jìn)行排隊(duì)隊(duì)列處理。  ?。?) 第九步:選擇設(shè)備文件中的類名和接口類型,類名通常取默認(rèn)值,選擇GUID接口方式作為應(yīng)用程序打開(kāi)設(shè)備的方式。在資源欄中分別點(diǎn)擊Add IO Port (s)、Add Memory Range. . .和Add IRQ. . .聲明所需的資源。  ?。?) 第十一步:為了調(diào)試方便和更好地了解WDM驅(qū)動(dòng)程序的運(yùn)行過(guò)程,選擇讓系統(tǒng)生成控制臺(tái)測(cè)試程序和用SoftICE調(diào)試的跟蹤代碼 (Trace Code)。   至此,驅(qū)動(dòng)程序框架已形成。DriverWizard生成了兩個(gè)類:一個(gè)是驅(qū)動(dòng)程序文件中的類,主要完成WDM的DriverEntry和AddDevice例程;另一個(gè)是設(shè)備文件中的類,主要完成與硬件交互的例程。   3.2 驅(qū)動(dòng)程序功能的實(shí)現(xiàn)   DriverWizard創(chuàng)建的WDM驅(qū)動(dòng)程序框架中包含了很多例程。這些例程可分為兩種:必需的基本例程和根據(jù)需要可選擇的擴(kuò)展例程。根據(jù)需要修改相應(yīng)的例程即可實(shí)現(xiàn)該運(yùn)動(dòng)控制卡驅(qū)動(dòng)程序的具體功能。   3.2.1初始化驅(qū)動(dòng)程序——DriverEntry例程   DriverEntry例程負(fù)責(zé)驅(qū)動(dòng)程序的初始化,所有的驅(qū)動(dòng)程序都必須包含DriverEntry例程。當(dāng)裝載驅(qū)動(dòng)程序時(shí),PnP管理器為每個(gè)驅(qū)動(dòng)程序調(diào)用一次DriverEntry例程。DriverEntry用以初始化驅(qū)動(dòng)程序范圍的數(shù)據(jù)結(jié)構(gòu)和資源。   DriverEntry例程主要有以下三個(gè)功能:  ?。?) 設(shè)置AddDevice、Unload、Dispatch和其他例程的入口指針  ?。?) 可以從注冊(cè)表中獲取一些必要的信息以初始化驅(qū)動(dòng)程序   (3) 初始化其他的在驅(qū)動(dòng)程序范圍內(nèi)的數(shù)據(jù)結(jié)構(gòu)和資源   3.2.2 串行讀例程——SerialRead例程   在該驅(qū)動(dòng)程序中,對(duì)IRP進(jìn)行串行處理采用的是由驅(qū)動(dòng)程序管理的IRP隊(duì)列。當(dāng)硬件設(shè)備處于忙狀態(tài)時(shí),將IRP排隊(duì);當(dāng)硬件設(shè)備處于空閑狀態(tài)時(shí),將排隊(duì)的IRP取出處理。SerialRead例程是擴(kuò)展例程,向SerialRead例程中添加功能代碼就可以實(shí)現(xiàn)PC機(jī)對(duì)運(yùn)動(dòng)控制卡的串行讀操作,應(yīng)用程序可以通過(guò)該WDM驅(qū)動(dòng)程序讀取雙端口RAM中的數(shù)據(jù)及參數(shù)。   3.2.4 串行寫例程——SerialWrite例程   在該驅(qū)動(dòng)程序中,要實(shí)現(xiàn)PC機(jī)對(duì)運(yùn)動(dòng)控制卡的串行寫,需要使用SerialWrite例程。串行寫操作主要負(fù)責(zé)處理運(yùn)動(dòng)函數(shù)原型的解讀,并將解讀后的指令寫入雙端口RAM中。   3.3 生成WDM驅(qū)動(dòng)程序   設(shè)計(jì)完成后的WDM驅(qū)動(dòng)程序?qū)⑸梢粋€(gè)工作區(qū) (Workspace)和兩個(gè)工程 (Project),生成的工作區(qū)包括了驅(qū)動(dòng)程序工程和應(yīng)用程序工程。分別選擇兩個(gè)工程,并分別將其設(shè)置成為當(dāng)前活動(dòng)工程,用Visual C++6.0對(duì)其進(jìn)行編譯。對(duì)于驅(qū)動(dòng)程序的編譯,不用進(jìn)行任何設(shè)置,單擊Build圖標(biāo)即可生成后綴名為.sys的驅(qū)動(dòng)程序文件。 4 運(yùn)動(dòng)控制卡驅(qū)動(dòng)程序的安裝與應(yīng)用   生成后綴名為.sys的驅(qū)動(dòng)程序后,安裝之前,首先要修改INF文件,然后將其拷貝到“. .\sys\objchk\i386”目錄下。修改INF文件只要將文件雙引號(hào)中的提示改為相應(yīng)的內(nèi)容即可生成設(shè)備信息文件。對(duì)該驅(qū)動(dòng)程序的INF文件作如下修改:   [Strings]   ProviderName =“數(shù)控研究中心” //公司名稱   MfgName =“華南理工大學(xué)機(jī)械與工程學(xué)院” //硬件制造商名稱   DeviceDesc =“高級(jí)運(yùn)動(dòng)控制卡V3.2” //設(shè)備描述   DeviceClassName =“高級(jí)運(yùn)動(dòng)控制” //設(shè)備類描述   SvcDesc="運(yùn)動(dòng)控制" //服務(wù)描述   使用控制面板中的添加新硬件來(lái)搜索新硬件,根據(jù)提示指定INF文件和編譯后生成的.sys驅(qū)動(dòng)程序文件,系統(tǒng)就可以自動(dòng)安裝新硬件的驅(qū)動(dòng)程序。   驅(qū)動(dòng)程序安裝好之后,在Windows 2000環(huán)境下對(duì)運(yùn)動(dòng)控制卡及其設(shè)備驅(qū)動(dòng)程序進(jìn)行實(shí)際測(cè)試[4]。測(cè)試結(jié)果表明,此設(shè)備驅(qū)動(dòng)程序能使運(yùn)動(dòng)控制卡在Windows 2000環(huán)境穩(wěn)定工作,并能對(duì)多軸的運(yùn)動(dòng)位置和速度進(jìn)行準(zhǔn)確控制。同時(shí),將該驅(qū)動(dòng)程序移植到Windows 98/XP系統(tǒng)中,也能驅(qū)動(dòng)運(yùn)動(dòng)控制卡正常工作。 5 結(jié)束語(yǔ)   傳統(tǒng)的驅(qū)動(dòng)程序都是用DDK開(kāi)發(fā),開(kāi)發(fā)效率不高。本文以基于PCI總線的運(yùn)動(dòng)控制卡為研究對(duì)象,以DriverWorks為工具,方便快捷地設(shè)計(jì)完成了設(shè)備驅(qū)動(dòng)程序。在Windows環(huán)境下對(duì)運(yùn)動(dòng)控制卡及其驅(qū)動(dòng)程序進(jìn)行測(cè)試,結(jié)果表明,此驅(qū)動(dòng)程序能使該運(yùn)動(dòng)控制卡在Windows環(huán)境下穩(wěn)定工作。實(shí)質(zhì)上,驅(qū)動(dòng)程序仍滿足DDK對(duì)WDM的要求,調(diào)用的仍是DDK所提供的基本函數(shù)。利用DriverStudio對(duì)數(shù)控系統(tǒng)中的運(yùn)動(dòng)控制卡開(kāi)發(fā)驅(qū)動(dòng)程序,對(duì)數(shù)控系統(tǒng)實(shí)現(xiàn)開(kāi)放式軟件結(jié)構(gòu)及人機(jī)界面具有重要意義。   本文作者創(chuàng)新點(diǎn):利用DriverStudio來(lái)設(shè)計(jì)運(yùn)動(dòng)控制卡的WDM驅(qū)動(dòng)程序,實(shí)現(xiàn)了在Windows 2000環(huán)境下,上位機(jī)和運(yùn)動(dòng)控制卡的正常通訊,并能根據(jù)上位機(jī)的指令通過(guò)運(yùn)動(dòng)控制卡對(duì)多軸運(yùn)動(dòng)位置和速度進(jìn)行準(zhǔn)確控制。 參考文獻(xiàn):   [1] 司玉美,鄒榮士,郭立紅. PCI串口通信卡WDM 驅(qū)動(dòng)程序設(shè)計(jì)與實(shí)現(xiàn)[ J]. 微計(jì)算機(jī)信息,2005,22,第145頁(yè)   [2] 武安河,邰銘,于洪濤. Windows 2000/XP WDM設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)[ M]. 電子工業(yè)出版社,2003   [3] 武安河,周利莉. Windows設(shè)備驅(qū)動(dòng)程序(VxD與WDM)開(kāi)發(fā)實(shí)務(wù)[M]. 電子工業(yè)出版社,2001   [4] 朱金華. 基于PCI總線的DSP運(yùn)動(dòng)控制卡研發(fā)[D]. 廣州:華南理工大學(xué)機(jī)械工程學(xué)院,2004   基于PCI總線運(yùn)動(dòng)控制卡WDM驅(qū)動(dòng)程序設(shè)計(jì)

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:多通信接口接入互聯(lián)網(wǎng)的嵌入...

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)