亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

激光頭驅動架構及方法

文檔序號:9929392閱讀:1020來源:國知局
激光頭驅動架構及方法
【技術領域】
[0001]本發(fā)明涉及系統(tǒng)驅動架構領域,具體涉及一種激光頭驅動架構及方法。
【背景技術】
[0002]T30智能采集終端系統(tǒng)是一款基于Wince6.0的定制系統(tǒng)。Wince系統(tǒng)在電力數(shù)據(jù)采集行業(yè)使用較為廣泛。激光頭作為數(shù)據(jù)采集的重要元件,在數(shù)據(jù)采集領域中有著龐大的使用量。
[0003]激光頭驅動屬于流驅動設備,目前的一般流驅動的架構及T30中激光頭驅動的架構中,Wince6.0系統(tǒng)操作系統(tǒng)提供了流接口函數(shù),如XXX_Init()、XXX_0pen()、XXX_Read()、XXX_ffrite()、XXX_Close ()等等。這一類的驅動由Device Manager來管理,它調用ActivateDeviceEx( )函數(shù)來加載流驅動。ActivateDeviceEx()的參數(shù)是注冊表中相應的鍵,用來設定加載流驅動的屬性,如Index、Order、Pref ix等等。流驅動的注冊表配置信息一般存放在[HKEY_LOCAL_MACHINE\Drivers\BuiltIn]下。流驅動加載成功后,應用程序通過調用CreateFile()、ReadFile()、WirteFile()等來訪問流驅動的設備。流驅動可以動態(tài)管理,驅動調試助手就是用來幫助調試這一類驅動的。
[0004]綜上所述是流驅動的一般解決方案,下面分析它的利弊。
[0005]一般的流驅動能夠滿足激光頭數(shù)據(jù)采集的需求。根據(jù)多年激光頭使用經(jīng)驗,將激光頭用一般流驅動進行實現(xiàn)會存在以下問題:
[0006]1.激光頭驅動崩潰會導致系統(tǒng)device.exe崩潰,系統(tǒng)很多模塊驅動將癱瘓。
[0007]2.激光頭型號眾多,在性能和使用方式上也存在差異,加大了用戶程序編寫難度。
[0008]3.一旦激光頭型號更換,上層應用程序需要重新改寫。
[0009]針對上述問題,本發(fā)明提出了新的激光頭驅動架構及方法,并使用在T30智能采集終端中。

【發(fā)明內容】

[0010]為解決現(xiàn)有技術存在的不足,本發(fā)明公開了激光頭驅動架構及方法,本申請對激光頭的支持采用了新的架構和模式。該架構沒有通過流驅動的方式實現(xiàn),主要通過Windows服務技術進行實現(xiàn)。
[0011]為實現(xiàn)上述目的,本發(fā)明的具體方案如下:
[0012]激光頭驅動架構,包括:統(tǒng)一接口模塊、驅動管理模塊及驅動模塊;
[0013]所述統(tǒng)一接口模塊用于接收用戶層發(fā)送的命令并對該命令進行解析,并將解析后的數(shù)據(jù)發(fā)送至驅動管理模塊;
[0014]驅動管理模塊對解析后的命令進行分析并執(zhí)行,執(zhí)行命令時調用驅動模塊,驅動模塊驅動激光頭的動作。
[0015]進一步的,所述激光頭驅動架構應用在智能采集終端中。
[0016]進一步的,智能采集終端為基于Wince6.0定制系統(tǒng)的智能采集終端,帶有采集設備,包括激光頭、紅外設備、藍牙設備。
[0017]激光頭驅動架構的工作方法,包括以下步驟:
[0018]步驟一:用戶層發(fā)動命令至管理層;
[0019]步驟二:管理層分析命令并將分析結果發(fā)送至驅動層;
[0020]步驟三:驅動層執(zhí)行命令驅動激光頭并返回數(shù)據(jù)至管理層,
[0021]步驟四:管理層將激光頭返回的數(shù)據(jù)返回至用戶層,
[0022]步驟五:用戶層接收激光頭數(shù)據(jù)。
[0023]進一步的,管理層中設有只有用戶層可見的API層,在系統(tǒng)Windows目錄下添加動態(tài)庫,在動態(tài)庫中存儲有提供給用戶的激光頭的調用函數(shù),通過加載此動態(tài)庫,然后利用提供的激光頭調用函數(shù)實現(xiàn)對激光頭的操作。
[0024]進一步的,API層通過系統(tǒng)信息中的硬件版本號來區(qū)分當前設備的型號,然后根據(jù)設備型號從驅動層調用相應的激光頭驅動程序,驅動層編寫激光頭驅動程序時調用API層提供好的統(tǒng)一接口即可。
[0025]進一步的,驅動層中包含多個激光頭的驅動程序,用于適應不同種類的激光頭。
[0026]進一步的,在動態(tài)庫中,通過增加和修改Wince系統(tǒng)的注冊表下內容實現(xiàn)注冊服務,Wince系統(tǒng)啟動時services.exe進程會根據(jù)注冊表中的配置信息自動加載動態(tài)庫到內存中。
[0027]進一步的,動態(tài)庫中定義了多個導出函數(shù),當系統(tǒng)加載動態(tài)庫時會首先調用相應的函數(shù),在此API層中實現(xiàn)對激光頭所用串口的初始化操作,當服務被卸載時會調用相應的函數(shù),利用該函數(shù)實現(xiàn)對激光頭進行了釋放工作。
[0028]進一步的,在系統(tǒng)中添加第二動態(tài)庫,第二動態(tài)庫主要作用是給應用程序加載調用激光頭,第二動態(tài)庫存儲了多個函數(shù),激光頭驅動程序運行在T30Service服務中,在第二動態(tài)庫中通過相應的函數(shù)來獲得T30Service服務的句柄,根據(jù)該句柄,使用相應的函數(shù)來訪問運行在T30SerVice服務里的激光頭驅動程序。
[0029]進一步的,第二動態(tài)庫中,驅動層編程使用激光頭前應先調用相應的函數(shù)初始化激光頭,初始化激光頭包括激光頭型號的判斷和激光頭驅動和串口鏈路層的初始化。
[0030]進一步的,激光頭型號的判斷是通過設備硬件版本號進行的,硬件版本號是寫在T30智能終端中的一組數(shù)字組合,該組數(shù)字組合每位代表不同的含義。首先去讀取設備來獲得硬件版本號,然后根據(jù)硬件版本號的命名規(guī)則分析這臺智能終端的硬件配置,其中就有激光頭型號的確定,一旦確定了激光頭的型號,相應的函數(shù)調用T30SerViCe服務中與之類型相同的激光頭驅動代碼來初始化激光頭驅動,最終完成激光頭驅動的初始化。
[0031]進一步的,第二動態(tài)庫中,還包括關閉激光頭驅動的步驟,關閉激光頭函數(shù)的主要邏輯也是調用到T30SerViCe服務里去釋放激光頭資源,不使用激光頭模塊時應該調用關閉激光頭函數(shù)去釋放激光頭。
[0032]進一步的,第二動態(tài)庫中,還包括使能激光頭出光掃碼并返回所掃描到的條碼的步驟,當驅動層調用相應的函數(shù)時,該函數(shù)會根據(jù)初始化中判斷好的激光頭型號去調用相應的激光頭掃碼函數(shù)。
[0033]進一步的,第二動態(tài)庫中,還包括設置激光頭配置參數(shù)的步驟,對激光頭的出光時間、掃碼類型、安全等級均是用相應的參數(shù)來控制的,驅動層配置激光頭的參數(shù)。
[0034]本發(fā)明的有益效果:
[0035]1.脫離流驅動,采用Windows服務技術實現(xiàn)=Windows服務運行流程是在系統(tǒng)開機后自動加載并在后臺運行。當激光頭驅動出現(xiàn)問題崩潰,服務會自動重啟,不會影響到驅動device.exe。
[0036]2.多種型號的激光頭驅動集成在服務中:常用的幾種激光頭驅動集成在了服務中,如明德Ue966和新大陸的Em3000等等。
[0037]3.智能調用正確型號的激光頭驅動:為了區(qū)分各種不同型號的激光頭,在T30系統(tǒng)中植入了硬件版本號這一機制。此機制原理是通過自助研發(fā)的寫號工具向T30終端Flash中寫入版本號。當調用激光頭驅動時首先通過驅動版本號來判斷激光頭型號,然后API層會選擇調用服務中的相應的激光頭的驅動程序,最終實現(xiàn)智能化調用。
[0038]4.API層統(tǒng)一的激光頭函數(shù):針對用戶層編程問題,API層屏蔽了激光頭的型號問題,用戶編程是用的是統(tǒng)一的激光頭調用函數(shù),如ZZ_LaSer_Init()等等函數(shù)接口。與激光頭型號相關的復雜問題都在API層以下被處理了,保證了用戶程序的可移植性。
【附圖說明】
[0039]圖1本發(fā)明的功能架構圖;
[0040]圖2本發(fā)明的方法流程圖;
[0041]圖3本發(fā)明的程序實現(xiàn)框圖。
【具體實施方式】
:
[0042]下面結合附圖對本發(fā)明進行詳細說明:
[0043]T30全稱T30智能采集終端,是振中公司推出的一款智能采集終端。該款設備主要在電力行業(yè)工作中使用。在T30智能采集終端系統(tǒng)中使用了新的激光頭驅動架構。
[0044]智能終端T30實現(xiàn)了對各種外設的支持(如攝像頭,wifi,藍牙等等)。其中對激光頭的支持采用了新的架構和模式。該架構沒有通過流驅動的方式實現(xiàn),主要通過Windows月艮務技術進行實現(xiàn)。
[0045]如圖2所示,激光頭驅動架構的工作方法,包括以下步驟:
[0046]步驟一:用戶層發(fā)動命令至管理層;
[0047]步驟二:管理層分析命令并將分析結果發(fā)送至驅動層;
[0048]步驟三:驅動層執(zhí)行命令驅動激光頭并返回數(shù)據(jù)至管理層,
[0049]步驟四:管理層將激光頭返回的數(shù)據(jù)返回至用戶層,
[0050]步驟五:用戶層接收激光頭數(shù)據(jù)。
[0051]Windows服務是運行在后臺沒有界面的服務程序,Wince6.0服務程序的建立方法主要是按照規(guī)則編寫動態(tài)庫DLL文件,T30智能終端的激光頭驅動就編寫在T30Service.dll動態(tài)庫中,然后通過增加和修改Wince系統(tǒng)的注冊表HKEY_LOCAL_MACHINE\Services\Service下內容實現(xiàn)注冊服務。這樣Wince系統(tǒng)啟動時services.exe進程會根據(jù)注冊表中的配置信息自動加載T30Service.dll動態(tài)庫到內存中。這就是T30Service后臺服務的實現(xiàn)。
[0052]T30Service.dll一共定義了如下導出函數(shù):
[0053]ZZS_Init()
[0054]ZZS_Deinit()
[0055]ZZS_0pen()
[0056]ZZS_Close()
[0057]ZZS_Read()
[0058]ZZS_Write()
[0059]ZZS_10Control()
[0060]以上函數(shù)就是T30Service.dlI中導出的接口函數(shù)。當系統(tǒng)加載T30Service.dll時會首先調用ZZS_Init(),在此API中我們做了對激光頭所用串口的初始化操作,這樣作保證了系統(tǒng)啟動后會第一時間將激光頭打開。與之相反的當服務被卸載時會調用ZZS_Deinit(),在這個函數(shù)對激光頭進行了釋放工作。這樣就將激光頭驅動完美融合在自定義服務T30SeriVice生命周期中,保證了激光頭驅動運行在內存中。而且服務進程一旦崩潰就會重新啟動,并不會影響到激光頭和其它模塊的使用。
[0061]以上所述會將激光頭驅動運行在服務里,為了進一步方便
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1