「センサー1個で」シリーズ第三弾です(^^)/ 今回は追い越し運転を再現してみました。
#----------------
#優先列車停車駅用
#----------------
#OBJID=38
import vrmapi
def vrmevent_38(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['train'] = 0
di['train0'] = 0 #退避列車は種別0にしてください
di['train1'] = 0 #優先列車は種別1にしてください
di['inpointid'] = 41 #進入ポイントのID
di['outpointid'] = 42 #退出ポイントのID
di['stopdistance'] = 900.0 #停車距離
di['stoptime'] = 10.0 #優先列車停車時間
di['startdistance1'] = 1000.0 #優先列車電圧設定距離
di['startvoltage1'] = 0.8 #優先列車電圧
di['starttime'] = 15.0 #退避列車出発時間
di['startdistance0'] = 1000.0 #退避列車設定距離
di['startvoltage0'] = 0.6 #退避列車電圧
di['inpoint'] = vrmapi.LAYOUT().GetPoint(di['inpointid'])
di['outpoint'] = vrmapi.LAYOUT().GetPoint(di['outpointid'])
elif ev == 'broadcast':
dummy = 1
elif ev == 'timer':
dummy = 1
elif ev == 'time':
dummy = 1
elif ev == 'after':
if param['eventUID'] == 100:
di['outpoint'].SetBranch(0)
di['train1'].AutoSpeedCTRL(di['startdistance1'],di['startvoltage1'])
obj.SetEventAfter(di['starttime'],101)
if param['eventUID'] == 101:
if di['train0'] is not 0:
speed0 = di['train0'].GetSpeed()
if speed0 == 0:
di['outpoint'].SetBranch(1)
di['train0'].AutoSpeedCTRL(di['startdistance0'],di['startvoltage0'])
di['train0'] = 0
elif ev == 'frame':
dummy = 1
elif ev == 'catch':
di['train'] = obj.GetTrain()
tc = di['train'].GetTrainCode()
if tc == 0:
di['inpoint'].SetBranch(1)
di['train0'] = di['train']
di['train0'].AutoSpeedCTRL(di['stopdistance'],0.0)
if tc == 1:
di['inpoint'].SetBranch(0)
di['train1'] = di['train']
speed1 = di['train1'].GetSpeed()
delaytime = di['stoptime'] + 1.08 * di['stopdistance'] / speed1
di['train1'].AutoSpeedCTRL(di['stopdistance'],0.0)
obj.SetEventAfter(delaytime,100)
#----------------
#優先列車通過駅用
#----------------
#OBJID=87
import vrmapi
def vrmevent_87(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['train'] = 0
di['train0'] = 0 #退避列車は種別0にしてください
di['train1'] = 0 #優先列車は種別1にしてください
di['inpointid'] = 72 #進入ポイントのID
di['outpointid'] = 73 #退出ポイントのID
di['stopdistance'] = 900.0 #停車距離
di['starttime'] = 15.0 #退避列車出発時間
di['startdistance0'] = 1000.0 #退避列車設定距離
di['startvoltage0'] = 0.6 #退避列車電圧
di['inpoint'] = vrmapi.LAYOUT().GetPoint(di['inpointid'])
di['outpoint'] = vrmapi.LAYOUT().GetPoint(di['outpointid'])
elif ev == 'broadcast':
dummy = 1
elif ev == 'timer':
dummy = 1
elif ev == 'time':
dummy = 1
elif ev == 'after':
if param['eventUID'] == 100:
di['outpoint'].SetBranch(0)
obj.SetEventAfter(di['starttime'],101)
if param['eventUID'] == 101:
if di['train0'] is not 0:
speed0 = di['train0'].GetSpeed()
if speed0 == 0:
di['outpoint'].SetBranch(1)
di['train0'].AutoSpeedCTRL(di['startdistance0'],di['startvoltage0'])
di['train0'] = 0
elif ev == 'frame':
dummy = 1
elif ev == 'catch':
di['train'] = obj.GetTrain()
tc = di['train'].GetTrainCode()
if tc == 0:
di['inpoint'].SetBranch(1)
di['train0'] = di['train']
di['train0'].AutoSpeedCTRL(di['stopdistance'],0.0)
if tc == 1:
di['inpoint'].SetBranch(0)
di['train1'] = di['train']
speed1 = di['train1'].GetSpeed()
delaytime = 0.54 * di['stopdistance'] / speed1
obj.SetEventAfter(delaytime,100)
優先列車が停車するパターンと通過するパターンの2つを作りました。退避列車を種別0、優先列車を種別1に設定する必要があります。あとはスクリプト内に書いてある設定をレイアウトに合わせて調整します。
レイアウターで見ると左上が停車する駅、右下が通過する駅です。
鉄道模型シミュレーターNXセンサー1個で追い越し運転
ビューワーで見ると中央が停車する駅、右奥が通過する駅です。これで追い越し運転も簡単に設定できるようになることでしょう(^^)/