パスワードを忘れた? アカウント作成
7511401 story
バグ

京王線の列車案内装置に表示された「32768編成」の原因は? 106

ストーリー by hylom
さあみんなで考えよう! 部門より
あるAnonymous Coward 曰く、

2月13日14:45頃、京王線飛田給駅~武蔵野台駅間で作業員の電車接触による死亡事故が発生し、その影響でダイヤが大幅に乱れることになったのだが、このとき駅ホームの列車案内装置に「32768両編成」という異常な表示が見られたという。

これがTwitterで話題になり、編成長の計算をする人やバグの原因を想像する人が現れている(NAVERまとめ)。

タレコミ人は鉄道のシステムに詳しくないのですが、鉄道運行の業務や組み込みシステム特有の事情もあるのではないかと思っています。/.Jerの皆様はどのようにお考えでしょうか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2013年02月14日 18時49分 (#2325183)

    日本信号製
    フルカラー表示器 [signal.co.jp]
    三色LED表示器 [signal.co.jp]

    表示制御器と表示装置本体との間の通信は、RS-232Cとか424が主流なんですね。
    駅構内の配線いじりたくないとか耐候性とかの関係ですかね……。

    • by haratake (365) on 2013年02月15日 0時34分 (#2325475)

      3.5インチ固定ディスク(850Mバイト)

      こっちの方が驚きですよ。ほんとに主流なんかい。。。

      3.5インチフロッピーディスク(1ドライブ)

      ここ最近、触れる機会がほんとになくなりましたね。

      親コメント
  • by Anonymous Coward on 2013年02月14日 17時41分 (#2325127)

    2の補数と符号無しの表現がこんがらがって2の補数の-1が符号無しの32768に化けたとか?

    • Re:2の補数 (スコア:5, 参考になる)

      by x-rebuttal (33869) on 2013年02月14日 17時56分 (#2325142)

      言わんとする事はわかるけど、-1なら65535になってないとおかしいでしょう。
      short型の最小値-32768をint型として評価すると32768になるから、そんなところじゃないかな。

      親コメント
    • 歴史的経緯で下駄履き(エクセス)表現が使われ続けているのかも。

      データベース上では編成数の内部表現が16ビットのエクセス32767になっていて、
      表示部にデータを渡す前に、32767を減算しておく実装だったり。

      で、なぜか編成数に0xFFFFが入っていた。(特殊値かミスオペ)
      ここから32767を減算すると0x8000 になる。
      表示部はこれを16ビットでの2の補数として解釈したため、 -32768 になった。
      そして5文字しか表示幅がない仕様だったので、先頭の - が消えた。
      「32768」の出来上がり。

      親コメント
    • by hahahash (41409) on 2013年02月14日 17時59分 (#2325144) 日記

      表示側は、
      1000 0000 0000 0000
      を単純に符号なし2バイトか4バイト以上の整数として判断した。
      ってことでしょうけど。

      どういう入力や処理の結果として、そのデータになったのかが気になる。

      親コメント
      • by Anonymous Coward

        自然数を返す関数のエラーを負数で表す悪習が原因ですかね
        表示側に渡る前に消すなり回送に置き換えるなりするはずだったのがすり抜けたとか

    • by Anonymous Coward on 2013年02月14日 18時04分 (#2325146)

      お前は-1両編成を見たことがあるのか?

      親コメント
      • Re:2の補数 (スコア:4, おもしろおかしい)

        by Anonymous Coward on 2013年02月14日 18時32分 (#2325168)
        見た人はこの世には帰って来れないと言われています
        親コメント
      • by Anonymous Coward

        いつもより短い11両編成なら見たことあります。

    • by Anonymous Coward

      この予想に賛成。ただ、この予想が当たってるなら、型関連のバグを心配しちゃう。

  • by Anonymous Coward on 2013年02月14日 18時07分 (#2325151)

    ・複数の駅の案内装置で確認されている
     →データ配信側の問題?
    ・行先と到着時刻の異なる複数の列車で確認されている
     →1本の列車に紐付けられた情報ではない
    ・10両編成は正しく表示されている
     →京王線の場合あり得る編成は、2, 4, 6, 8, 10だったはずで、本線を走る列車は
      ほとんど8両か10両ということを考えると、8両編成の表示に関わる処理orデータ入力がおかしい?
    ・事故後の運行で初めて確認された
     →ダイヤ変更作業がトリガとなっている?

  • by Anonymous Coward on 2013年02月14日 18時21分 (#2325163)

    16ビット符号あり整数で、-32768を表示しようとして表示部は左詰め5桁だったので、先頭のマイナス記号は表示されなかった。

  • by i_i (22332) on 2013年02月14日 23時23分 (#2325415) 日記

    BCD表現で「0008(両)」というデータだったのがエンディアン変換でおかしなことになって0x8000両編成に・・・ないか。

    京王の案内表示といえば車内・駅LCDなど1画面の文字数が異なるデバイスで文章データを共用しているのか、
    ・・・駅係員、乗務員、      京王鉄道警備隊(ALSOK)に・・・
    といった具合に妙な空白が入った表示をたまに見かける。

  • 本当は何両編成だったんだ?

  • by newfuture (30517) on 2013年02月15日 9時23分 (#2325675) 日記

    4桁入力を慌てて1桁で入力してしまったんですね、「8」と。
    桁数チェックなしの上詰めで「8000」となり「32768編成」に。

  • by Anonymous Coward on 2013年02月15日 12時49分 (#2325856)

    大原さやかさんの声で「この列車は32768両で云々」というアナウンスはあったのだろうか。

  • by Anonymous Coward on 2013年02月14日 17時43分 (#2325128)

    編成数なんて1バイト整数で十分なのになぜ2バイト確保した?
    編成ごとに必要な量の2倍のメモリ空間を占めてんの?何それ馬鹿なの?

    このプログラムを作ったのは誰だー!(C.V.海原雄山)
    バイトプログラマーが作ったのかー

    • Re:なぜ2バイト (スコア:5, おもしろおかしい)

      by Tsukuba2000 (32811) on 2013年02月14日 17時53分 (#2325140)

      バイトプログラマー「先輩、それじゃだめっすよ。2バイトないと10両編成が困るじゃないですか」

      親コメント
    • by hahahash (41409) on 2013年02月14日 17時57分 (#2325143) 日記

      128両編成くらいだったら、その気になったらできちゃうからじゃね?

      あと、大陸横断鉄道とかその手の列車だと、300両編成とかもありえるらしいし、
      将来海外へ売り込みをする可能性を想定すると、1バイトじゃ不足だと言えるかもしれない。

      親コメント
      • by firewheel (31280) on 2013年02月14日 18時10分 (#2325155)

        これに一票。
        実際には、たとえば「世界最大で120両までです」みたいな事実があったとしても、
        それを調べる労力がどうみても見合わん。

        それにこの手の仕様は変化することもあるから、多めに見積もって2バイトというのは
        そんなにおかしな判断じゃないと思われ。
        #まあネタにマジレスかな。

        親コメント
    • Re:なぜ2バイト (スコア:2, 参考になる)

      by Anonymous Coward on 2013年02月14日 18時01分 (#2325145)

      貨物列車も使えるライブラリを使っているに決まっているだろ。旅客列車と貨物列車でライブラリを別に作るなんて、馬鹿なの?死ぬの?

      親コメント
    • by Anonymous Coward on 2013年02月14日 17時46分 (#2325134)

      バイトプログラマー「文句なら、仕様書を書いた人に言って下さい!」

      親コメント
    • by Anonymous Coward on 2013年02月14日 17時48分 (#2325137)

      > バイトプログラマーが作ったのかー

      いえ、ワードプログラマーです。

      # もしくはショートプログラマー

      親コメント
    • (「ネタにマジレス」なのかもしれないけども)

      バグが表示器のものなのか、ネットワークなのか、もっと上の運行管理のシステムで起きてるのか知らないけど、
      制御用でも32ビット1ワードのプロセッサが普通にある昨今、
      わざわざ1バイトのデータとか作っても効率よくアクセスできない。

      親コメント
    • by s02222 (20350) on 2013年02月14日 18時38分 (#2325170)
      よりによってこの話題で、なぜ編制数だけに2バイト確保されていると決めつけるのか。

      そこまでかつかつのシステム設計なら、上位11ビットに編成の構成情報のフラグ(扉の位置とか)を詰め込んで、下位5ビットが編成長、ぐらいまで頑張るだろう。

      そしてそう推理すると、本来、マスクされるはずの上位バイトに記録されたフラグがマスクをすり抜けた結果、表示が乱れた、というこの件の原因の推測までセットで付いてくるのに。
      親コメント
    • by Anonymous Coward on 2013年02月14日 19時13分 (#2325201)

      char [srad.jp]先生、出番ですぜ!

      親コメント
    • by Anonymous Coward

      そのぐらい気にする必要ないでしょ…

    • by Anonymous Coward

      安全率を考えると仕方ない。
      「アメリカでは100両以上の編成があるから、その倍…うーん、もうちょっと増えると…」
      ってなると、1バイトでは危険。

      昔のシステムからの使いまわしてワードの上位に運用条件なんかを入れていて、人身事故の発生を判る人にのみ伝えているって事は無い筈。きっと。
      そういやどっかの工場のは4桁以上は数値で無くエラーコードだったな。

    • by Anonymous Coward

      昔と違って今時バイト単位の違いを切り詰める必要はない。
      寧ろ切り詰めたことにより、後々足りなくなった時の影響のほうが大きい。
      某ゲームでも符号ありintでやってしまったため、約21億しか所持金が持てないというゲームがある。
      開発当時はそんないくわけねえと思ってて、実際数年はそうだったが
      どんどんインフレしてきて21億どころか42億でも到底足りない始末。
      8バイト使わせろという事態になっている。

      変数なんてちょっと余裕ありすぎね?というぐらいでもいい。
      ファミコンとかの時代はそれこそバイトどころかビット単位で削ったものだが、それは過去の話。

      • by QwertyZZZ (8195) on 2013年02月15日 16時17分 (#2326033) 日記

        ただねぇ、こういう業界だと昔々のリレー制御由来のデータ形式が有ったりするのですよ。
        1ビットが1リレーとなると、変数の余裕ってのは最終的には凄いコストや消費電力の差に成ったりします。
        かといってエイヤっと全部を更新できるかって言うとそれも出来ないですし。

        親コメント
    • by Anonymous Coward
      バイトプログラマーはビットプログラマーの8倍の能力か。。。
      • by Anonymous Coward on 2013年02月15日 2時27分 (#2325537)

        それは環境依存だぜ。

        # ワードは環境依存だけど、エイトビットでバイトだから由来的に8ビットは確定だろ思ってたら違うと知ったときの衝撃。

        親コメント
    • by Anonymous Coward

      日本国内の旅客営業私鉄に限るのであれば、編成両数は4bit、列車種別(各停、急行等)は4bit、
      行先(回送、試運転等も含む)は8bitあれば十分コード表現可能で、これらをまとめた16bit数をIDに
      して、テーブルひいて表示データを読み出すなんて処理は可能ですけどね。

      • by Anonymous Coward

        そして列車番号で引けない

        ダメぢゃん

typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...