当Blogでたびたび取り上げているPX-W3U3等のUSBチューナーでは、スリープ/休止状態からの復帰やシステム障害から再起動する際に、一部が認識されなくなるケースがあります。
これはPXシリーズ固有の話ではなく、そもそも電源制御型ハブ利用の参考にさせていただいたこの辺の記事も、「24時間ワンセグ野郎」で使うチューナーの見失いに対する対策としてELECOMの電源制御型ハブ(U2H-SW4)を使う、という内容でした。
これは非常に有効な対策で、応用の監視バッチとともに過去記事で紹介させていただいていたのですが、残念ながらこのU2H-SW4
は既に製造終了しており、今年の7月に入ってから遂に流通在庫も尽きてきたようです。
まだ一部ネットで売られているものも見かけますがプレミア価格が付いており、もともと千円前後で気軽に導入できる対策としてご紹介していた意味がなくなってしまいました。
そこで代替策を、と考えたのが今回のきっかけです。しかしこれは良い契機で、調べていくうちにUSB機器の見失いや性能低下を防ぐにはどうすれば良いかの解決法がわかってきた気がしますので、この記事でご紹介させていただきます。
例によって「そもそも」の経緯や前置きが長いですので、その辺を飛ばしてすぐに対策を立てたいかたはこちらにジャンプしてください。
1.なぜ必要?
USBチューナーの見失い現象は、PCとの組み合わせによって全く起きなかったり無視できない頻度で起きたりとまちまちで、起きにくいシステム環境を作ってしまえば気にもならない話なのですが、私がこのような話に興味を持ったきっかけも、後から録画サーバとして追加した水冷機でそれまでのPCでは起きなかったこの現象が度々起きるようになったのが原因でした。
このマシンの場合は、システムがハングした際に無理やり電源OFFにして再起動した時などにこの現象が起きがちで、USB2.0/3.0のどちらのポートに繋いでも余り関係ないようです。起きてしまうとPCを何度再起動しても治らず、復旧のためにはUSBケーブルの抜き差しが必須で、ちょっと面倒でした。
それの根本的な対策を探しているうちに上記記事を見つけ、そこで提供されていたプログラムと自作の監視バッチを組み合わせたところ完全に対策できたため、ご紹介させていただいた経緯があります。
思うにUSBデバイス、特にUSBチューナーのようなある程度自立したコントローラを持って高度な処理をしているデバイスはかなり独立した動作をしており、本体のPCとはUSBケーブルを介した「ゆるい」結合になっています。
本体PC側が不意に再起動しても内蔵カードのようにハード的なリセットがかかるわけでもなく、PC側とのやりとりが突然断たれた等によってバッファ・オーバーフローなどおかしな状態になってしまうと「USBを抜き差ししなければ回復しない。」という状況が起き得るようです。
抜き差しをすればUSBからの給電が途絶えますので、基本的にUSB給電で動く設計になっているデバイス・コントローラも強制リセットされ、ほぼ例外なく復旧します。ただこれは日常の対策としては面倒ですし、録画用デバイスのように年中繋ぎっぱなしのUSB機器ではいつの間にか認識不良が起きていたのに気付かず大事な録画を失敗してしまった、ということに繋がります。
そこで、PC側のプログラムで認識不良がないかを適時監視し、発見したら「意図的にUSBの給電をOFF/ONしてデバイスをリセットする」という仕組みが必要になるわけです。
実はこの辺の特性も、「PCによって認識不良が起きなかったり起きやすかったりする」という違いが出る原因になっています。
USB給電はマザーボードによってシャットダウン/スリープ/休止の状態で給電を切るものもあれば入れっぱなしのものもあってまちまちで、設定ができるものもできないものもあります。また後に述べますが、OSのコマンドでリスタート時やサスペンド時に給電を切るタイプのハブ・コントローラもあり、そういうのが内蔵されているマザーであれば頻繁にUSBデバイスにもリセットがかかっているため、現象が起きにくくなっているわけです。
実際今になって調べてみると、もともと私がW3Ux用のメインマシンに使っていたITX機の場合、Windowsのリスタート時にUSB給電が必ず一旦切られる作りになっていました。いっぽう上記新サーバの水冷機は常時給電タイプでUSBチューナーがリセットされるタイミングが無く、そこに振る舞いの違いが出たようです。
しかしマザーやPCでそういうのが明記されているのは希ですし、わざわざここの仕様でPCを選ぶのも本末転倒です。(むしろスマホや携帯オーディオの充電のため逆に「電源切っても何があっても常時USB給電しますよ!」と謳ってるマザーが増えているのが現状。。)
そこで後付け対策として、「その手の」ハブ・コントローラを内蔵したUSBハブが役立つわけです。
2.USB給電をどうやってOFF/ONするか?
ELECOMの電源制御型ハブ(U2H-SW4)がスグレモノだったのは、「プログラムからポート毎の給電をOFFにしたりONにすることが可能」と明確に謳われていて、Windows用のプログラムも添付されていたことです。
ハブに添付されたプログラム自体は余り出来の良いものではなかったのですが、その動きを解析してバッチからコマンドを出せるようにしたツールを上記iteclubのブログさんが公開されており、それを使えば任意のタイミングで「USB給電のOFF/ON = USBチューナーのリセット」 が可能になっていました。
このハブが入手できないとすれば、代わりの物としては以下の3つの可能性があります。
1)実はU2H-SW4と互換のUSBハブが後継品や他の会社から出ている。
2)U2H-SW4と互換ではないけど、給電を制御するプログラムが公開されているUSBハブが存在する。
3)明確に謳われていないものの、ある種のUSBハブではプログラムで給電制御が可能である。(プログラムが無いなら作れ!)
で、結果ですが、1)はすぐに存在しないことが判りました。エレコムさんとしても震災に先立つ2010年に「節電ハブ」としてU2H-SW4を売り出したのですが、後継品も存在しないということはあまり良い商売にならなかったのでしょうか?ちょっと残念です。
2)についてはいろいろ調べた結果、「Linux向けであれば」給電制御のプログラムが有志によって公開されているハブが存在していることが判りました。具体的な現行品としてはシステムトークスさんが出している「SUGOI HUB4X」で、
全ポートではないのですが、うち2ポートが給電制御可能となっており、値段も二千円台とまあまあです。
参考にした記事
http://solarisintel.blog.fc2.com/blog-entry-5.html
http://yamada468.blogspot.jp/2012/05/usbonoff.html
http://www.ebimemo.net/diary/?date=20110530
公開されているLinux向けソース
http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/
http://www.ebimemo.net/diary/pic/201105/hub-ctl.c
で、このような記事やソースプログラムを調べてみて判った意外な事実は、以下のような点です。
・本来、標準的なUSBハブ・コントローラー・インターフェースには「ポート毎の給電OFF/ON」のコマンドが定められている。
・しかし、多くのUSBハブでは給電制御の回路が省略されており、そのようなコマンドには無反応になっている。(常時給電している。)
・本来の給電制御コマンドを受け付けるハブとして ELECOM U2H-G4S、SANWA USB-HUB14GPH(いずれも既にWithDrawn しかも高価!)といったものがあり、現行品で値段も手ごろなものとしてSUGOI HUB4X がある。
・そのようなUSBハブに本来の電源制御コマンドを発行してポート毎の給電制御をおこなうのが、上記プログラムである。
これはかなり期待ができる内容ですね。残念ながらこれらのハブを制御できるようなWindows向けプログラムは見つからなかったのですが、このLinuxプログラムを解析してWindowsにポーティングできれば目的は達せられますし、それが特殊な仕様ではなく「USBハブ・コントローラーの本来の仕様」なのであれば、そうと謳われていないハブでも制御できる物が見つかる可能性も高く、3)の話にも繋がります。
3.案ずるのは易し、しかし生むは難し
しかし、上記Linuxソースとiteclubのブログさんが公開されているU2H-SW4制御用のソースを見比べているうちに、話はそう簡単ではないことが判ってきました。なるほどWindows版が公開されていない訳です。
というのはLinuxではUSBハブのコントローラー自体が/proc/bus/usb以下に見えているので、そこにメッセージを送る(usb.hをincludeした上でusb_control_msgコマンド等を発行する)だけで様々なコマンドを発行することができます。
具体的には例えば、
03 08 00 01 00 00 00
というコマンドを送れば、「ポート1に電源供給を開始せよ」という意味になります。
上記リンクにあるhub-ctl.cもそのような手順で制御していました。
ところが、Windows環境下ではこの辺の「USBハブ(デバイスマネージャでユニバーサルシリアルバスコントローラーの下に見えているデバイス)」タイプの制御はOSがしっかり握っており、これに対してコマンドを発行するAPIライブラリは殆ど公開されていません。
デバイスタイプがHID(ヒューマンインターフェースデバイス)であればライブラリが公開されており、hidsdi.hをincludeするだけで、ファイルにリード/ライトする感覚でコマンドのやりとりができますが、それとは難易度が段違いに高くなります。
ELECOMのU2H-SW4の場合はUSBハブとしてはかなり特殊な仕様で(というか、給電制御用のコントローラーを別に持っていて)、それがHIDデバイスとして見えており、ここにコマンドを発行することでWindowsから電源制御ができていたのですが、試しにSUGOI HUB4Xを入手して接続してみたところそのようなHIDデバイスは認識されず、すなわちU2H-SW4と同じような手順では制御できないことが判りました。
残る方法としてはWindowsでこのUSBハブ型のデバイスに命令を発行する手順を見つけてゴリゴリとプログラムミングするしかありませんが、情報も少ないですし、そのような原始的な手法をうっかり行うと(本来デバドラが管轄している領域に立ち入ることになりますので)マザーのルートハブが動作しなくなったりなど不安な事例もありましたので、一般に公開するプログラムとしてはどうかと思えました。
4.いやもっと簡単な方法があった
行き詰ってぼんやりとUSB HUBの制御を解析した記事を眺めていたところ、何とWindowsはUSB HUBを認識するハンドシェイクの過程で、わざわざUSB HUBのポート1個ずつに「電源供給を開始せよ」というコマンドを送っているではありませんか!
大抵のハブでは無視されるこの「電源供給を開始せよ」というコマンドを律儀に送っているのは上の方で述べたように、
・本来、標準的なUSBハブ・コントローラー・インターフェースには「ポート毎の給電OFF/ON」のコマンドが定められている。
からと思われますが、それだけではなく
・本来、標準的なUSBハブ・コントローラー・インターフェースではバスリセットのコマンドの直後には給電がOFFになっている。
ためではないかと予測しました。
バスリセットでの電源OFF自体は情報がほとんどなく予測にすぎませんでしたが、これ以降は実験したほうが早いと思い、せっかく買った「本来の標準的なUSBハブ・コントローラー・インターフェース」になっているはずのSUGOI HUB4Xの左2ポートにUSBライトを繋ぎWindowsを起動してみたところ、確かにWindows開始時に「BIOS(UEFI)の画面」から「ようこそ画面」に移る間に一瞬、USBライトが消灯→点灯することを確認しました。
節電ハブの機能としてこれ以外にも「ホスト側のUSB給電が停止すると連動してハブの給電も停止」という動作をしますが、例え繋いでいるPC側のUSBポートが常時給電タイプであっても、このようにWindows開始のタイミングで一瞬給電のOFF/ONが起きます。
家にある他の何種類かのUSBハブ(SANWA USB-HUB226G、ELECOM U2H-MB410BBKなど)ではこの現象は起きず、一方Windowsが使っているドライバはGeneric USB Hubでどれも同じ(=同じコマンドを送っている筈)ですから、これは確かにWindowsのコマンドによって起きていで、それを正しく実行できるハブのみがこの動きをするものと判断できます。
Windowsは確かに、起動時にUSBハブにバスリセットのコマンド→給電開始せよのコマンドを送っており、対応したハブであればその瞬間に(短い時間ですが)給電が切られるようです。
その間僅かコンマ数秒程度ですが、USBライトで確かな点滅が確認される程度の時間であり、USBチューナーにリセットをかけるには充分です。
チューナーだけではなく一般的なUSB機器であってもここでリセットされることになるわけで、こういう解釈も可能です。
「USB機器は、本来の仕様のUSBコントローラやUSBハブに繋がっている限り、OS起動と連動してリセットがかかる仕組みを持っている。しかし現在の多くの内蔵ポートやUSBハブでは給電制御の仕様が省略されているため、それが機能していない。この原因でイレギュラーな状態が保持されてしまう事がある。」と。。
なお、この「Windows起動時の点滅の振る舞い」 はPC側USBポートの給電仕様によっても変わります。PCによってはハード的なリセットによって一瞬本体のUSB給電が途切れるものもあり、その場合はBIOS画面が表示される瞬間にライトが消え、Windosが起動している最中に(Windowsのコマンドによって)再点灯する場合もあります。
動画のように一瞬の消灯が起きるパターンは全く途切れることなく常時USB給電しているPCの場合で、何も対策しなければ最も見失いの起きやすいタイプになります。
.
さて、次に、任意のタイミングでこの給電OFF/ON をおこなうために、DevConユーティリティを使うことを考えました。
DevConユーティリティはUSBデバイスに、Windows起動時のハンドシェイクと同等なリスタートコマンドを発行できるため、過去記事でもW3Ux/S3U2の見失いの対策として一時ご紹介していたのですが、対応策としては不十分であり(結局USBチューナー側がハングしているケースではリスタートコマンド自体を受け付けない)、もっと確実な方法として「ELECOMハブを使った給電OFF/ON」の手順に差し替えた経緯があります。
しかし今回の場合、デバイスそのものではなくデバイスが繋がっているUSBハブにリスタートコマンドを送る事によって、デバイスの状態に関係なく給電OFF/ONして確実なリセットができますので、根本対策になりそうです。
DevConは対象がUSBハブの場合、ハブの下にデバイスが繋がっているとこの辺の記事で紹介されているような、disable/enableコマンドは受け付けませんが、restart コマンドは受け付けます。実際にテストしてみた結果、
確かにrestartコマンドで給電OFF/ONが観測され、繋がったデバイスをリセットできることがわかりました。
これはELECOMハブと同じというよりも、ELECOMハブの場合はOSの関り知らない所でのデバイス・リセットなので、それをOSにきちんと認識させるためにある程度電源OFF→ONの時間を置く必要がありましたが、こちらは正規のOSの再認識プロセスの中でリセットが行なわれて確実かつ速やかにデバイスが認識されるので、より信頼のおける手順になります。この仕組みを使うことがチューナー見失いの根本対策になることがわかりました。
5.バリエーション
以上の経緯でSUGOI HUB4X とDevConでUSB給電制御ができることが判りました。制御といっても一瞬OFF/ONするだけで、上記2-2)で紹介されているような、ポート毎に継続的にONしたりOFFしたりという制御ではありませんが、目的がUSBチューナーのリセットであればこれで充分です。
ただ、SUGOI HUB4X だけだとまたいつ販売終了になるかもわかりませんし、必要なのは特殊な作りではなく「電源制御を省略していない本来のUSBハブ・コントローラー・インターフェースを持つ」というだけですから、もっと他にも対応するUSBハブはあるはずです。
そこでちょっと気になった、Buffaloの節電ハブも入手してテストしてみることにしました。
(単なるテスト目的のために購入するのは無駄遣いなのですが、せっかくアフィで溜まったギフトポイントもあるので、ささやかな恩返しのつもりで。。)
気になったというのは、これらのハブは一般に「節電ハブ」「電源連動ハブ」と言われているのですが、単にPC側のUSB給電に連動するだけであればバスパワーのハブでも同じでありわざわざ謳っているようなメリットがあるのか判りませんので、もしかしたらOSからの給電停止せよ/開始せよ 等のコマンドに反応して給電をOFF/ONできるという事ではないか、と気づいたわけです。
ちなみに余談になりますが、Windows Vista以降で節電機能として設定できる「USBセレクティブ・サスペンド」というのは、
まさにこの「本来の標準的なUSBハブ・コントローラー・インターフェースが持っている給電ON/OFFのコマンド」等をWindowsが積極的に使って節電状態で給電を落とす機能と思われ、「節電ハブ」を名乗っているのはこの辺の仕組みにもきちんと対応してるよ、という意味かもしれないと思ったわけです。
尤もセレクティブ・サスペンドの機能自体はいろいろなトラブルの元になるので使わないのがお勧めですが。。
で、入手してテストしてみたところ、見事!この3種のハブでもDevCon restartコマンドで給電がOFF/ONでき、「本来の給電制御仕様に従った」USBハブであることが判りました。
前2つの小さな4ポートタイプの場合は何もしなくても全ポートが対応しています。また7ポートタイプの場合は、端の「常時給電」2ポートを除く5ポートで、スイッチを「SAVE」モードにしておけば使える(給電OFF/ONできる)ことが判りました。
これらは値段も千円台と安いですし入手も簡単で、実はSUGOI HUB4Xと比べても、給電OFF/ONに使えるポートが多い(SUGOI HUB4Xは2ポートのみ)という他にもちょっとしたメリットがあります。(6.でご紹介します。)
Buffalo節電ハブは以前からW3Uxスレなどで「見失いが起きなくなった」という推奨の意見があったのですが、これで理由が判りました。単にPCの給電に連動するだけではなく、たとえPC側のポートが常時給電タイプであっても、Windows起動の度に一瞬USB給電をOFF/ONしてくれるので、USBチューナーはその度にきちんとリセットされ、結果安定運用に貢献しているわけです。
ただしそれだけでは片手落ちで、実はスリープからの復帰の際にはWindowsはデバイスにリスタートコマンドを発行しないので、これらのハブを使っていても給電OFF/ONは起きず、よって「スリープ復帰での見失い」には対応できていない筈です。そのようなケースにも対応するためにはスリープ復帰時にも意図的にDevConコマンドを発行してハブにリセットをかける必要があります。
その辺の仕組みを簡単に導入するプログラムを作成しましたので、以下でご紹介したいと思います。
6.「電源制御型USBハブでUSBチューナーの見失い状態を解消するバッチ」を生成するプログラム
長い題名になりましたがここからが主題です。
1)準備するもの
① 電源制御型ハブ
以下のような製品が対応しています。
iBUFFALO 電源連動節電機能付き 4ポートセルフパワーハブ BSH4AE12
iBUFFALO USB2.0ハブ 4ポートタイプ 【電源連動タイプ】 BSH4AE06 (上の前世代製品で在庫切れ気味。敢えて選ぶメリット無)
iBUFFALO USB2.0ハブ 7ポートタイプ(ACアダプター付) 節電モデル BSH7AE03
システムトークス SUGOI HUB4X ACアダプタ付 電力供給安定型 USB2-HUB4XA
Buffaloの4ポートタイプの場合は何もしなくても全ポート対応、Buffaloの7ポートタイプの場合は、端の「常時給電」2ポートを除く5ポートで、スイッチを「SAVE」モードにしておくことが前提、またSUGOI HUB4Xの場合はSUGOI HUBのロゴを上にした正面から左の2ポートが対応しています。
意外ですが、以前の記事でご紹介していたELECOMの電源制御型ハブ(U2H-SW4)はこのような「USBハブ標準のコマンドによる電源制御」には対応しておらず、独自の方法で電源制御しますので、以下の方法は使えません。既に販売終了製品ですので過去記事も新しい手順に置き換えましたが、すでにU2H-SW4をお持ちの方用の手順もここに残しておきます。
U2H-SW4
によるPLEX USBチューナーの監視方法
リンクで解説されているようなプログラムを活用して該当ハブに繋がったデバイスのリセットを適切なタイミングでおこなえば、デバイス見失いがあっても解消できます。(但し記事が最近リンク切れしているようなので、プログラム自体はこちらにミラーを上げておきました。もし問題がありましたら教えてください。)
これを使いこなすためのサンプルバッチを添付しましたので、ご活用ください。(使い方は中にコメントしてあります。
Windows7以降であればこれと上記リンクのプログラムを入れて、中のデバイス数をご利用環境に合わせて書くだけで使えます。Vista以前の場合はPowerShellの導入、更にXP Home Editionに限ってはコマンドファイルの追加も必要ですので、詳しくはbatファイルの中を読んでいただければと思います。
他にも対応している製品もあるかもしれません。当プログラムではハブのテストができるようになっていて、このようなUSBライトがあれば簡単に確認できます。
あまり"高級"なUSBライトだとオサレなソフトスイッチが付いていて、一旦OFFになるとスイッチを押さない限り点灯しないものもあるので、上図のような単純なタイプがお勧めです。
発見できたら随時追記していく予定ですので、電源制御可能なUSBハブを発見された方はコメントで教えていただければ幸いです。
② バッチ自動生成プログラム
前提ですが、このプログラムの動作にはVC++2010(x86)のランタイムが必要ですので、まだ導入されていない方はリンク先からダウンロード&導入してください。
Visual C++ 2010 再頒布可能パッケージ (x86)
さて、この電源制御機能を使うにはお使いのWindows(32/64)に対応したDevConのプログラムが必要ですが、4.でご紹介したDevConの記事からダウンロードできるのは32bit版だけです。(64bit版のように見えるのはIA64、すなわちItanium版なので、通常のWin64では使えません。)
その辺のダウンロードの手順と取り込みを極力自動化し、また対象となるUSB HUBの検出も自動化した上で、検出されたUSBハブ・デバイスにDevCon restartコマンドを発行するバッチを生成するのがこのプログラムです。
生成するバッチは単純に発見したUSB HUBにrestartをかけるもの(HUBReset)の他に、予め登録したPLEXチューナーの個数と見えている個数を比較して、見えている数が少なければ(録画タスクが動いていないタイミングで)チューナーへの給電をOF/ONすることでリセットをかけるもの(PLEXReset) 、の2種類を生成します。(後者はPLEXチューナーを使っている場合のオプションです。)
ご利用には、以下のzipファイルをダウンロードして、適切なフォルダに解凍してください。インストールは不要です。
なおこのフォルダのHubReset.exeからプログラムが起動できますが、いくつかの機能を使う際にVista以降では管理者権限が必要になります。UACの設定によっては単純にダブルクリックで起動すると権限チェックによってDevCon restartが弾かれてしまって 2)-③でUSBライトを使ってテストしても何も反応しなかったり、生成先のフォルダが作成できない、スタートアップ登録ができない、などの問題が出ます。
これを避けるためにダブルクリックではなく、「右クリック→管理者として実行」で起動してください。
これは生成されるバッチでも同じで、手動で起動するときは「管理者として実行」するのが確実です。(スタートアップやタスクスケジューラからの実行ではもともと管理者モードになっていますので、特に気にする必要はありません。)
また、他のフォルダや他のPCで使う場合は、このフォルダ構造をそのままコピーしてください。(HubReset.exeだけコピーしてもプログラムは起動しません。)
フォルダ全体をUSBメモリやネットワークの共有フォルダに置いてそこから実行すれば、一度取り込んだdevcon.exeを複数PCで使い回しますので、それなりに便利です。
2)プログラムに従ってバッチを自動生成する。
以降、大体は画面を見ながら進めれば判る筈ですが、一応解説しておきます。
① DevConユーティリティを取得する。
既にdevcon.exe をお持ちの方は下のファイル指定欄に直接D&Dしても良いですが、OSが32bitなら32bit版、64bitなら64bit版が必要です。(合っていなければ弾かれます。)
お持ちでなければ、画面上のリンクからダウンロードして指定してください。リンクをクリックすれば図のようなブラウザのダウンロード画面になりますので、
保管場所を指定してダウンロードしてください。(ブラウザやバージョンによってこのダウンロード画面の出方は違います。)
ダウンロード終了したら、保管場所の該当ファイルを指定して、「次へ」を押してください。
なお、下の方の「給電ON/OFFのハブは使わず、チューナー内部ハブをリセットする」は通常はチェックしないでください。
これは、「電源制御型のハブはまだ入手していないが、とりあえず見失いがあったら、まずはDevConユーティリティでチューナーのリセットを試みたい。」という場合に使うオプションです。
この対策で効果があるのはチューナーの内部にハブを持っているPX-W3UxとS3U2のみで、これを選択した場合はこれ以降の画面でのガイドも少し変わります。
ただし上の4.で書いたように、この方法はチューナー見失いに対する対策としては不完全で、効果がない場合も多いです。
(そもそもDevConでやるのと同じことをWindowsは起動の度にチューナー内部ハブに対しておこなっているわけで、それで復旧しないケースがあるからこそ、この記事のような対策になるわけです。その辺の解決にはなりませんが、ある程度のケースは救えます。)
とりあえず金をかけない形での見失い暫定対策として使ってください。
② USBハブのハードウェアIDを取得する。
USBハブは実はもともとPC本体が内蔵しているものも何個かありますので、デバイスマネージャーで見ても一体どれが新しく追加したハブなのか判りにくく、またこれもややこしい点として、USB2.0/3.0のどちらに繋いでいるかによってIDも変わります。(3.0なら先頭にVが付く。)
これを簡単に取得するために、該当のUSBハブを繋いでいない時と繋いだ時でデバイスマネージャーの内容を比較して、目的のハードウェアIDを判別する、という手順にしました。
まずはこの画面で、「電源制御用USBハブ」を繋げていない状態で「現在のデバイス構成を取得する」のボタンをクリックします。
次にPCに「電源制御用USBハブ」 を繋げて10~20秒程度待ったのち、下のボタンを押してください。
ここで余分なデバイスまで検知してしまわないよう、この時点では電源制御用USBハブの先には何も繋げないようにしてください。
「以下のUSBハブ・デバイスを検出しました。」というメッセージが表示されたら成功です。
なお、ここで2個以上のハブを繋いでもそれらが同じハードウェアIDを持つ場合(同じハブを2個とかBuffaloの4ポートタイプと7ポートタイプの混成の場合)、検出されるハードウェアIDは1個だけです。DevConが無駄なコマンドを出さないために重複チェックして省いているだけで、検出ミスではありませんのでご安心ください。
確認したら「次へ」を押してください。
なお、「次へ」を押すと以下の警告メッセージが出ることがあります。
これは、「追加したUSBハブと同じハードウェアIDを持つUSBハブ・デバイスが他にも既に存在しているよ」、という警告です。
特にSUGOI HUBを使う時には、このように大量のデバイスが検出されることがありますが、これはSUGOI HUBで使われているNEC製のコントローラが割と汎用的にマザーボード上や市販のハブでも使われているからです。
同じコントローラでも大抵は電源制御回路は省略されているのでUSB給電のOFF/ONには使えないのですが、問題はDevConユーティリティは同じハードウェアIDを持つ物は区別ができず全てにrestartを掛けてしまいますので、それらのハブに繋がっているUSB機器も、全て一瞬接続が途切れてしまうことです。
すぐに回復しますので大抵は問題ありませんが、もしそのようなデバイスの中に読み書き中のUSB HDDなどがあると読み書きに失敗しますので、そのようなクリティカルなデバイスがUSBに繋がっている場合は、次のテスト画面で検証してから使ってください。
なおBuffaloの節電ハブであれば、あまり同じタイプのコントローラーがPCオンボードで使われないのか、うちで検証した限りではこのような現象は起きませんでした。その辺はBuffaloハブのちょっとしたメリットかと思います。
③ この画面ではUSBライト(など)を使って実際に給電のOFF/ONが起きるかをテストすることができます。
1)-①でご紹介しているようなハブであれば敢えてテストする必要もなく、ここはスキップして問題ありませんが、もしご自分で他のハブをテストしてみたい時はUSBライトを用意してここでやってみるのも良いと思います。
また②にあるように、他のUSBハブ(やPC本体USBポート)も巻き添えの瞬断がおき得るようであれば、PCの動作上何か問題がないか、ここで確認してみてください。
④ ハブの給電OFF/ON用バッチの導入先を指定し、バッチを生成する。
ここでバッチ導入先フォルダを指定して「バッチ生成」ボタンを押せば、汎用の電源制御バッチ HUBReset.bat が生成されます。
おまけの機能として、PLEXチューナーの認識数を数えて、設定値より少ない時だけ電源リセットをかける、というバッチ生成機能が付いていますが、これで検出できるのはやや古いタイプのPLEXチューナーだけであるのと、経験的に通常の利用ではそこまで厳密にやらなくても、スリープ解除時や週一回など決まったタイミングで必ずリセットをかけるほうが確実な効果があることが判りましたので、PLEXチューナー向けのバッチ生成(PLEXReset.batの導入 にチェック)は不要です。
このHUBReset.batをWindowsのスタートアップに登録すれば、Windowsの起動/障害後再起動の際に必ずこのチェックをやるようになります。
ただしご紹介している電源制御タイプのハブの場合、起動時に必ず1回は給電OFF/ONが起きるので、ここは敢えて組み込まなくても大丈夫です。
HUBReset.batのより重要な使い方は、以下のようにスリープからの復帰時に作動させることです。
⑤ スリープからの復帰時にバッチを作動させるためのガイド
④で「生成」を押せばバッチが作成されますが、この画面ではそれをスリープ状態からの復帰時に作動させるためのガイドが書かれています。
④にある通り、このタイプのハブではWindowsのスタートアップでわざわざバッチを動かさなくても給電のOFF/ONは必ず行なわれますので、そもそも見失いを起こしにくくなっており、U2H-SW4と比べてもスタートアップ時にこれらのバッチを動かす必要性は低くなっていますが、スリープからの復帰時にこのバッチを動かすことは、残る見失いの可能性を消すために重要になります。
文章を読めばほぼ理解できると思いますが、念のため設定画面を追ってみます。
(1)TVRockでスリープ復帰時にHUBReset.batを動かす設定
この通りの設定で大丈夫です。プロセス・タブで WU: の後にHUBReset.batのフルパスを""で囲んで指定してください。
(2)TVRockが動いていない環境ではタスクスケジューラを使って設定してください。
コントロールパネル→管理ツールからタスクスケジューラを開く。
Windows10では、スタートボタン右クリックから「コンピュータの管理→タスクスケジューラ」で呼び出せます。
次に、右側にある「タスクの作成」をクリックしてダイアログを開きます。
あとは以下を参考に必要項目をセット
トリガ・タブでは休止からの復帰のイベントを拾うために、以下のように「ソース:Power-TroubleShooter イベントID:1 」のイベントをトリガとして指定します。
ただし特にWindows10では、これだけでは「スリープからの復帰」がトリガできない場合があります。したがって以下のトリガ 「ソース:Kernel-Power イベントID:507 」 も併せて設定してください。
次の操作タブでは、プログラム/スクリプトの欄に HUBReset.batをフルパスで指定してください。
条件タグでは念のため、AC電源のみの制限を外します。
以上でOKを押せばスリープからの復帰時に生成したバッチを実行するタスクが登録されます。USBライトを持っていれば実際にスリープ→復帰をやってみて、ライトが点滅するか確認してみてください。
これで設定は完了ですので、あとは使用するUSBチューナーを繋げて利用開始してください。
なおあまり関係のない注意点ですが、PX-W3Ux、S3Uxの場合、今までと違うコントローラを経由させて接続するとドライバが再導入され、認識完了するまで1分程度かかります。
これ自体は待てばよいだけの話なのですが、その際にLNAやLNB給電の設定が初期値に戻ってしまいますので、必ず再度、LNAやLNB給電ツールを適用することを忘れないようにしてください。
.
終わりに)
このバッチと電源制御型ハブの他の応用方法として、「定期的にUSB接続をリセットする」という活用方法もあります。
というのはUSBは何週間、何ヶ月と常時ONのまま長く繋ぎっ放しにしているといろいろエラーを拾って速度が低下することがあるらしく、USBハードディスクでも経験したことがありますし、PX-W3U3でもデバイスの認識に異常はないのになぜかDROPが発生してテレビ画面の動作もカクつき、USBを抜き挿ししたら回復したということがありました。常時ONのPC環境でそのような現象を防止するためには、例えば一週間に一度タスクスケジューラーを使って、上記PLEXReset.batで「チューナー個数を実際より多く設定したものを別のフォルダに生成」しておいた上で定期的に動かすようにしておけば良いと思います。チューナーが実数より多く設定されていれば、PLEXReset.batは必ずハブのリセットをおこないます。
曜日・時間帯は録画の少ない所を選べば良いと思いますし、もし録画と重なっても、PLEXReset.batは録画中であること(TVTestやRecTask、EDCBが動いている状態)を検知して、終了するのを待ってから動くようになっています。
他の汎用性の面で言えば冒頭の「1.なぜ必要?」で書いたように、USB機器はPC本体と同期してリセットされることもなく、放っておくと何ヶ月もリセットなしに運用している事になりがちで、そうなるとどんな機器でも何らかの不具合が出やすい状況になります。マウスやキーボードのような単純なデバイスなら良いのですが、もっと複雑な機器であれば適時リセットをかける仕組みとしてこの種類のハブとツールを使うのが、安定運用のために有効な対策になります。
(ツールを使わなくてもこの電源制御型ハブを経由させた時点で、PC側のリセットに連動して必ずUSB機器もリセットされることになるので、それだけで安定性は高まります。)
.
USB機器はこのように経験しながら対策していくような特性も多いのですが、きちんと対策すればこれほど拡張性・柔軟性に優れたものはありませんし、応用のための様々な機器も安価ですので、このようなプログラムも使いこなしのお役に立てれば幸いです。
以前、ご相談したTigerと言います。
しばらく前から、不調(0バイトの録画)が時々発生するようになり、W3U3が壊れたかと思いましたが、
あれこれ調べているうちに、先日のwindows10のUpdateで、「USBセレクティブ・サスペンド」が有効に戻っていることに
気が付きました。一応、ここを無効にしたら、今の所、OKになりました。
Updateでこういうところを変更するのやめて欲しいですよね。
再度、この記事を読み直しして気が付きましたので、ご参考に、ご連絡しました。
以前、見失いがこの記事のおかげで、無くなったので本当に参考になりました。
余談ですが、W3U4から、LNB電源がなくなったそうですね。Vladiさんは、専用の電源をつけていますか?
失礼しました。
先程のコメントはちょっと間違いだったようで。
17127で、イベントIDが変わったのではなく、私の環境では単に507がでなくなったようです。
ただ、ビルドが変わった以外以前と何もOSに手を加えていないので、17127ではスリープ復帰時にイベントID507が返ってこないという変化が起こった、ということは間違いないようです。
こんにちは。報告させていただきますm(__)m
冬は低音病で、スリープ復帰後数分はマウントしてくれないので、PLEX.BATで何度もHUBリセットしてるうちに機器が通電で温まってマウントできるようになる…ということをしていましたが、数日前からマウントされず録画失敗続きだったので調べてみると、タスクスケジューラでのPLEX.BAT実行の形跡がありませんでした。
どうやら最新のwindows10 RS4 PreviewBuild(17127)では、Kernel-Powerで「システムがスリープ状態から再開されました。」で返すイベントIDが107になっているようです。507というイベントIDはありませんでした。直前の17125までは問題ありませんでした。
17127は2018年の春の大型アップデートのほぼ完成版と言われているので、春の大型アップデート後はイベントIDを確認し直したほうがいいかもしれませんね。(Power-TroubleshooterはOSをインストールした日1回だけしか記録されなかったので、Kernel-powerが頼みの綱…)
昨日、質問した者です。
単にバッチファイルの指定先が間違っていただけでした。
何度も見返したつもりでいたのですが、
コマンドプロンプトからバッチファイルを起動して間違いに気付きました。
お騒がせして申し訳ありませんでした。
ですので、昨日とこのコメントは無かった事にさせて下さい。
PX-W3U3の見失いに困っていましたので助かりました。
PCはインテル NUC6i5SYH
USBハブはiBUFFALO BSH4AE12
チューナーはPLEX PX-W3U3 V1を1個使い
③ この画面ではUSBライト(など)を使って実際に給電のOFF/ONが起きるかをテストすることができます。
上までは動作確認済みです。
その後、⑤ スリープからの復帰時にバッチを作動させるためのガイド
に従ってバッチファイル作成。
(1)TVRockでスリープ復帰時にHUBReset.batを動かす設定に従って
赤枠内を保存場所に合わせて変更してTvRock設定のプロセス内のコマンド蘭に書き込み。
枠外は意味がが分からず赤枠内だけを書き込みました。
上の状態で試した所、TvRockログに下のようにエラー表示がされます。
[WU]コマンド実行・異常終了コードを検出しました (0x01)
エラーの原因が分かればご教授願います。
Ghostさん、ご指摘の通りですね。記事加筆しました。
BSH4AE06、基本、廃版みたいです。
後継品は、BSH4AE12でしょうか?
今まで問題なく動いていたのに一ヶ月ほど前からPX-W3U3の
赤ランプが点灯しなくなることがありました。
USBを抜き差しすればだいたい直りますが、直らないこともあります。
その場合はパソコンを再起動するしかないです。
急にこんなことになったりするのでしょうか。
ところで、PX-W3U3の故障も疑い、購入も検討したところ、
値段がプレミアム価格になっていました。
どうやら製造元でも生産終了したようです。
PX-W3U4という新型が発売されたようですが、アマゾンや楽天どころか
製造元からすら購入できないのはどういうこと・・・
BSH4AE12でも上手くいきました。
ありがとうございました。
TV録画関係ではないのですが、USBデバイスへの電源供給をプログラムから制御できないかと思って検索してたどり着きました。
有用な情報(とくに2章と3章)、ありがとうございます。
紹介されているhub-ctrl.c ですが、libusb-win32ドライバを使ったらwindows(windows7)でもあっさり動作しました。
libusb-win32のドライバの導入は、zadig
http://zadig.akeo.ie
というプログラムを使うと簡単です。
単純にusb機器をリセットしたいだけであれば、必要ない情報だと思いますが、一応報告まで。
しん さん、それは壊れたんじゃないでしょうか?
初めまして、自分もプレクスのPX-W3U3を使用してます。
今までなら録画と録画の間、数時間をおいてもきちんと起動し録画がされていたものでした。
それが突然、起動もしなくなり、何度録画が失敗しているかと頭を悩ませております。
ちなみに録画ソフトはEDCBを使っております、W3U3は電源が入ると赤いランプがつくじゃないですか、つまり電源が入らず、起動しない。同じUSBでもマウスはきちんと動くのに・・・突然そんな事が起き、W3U3が故障したのかと思いました。
ここに書かれている設定、USBのセレクティブサスペンドを無効にしても、解決しませんでした。
通常自分のパソコンはエコモードですが、それでもきちんと起動していたので他に何か原因があるのかとここに訪れた次第です。またここに書かれている事をよく読んで勉強したいと思います。
結局はW3U3の電源が入れば解決する事なんですけどね・・・
ご回答、ありがとうございます。
スリープ復帰後、毎回リセット、確認のbatファイルで、
様子をみてみようと思います。
ps.自分も、100均で、LEDランプ買ってきて、確認してみました。
なるほどぉ~でした(^^)
特に問題ないと思います
早速のご回答ありがとうございますm(._.)m
終わりに)に定期的にUSB接続をリセットすると良いとありましたので、
タスクスケジューラーを作っていて、ふと思った素人質問なのですが…
スリープ復帰時に、毎回リセットさせてから、チューナーの状態を確認するのは、
逆に何か問題がありますか?
>BSH4AE06にもACアダプタは接続したほうが良いですか?
はい。そのほうが電源供給が安定すると思います。
初めまして
W3U3の見失いが、時々発生して困っていました。W3U2では、発生しないため、
W3U3の問題かと思い、保証で、交換もしてもらっていたのですが、
治らず、半分諦めつつ、対応を検索していて辿りつきました。
早速、 BSH4AE06を購入し、プログラムを使わせていただき、batファイルを作成、TVROCKに登録しました。
細かいところに、気をつかっている素晴らしいプログラムですね。
素人質問なのですが、
1.W3U2、W3U3には、ACアダプタで、電源をいれてありますが、 BSH4AE06にも、ACアダプタは、
接続したほうが良いですか?
マザーボードを最新の物に変えたところ、頻繁にチューナ欠けを起こし始めて
大変苦慮していました。紹介されてたELECOMのハブと、提供して頂けてる
ツール+DEVCONで、以降全く問題が起きなくなりました。大変有益な情報
ありがとうございます。
おそらく今回のマザーではコマンドに対して電源のON/OFFの反応が違った
(仕様に反している?)のようですね。これが人によって素で認識欠け起こした
り起こさなかったりする原因にもなるのでしょうかね。
>録画システムの進化はそろそろそろ枯れてきて安定期に
まだまだ進化すると思いますよ
ただ当たり前に使うためにする苦労はかなり減ってますね。
こんにちは。前回は名前を書きわすれ失礼しました。
今回の解析結果大変有用な情報ですね。
これでHubの故障も対策ができます。
録画システムの進化はそろそろそろ枯れてきて安定期にいるとおもいますので
このような安定性向上ノウハウがますます重要になりますね。