2007/5/22

ゆゆぽん☆退避/追越列車とか作っちゃうかMona-(16)−特殊開放センサーで全体の流れを制御する(前編)  VRMスクリプト禅問答
<<前回へ

いよいよ大詰めです。

クリックすると元のサイズで表示します

クリックすると元のサイズで表示します

上図は、退避列車が待避線に入る時点を示しています。これを検知し、以降の信号の動作を制御するのが、[特]で示した“特殊開放センサー”の仕事であり、これこそが本連載の心臓部にあたる仕組みになります。以下、何をしなければならないのか、順を追って解説します。

まず、このセンサーは退避列車が待避線に入りきった時点で動作する必要があります。これは、後続列車に備えて、[入ポ]すなわち入場ポイントを正位に戻さねばならず、そのためには、退避列車の一部なりとも[入ポ]上にあってはならないからです。このためには、SetSensorMode命令で、センサーが編成末尾の台車を検知するように設定しておく必要があります。

さて、首尾よく編成末尾を検知したら、まずやるべきことは[入ポ]を正位に切り替えることです。すなわち、[入ポ]の反位切替メソッド(MtdTurnout)をcallする、ということですね。

そしてもう1つは、退避列車が閉塞させた[閉@]信号を開放することです。そうしないと、後続列車は[換@]を踏んで赤信号で停車してしまいます。退避列車は入場ポイントを渡りきることで本線上からはいなくなったわけですから、閉塞は開放してもかまわないことになります。これが、このセンサーを“特殊開放センサー”と呼ぶ理由です。

どうすれば[閉@]信号を開放することが出来るでしょうか。緑にするのは簡単で、MtgSignalGをこのタイミングでcallしてやればいいワケですが、それだけだと、[閉@]センサーで1つ先の信号の状態を100ミリ秒毎に調べ続けているイベントが、動作し続けてしまうことになります。これは、後々誤動作の原因になるかも知れないので、止めておきたい。

そこで。[閉@]信号に、閉塞強制開放用のメソッドを作ることにします。仮に、MtdForceReleaseとでも名づけますか。ここでやらなければならないことは以下の2つです。

・1つ先の信号を調べているイベントを解除する。つまり、KillEvent命令を使う。
・自分自身を緑に変える。つまり、自分自身のMtdSignalGをcallする。

このようなメソッドを作っておいて、これを[特]のセンサーイベントで実行されるメソッドからcallします。すると、[特]を編成の末尾が通過すると同時に、[閉@]が緑になります。冒頭の図の通りの動作ですね。

で、以下はここまでの説明漏れになるのですが。

図には示されていませんが[閉@]信号のもう1つ手前(図では右方向)には、もう1つ閉塞信号があるはずです。そして、この信号は冒頭図上の時点では[閉@]が赤なので黄になっているはずです。ここで一気に[閉@]を黄をすっ飛ばして緑にしてしまうと、この手前の信号は黄のままになってしまいます。

これを防ぐために、少なくともこの1つ手前の信号の“信号遷移メソッド”には、既存の“次の信号が赤なら自分を黄にする”“次の信号が黄なら自分を緑にする”に加えて“次の信号が緑なら、自分も緑にする”という処理を書き加えておく必要があります。

これで、冒頭図に示した動作は実現されることになります。が、これがすべてではありません。最後に、追越列車の通過を待って、待避線出発信号を緑にする=前回解説した[出]信号のMtdSignalGをcallする処理が必要です。

次回へ>>
0

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ