Rosso Laboratory

Rosso Laboratory

主に鉄道模型シミュレーター(VRM)などの仮想鉄道アプリを扱うブログです。またHDR写真の記事も書いています。

ASCセンサー

通常、センサーを用いて編成を制御するためには、

//----------------------------------------------------------------------
//センサーテンプレート
//----------------------------------------------------------------------
//変数宣言
VarTrain ObjTrain
Var SensorEventID

//スタート
SetEventSensor MethodSensorEvent SensorEventID

//メソッド
BeginFunc MethodSensorEvent
GetSenseTrain ObjTrain
call ObjTrain (編成のメソッド)
EndFunc


という形式が一般的だろうと思うのですが、色々な動作を編成にさせてやらなくてはならない場合には、それぞれのケースに合わせてメソッドを準備しておくのも面倒だし、やたらと編成のスクリプトが長くなってしまうでしょう。そこで「機関車入換えホッキホキ」や「西濃鉄道ホッキホキ(仮称)」で使用したのが、ASCセンサー(ASCとはAutoSpeedCtrlの略)という考え方で、このレイアウトのスクリプトテストのメインテーマです。

今まではあまり言う事を聞かないAutoSpeedCtrlでしたが、Ver4.0.9.8からは大分言う事を聞くようになったのでね。

どういうことかと言うと、編成内で制動距離や目標電圧を設定しておくのではなく、編成内には器だけ用意し、踏んだセンサーから制動距離や目標電圧を編成に送り込んで動作させるというものです。こうすれば、必要な場所に必要な値を書き込んだセンサーを置いてやれば、勝手に編成が動作してくれるので、動作の変更や追加も楽に出来る訳です。

今回作ったASCセンサーには、制動距離や目標電圧だけでなく、AutoSpeedCtrl後の動作も指定するフラグも送り込むようにしているので、ASCセンサー通過後AutoSpeedCtrlが動作し、その後、反転したり、停車後再発車したり、反転再発車したり、停車したままだったり、指定速度で進行したままだったりと、これだけで大部分の制御は出来てしまう訳です。

</object>
<多数のASCセンサーを使用している「西濃鉄道ホッキホキ(仮称)」より>
西濃鉄道ホッキホキ(仮称)」とは、レイアウト作:USO800鉄道氏 & スクリプト作:Zio による合作企画。
動画では折り返し動作の部分がASCセンサーによるもの。奥に写っている313系の停車動作も同じく。というか、走行中の編成の動作は殆どがASCセンサーによるものと言える。

で、今回もテンプレート的に書いておくと、センサー側は、

//----------------------------------------------------------------------
//AutoSpeedCtrl制御テンプレート(センサー)
//----------------------------------------------------------------------
//変数宣言
VarTrain ObjTrain
Var SensorEventID
Var ASCMotionFlag
Var VarASCDistance
Var VarASCVoltage

//スタート
set ASCMotionFlag (実行フラグ)
set VarASCDistance (制動距離)
setf VarASCVoltage (目標電圧)
SetEventSensor MethodSensorEvent SensorEventID

//メソッド
BeginFunc MethodSensorEvent
GetSenseTrain ObjTrain
mov ObjTrain ASCMotionFlag this ASCMotionFlag
mov ObjTrain VarASCDistance this VarASCDistance
mov ObjTrain VarASCVoltage this VarASCVoltage
call ObjTrain MethodAutoSpeedCtrl
EndFunc


で、編成側は、

//----------------------------------------------------------------------
//AutoSpeedCtrl制御テンプレート(編成)
//----------------------------------------------------------------------
//変数宣言
Var AutoSpeedCtrlEventID
Var ASCMotionFlag
Var VarASCDistance
Var VarASCVoltage

//スタート
SetEventAutoSpeed MethodAutoSpeedCtrlEvent AutoSpeedCtrlEventID

//メソッド
BeginFunc MethodAutoSpeedCtrl
AutoSpeedCtrl VarASCDistance VarASCVoltage
EndFunc

//AutoSpeedCtrl完了後の動作メソッド
BeginFunc MethodAutoSpeedCtrlEvent
(共通実施コマンド(前))
if ASCMotionFlag
(実行フラグが0でない時に実行される共通実施コマンド)
ifeq ASCMotionFlag 1
(実行フラグが1の時に実行されるコマンド)
endif
ifeq ASCMotionFlag 2
(実行フラグが2の時に実行されるコマンド)
endif
ifeq ASCMotionFlag 3
(実行フラグが3の時に実行されるコマンド)
endif
ifeq ASCMotionFlag 4
(実行フラグが4の時に実行されるコマンド)
endif
 ・
 ・(幾らでも増やせる)
 ・
(実行フラグが0でなく、各分岐コマンド実行後に実行される共通実施コマンド)

endif
(共通実施コマンド(後))
EndFunc


となります。で、「西濃鉄道ホッキホキ(仮称)」ではこれに加え、編成判断、方向判断、車両数判断も加わって条件分岐して動作させています。

余談ですが、ifeq~endifが繰り返される様はイマイチなので、C言語のswitch~caseみたいに、
switch ASCMotionFlag
case 1
(実行フラグが1の時に実行されるコマンド)
case 2
(実行フラグが2の時に実行されるコマンド)
case 3
(実行フラグが3の時に実行されるコマンド)
case 4
(実行フラグが4の時に実行されるコマンド)
default
(それ以外の時に実行されるコマンド)
endswitch

としてくれるとスッキリする気がするんですが、まぁ出来るんだからどうでもイイか。

---*---*---*---

さて、これで今まで作ってきたスクリプトを使用して、VRM4CV自動運転化構想もそろそろ具体的な形が見えてきたかな?というところ。 「SearchPointを使った自動合流ポイント」、「Layout Support Book」、「待避線のある複線&単線スイッチバック」、「機関車入換えホッキホキ」、そして「西濃鉄道ホッキホキ(仮称)」と、これらは全部VRM4CV自動運転化構想に繋がるものな訳ですよ。大分長いことやっていましたが(笑)。