VRM4スクリプト講座 第7回 ~踏切の動作その2~

今回は複線踏切を作成してみたいと思います。

条件は、
・列車の接近で遮断機を下ろし、通過後遮断機を上げる
・複線をまたぐ踏切で、各線を通る列車の進行方向は常に同じである
・警報機・遮断機(2号は踏切)を連動させなければならない

・・・文字で書いてもよく分からないですが、無理矢理作成します。

まず、適当な長さの複線レイアウトを組んでください(ループしている方が良いですが、途中で車両の進行方向が変わるようなレイアウトは今回のスクリプトでは対応できないのでそれを考慮して組んでください。単純な複線ループでも結構です。)

まず、踏切を向かい合う様に配置します。
次に、それぞれの線に接近感知用のセンサーと通過感知用のセンサーを配置してください。計4つ必要になるはずです。

踏切付近は次の画像のようになります(カメラは動作確認用です)。
画像


そして、次のようにスクリプトを記述します。※例の如くグローバル変数は赤字、ローカル変数は青字で示しています。

1、踏切A(親機)のスクリプト ※連動させる踏切パーツのうち、どれか一つ(ここではCROSSING-A)
Var STATUS
set STATUS 0

BeginFunc 遮断
 ifzero STATUS
  SetCrossingStatus 2
  //ここで子機を呼び出す
  call "CROSSING-B" 遮断
 endif
 add STATUS 1
EndFunc

BeginFunc 開放
 sub STATUS 1
 ifzero STATUS
  SetCrossingStatus 1
  //ここで子機を呼び出す
  call "CROSSING-B" 開放
 endif
EndFunc

2、踏切B(子機)のスクリプト ※連動させる踏切パーツのうち、親機に設定したパーツ以外全て(ここではCROSSING-B)
BeginFunc 遮断
 SetCrossingStatus 2
EndFunc

BeginFunc 開放
 SetCrossingStatus 1
EndFunc

3、接近感知センサーのスクリプト
Var HIT
SetSensorMode 0
SetEventSensor 接近 HIT

BeginFunc 接近
 call "CROSSING-A" 遮断
EndFunc

4、通過感知センサーのスクリプト
Var HIT
SetSensorMode 1
SetEventSensor 通過 HIT

BeginFunc 通過
 call "CROSSING-A" 開放
EndFunc


先に仕組みを説明します。
センサーは既に説明済みの構文ですので省略します。
踏切では実際に判断が行われているのは親機のみです(子機は親機から動作を呼ばれて動くのみ)。
さて、その親機の判断ですが・・・さほど複雑でもありません。
メソッドに入る前に、STATUSという変数を用意します。グローバル変数ですのでどこからでも参照可能です。
まず、「遮断」メソッドから。名前の通り、踏切の遮断機を下げ、警報機を鳴らします。
メソッドに入って1行目、ifzero STATUS ですが、これは、STATUSが0であった場合にendif'(またはelse)までに書かれた処理を行う条件分岐です。
初期状態ではSTATUSは0なので、このまま条件分岐の文を実行します。
SetCrossingStatus 2・・・前回説明した「遮断機を降ろす、警報機を鳴らす」設定です。
その後、endifの次、add STATUS 1 とありますが、これは新出だったでしょうか、とりあえず説明します。addの通り、値を足し算するために使います。書式は add (変数1) (数値2)で、(変数1)に(数値2)を足した値を格納します。
この場合、STATUSに1を足すので、結果的にSTATUSは1になります。
これで遮断メソッドは終了です。

次に「開放」メソッドです。
とは言うものの、殆ど「遮断」を逆にしたようなスクリプトです。
1行目、sub STATUS 1ですが、大体予測はつきますかね。addの逆ですから、引き算です。
そのため、STATUSから1を引きます。
次はifzero STATUSで、遮断の時と同様、STATUSが0の時に開放処理が行われます。


さて、実際にどのような動作をするか、まずは文字で確認します。
STATUSの数値の部分、赤字は加算、青字は減算が行われたことを示します。

ビュワー起動・・・STATUSは0
(a)片方の列車が接近センサーを踏む・・・STATUS 1 ※遮断機降下、警報機鳴動
(a)の列車が通過センサーを踏む・・・STATUS 0 ※遮断機上昇、警報機停止

(b)片方の列車が接近センサーを踏む・・・STATUS 1 ※遮断機降下、警報機鳴動
(c)もう片方の列車が接近センサーを踏む・・・STATUS 2 ※何も起こらない
(b)の列車が通過センサーを踏む・・・STATUS 1 ※何も起こらない
(c)の列車が通過センサーを踏む・・・STATUS 0 ※遮断機上昇、警報機停止

どうでしょうか、最初に示した条件、
・列車の接近で遮断機を下ろし、通過後遮断機を上げる
・複線をまたぐ踏切で、各線を通る列車の進行方向は常に同じである
・警報機・遮断機(2号は踏切)を連動させなければならない

全て満たすことが出来ました。

実際に動作させて確認してみてください。上手くできましたか?

ですが、このスクリプトにも問題点はあります。それは、
・一方通行である必要がある
・遮断機降下/上昇中に接近センサーを踏むとワープする

・・・等です。ですが、個人的にはこのくらいで十分なのでこれで良しとしています。興味のある方はいろいろ工夫してみては如何でしょうか。

Next→
←Prev
TOP

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック