前回の続きで、折角なら2つ以上の駅にも対応できるスクリプトを作っておこうと思い、書いてみました。
LAYOUT
doorTAG = 0
doorside = 0
if ev == 'init':
vrmapi.LAYOUT().CrossingGroupCTRL(10, 2)
vrmapi.LAYOUT().CrossingGroupCTRL(11, 2)
TRAIN
if ev == 'init':
global doorTAG
global doorside
elif ev == 'after':
if param['eventUID'] == 100:
obj.CloseDoor(doorside, False)
vrmapi.LAYOUT().CrossingGroupCTRL(doorTAG, 2)
obj.SetEventAfter(3,200)
if param['eventUID'] == 200:
obj.AutoSpeedCTRL(400,1.0)
elif ev == 'autospeed':
s = obj.GetSpeed()
if s == 0:
obj.OpenDoor(doorside, False)
vrmapi.LAYOUT().CrossingGroupCTRL(doorTAG, 1)
obj.SetEventAfter(10,100)
SENSOR_01
if ev == 'init':
obj.SetSNSMode(0)
elif ev == 'catch':
global doorTAG
global doorside
doorTAG = 10
doorside = 0
train = obj.GetTrain()
train.AutoSpeedCTRL(435,0)
SENSOR_02
if ev == 'init':
obj.SetSNSMode(0)
elif ev == 'catch':
global doorTAG
global doorside
doorTAG = 11
doorside = 1
train = obj.GetTrain()
train.AutoSpeedCTRL(435,0)
注意すべき点は、CrossingGroupCTRL()のホームドアタグを文字列から数字に変えた点です。ここに変数を使うと文字列は対応していないらしく数字で指定するしかありませんでした。あと動作しなくて苦労した点はTRAINの'after'と'autospeed'の両方に同じグローバル宣言を書いていたことで、2つ同じものを書くと動作しなくなるんですね。よって'init'の方にまとめました(^_^;) これでセンサーにてホームドアタグ番号、左右どちら側か、制動距離を指定できるので複数の駅に対応できることになりました(^^)/ 但しこれだと1路線に複数の編成が走っていると対応できていないような気がします。まだ改良の余地はありますか(^_^;)