WindowsにUSBデバイスの取り外しと再検出を強制するにはどうしたらいいですか?

更新しました Dec 4, 2018

使用製品

Hardware

  • USB-6501
  • cDAQ-9132
  • cDAQ-9133
  • cDAQ-9138
  • cDAQ-9139
  • cDAQ-9135

Driver

  • NI-DAQmx

その他

Windows

問題

使用しているUSBデバイスは、たまにコンピュータとの接続が切れ、使用する前に接続を切ってから再接続する必要があります。なぜこのようなことが発生するのですか?また、どうすれば物理的にデバイスの接続を切らずにWindows OSが再検出するようにできますか?

解決策

この動作はデバイスが電源を失い、コンピュータは電源がある際に発生します。例えば、コンピュータがスタンバイやパワーセーブモードとなる場合、よくUSBポートの電源が切られます。 また、これはコンピュータが休止状態から復帰する際にも発生します。 どちらの場合にも、デバイスはコンピュータによって再検出されず、その故に通信ができなくなります。  

この問題が発生した際にWindowsがデバイスを再検出するように設定する方法は、以下のとおりです。

  1. Microsoft社のDevConユーティリティをインストールします。DevConユーティリティは、デバイス マネージャーの代わりとなるコマンドラインのユーティリティです。DevConを使用すると、個別のデバイスもしくはデバイスグループの有効化、無効化、再起動、更新、削除、およびクエリをおこなうことができます。こちらからDevConをダウンロードできます。Windows 7を使用している場合は、Windows Driver Kit(WDK)の一部としてDevConをダウンロードすることが可能です。
      
  2. スタート>>ファイル名を指定して実行devmgmt.mscと入力し、OKボタンをクリックしてWindowsのデバイスマネージャを開きます。


     

  3. 問題のデバイスが接続されているUSBハブ(ポート)を特定する必要があります。 これを行うには、リストの一番下にある「ユニバーサル シリアル バス コントローラー」グループを展開します。


     

  4. 順番に、すべてのUSB ルート ハブ項目をダブルクリックして電源タブをクリックし、デバイスがリストされているかどうかを確認します。


     

  5. デバイスが一覧表示されているハブが見つかったら、詳細タブをクリックし、ドロップダウンメニューから最後に確認された親を選択します。Windows 7を実行している場合は、デバイス インスタンス パスを選択します。値リストにある1番目と2番目の\記号の間に表示されている名前を記録します(例:ROOT_HUB20)。


     

  6. 次に、スタート>>ファイル名を指定して実行でcmdと入力し、OKボタンをクリックしてコマンドプロンプトを起動します。

  7. コマンドプロンプトウィンドウで、まず始めにダウンロードしたdevcon.exeファイルを含むフォルダがあるディレクトリに変更します。64ビットOSを使用している場合、確実にdevcon.exeの64ビット版を呼び出している必要があります。適切なディレクトリを開いた時点で、以下のコマンドを入力してEnterキーを押します。このとき、ROOT_HUB20を手順5で記録した名前に変更します。
    devcon restart * ROOT_HUB20 *


    メモ: マウスやキーボードなどのユーザインタフェースデバイス、もしくはその他USBネットワークアダプタなどその他のUSVBデバイスが、再検出使用としているUSBデバイスと同じルートハブにある場合、再起動中はそれらのデバイスも接続が切れます。
     

  8. すぐに、Windowsがハブとそれに繋がっているUSBデバイスを削除して再検出し、再度有効化をおこないます。これで動作しない場合は、手順5で間違ったハブを選択している可能性があります。再起動が成功するまで手順3~7を繰り返します。
     
  9. デバイスが接続されているルートハブが分かれば、コマンドプロンプトにコマンドを渡すことができるシステム実行VIを使用して、この解決策をLabVIEWでプログラム的に実装可能です。システム実行VIは、接続(またはコネクティビティ)>>ライブラリ&実行可能ファイルのサブパレットにあります。

この記事はお役に立ちましたか?

いいえ