HOME >> 鉄道模型自動運転システム > ATS列車自動停止システム 追突を監視するプログラムを検討
ATS列車自動停止システムの中心となる閉塞区間の制御を検討している。 先回にて、通過センサ、信号機、給電制御の作動を確認できたので、これらを組み合わせて後方からの追突を監視するプログラムを検討する。
■ 後方からの追突を監視するプログラムの確認
リレー制御のプログラムに、後方から列車が近づいていたら停止させる処理を付け加えた。 このロジックもいろいろ検討したのだが、例外的な場合を想定すると充分ではないと考えるものの、下のフローで対応することにしてフローチャートを作成した。
#include P12F683.INC ; PIC12F683用のヘッダファイルの読み込み ;;;;; コンフィグレジスタの設定 __config _BOD_ON & _WDT_OFF & _MCLRE_OFF & _INTOSCIO ;;;;; ファイルレジスタの割り当て CT_DELAY1MS equ 0x20 CT_DELAY100MS equ 0x21 ;;;;; 初期設定の始まり bcf STATUS, RP0 ; バンク0 clrf GPIO ; GPIO の出力が0になるよう設定 movlw 0x7 ; W ← 7 movwf CMCON0; CMCON0 ← W = 7 : コンパレータをオフ bsf STATUS, RP0 ; バンク1 clrf ANSEL movlw B'101000' movwf TRISIO ; TRISIO ← W : GPIO を出力に設定 bcf STATUS, RP0 ; バンク0 bcf GPIO,0 ;信号赤を消灯 bcf GPIO,1 ;信号橙を消灯 bsf GPIO,2 ;信号緑を点灯 ;;;;; プログラムの主要部分 LOOP bcf GPIO,0 ;信号赤を消灯 bcf GPIO,1 ;信号橙を消灯 bsf GPIO,2 ;信号緑を点灯 bcf GPIO,4 ;リレーをOFFして通電する btfss GPIO,5 ;S!をチェック、ONを待つ goto $-1 STAGE0 call delay100ms ;列車が来た、時間待ち bcf GPIO,2 ;信号緑を消す bsf GPIO,0 ;信号赤を点灯 btfsc GPIO,5 ;S!をチェック、OFFを待つ goto $-1 call delay100ms;列車が通過した、時間待ち STAGE1 ;チェックポイント通過 btfsc GPIO,5 ;S1をチェック、後続の列車は来ていないか? goto STAGE3 ;列車を停止させる btfss GPIO,3 ;S2をチェック、前方のチェックポイントに来たか? goto STAGE1 ;来るまで待て bcf GPIO,0 ;赤を消灯 bcf GPIO,2 ;緑を消灯 bsf GPIO,1 ;橙を点灯 STAGE2 btfsc GPIO,5 ;S1をチェック、後続の列車は来ていないか? goto STAGE5 ;列車を停止させる btfsc GPIO,3 ;S2をチェック、前方のチェックポイントを通過したか? goto STAGE2 ;通り過ぎるまで待て goto LOOP ;先頭に戻る STAGE3 bsf GPIO,4 ;リレーをONさせて通電を切り列車を止める btfss GPIO,3 ;S2をチェック、前方のチェックポイントに来たか? goto $-1 bcf GPIO,0 ;赤を消灯 bcf GPIO,2 ;緑を消灯 bsf GPIO,1 ;橙を点灯 STAGE4 btfsc GPIO,3 ;S2をチェック、前方のチェックポイントを通過したか? goto $-1 bcf GPIO,0 ;信号赤を消灯 bcf GPIO,1 ;信号橙を消灯 bsf GPIO,2 ;信号緑を点灯 bcf GPIO,4 ;リレーをOFFして通電し、列車を発車させる goto STAGE0 ;列車は次の区間を走行中 STAGE5 bsf GPIO,4 ;リレーをONさせて通電を切り列車を止める goto STAGE4 ;列車停止中 ;;;;; delay10us サブルーチン 省略 ;;;;; delay1ms サブルーチン 省略 ;;;;; delay100ms サブルーチン 省略 ;;;;; プログラムの主要な部分の終わり end ; プログラム終了
列車が通過センサ S1 を通過した時、信号機を通過したと思われるタイミングまで待って信号機を赤にする。 このタイミングは、センサの位置、ギャップの位置、フライホイール搭載車の停止距離などを勘案して調整する。 信号機の手前で停止する事、かつ通過中の場合は運転手が赤信号と間違えないように、先頭車両が通過した後に赤にするのだ。
列車が通過すると、今度は先方の区間の通過センサを監視し、列車が到達したら信号機を橙に変えて、注意信号とする。 そして、列車が通り過ぎたら、信号を緑にして最初のスタンバイ状態に戻る。 これがメインルートである。
列車が通過中に、後ろから追いついてきた場合の監視も実施する。 STAGE1 の段階では通過センサはOFFになっているが、後続列車が来た場合にはON になる。 そこでこの列車を停止させる STAGE3 の処理をする。 信号は赤のままである。
先方の通過センサが列車を感知したら、注意信号に変えて STAGE4 の列車の通過を待つ。 列車が通り過ぎたら、信号を緑にして列車を進行させるが、発進後は自分自身の通過状態、即ち STAGE0 に戻る。
さらに、メインルートで信号機が橙の注意信号時に於いても後続列車が来る恐れがあるので、通過センサS1 を監視しておく必要がある。 センサがON になると停車させるが信号機は注意信号の状態とする。 そしてSTAGE4 にて先方列車の通過を待つ。
このフローチャートをもとに記述したプログラムを右に示す。 時間待ちのサブルーチンは、先回紹介した教則本の例題を活用しています。
走行テストは下記の状態で実施し、プログラムのチェックを行った。
3台のBトレ車両をそれぞれ別々に走らせた場合とか、少し長い編成の列車を走らせたりして機能を確認した。
次は、ブレッドボードでのテスト結果をもとに、ユニバーサルボードの工作を報告する。
2019/8/27 作成