當前位置:編程學習大全網 - 編程語言 - VB USB通訊問題---200分求助!

VB USB通訊問題---200分求助!

用vb實現USB接口設備數據傳送

本文介紹了USB設備中的人機接口,HID設備與主機通信的要點與方式。詳細講解了在VB中調用相關APl函數的方法,並介紹了壹種基於USB總線的數據采集系統的設計方案及開發方法,采用的是USB2.0協議。該系統主要是從設備的角度描述了人機接口設備通信,以及用來與主機進行數據交換的報告格式。應用程序可以使用任何能訪問API函數的編程語言,調用窗口函數並與USB設備實現通信。掌握USB設備與計算機通訊規程,實現USB設備的自動識別。為數據采集系統與計算機之間的通訊開辟了新的道路。

這幾年,隨著大量支持USB的個人電腦的普及,USB逐步成為PC機的標準接口已經是大勢所趨了。在主機(host)端,最新推出的PC機幾乎100%支持USB;而在外設(device)端,使用USB接口的設備也與日俱增,例如數碼相機、掃描儀、遊戲桿、磁帶和軟驅、圖像設備、打印機、鍵盤、鼠標等。

二、Windows系統選擇USB驅動的過程

當Windows檢測到壹個新的USB外設時,必須做的壹件事情是找出應該使用哪個設備驅動應用軟件來與設備通信,然後載入選定的驅動。這是Windows設備管理器的工作,設備管理器使用類、設備安裝器和INF文件來找到這個匹配。

INF文件是壹個文本文件,其中包括有利於Windows識別設備的信息。文件告訴Win-dows要使用什麽驅動、註冊表裏存儲什麽信息等。

三、Visual Basic與USB設備通信的設計與實現

使用VB語言訪問串行通信接口的方法。Windows在底層實現了和串行通信有關的很多復雜的工作,給程序員提供了壹個相對比較容易掌握的編程接口。例如 Windows自動將所有接收到的字符放到接收緩沖區中,而所有發送的字符也都進入發送緩沖區。只要程序空閑,程序就可以讀取接收緩沖區獲得數據,或者向發送緩沖區發送數據。

1.主機尋找USB設備的過程

第壹個被Windows支持的USB外圍設備類是人機接口設備。HID是 HUMANINTER-FACE DEVICE人機接口設備的英文縮寫。是指直接和人進行互動的設備。如鼠標、鍵盤等。運行在WINDOWS98或其他更高的版本的操作系統的PC機,系統除了提供通用的USB設備的底層驅動以外,還單獨提供了壹些HID設備的完整驅動,應用程序可以很容易地與操作系統內部的HID通訊。這樣使得符合HID 類的USB設備很容易開發與運行。也就是說,我們如果想實現壹個USB的HID類設備,是不需要在Windows下開發自己的驅動程序的。HID不壹定要是標準的外設類型,唯壹的要求是交換的數據存儲在報文的結構內,設備固件必須支持報文的格式。任何工作在該限制之內的設備都可以成為壹個HID,例如溫度計、電壓計、讀卡機等。

2.VB中調用API函數的過程

(1)聲明:下面是壹個Visual Basic使用API函數WriteFile的聲明:可以利用這個涵數來寫數據到HID(也可以是文件和其他設備)中。Public Declare Function WriteFile Lib_“kernel32”_

(By Val hFile As Long,_ByReflpBuffer As Byte,_By Val nNumberOfBytes To Write As Long,_ByRef lpNumberOfBytesWritten As Long,_ByVal lpOvefiapped As Long)_As Long

(2)識別HID過程Public Declare Function HidD_GetHidGuid Lib_“hid.dll”_(ByRefHidGuid As GUID)As Long

3.Visual Basic數據過程

(1)讀數據到設備

Public Declare Function WriteFile Lib“kernel32”_(ByVal hFile As Long,_ByReflpBuffer As Byte_ByValnNumberOfBytesToWrite As Long,_ByRefnNumberOfBytcsWritten As Long,_ByVal lpOvefiapped As Long)_As Long

(2)從設備讀取數據Declare Function ReadFile Lib_“kernel32”_(ByValhFile As Long,_ByReflpBuffer As Byte,_ByValnNumberOfBytesToRead As Long,_ByReflpNumberOfBytesRead As Long,_lpOvefiapped As Long)_As Long

讀寫報文緩沖區時,第壹個字節是ReportID,其後是報文數據。報文緩沖區默認是八個報文,並且環狀排列。因為數據讀寫是發生在主機輪訓設備的時候,並不是由設備觸發產生硬件中斷,所以如不能及時讀寫,新的數據會覆蓋舊的數據,導致報文丟失。當數據讀寫頻繁時應使用特征報文,它可以保證當報文數據沒有變化時,HID不會傳送新的數據。

當不再使用SetupDiGetClassDevs時,應用上述函數釋放其返回的數組hDevInfo。還有需要使用函數CloseHandle,它是壹個非常通用的API函數,可以用於關閉通信。

四、結論

實際編程表明使用VB開發HID類USB設備是壹條非常方便快捷的途徑,不需要編寫底層驅動,涉及到的API函數多是大家熟知的通用函數。但同時還必須註意到壹點,HID類只支持控制傳輸與中斷傳輸。控制傳輸通常不用於數據的傳輸,而中斷傳輸的特點是保證最大延遲,也就是事務之間的時間。它沒有保證傳輸速率,而是保證每筆事務之間的時間不會超過最大延時。所以中斷傳輸適用於數據量不太大,但需要及時快速地傳送,實時性要求較高的場合。對於數據量比較大的傳輸,是不宜使用中斷傳輸的。因此HID設備應用的場合也必須根據該特點靈活使用。

  • 上一篇:清華大學最牛的三個系
  • 下一篇:簡述短道速滑
  • copyright 2024編程學習大全網