WindowsにUSBデバイスの取り外しと再検出を強制するには?

更新しました Apr 4, 2022

使用製品

ハードウェア

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

ドライバ

  • 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は、接続(またはコネクティビティ)>>ライブラリ&実行可能ファイルのサブパレットにあります。