<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產(chǎn)品分類

      當(dāng)前位置: 首頁 > 傳感測量產(chǎn)品 > 數(shù)據(jù)采集產(chǎn)品 > 運(yùn)動控制卡

      類型分類:
      科普知識
      數(shù)據(jù)分類:
      運(yùn)動控制卡

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

      發(fā)布日期:2022-10-09 點擊率:125

      • 關(guān)鍵詞: PCI總線運(yùn)動控制卡 WDM DriverStudio
      • 摘要:本文給出了一種使用DriverStudio設(shè)計WDM驅(qū)動程序的方法,用以實現(xiàn)數(shù)控系統(tǒng)應(yīng)用程序?qū)\(yùn)動控制卡的訪問。文中以基于PCI總線的運(yùn)動控制卡為對象,在構(gòu)架其硬件結(jié)構(gòu)的基礎(chǔ)上,闡述了設(shè)計WDM驅(qū)動程序的主要步驟,開發(fā)了WDM驅(qū)動程序,在Windows環(huán)境下進(jìn)行測試,達(dá)到了預(yù)期目的。

       

      摘要:本文給出了一種使用DriverStudio設(shè)計WDM驅(qū)動程序的方法,用以實現(xiàn)數(shù)控系統(tǒng)應(yīng)用程序?qū)\(yùn)動控制卡的訪問。文中以基于PCI總線的運(yùn)動控制卡為對象,在構(gòu)架其硬件結(jié)構(gòu)的基礎(chǔ)上,闡述了設(shè)計WDM驅(qū)動程序的主要步驟,開發(fā)了WDM驅(qū)動程序,在Windows環(huán)境下進(jìn)行測試,達(dá)到了預(yù)期目的。


      關(guān)鍵詞:WDM;PCI;DriverStudio

      1、引言

        目前,開放式數(shù)控系統(tǒng)正得到日益廣泛的應(yīng)用,其中,基于Windows和PC機(jī)的開放式數(shù)控系統(tǒng)將成為數(shù)控技術(shù)發(fā)展的趨勢。本文研究的數(shù)控系統(tǒng)采用NC嵌入PC的開放式結(jié)構(gòu),并以Windows2000操作系統(tǒng)為平臺。NC嵌入PC型數(shù)控系統(tǒng)是指將運(yùn)動控制卡插入計算機(jī)的擴(kuò)展槽中,由PC機(jī)完成非實時性處理任務(wù),實時控制則由運(yùn)動控制卡來承擔(dān)。由于在Windows環(huán)境下,用戶態(tài)的應(yīng)用程序不能直接訪問硬件,而要通過調(diào)用執(zhí)行于核心態(tài)的設(shè)備驅(qū)動程序間接地訪問硬件資源,因而,應(yīng)用程序要對該數(shù)控系統(tǒng)中的運(yùn)動控制卡進(jìn)行訪問,必須為其開發(fā)設(shè)備驅(qū)動程序。

        本文以該數(shù)控系統(tǒng)中基于PCI總線的DSP運(yùn)動控制卡為研究對象,主要討論該運(yùn)動控制卡在Windows2000環(huán)境下的WDM驅(qū)動程序的設(shè)計。

      2、WDM驅(qū)動程序的結(jié)構(gòu)及開發(fā)工具簡介

      2.1WDM驅(qū)動程序的結(jié)構(gòu)

        WindowsDriverModel(WDM)驅(qū)動程序是一種PnP(即插即用)驅(qū)動程序,它同時還遵循電源管理協(xié)議,并能在Windows98,Windows2000和WindowsXP間實現(xiàn)源代碼級兼容。在WDM驅(qū)動程序模型中,每個硬件設(shè)備至少有兩個驅(qū)動程序。其中一個驅(qū)動程序稱為功能驅(qū)動程序,負(fù)責(zé)初始化I/O操作,處理I/O操作完成時帶來的中斷事件,并為用戶提供一種連接設(shè)備的控制方式;另一驅(qū)動程序稱為總線驅(qū)動程序,它負(fù)責(zé)管理硬件與計算機(jī)連接[1]。

        WDM驅(qū)動程序采用分層的結(jié)構(gòu)模型,如圖1所示[2]。圖1中左邊是一個設(shè)備對象堆棧,設(shè)備對象是操作系統(tǒng)為幫助軟件管理硬件而創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。處于堆棧最底層的設(shè)備對象稱為物理設(shè)備對象,簡稱為PDO。在設(shè)備對象堆棧的中間有一個對象稱為功能設(shè)備對象,簡稱為FDO。在FDO的上面和下面還會有一些過濾器設(shè)備對象,簡稱為FiDO。位于FDO上面的過濾器設(shè)備對象稱為上層過濾器,位于FDO下面的過濾器設(shè)備對象稱為下層過濾器。在單個硬件的驅(qū)動程序堆棧中,總線驅(qū)動程序管理計算機(jī)與PDO所代表的設(shè)備的連接。功能驅(qū)動程序管理FDO所代表的設(shè)備。過濾器驅(qū)動程序用于監(jiān)視和修改I/O請求包(IRP)流。


                     點擊看大圖
                                    圖1WDM設(shè)備對象和驅(qū)動程序的層次結(jié)構(gòu)


      2.2開發(fā)工具簡介

        開發(fā)驅(qū)動程序的軟件很多,如NuMega公司的DriverStudio、Jungo公司的WinDriver和Microsoft公司的DDK等。在使用中,雖然利用DDK開發(fā)的驅(qū)動程序代碼非常簡潔,結(jié)構(gòu)清晰,效率也高,但是開發(fā)難度較大[3]。利用DriverStudio、WinDriver等第三方開發(fā)工具則使用簡單,開發(fā)速度較快。因此選用NuMega公司提供的DriverStudio作為開發(fā)工具。

        NuMega公司的DriverStudio是一套用來簡化微軟Windows平臺下設(shè)備驅(qū)動程序的開發(fā)、調(diào)試和測試的工具包。DriverStudio包括DriverWorks、DriverNetworks、SoftICE和VToolsD等工具模塊。其中,DriverWorks包含一個非常完善的源代碼生成工具(DriverWizard)以及相應(yīng)的類庫和驅(qū)動程序樣本,它提供了在C++下進(jìn)行設(shè)備驅(qū)動程序開發(fā)的支持。

      3、運(yùn)動控制卡的硬件結(jié)構(gòu)

        所設(shè)計的運(yùn)動控制卡采用TI公司的TMS320LF2407DSP芯片為核心處理器。該運(yùn)動控制卡的硬件系統(tǒng)包括PCI接口子模塊、數(shù)字信號處理器(DSP)子模塊和軸控制接口子模塊。

        該運(yùn)動控制卡的PCI接口采用PLX公司的PCI9052接口芯片,這是PLX技術(shù)公司為擴(kuò)展適配板卡推出的能提供一種混合高性能PCI總線目標(biāo)模式的接口芯片。它可與多種局部總線相連,并具有異步操作、中斷產(chǎn)生器、FIFO等特點。運(yùn)動控制卡與上位PC機(jī)通過PCI總線進(jìn)行連接,PCI接口子模塊通過雙端口存儲器RAM器件IDT7026與DSP子模塊連接。雙端口存儲器(RAM)是一個雙向FIFO數(shù)據(jù)存儲器,起數(shù)據(jù)緩沖的作用。軸控制接口子模塊則通過CPLD(復(fù)雜可編程邏輯器件)與DSP子模塊連接。運(yùn)動控制卡硬件結(jié)構(gòu)示意圖如圖2所示[4]。


                   點擊看大圖
                                          圖2運(yùn)動控制卡硬件結(jié)構(gòu)示意圖


      4、運(yùn)動控制卡驅(qū)動程序的設(shè)計

        使用DriverWorks為該運(yùn)動控制卡開發(fā)WDM驅(qū)動程序主要有三個步驟:創(chuàng)建WDM驅(qū)動程序框架;實現(xiàn)驅(qū)動程序的具體功能;生成WDM驅(qū)動程序。下面是借助DriverWorks設(shè)計運(yùn)動控制卡WDM驅(qū)動程序的具體方法。

      4.1使用DriverWizard生成WDM驅(qū)動程序框架

        DriverWizard是DriverWorks創(chuàng)建WDM框架程序的工具。在創(chuàng)建一個PCI設(shè)備的WDM驅(qū)動程序框架時,共有十一步,其中以下幾點需特別注意:

        (1)第四步:選擇硬件設(shè)備所支持的總線類型,這里選PCI,并根據(jù)具體硬件填寫PCIVendorID、PCIDeviceID、PCISubsystemID和PCIRevisionID。這些參數(shù)可以從硬件生產(chǎn)廠家得到,如果所填寫的參數(shù)和目標(biāo)PCI設(shè)備寄存器中不一致的話系統(tǒng)將安裝不上此驅(qū)動程序。

        (2)第六步:選擇驅(qū)動程序支持的功能項,選中Read、Write、DeviceIOControl和Cleanup四個復(fù)選框。

        (3)第七步:選擇I/O請求IRP處理的方式,選擇DriverManaged,由驅(qū)動程序管理的StartIO處理排隊隊列,并選擇讀寫請求分別進(jìn)行排隊隊列處理。

        (4)第九步:選擇設(shè)備文件中的類名和接口類型,類名通常取默認(rèn)值,選擇GUID接口方式作為應(yīng)用程序打開設(shè)備的方式。在資源欄中分別點擊AddIOPort(s)、AddMemoryRange...和AddIRQ...聲明所需的資源。

        (5)第十一步:為了調(diào)試方便和更好地了解WDM驅(qū)動程序的運(yùn)行過程,選擇讓系統(tǒng)生成控制臺測試程序和用SoftICE調(diào)試的跟蹤代碼(TraceCode)。

        至此,驅(qū)動程序框架已形成。DriverWizard生成了兩個類:一個是驅(qū)動程序文件中的類,主要完成WDM的DriverEntry和AddDevice例程;另一個是設(shè)備文件中的類,主要完成與硬件交互的例程。

      4.2驅(qū)動程序功能的實現(xiàn)

        DriverWizard創(chuàng)建的WDM驅(qū)動程序框架中包含了很多例程。這些例程可分為兩種:必需的基本例程和根據(jù)需要可選擇的擴(kuò)展例程。根據(jù)需要修改相應(yīng)的例程即可實現(xiàn)該運(yùn)動控制卡驅(qū)動程序的具體功能。

      4.2.1初始化驅(qū)動程序——DriverEntry例程

        DriverEntry例程負(fù)責(zé)驅(qū)動程序的初始化,所有的驅(qū)動程序都必須包含DriverEntry例程。當(dāng)裝載驅(qū)動程序時,PnP管理器為每個驅(qū)動程序調(diào)用一次DriverEntry例程。DriverEntry用以初始化驅(qū)動程序范圍的數(shù)據(jù)結(jié)構(gòu)和資源。

        DriverEntry例程主要有以下三個功能:

        (1)設(shè)置AddDevice、Unload、Dispatch和其他例程的入口指針

        (2)可以從注冊表中獲取一些必要的信息以初始化驅(qū)動程序

        (3)初始化其他的在驅(qū)動程序范圍內(nèi)的數(shù)據(jù)結(jié)構(gòu)和資源

      4.2.2串行讀例程——SerialRead例程

        在該驅(qū)動程序中,對IRP進(jìn)行串行處理采用的是由驅(qū)動程序管理的IRP隊列。當(dāng)硬件設(shè)備處于忙狀態(tài)時,將IRP排隊;當(dāng)硬件設(shè)備處于空閑狀態(tài)時,將排隊的IRP取出處理。SerialRead例程是擴(kuò)展例程,向SerialRead例程中添加功能代碼就可以實現(xiàn)PC機(jī)對運(yùn)動控制卡的串行讀操作,應(yīng)用程序可以通過該WDM驅(qū)動程序讀取雙端口RAM中的數(shù)據(jù)及參數(shù)。

      4.2.3串行寫例程——SerialWrite例程

        在該驅(qū)動程序中,要實現(xiàn)PC機(jī)對運(yùn)動控制卡的串行寫,需要使用SerialWrite例程。串行寫操作主要負(fù)責(zé)處理運(yùn)動函數(shù)原型的解讀,并將解讀后的指令寫入雙端口RAM中。

      4.3生成WDM驅(qū)動程序

        設(shè)計完成后的WDM驅(qū)動程序?qū)⑸梢粋€工作區(qū)(Workspace)和兩個工程(Project),生成的工作區(qū)包括了驅(qū)動程序工程和應(yīng)用程序工程。分別選擇兩個工程,并分別將其設(shè)置成為當(dāng)前活動工程,用VisualC++6.0對其進(jìn)行編譯。對于驅(qū)動程序的編譯,不用進(jìn)行任何設(shè)置,單擊Build圖標(biāo)即可生成后綴名為.sys的驅(qū)動程序文件。

      5、運(yùn)動控制卡驅(qū)動程序的安裝與應(yīng)用

        生成后綴名為.sys的驅(qū)動程序后,安裝之前,首先要修改INF文件,然后將其拷貝到“..sysobjchki386”目錄下。修改INF文件只要將文件雙引號中的提示改為相應(yīng)的內(nèi)容即可生成設(shè)備信息文件。對該驅(qū)動程序的INF文件作如下修改:

        [Strings]

        ProviderName=“數(shù)控研究中心”//公司名稱

        MfgName=“華南理工大學(xué)機(jī)械與工程學(xué)院”//硬件制造商名稱

        DeviceDesc=“高級運(yùn)動控制卡V3.2”//設(shè)備描述

        DeviceClassName=“高級運(yùn)動控制”//設(shè)備類描述

        SvcDesc="運(yùn)動控制"http://服務(wù)描述

        使用控制面板中的添加新硬件來搜索新硬件,根據(jù)提示指定INF文件和編譯后生成的.sys驅(qū)動程序文件,系統(tǒng)就可以自動安裝新硬件的驅(qū)動程序。

        驅(qū)動程序安裝好之后,在Windows2000環(huán)境下對運(yùn)動控制卡及其設(shè)備驅(qū)動程序進(jìn)行實際測試[4]。測試結(jié)果表明,此設(shè)備驅(qū)動程序能使運(yùn)動控制卡在Windows2000環(huán)境穩(wěn)定工作,并能對多軸的運(yùn)動位置和速度進(jìn)行準(zhǔn)確控制。同時,將該驅(qū)動程序移植到Windows98/XP系統(tǒng)中,也能驅(qū)動運(yùn)動控制卡正常工作。

      6、結(jié)束語

        傳統(tǒng)的驅(qū)動程序都是用DDK開發(fā),開發(fā)效率不高。本文以基于PCI總線的運(yùn)動控制卡為研究對象,以DriverWorks為工具,方便快捷地設(shè)計完成了設(shè)備驅(qū)動程序。在Windows環(huán)境下對運(yùn)動控制卡及其驅(qū)動程序進(jìn)行測試,結(jié)果表明,此驅(qū)動程序能使該運(yùn)動控制卡在Windows環(huán)境下穩(wěn)定工作。實質(zhì)上,驅(qū)動程序仍滿足DDK對WDM的要求,調(diào)用的仍是DDK所提供的基本函數(shù)。利用DriverStudio對數(shù)控系統(tǒng)中的運(yùn)動控制卡開發(fā)驅(qū)動程序,對數(shù)控系統(tǒng)實現(xiàn)開放式軟件結(jié)構(gòu)及人機(jī)界面具有重要意義。

        本文作者創(chuàng)新點:利用DriverStudio來設(shè)計運(yùn)動控制卡的WDM驅(qū)動程序,實現(xiàn)了在Windows2000環(huán)境下,上位機(jī)和運(yùn)動控制卡的正常通訊,并能根據(jù)上位機(jī)的指令通過運(yùn)動控制卡對多軸運(yùn)動位置和速度進(jìn)行準(zhǔn)確控制。

      下一篇: PLC、DCS、FCS三大控

      上一篇: 索爾維全系列Solef?PV

      推薦產(chǎn)品

      更多
      主站蜘蛛池模板: 天天色天天射综合网| 亚洲精品第一综合99久久| 亚洲狠狠成人综合网| 综合一区自拍亚洲综合图区| 91久久婷婷国产综合精品青草| 狠狠色综合久色aⅴ网站| 亚洲AV人无码综合在线观看| 天天综合日日噜噜噜| 久久婷婷五月综合色高清| 精品无码综合一区| 国产婷婷综合丁香亚洲欧洲| 精品国产国产综合精品| 欧洲亚洲综合一区二区三区| 91精品国产综合久久香蕉| 国产亚洲欧洲Aⅴ综合一区| 亚洲综合色一区二区三区| 久久国产精品亚洲综合| 狠狠色丁香婷婷综合尤物| 色综合天天综合婷婷伊人| 亚洲国产综合AV在线观看| 国产成人综合久久综合| 亚洲国产精品成人综合久久久| 久久综合九九亚洲一区| 狠狠色丁香婷综合久久| 日韩人妻无码一区二区三区综合部| 一本色道久久88综合日韩精品| 色综合久久中文综合网| 丁香婷婷激情综合俺也去| 天天影视色香欲性综合网网站| 亚洲综合区图片小说区| 97色婷婷成人综合在线观看| 99久久国产综合精品1尤物| 狠狠色综合久久婷婷| 狠狠综合亚洲综合亚洲色| 狠狠色丁香九九婷婷综合五月 | 狠狠色噜狠狠狠狠色综合久| 久久久久久久综合色一本| 69国产成人综合久久精品| 色综合久久最新中文字幕| 狠狠爱天天综合色欲网| 一本久久知道综合久久|