2005/9/7

目指せ完全自動運転(4)−信号灯火と列車速度の関係  VRMスクリプト禅問答
難易度:☆☆

前回までで列車に連動して動作する閉塞信号が実現しました。今回からは、逆に信号に応じて速度を変化する編成の実現を目指していきます。

実際の鉄道における信号と速度の関係は単純ではありません(この資料あたりが参考になると思うので読んでみてください)が、必要以上に複雑な仕組みを作ってもそれほど効果が出るとも思えないので、思い切ってシンプルに考えることにします。すなわち・・・

(1) G現示に対しては速度制限はない。ただし直前にY現示で減速した場合を考慮し、巡航速度まで加速する。
(2) Y現示に対しては速度を注意速度に落とす。今現在が注意速度以下であればその必要はない。
(3) R現示に対しては停止する。つまり速度を0Km/hにする。

といった感じに。
これをスクリプトで実現するには、@それぞれの信号現示に応じた速度を設定するメソッド、A信号現示をチェックして@のいずれかのメソッドを実行するメソッド、が必要になります。今回は@の方を紹介しましょう。
[編成スクリプト]
//速度定数
//巡航速度
Var VarSpeedG
setf VarSpeedG 95.0
//注意速度
Var VarSpeedY
setf VarSpeedY 45.0
//
//信号対応速度変更メソッド
//
//G現示用・・・(1)
BeginFunc MtdSignalG
//現在速度を取得
Var Tmp
GetCurrentSpeed Tmp
if< Tmp VarSpeedG
//巡航速度以下ならば加速
mov VarTargetSpeed VarSpeedG
call this MtdChangeSpeed
endif
EndFunc
//Y現示用・・・(2)
BeginFunc MtdSignalY
//現在速度を取得
Var Tmp
GetCurrentSpeed Tmp
//注意速度以上ならば減速
if> Tmp VarSpeedY
mov VarTargetSpeed VarSpeedY
call this MtdChangeSpeed
endif
//速度がゼロならば加速
ifzero Tmp
mov VarTargetSpeed VarSpeedY
call this MtdChangeSpeed
endif
EndFunc
//R現示用・・・(3)
BeginFunc MtdSignalR
//速度をゼロへ
set VarTargetSpeed 0
call this MtdChangeSpeed
//この部分の説明は後日改めて・・・
//SetEventAfter this MtdWaitRestart TimerID 1000
EndFunc
このスクリプトは単体では動作しません。このシリーズの1回目で紹介した汎用速度制御メソッドを同じ編成スクリプトの中に組み込んでおく必要があります。また、ここに含まれる(1)〜(3)の信号灯火色に応じたメソッドを実行する部分(すなわち信号の灯火色を判断して実行するメソッド)もありません。これは明日紹介します。とりあえず、ざっと上掲スクリプトについて解説しておきましょう。
冒頭のでVarSpeedGとVarSpeedYの2つのグローバル変数を宣言していますが、これらの値がそれぞれ巡航速度と注意速度になります。
一般的に鉄道車両は定格上の最高速度では走行せず、その8〜9割の速度で運行します。これは回復運転のための余裕を持つためですが、このスクリプトも同じように使います。
従って、setf VarSpeedG に続く値は、編成の最高速度よりも低くすべきです。また、この値は編成の車輌構成によって変化させるべきでしょう。485系特急なら100Km/h前後、寝台特急ならば90Km/h、貨物列車ならば80Km/hといったように。逆に注意速度は、路線によって一定と考えられますので、編成ごとのそれを揃えておいた方が良いでしょう。サンプルでは45Km/hになっています。

(1)〜(3)のメソッドは、汎用速度制御メソッドを解説した際に説明した方法で速度変更を実行しています。加えて(1)G現示に対しては現在速度が巡航速度よりも低い場合にみそれが実行されるように、逆に(2)Y現示に対してはそれが注意速度よりも高い場合のみに実行されるようにif命令が加わっています。(2)の方のifzero命令は、閉塞によって停車した列車が再始動する場合を考慮して、速度ゼロの場合に限り、現在速度が注意速度を下回っていても汎用速度制御メソッドが実行されるための措置です。
(3)R現示メソッドは現在速度を評価する部分がない代わりに、SetEventAfter命令が加わっています。上掲サンプルではその行がコメントアウトされていますが、これは実行すべきメソッドMtdWaitRestartが現時点で未紹介だからです。これはR現示によって停車した列車が、先行列車との距離が離れるのを待って再始動するためのメソッドですが、詳しい説明は後日におこないます。

まずは本稿を熟読してその仕組みを理解してください。明日紹介するメソッドを組み込むと、いよいよ自動運転が(まだ完全ではありませんが)動作可能となります。

質問やご要望があれば気軽にコメント欄に書き込んでください。特に「ここの意味がよくわからないのでもっと詳しく」という指摘は大歓迎です、なぜわかりにくいのかの理由が添えられていると特に。
0

コメントを書く

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




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