書くブログコンテンツへスキップぼちぼち書くブログ喫煙関係、うまいもん、パソコンのこと等をマイペースで記します。高知市に住んでいるので地元の情報も投稿します。BY50Sを保証交換してもらってから、USBケーブルでの監視状態がすごく安定する様にはなったのだが、それでもたまにBY50Sの状態監視ができない状態(通信エラー)が起きていることがある。根本的な解決に至っていない様だ。BY50Sを代品交換してもらった~PCとの通信エラー頻発で問い合わせたら早...https://mypace.sasapurin.com/entry/protect-by-omron-ups-by50s-2/梅雨もまだ明けてないらしいですが台風も既に発生していて、かなり蒸し暑く鬱陶しい日が続いています。BY50Sですが、PCとはUSBケーブルで接続し、専用のシャットダウンアプリをインストールして停電(瞬断)に備えています。...メーカー(OMRON)は無償交換してくれたし、これ以上は仕方ないと判断して、通信状態を定期的に監視して、もし通信エラーが起きているならUSBポートをリセットするスクリプト(BATファイル)を走らせて対処療法的に対策することにした。停電の時にきちんとシャットダウンスクリプトが動いてくれたら良いのだ。デバイスマネージャでUSBポートを突き止めるマイクロソフトが配布している「devcon.exe」を使えばUSBデバイス(ポート)の状態をチェックして、リセットをかけられるのだが、デバイスIDの指定が必要になる。デバイスマネージャにおいて、BY50Sがどの様に(デバイスIDで)認識されているか調べることにした。デバイスマネージャに取り掛かっても良いが確実に探したいので遠回りをする。最初にUSBデバイスがどの様に認識されているか調べるのが近道だ。調べるために使ったのは「usbdeview」というフリーウェアだ。WindowsというOSは過去に接続されたUSBデバイスはレジストリに記録される仕組みになっている為、USBDeviewで表示させると数年前に接続したUSBデバイスなども羅列される。これでは情報が雑然とするので、USBDeviewのオプション表示機能を使って「切断されたデバイス」は非表示にして現在接続されているデバイスのみに絞り込む。「オプション」-「切断されたデバイスを表示する」のレ点を外す。すると現在USBポートに接続されていて有効になっているデバイスのみ表示される(下図)ので、シンプルに現在は4つのデバイスが認識されているのがわかる。上にリストアップされたBY50Sが「USB入力デバイス」として認識されており、左端の黄緑色で正常ステータスだということがわかる。このリストから該当デバイスをダブルクリックすると詳細情報が分かる。これで大体の”アタリ”がついたので、デバイスマネージャで調べやすくなった。デバイスマネージャを起動してOS上でどの様に認識されているかを追跡する。ヒューマン・インターフェイスデバイス内の、USB入力デバイスが怪しい。みつけた!詳細タプのプロパティから、「バスによって報告されるデバイスの説明」を選ぶと、値に「BY50S」という情報が見つかった。ハードウェアIDの情報が欲しいので、プロパティの種類を「ハードウェアID」に切り替えて値を探す。下図の場合は「USB\VID_0590&PID_0081&REV_0109」ということがわかった。ちなみに右クリックするとこの値はコピーできるのでメモ帳などに容易に転記できる。Kit(WDK)」に含まれるツールの一つに過ぎない。開発環境を整えているPCであればすでにインストールされているかもしれないが、私のこのPCには開発環境は入れていないので、これっぽっちのことで余計なものまでインストールしたくない。ピンポイントでdevcon.exeを手に入れる方法はネットで検索すると見つけられる。下記を参考にさせてもらった。gu...https://www7390uo.sakura.ne.jp/wordpress/archives/705リンクが切れる可能性もあるので要点だけ引用させてもらっておく。787bee96dbd26371076b37b13c405890.cabをダウンロードしてきて、CABファイルの中から「filbad6e2cce5ebc45a401e19c613d0a28f」を取り出して、devcon.exeとリネームしてPATHが通っているディレクトリに保存すれば、コマンドプロンプトから実行できる様になるそうだ。実際に試してみたら成功した。devcon.exeを試験してみるコマンドプロンプトから下記を実行してみた。ダブルコーテーションで囲った部分は当然ながら先に調べたBY50Sの「ハードウェアID」である。人それぞれPC環境が違うのでこのIDは違っていると思われる。running.と返ってきたのでBY50Sとの通信が正常だと言うことがわかる。確かに今はBY50Sのステータスアイコンも緑色で商用運転中(正常)とある。devcon.exeについては検索すると色々な情報が見つかるので用途(目的)に合った方法を導入することになると思う。USBポートをリセットする方法もある様なのでHUBにぶら下がっているデバイスをまとめて再起動することもできそうだ。t...devcon.exeでUSBデバイス(BY50S)を再起動してみるUSBデバイス(BY50S)のIDを突き止めてステータスが取れる様になったので、コマンドの引数をリスタートに変更してやれば再起動もできるはずだ。failedと表示される。found.ってのが気になる。権限の問題かも知れない試しにコマンドプロンプトを管理者権限で起動してもう一度やってみる。ステータスも取れたし、リスタートも成功した。USBデバイスの再起動には管理者権限が必要らしい。いうことでこのことはしっかり記憶(意識)しておく必要がある。スクリプト(BAT)を考えてみるWindowsにはタスクスケジューラがあるので、例えば10分毎にBATスクリプトを繰り返し実行し、USBデバイスのスタータスを取得し、異常が出ていればリスタートをするという単純なもので良いだろうと考えた。ステータスはテンポラリファイルにリダイレクトし、それをfindで調べて異常通知であればリスタートを実行し、最後に必ずテンポラリファイルを削除するということを繰り返す。シンプルな方がメンテナンス(バグ取り)しやすいので、プログラマでもない私はこの路線で行くことにする。GISTにあげておくので、今後もっと詳しい誰かが改良してくれることを期待しておこう。現時点では再起動のログを残すということは考えていないので改良するとしたらそこにあるかも知れない。BY50S以外のデバイスでもUSB接続が不安定とか、意図的にUSBデバイスをリスタートさせたい用途に応用できると思われる。タスクスケジューラに登録して繰り返し実行Windows上で繰り返し実行や、定時に実行させるにはタスクスケジューラを使うのがお手軽だと思う。LinuxだとCronを使えるのでよりシンプルだが、Windowsユーザーである以上はタスクスケジューラを活用するのがしきたりに乗った方法だろう。ここで注意しなくてはならないことは、「管理者権限」でBATファイルを実行させないと、リスタートが行われない(失敗する)ということだ。これまでの検証結果で実行権限が必要だということが分かっている。タスクスケジューラーには実行ユーザーと権限を設定する項目があるので忘れずに設定し、少し検証してから実運用に移行する必要がある。今後も様子をみて不具合やより良いアイディアが湧いたらスクリプトを見直す可能性はある。できれば面倒なのでこのまま安定して動いてほしいけれど。こちらのブログ、たいへん参考になりました。小生も「通信エラー」頻発で悩まされておりましたが、こちらの記載内容で応急措置を実施しました。APCのUPSを使用した時は、このような現象は、ほぼ発生しませんでしたので、最初は困惑しておりました。ありがとうございました。PMコメントありがとうございます。参考になったとしたら記事に記した甲斐がありました。10からUSBポートを制御する方法)ドライバ等)に変更があったんじゃないかと想像しています。10は信用出来ません。早くMicrosoftが対策して不具合を潰してくれることを願うのみなのですが、いつになるかもわかりませんね。