UPS
先週、OMRON UPS BY50SとPCのUSB通信が不安定なので定期的に状態監視して、不具合があればUSBデバイスを再起動をかけるBATを仕込んだわけだが、どうやらdevcon.exeで取れるStatusでは不十分だとわかった。
というのも、OMRON PowerAct Proで通信エラーになっていても、USBデバイスとしては正常認識されていることが多々あったからだ。つまり通信エラー状態になっていてもdevcon.exe statusでは正常と診断されてしまい、先の方法では通信エラーの状態を的確に検出することが出来ないと分かった。
そういうわけで、この方法では根本的な対策にはならないとわかったので、もっと有効な方法を考えてみることにした。もちろん根本的な解決にはOMRONがPowerAct Proの状態監視をもっときちんとさせる必要があると思うのだが、自分で出来る限りはやっておきたいので対処療法的ではあるが工夫をしてみる。
イベントビューアに状態の変化が通知されている
ちょっと調べてみるとOMRON PowerAct Proの状態通知は、イベントビューアに対応しているということがわかった。
通信エラーの時と回復した時に「イベントビューアー」-「Windowsログ」-「アプリケーション」の中にソース名「PowerAct Pro」という名前で警告と情報が上がってくる。
通信エラー時
下図の通り、通信エラーで「UPSと通信できません。」という情報が上がってきている。ここで欲しい情報は、イベントID「1033」という数字、ソース名「PowerAct Pro」である。下図によると通信エラーが発生するとイベントID「1033」が記録されることがわかる。
通信エラー回復時
devcon.exeでUSBデバイス名を指定してリスタートをかけると下図の様に通信確立(回復)となり、「UPSと通信を開始しました。」という情報が上がってくる。ここで欲しい情報はイベントID「1」である。
以上のことから
- PowerAct Pro通信異常時:イベントID:1033
- PowerAct Pro正常時:イベントID:1
このステータスを検出すれば良いのだということがわかる。残念ながらdevcon.exeではこれを検出できていなかった。私が考えるにはPowerAct Proに問題(不備)があると思う。USBデバイスとしては正常である以上、通信状態の維持はアプリケーションの責任範疇だからだ。
タスクスケジューラーで状態監視させる
OMRON PowerAct Proの状態通知がイベントビューアーにわかりやすく通知されて来るのはある意味ラッキーである。イベントビューアーに通信エラー(イベントID:1033)が記録されたら、それをトリガーに再起動コマンド(devcon.exeでrestart指定)を発行すれば、その都度的確に通信エラーに対応できると考えた。
下図の様にタスクスケジューラに新たにタスクを登録し、トリガーとして「イベント時」を指定した。アプリケーションログに、ソース「PowerAct Pro」、イベントID「1033」が記録されたらdevcon.exe restartを発行させるわけだ。
Windowsのイベントビューアとタスクスケジューラは組み合わせて使うことができるので、アプリケーションの状態通知がアプリケーションログとして残るならば、状態監視代わりにも使うことができる。
また一週間不在の間でログ収集させて検証し、週末に再評価をする。
参考資料
イベントビューアーとタスクスケジューラを組み合わせて問題解決をするのであれば、多分、考え方としてはこことか参考になるのではないだろうか。
コメント
はじめまして。
本記事、たいへん参考になりました。
当方もオムロンのUPSの通信エラー頻発に悩まされておりました。
2台のPCにそれぞれUPSを接続してPowerAct Proで監視させていたのですが、
2台共に通信エラーが頻発して非常に不安定な状態で運用しておりました。
サポートセンターに連絡するも、らちがあかない状態の中で本記事に行き当たりました。
本当にたすかりました。
ありがとうございました。