2007/5/18

ゆゆぽん☆退避/追越列車とか作っちゃうかMona-(14)−退避/追越の全体像(後編)  VRMスクリプト禅問答
<<前回へ

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

駅停車出発後か、あるいは通過によって、追越列車が[閉A]を踏むところから話を再開しましょう。区間閉塞の仕組みによって[閉A]の信号は赤となり、これまで駅進入を禁止していた[閉@]信号は黄になります。

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

追越列車が[閉B]を踏み、信号を赤にします。このタイミングは重要ですので覚えておいてください。

待避線の出発信号から見ると、自分が担当する列車=退避列車の出発を禁じている以上、自分の1つ先の信号=[閉B]を赤にする列車は、自分が停車させている信号ではあり得ません。従って、[閉B]が赤になるということは、追越列車が先に行ったことを示しています。

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

追越列車は行ってしまいました。

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

[閉B]が緑になったということは、先行した追越列車が十分先へ行ってしまったことを意味しています。このタイミングで[出]を緑にし[出ポ]を反位へ切り替えます。それだけだと、万が一、本線に新たな列車が入って来た際に追突されてしまうので、[閉A]の信号を赤に、[閉@]の信号を黄にします。

もし、後続の列車があっても[換@]を踏んだ時点で減速され、[換A]が列車を止めますから、退避列車が本線へ出るまでの時間を稼ぐことができますね。

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

出発信号が緑になったので、追越列車を出発させます(今回は、この出発は自動化しませんので、人手によります)。列車は[出]を踏み、出発信号は、緑になったのも束の間、再び、次の退避列車が出発可能になるまで赤になります。

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

[閉A]の信号から見れば、[閉B]に達した追越列車は、自分を閉塞させて通過していった列車と見分けがつきません。なので、後は普通に閉塞を開放していけばよろしい。ただし、[閉A]の信号は本線出発信号を兼ねているので、出発を許可する以上は、この時点で[出ポ]を正位に切り替えてやる必要があります。

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

そして追越列車は駅を離れていき、信号は最初の状態に戻ります。エンドレスループを周回して再度列車がやってきても、まったく同じことが起こります。

ちなみに、退避線に列車がいない状態で追越列車が来るとどうなるでしょうか。この場合、駅は単なる閉塞区間に過ぎませんから、待避線信号は赤のまま、普通に列車が本線を通過して、やはり元の状態に戻ります。

以上が全体の流れです。察しの良い人は、この時点でスクリプトを書けると思いますので、挑戦してみてください。以降、察しの良くない人のための解説を続けます。

次回へ>>
0

2007/5/19  15:15

投稿者:ghost
把握しました。

残念ながら出発信号はそれでは処理できません。
次々回から2回に分けて詳しく解説しますが、待避線側の出発信号を緑にしても良い条件は、本質的には編成に割り当てたポイント切替用の番号(スクリプト中のifで評価しようとしている部分、ただし、if 250 だったら常に成立ですけど、変数名を忘れてるw)とは無関係です。

待避線出発信号は“追越線を列車が通り過ぎた”場合に限り、緑にすることが出来ます。と言うか、そうしないと“退避”じゃないですから。

これを実現するために、一見、退避/追越列車とは無関係に思われる閉塞の仕組みを作ったワケです。詳しくは後日の記事を見ていただくとして・・・

(1) 退避線に退避列車が入った時点で、[閉B]が緑である(追越線を列車が通過する可能性がある)こと

(2) (1)が成立した後に[閉B]が赤になる(まさに追越列車が[閉B]を通過した)こと

(3) (2)が成立した後に[閉B]が緑になる(追越列車がさらに前方へ走り去った)こと

をチェックしてから、待避線側の出発信号を緑にすることになります。

明日から、この流れを実現する細かい部分の解説をやるので、昨日〜今日の部分をもう一度精読しておさらいしておいてください。

2007/5/19  14:47

投稿者:ゆゆぽん☆
また変な事言ってしまってすみません。
この図の4〜6番目にあることをやろうと思い、ピンときたのでスクリプトを書いてみたのです。
West=入ポにあたる、以前編成別にポイントを動かすスクリプトをEast=出ポにコピーして信号制御のスクリプトを加えました。下に書いたのは出ポ=Eastと連動するセンサーです。

if 250
call this MtdSignal2G
else
call this MtdSignal2R
endif
EndFunc


BeginFunc MtdSignal2G
call ObjSignal1 MtdSignalR
call ObjSignal2 MtdSignalG
EndFunc

BeginFunc MtdSignal2R
call ObjSignal1 MtdSignalG
call ObjSignal2 MtdSignalR
EndFunc
※Signal1=閉A
※Signal2=出

で、本線用の列車が感知したときに上から4番目の図のようになるのですが、退避用の列車が感知したときに最後の図のようにならず、出の信号が青に切り替わってしまいます。この前の場内信号機(閉@部分)の件と同様に、この件についても解説を待ったほうがよろしいでしょうか?

2007/5/19  14:06

投稿者:ghost
えーっと。

繰り返し申し上げますが、ボクからは(おそらく他の読者諸兄からも)ゆゆぽん☆殿の言う・・・

 Signal1
 Signal2
 West
 East

が、少なくともこのコメントを読むだけでは、どこの何であるかがわかりません。

この結果、何が起きるかと言うと、本来教えを乞うているゆゆぽん☆殿が、ご自身の困っていることを伝えるコストを払うのではなく、教える側のボクがあーでもないこーでもない、とゆゆぽん☆殿の脳内を推測するコストを負うことになります。

これは、ぶっちゃけ、教える側のボクにとっては一方的に損な話で、何でそこまでして教えてやらにゃならんねん、という気分になります。まぁ、面白がってやっているので止めませんが。

何が言いたいかと言いますと、自分の問題を解決するために他人の能力を必要とするケースというのは、本件に限らずいろいろあるワケです。勉強にせよ、仕事にせよ。

それも踏まえて、もう少し質問の仕方を考えましょう、工夫しましょう、せめてボクの使っている語に合わせるとか・・・という話です。



お尋ねの件は、この部分だけを見ても判断がつきません。ゆゆぽん☆殿が他の部品にどんなスクリプトを書いておいでかさっぱりわからないので。

と言うか、一通りの解説を待つんじゃなかったの?

2007/5/19  9:35

投稿者:ゆゆぽん☆
[センサー]

VarSignal ObjSignal1
get ObjSignal1 Signal1

VarSignal ObjSignal2
get ObjSignal2 Signal2

Var TmpType
Var VarTrainType
set TmpType 250

//センサーイベントを設定
Var EvtSensor
SetEventSensor MtdSenseTrain EvtSensor
/
/このセンサーが担当するポイント
VarPoint ObjPoint
get ObjPoint East

//編成検知時に実行されるメソッド
BeginFunc MtdSenseTrain
VarTrain TmpTrain
Var TmpType

//検知した編成オブジェクトを取得
GetSenseTrain TmpTrain
//変数TmpTypeに検知した編成のVarTypeの値を取得

mov TmpType TmpTrain.VarType

//[d']ポイントのグローバル変数にTmpTypeの値を代入
mov ObjPoint.VarTrainType TmpType
DrawVar TmpType

//[e]ポイントの編成判別メソッドを実行
call ObjPoint MtdCheckType

if 250
call this MtdSignal2G
else
call this MtdSignal2R
endif
EndFunc


BeginFunc MtdSignal2G
call ObjSignal1 MtdSignalR
call ObjSignal2 MtdSignalG
EndFunc

BeginFunc MtdSignal2R
call ObjSignal1 MtdSignalG
call ObjSignal2 MtdSignalR
EndFunc

Westポイントのを改造して使っています。
本線用の編成を感知したときはきちんと動作するのですが、待避用の編成を感知したときは、本線出発
(閉Aの部分)は青のままでも、待避出発まで青になってしまいます。

コメントを書く

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




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