HOME >> 鉄道模型自動運転システム >  新ATSに挑戦 制御フローの見直し

新ATSに挑戦 制御フローの見直し

 現在、物置部屋にせっちしている2重周回路のレイアウトには、分散制御方式のATSを組込んでいる。 そして、その周回路は8っつの閉塞区間が設定されており、それぞれの先端部に、通過センサと信号機、および制御ユニットが組み込まれている。 その制御ユニットは、PICマイコンによって独立して制御さてている。 今回は、「名鉄特急3兄弟を整備するも・・・・・・・」(2020/6/22)にて生じた不具合の中から、その制御ロジックに疑問が生じたので、新しい考え方のロジックを検討することにした。

 

   .

■ 搭載している制御ロジック

 ATS制御に疑問が発生した箇所は、右の写真に示す内側左回り線のブリッジ接続部です。 前方区間に電車は居ないのに電車を止めてしまうのです。 システムをリセットしても、すぐに緑から赤信号に移行してしまい、やって来た電車を停車させてしまうのです。 ブリッジの接触部などを点検・調整したのですが、正常な場合もあるのですがほとんどは異常な状態となってしまいます。

 この閉塞区間の制御ユニットに搭載しているのは、「ATS列車自動停止システム 試運転の実施(再編集版)」(2019/9/2)のプログラムです。 ATS-test-3-5.asm のフローチャートに示す様に、あちこちにループを構成している拙いプログラムなのです。 何かの原因で、このループの中に閉じ込められると抜け出すにはリセットしかないという状態に陥る危険性があるのです。 信号を赤にしてループしているとはとても思えないのですが、自分の頭では解析できません。

 そこで、ループと言う迷路のないフローを考える事にしました。 成功した例は出発制御で採用したフローの考え方です。

 

■ 下に流れるフローの検討

 制御フローが常に下に流れるようにしておくと、ループ状態が無くなり、迷路に入り込むは無いだろうと考えました。 その時の状態を常に監視しており、その状態に合わせた処理を実施するものです。

 しかし、一番の問題は、制御対象の閉塞区間の通過信号S1と前方の閉塞区間の通過信号S2の間に列車が存在する場合の判断なのです。 この間は、状況を判断する情報がないため、列車がいない場合と区別がつきません。

 今までの制御フローでは、S1センサを通過したと言う情報を保有する事が出来るので、先方のS2センサの信号が無くても判断出来たのです。 しかし、フローを常に上から下に流そうとすると、その前の流れがどの流れを通って来たのかの情報がないため、そのフロー内の情報で判断しなければならののです。

 このためには、S1の信号を通過したという新たな情報が必要なのです。 よくある手はフラグを立てる事です。 フラグが立っていれば、センサからの信号が無くても列車が存在する事が判断できるので、もし後続の列車がやって来てセンサS1に引っかかれば、その列車を停止させることが出来、追突が防止できるのです。

 当然、先方のS2センサが反応しておれば、これも列車が存在することになるので列車を停止させる必要があります。 即ち、制御区間で列車を停止させるための条件は、

  1. S2センサがONでS1センサがONになった時と
  2. フラグ立っている時でS1センサがONになった時

と言うことになります。 簡単、簡単と早とちりしてはいけません。 フラグをいつの時点立てるかが問題なのです。 S1センサがONの時に立てると、自分自身によってS1が反応しているので、自動停止して、通過しようとする自分自身を止めてしまうのです。 S1を通過した後にフラグを立てる必要があるのですが、”S1を通過した後”をどうやって判断すのかが問題です。

PICマイコンの入力ポートの一部のピンは、状態変化検出機能があり、立ち上がりまたは立下りの変化があったときに割り込みを発生させることができます。 即ち、この立下り変化に反応させれば良いのです。

なのですが、高度な割り込み処理を使用する必要があるのです。 このS1信号の立ち下がりを検知してフラグを立てれば良いのですが・・・・・・・・・。

 自分が採用した方法は、もう一つのサブフラグを立てる方法です。 S1信号がONになると一度このサブフラグを立てておき、S1信号がOFFになった時にサブフラグを消してフラグをONすると言う幼稚な手法を採用しました。

 

 常に下に流れるフローでは、それぞれの場合を想定して、その状態の条件を整理して置き、その条件に合う場合の処理方法を決めて於けば良いのです。 条件に合わない場合は制御をパスすれば良いのです。 そこで、処理が必要な場合を整理し、下のようにイラストにまとめました。

  

 このイラストをもとに、各シーンの状態をたどって制御フローに書いてみました。

 当初は、アセンブラーで記述を始めたのですが、GO TO 命令があまりに多くなりそうなので中止してしまいました。 そこで、C言語で記述しましたが、これまたゴチャゴチャして整理できずにウロウロして、やっと下のイラストのような整理された状態に持っていく事が出来ました。

  .

 使用するPICマイコンは、多数のストック品のある PIC12F635 を採用しました。 C言語で記述する場合の注意事項も思い出しながら、トライ&エラーで実施しました。

 特に、ポート番号の指定は、GPIOx を使用していたのですが、エラーが出てしまいコンパイルできませんでした。  PIC12F635 のデータシートを見ると、I/Oポートの名称は RAx を使っていましたので、こちらに変更するとコンパイル可能となりました。 アセンブラーの場合は、、GPIOx でもOKだったのに・・・・・・・・!

 凡ミスを含めて、9-1から 9-5 まで、何度かのバージョンアップを繰り返して、やっと思いどおりの作動をするプログラムに仕上げることが出来ました。

   機能OKのでたプログラム ⇒ ATS-test-9-5.html

 プログラムの作動は、右の回路図に示す検証回路で、作動チェックを実施しました。 リレー駆動の確認は白色LEDを点灯させることで、リレーを駆動信号を確認しています。 センサ入力信号はプッシュボタンを使用してます。

 検証回路でのチェックの様子を下に示します。

 

■ 結果

 新しい制御ロジックを組込んだマイコンを問題の区間のユニットに組込んだ状態を下に示します。

 石を取り換えただけで正常に作動するようになったので、やはりロジック不良であったと判断することにしました。 他の区間は、古いロジックのままですが、機会をみて取り換えて行きたいと思っています。

 

   *********************************************************************************************

 なお、このロジックについては完璧なものとは考えていません。 どこかに抜けがあるのではないだろうか、バグはどうか、特にノイズが乗って来た場合はどうなるのかといった不安がいっぱい有りますが、とにかく使ってみて不具合を検証していく事にします。 ノイズに対しては、0.1μFのパスコンが頼りです!

 

ページトップへ戻る .


 2020/6/23 作成