自動センサーの機能を使って機回しをしようとすると幾つものセンサーを連動させる必要があり何かと面倒です。そこでPythonを使い、分割と連結の重要機能を1つのセンサーだけでやってしまうスクリプトを考えました。
#OBJID=38
import vrmapi
def vrmevent_38(obj,ev,param):
di = obj.GetDict()
if ev == 'init':
di['times'] = 0
di['train'] = 0
di['newtrain'] = 0
di['stopdistance'] = 1000.0
di['stoptime'] = 5.0
di['startdistance'] = 500.0
di['startvoltage'] = 1.0
di['trainlength'] = 550.0
di['restartdistance'] = 1000.0
di['restartvoltage'] = 0.8
di['restartstoptime'] = 7.0
elif ev == 'broadcast':
dummy = 1
elif ev == 'timer':
dummy = 1
elif ev == 'time':
dummy = 1
elif ev == 'after':
if param['eventUID'] == 100:
newtrainid = di['train'].SplitTrain(1)
di['newtrain'] = vrmapi.LAYOUT().GetTrain(newtrainid)
di['train'].AutoSpeedCTRL(di['startdistance'],di['startvoltage'])
di['times'] = 1
if param['eventUID'] == 101:
di['train'].AutoSpeedCTRL(10,0.1)
obj.SetEventAfter(di['restartstoptime'],102)
if param['eventUID'] == 102:
di['newtrain'].Turn()
di['newtrain'].AutoSpeedCTRL(di['restartdistance'],di['restartvoltage'])
di['times'] = 0
elif ev == 'frame':
dummy = 1
elif ev == 'catch':
f = obj.GetForward()
if f == 1:
if di['times'] == 0:
di['train'] = obj.GetTrain()
speed = di['train'].GetSpeed()
delaytime = di['stoptime'] + 1.08 * di['stopdistance'] / speed
di['train'].AutoSpeedCTRL(di['stopdistance'],0.0)
obj.SetEventAfter(delaytime,100)
if di['times'] == 1:
di['train'] = obj.GetTrain()
speed = di['train'].GetSpeed()
newdistance = di['stopdistance'] - di['trainlength']
delaytime = di['stoptime'] + 1.08 * newdistance / speed
di['train'].AutoSpeedCTRL(newdistance,0.0)
obj.SetEventAfter(delaytime,101)
設定方法ですが、initイベントに変数を全て書いてあります。
di['stopdistance'] = 1000.0 センサーから停車までの距離
di['stoptime'] = 5.0 停車までの時間は自動で計算するので停車後分割までの時間
di['startdistance'] = 500.0 分割された機関車の設定電圧到達距離
di['startvoltage'] = 1.0 分割された機関車の走行電圧
di['trainlength'] = 550.0 車両の長さ。レイアウタ-上で計測してください
di['restartdistance'] = 1000.0 連結後再出発の設定電圧到達距離
di['restartvoltage'] = 0.8 連結後再出発の走行電圧
di['restartstoptime'] = 7.0 連結後再出発までの待ち時間
簡単に反対側に機関車を移動させるためにオーバルにしてありますが、実際に使う時には他のセンサーとポイントを使用して機関車を所定位置に移動させてください。1回目に踏むと分割、2回目に踏むと連結の動作をするようにしてあります。反対側から踏むと動作はしません。
鉄道模型シミュレーターNXセンサー1個で簡単機回しスクリプト