使用VISA和USB建立通讯
大家都知道VISA支援很多種的I/O介面 其中也包括USB, VISA支援的USB除了USB Instrument外 還支援所謂的USB Raw Mode, 也就是直接下底層的USB request到USB裝置, 而bypass了上層的USB軟體例如HID layer, mass stroage layer等, 這樣的作法可以在不需要該USB的驅動程式情形下就能與該USB裝置溝通, 缺點就是由於屬於非常底層的I/O, 因此必須非常瞭解該裝置的USB command, 當然如果你自己就是該USB裝置的韌體開發者, 一定是很瞭解這些USB command了, 我貼一些圖讓大家看一下, 如何讓NI-VISA與USB裝置溝通(以Logitech的Dual Action Gamepad為例)
上圖這是原本在裝置管理員裡看到的情形, 這隻gamepad屬於HID device
這裡可以看到這個USB device的VID(Vendor ID)與PID(Product ID), 記得抄起來, 等等會用到
VISA裡有一個工具程式 "VISA Driver Development Wizard", 執行它
選擇USB介面
將剛剛記下來的VID和PID填上去, 至於Manufacturer Name與Model Name, 填啥都沒關係, 自己方便識別就好, 下面那個"This is a compound device....blah blah"的 是因為有的USB 裝置是包含兩個DEVICE在內, 例如Logitech的webcam很多都是包含WEBCAM與Mic的, 如果是這樣這邊應該勾起來, 不過我還沒試過這樣的裝置, 我在這隻gamepad上勾了這個選項反而會有問題, 先不勾起來
Prefix也是填自己好記就好, 填好Prefix程式會自動決定待會生出來的driver要放在那裡
就按"是"吧
直接選第一項, 程式會幫你把生出來的driver給安裝到電腦裡
安裝過後本來屬於人性化介面裝置的Gamepad不見了, 多出一個裝置類別叫做NI-VISA USB Device, 那個Outback就是Gamepad套上我們剛剛生出來的driver
經過這樣處理後, NI MAX就認得到這個USB裝置了
可以替這個裝置取個VISA Alias, 等等可以看到為何這麼做
這是VISA Test Panel的畫面, 可以看到USB devuce正確地回應Get Descriptor命令, 接下來, 要試試在LabVIEW裡該怎麼做了
先搜尋一下VISA List, 看看USB device能不能被LabVIEW找到
果然有 就是第一個 "USB0::0x046D::0xC216::NI-VISA-0::RAW" 最後三個字"RAW"代表這是一個USB RAW device
這裡就可以看到剛剛為何在MAX裡要設定VISA Alias, 這比"USB0::0x046D::0xC216::NI-VISA-0::RAW"要好記多了
記得也要把這個VISA Resource Name設定成USB Raw唷
VISA提供了與USB RAW device 溝通的專用VI, VISA USB Control In與VISA USB Control Out
來實際寫個小程式看看吧 , 先Open VISA Session, 然後下Get Descriptor的request並讀取回應, 這個程式跟剛剛VISA Test Panel做的是一樣的事情
因為這樣傳回來的事實上是HEX字串, LabVIEW會很雞婆的把它都轉成數字並且變成陣列(實在很討厭), 不過也是成功的讀取了, 接下來就是把這些數字變成ASCII或轉回HEX字串的功夫了
這樣的應用適用在測試USB裝置時, 我想也只有在生產測試才會有需要用到這些很低層的USB request, 這樣作法卻非常的powerful, 但是有個缺點, 套上NI-VISA USB的USB裝置, 就不是該DEVICE原來屬於的類別了, 以本例來說, 原本是屬於一個HID class的gamepad, 會變成一個不再是HID class的USB裝置, 在Windows控制台裡的"遊戲控制器"就看不到這個gamepad了, 所以在比較屬於End-User Function的應用上就不太適用
最後要說明的就是如何移除我們透過NI-VISA生出來的USB driver, 其實很簡單, 先在裝置管理員裡 把這個裝置移除, 然後把windows目錄下有個INF隱藏目錄裡對應的driver砍掉(在本例裡,是Outback.inf和Outback.PNF兩個檔案), 之後再把裝置插回去電腦就會把它認成它該有的樣子了, 至於在C:\VXIPNP\WINNT\目錄下的driver, 就可以留下來, 下次需要時在套上去, 不需要每次都跑VISA driver development wizard了
一點小心得 貢獻出來供大家參考
posted on 2006-02-14 18:48 LabVIEW开发者 阅读(2657) 评论(1) 编辑 收藏 举报