更換登入信箱  | 未收到確認信  | 忘記密碼  | 註冊  | 登入
|
|
登入‧會員服務
新聞 論壇
教學 下載
專欄 影音
LabVIEW轉檔
分享
搜尋
產品評測
技術文章
資源中心
線上購物
資料代管
手機簡訊
LabSMS
LabEmail
外包 專案人才
外包 360團隊
聯絡我們
贊助LabVIEW360
技術文章:如何使用NI-VISA來和USB裝置溝通
如何使用NI-VISA來和USB裝置溝通
發佈時間:2009/3/13 下午 11:53:26

 

作者於LabVIEW360的ID為Ozzy,專長為LabVIEW、Bluetooth、RF measurement。目前任職於某外商電子業。

 

大家都知道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了

一點小心得 貢獻出來供大家參考

↓ 滑鼠左鍵測試器 ↓
 列印格式
|
 寄給朋友
|
 加到最愛
|
 意見回饋
|
 加到知識庫
|
 開啟知識庫
|

  |  我的最愛 隱私權保護政策 免責聲明 廣告刊登 系統整合 合作提案 聯絡我們 電話: 0988-002692

  您可以在以下的頻道跟LabVIEW360互動:
  Facebook: https://www.facebook.com/labview360
  Twitter: https://twitter.com/LabVIEW360
  Youtube: https://www.youtube.com/user/Labview360com