HOME >> 鉄道模型自動運転システム >  ATS列車自動停止システム 追突を監視するプログラムを検討

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 作成