2007/5/26

ゆゆぽん☆退避/追越列車とか作っちゃうかMona-(18)−退避/追越線それぞれに場内信号を設ける  VRMスクリプト禅問答
<<前回へ

こちらのコメント欄の指摘で、ゆゆぽん☆殿の要件に対して漏れていることが発覚した退避/追越線それぞれに場内信号を設ける件について、サラッと触れておきます。

最初に、そもそも場内信号はどう振舞うべきか、という話なんですが、実はボク自身、ちょっとよくわかりません。理屈の上で考えると・・・

(1) 列車が進入すべき場内が非閉塞であれば緑になる。
(2) 列車の進行方向に関わらず信号が受け持つ防護区間が非閉塞であれば緑になる。のどちらかだろう、とは思うのですが、ご存知の方がおられたらご教示ください。今回は、比較的実装が楽な(2)のケースのみ解説するに留めます。(1)は(2)の応用でしかないので、各自で考えてください。

さて、この場合、考えられるパターンは以下に図示する4つに集約されます。

クリックすると元のサイズで表示します
@場内に列車はいない

クリックすると元のサイズで表示します
A本線(追越線)場内にのみ列車がいる

クリックすると元のサイズで表示します
B待避線場内にのみ列車がいる

クリックすると元のサイズで表示します
C場内は列車でいっぱい

このうち、@〜Aは本線の閉塞信号で実現されているので、特別な措置は必要ありません。残るのはB〜Cですが、これは・・・

・[閉@]センサーが編成を検知した時点で、編成の種別番号を調べる(ポイント切替と同じ考え方)。
・種別番号が待避線行きを示していた場合のみ、待避線場内信号を赤にする。で実現できます。このとき、追越線場内信号も一瞬赤になりますが、これは本線ポイントを退避列車が占有するので、理屈の上では正しい動作です(本物の鉄道がどうかはさておき)。この列車がポイントを渡って[特]センサーを踏めば、前々回に解説した仕組みで追越線場内信号の閉塞は解除されます。

あとは、待避線場内信号を緑に戻すタイミングですが、やや大雑把ながら[出]センサーが列車を検知した時点がシンプルで良いと思われます。厳密に言えば、この時点では列車は待避線を出切っていないのですが、もしこれで運転が破綻するようなレイアウトであれば、それは信号の仕組みよりは、線路容量を超えた列車が投入されていることが問題かと思われますから、ここで無駄に凝る理由はないでしょう。

最後に[換@]センサーに少し手を加えます。ここまで、換呼センサーはどの列車を検知した場合も無条件に自身が担当する信号の名称を編成に渡していましたが、ここだけは、列車が本線に進むのか待避線に進むのかによって換呼すべき信号が異なることになります。

よって、ここだけは、編成検知に連動していきなり信号名称を渡すのではなく、一旦編成の種別番号を調べてから、追越列車であれば追越線場内信号の名称を、退避列車であれば待避線場内信号のそれを、編成に渡してやる必要があります。

*     *     *

なんとか5月中に解説は終わりましたね、ご理解いただけたかどうかは別にして。
0

2007/6/1  11:45

投稿者:ghost
了解。>ゆゆぽん☆殿

こちらこそ、お付き合いいただきありがとうございました。

足りないのは、ゆゆぽん☆殿の努力ではなく、偏にボクの説明力ですので、その点はお間違いのないように。ただ、その落差は、ご自身で生めていただくより他ありません。

考え方でわからないことがあれば、ご相談には応じますので、いつでもどうぞ。

2007/5/31  19:11

投稿者:ゆゆぽん☆
わかりました。その言葉を真摯に受け止めて1からやり直します。今度のレイアウトはフルに作ってみたいと思います。もし、そのレイアウトが完成した場合には、代理公開などで公開してみたいと思います。約1ヶ月間、どうもありがとうございました。

2007/5/31  11:24

投稿者:ghost
送付いただいたレイアウトファイルを拝見しました。

ミもフタもないことを言いますが、結局のところご理解いただけていない、ということがよくわかりました。これ以上の介入は、事実上「代わりに作れ」と言われているのと同じなので、正直なところヤル気がおきません。

総じて致命的なのは、場所によって同じ変数名が異なる意味で用いられている点です。

察するに、連載当初、ボクの解説を待たずにご自身の思いで書かれた部分と、ボクがサンプルコードを示したものをコピー&ペーストした部分がゴチャゴチャになっているのが原因でしょう。

現状のレイアウトを手直しして、ゆゆぽん☆殿の意図に近いように動作するようにすることは不可能ではないとは思いますが、それは少なくともVRMスクリプトを理解する、という点においては無意味な行為です。

本気で理解することをお求めなのであれば、一旦このレイアウトは置いておいて、連載全体を精読した上で、もう一度ゼロから作ってみることをお奨めします。それが苦痛なのであれば、スクロールを使った方がいいです。

2007/5/30  22:53

投稿者:ゆゆぽん☆
あと、待避列車が低速(速度調整メソッドで示した値=0.55より下)で喚呼センサーを通ると、赤ではないのに停止してしまいます。
[待避列車]
BeginFunc MtdCheckSignal
Var MtdVoltage
GetCurrentVoltage MtdVoltage
ifeq ObjCheckSignal.VarSignalColor 1
AutoSpeedCtrl 200 0.0
endif
ifeq ObjCheckSignal.VarSignalColor 3
if> MtdVoltage 0.55
AutoSpeedCtrl 200 0.5
endif
endif
EndFunc

何かがおかしいのは確かなのですが…。

2007/5/29  21:14

投稿者:ゆゆぽん☆
普通、待避線に入る列車が連動する信号は、3灯式なら出発赤→場内黄というようになると思います。
(ぼくの知っている限りでは)したがって、初期点灯を黄色にして、MtdSignalGは使っていません。
問題の症状ですが、閉@(場内)喚呼センサーを追越列車が踏んだときに切り替るはずのない待避場内が切り替わってしまいます。ログウィンドウに追越列車の変数内容が2つ出たと同時に切り替わるので、喚呼センサーに問題があると思います。

[喚呼センサー]

Var EvtSensor
SetEventSensor MtdSenseTrain EvtSensor

VarSignal ObjSignal12
get ObjSignal12 Signal12

VarSignal ObjSignal11
get ObjSignal11 Signal11

BeginFunc MtdSenseTrain
VarTrain VarTrainType
Var TmpType


GetSenseTrain VarTrainType
//変数TmpTypeに検知した編成のVarTypeの値を取得

mov TmpType VarTrainType.VarType


mov ObjSignal12.VarTrainType TmpType
mov ObjSignal11.VarTrainType TmpType
DrawVar TmpType


ifeq VarTrainType 250
call ObjSignal12 MtdCheckSpeedType
else
call ObjSignal11 MtdCheckSpeedType
endif
EndFunc

MtdSignalYや切替える要素のスクリプトは書いていません。変数が変なところに行き渡っているのでしょうか?

2007/5/29  12:35

投稿者:ghost
送っておいていただいて結構です。ただし、今、出先ですので、拝見するのは木曜日以降になります。

合わせて、このコメント欄に「〜なるはずなのに・・・になる」という症状をレポートしておいてください。

メールに書いていただいてもいいのですが、ひょっとするとこの記事を読んでおられる方にとってのケーススタディになるかと思うので、公開しておいた方がベターかと思います。よろしく。

2007/5/29  9:12

投稿者:ゆゆぽん☆
一応このページもクリアしました。
が、よく解らないところで待避場内の信号が変わってしまいます。可能性のあるセンサーを探してみたのですが、それらしきものは見つかりません。
レイアウトを送らせていただいてもよろしいですか?

コメントを書く

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




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