動画の修正とお詫び
第2回「オブジェクト化しよう」において、当初、Nゲージが衝突してしまう動画が掲載されており、驚かれた方もいらっしゃると思います。深くお詫び申し上げます。意図して行ったものではないのですが、せっかくの機会でもありますので、機器制御というテーマでこの事故について分析してみたいと思います。
この動画は、動作確認時に最初の段階で撮影されたものです。結論から申し上げますと、ハードウェアに故障が発生し、ポイントに電流が流れたままになってしまいました。このため、画面奥側のポイントが切り替わらず、衝突につながったものです。
原因究明に大変時間がかかったのですが、故障が発生している回路を使わないよう、空いている回路に新しいポイントを割り当て、プログラムを修正して(オブジェクト指向にしたおかげで1ヵ所変えるだけでした)、撮影を再開しました。第2回で現在公開されている動画は、こうして撮影されたものです。余談ですが、電流が流れ続けたことによりポイントは焼損してしまいました(写真)。
組込みシステムと安全対策
組込みシステムは、機器制御という性質上、事故と無縁でいることはできません。このため、とくに重大な部分は何重にも安全を確保することになります。たとえば今回のシステムでは、LANはリアルタイム性が保証されていないため、タイミング制御が必要な部分はすべてハードウェア側で処理しています。LANが遅延したり、通信ができなかったり、スクリプトが異常終了したりした場合でも、ダメージを受けることはないように設計してあります。通電時には基板のLEDが点灯し、ポイントのコネクタはレールとは色が異なるので、配線ミスもすぐにわかるようになっています。しかしハード故障については考慮が足りず、このような結果になってしまいました。
この連載でNゲージを選んだ理由の1つは、鉄道というのは何よりも安全が重視されるものであり、ぜひそのような考え方も知ってほしいと考えたからです。筆者自身が悪い見本を示す形になってしまいましたが、今回の件をふまえて、このような故障モードのときにも安全側にシャットダウンするよう、ハードウェアを改修しようと考えています。検討した範囲では、ファームウェアの修正だけで済むと見込んでいます。
なお、今回はハードウェアの故障でしたが、もちろんソフトウェアが原因の故障もあります。次回は、ソフトウェアの不具合を見つけるためのツールを取り上げる予定です。どうぞこれからもご愛読いただければ幸いです。