パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

湘南モノレール事故、制御コンピュータに入り込んだノイズが原因か」記事へのコメント

  • 心と体は別物? (スコア:2, 参考になる)

    by Anonymous Coward on 2009年06月29日 12時52分 (#1595569)
    報告書を読んでみたら, 以下のような話に私には読み取れました。

    ・制御プログラム(というか制御回路?)にはウォッチドッグタイマー
        によるリセット機構があるが, これは制御プログラムはリセット
        するがその際にはモーターの駆動力は維持される回路構成になっている。

    ・不正割り込みの処理の際にウォッチドッグリセットのためのタイマも
        含めて禁止してそのまま放置してしまうためウォッチドッグリセット
        がかからなくなる。
        (報告書では不正なWDTリセット出力が継続と書かれているがこれはWDT
          タイムアウト出力の間違いでは?)

    ・というわけでいったん不正割り込みがかかるとWDTタイムアウトが
        継続的に発生して加減速シーケンスが妨害されるが駆動回路は制御
        プログラムからの指示がない限り駆動力を維持する。

    コレ正しいとすると私にはシステム構成バグにしか見えないんですが…
    一番きついと思うのはWDTタイムアウトで駆動力が維持される部分。

    こんなもんなんですか? それとも私の読み違い?
    • by tarosuke (2403) <webmaster@tarosuke.net> on 2009年06月29日 13時48分 (#1595647) 日記

      うぁひでぇ...と思ったらWDTタイムアウトで主動力切るって書いてあるよ?
      問題はそこじゃなくて...

      1. 不正割り込み時にタイマを含めた全ての割り込みを禁止
      2. そもそも不正割り込みなんてのが入る
      3. 実処理をタイマ割り込みではなくビジーループで回している
      4. 処理が回っていないのにWDTリセット

      あたりだろう。今回の原因は2から始まった1と4、特に1は凶悪で明らかなバグと言える。
      3はおそらく4の原因だし、2は1がなければリカバリ可能だが何かが根本的に間違ってる。
      3は、ビジーループで回したければ割り込みなんて使わずにタイマの値を直接読んで処理を回すべきだしなぁ...。

      ...てなところなんじゃなかろうか。

      親コメント
      • by Anonymous Coward
        不正割り込みが入るような状況下では、もう何も信用できませんよ。

        マイコンのフラッシュメモリに格納されたコードが化けているかもしれないし、メモリも化けているかもしれない。
        一度だけでなく継続的に動作が怪しくなっている状況下では、ソフトウェアが堅牢に作られていても、正しく動作することは期待できません。

        エラーを検出したら即時に停止すべきか・・・これは難しいですよ。
        加速中にモーターの駆動をピタリと停止したら、乗客が怪我をします。立っている人が頭を強く打って亡くなることも。
        また、停止してはいけない場所で停止すると別の事故が発生することも。

        ノイズが入る時点で負けです。その後の敗戦処理が下手なことは副次的な問題でしかありません。
        • 不具合(エラー)を検出した即時に停止すべきかどうかの判断は運転士が行います。

          今回の問題は運転手が即時停止させようとしても動力が切れなかったことで
          加速中のモーターの駆動を止めても加速が止まるだけで慣性で車両は動きつづけます。
          それを止めるのがブレーキですよ。停止してはいけない場所で停止しても
          動き続けるよりは安全で、後続列車との衝突は列車監視システムが・・・
          なかったら確かに大惨事ですね(T_T

          運転士が突然脳卒中とかで運転不能になったら?そのためのATSですが
          今回ATSが停止信号出していても列車の制御系がノイズでやられてたので
          役に立たなかったようで。ATSのようなシステムが無い場合は、もう一人
          人をつけておいてますね。航空機(!=軍用機)のように。

          >ノイズが入る時点で負けです。その後の敗戦処理が下手なことは副次的な問題でしかありません。

          原因は完全につぶせませんよ。今回たまたまノイズが原因だとわかりましたが、
          それ以外の原因で加速側にロックしたときにどう安全を確保するつもりですか?

          親コメント
        • まー本当の意味で「ノイズで誤動作」ならそうなんだけど、今回はソフトがgdgdだから...
          ソフトがちゃんとしてればリセットは期待できたケースだよ。

          親コメント
    • by WindKnight (1253) on 2009年06月29日 15時57分 (#1595744) 日記
      こういう解釈かな。

      不正割り込みが発生
      →すべての割り込みを禁止(含むタイマ割り込み)
      →起動カウンタが動かない
      →加減速シーケンスが動かない

      不正割り込みが発生したときのリカバリ処理で失敗してますね。
      私的には、不正割り込みが掛かったら時点で WDT 保護動作を起動するのが正しい処理だと思ふ。
      親コメント
    • by Anonymous Coward on 2009年06月29日 13時27分 (#1595619)
      だめだこりゃ.. 間違いですね.

      # ていうかタイマ割り込みまでWDリセットしてどうするんだよとorz

      タイマ停止によってカウンタが上がらないので加減速シーケンスがスキップされて
      WDTリセットがかけられ続けるのでWDTタイムアウトが発生しないけど加減速シーケンスも
      実行されなくなるので、駆動力が維持されてしまうという話ですね。

      で、結局システムの構成的に変だろうという意見は変わりませんが…
      親コメント
    • by kieru_haim (37792) on 2009年06月29日 13時48分 (#1595646) 日記
      >一番きついと思うのはWDTタイムアウトで駆動力が維持される部分
      前にやった事のあるシステムで似たようなのがありました。
      ソフト側の不具合を隠すために何かあったらWDTでリセットはするが、
      ハードの設定は残しておいて欲しいと。

      つまり、WDTでリセットがかかればソフトは「再起動」として動きますが、
      ハード側からみれば、何事もなかったかのように動き続けるシステム構成ですね。

      この場合、ネットワーク機器なので、それでもOKだと思いますが、
      (パケットを止めるわけにもいかないので)
      こういう駆動系のシステムだと、それはまずいですよねぇ・・・。
      下手すればというより、人命に直結しますし。
      親コメント

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...