見出し画像

Rosso Laboratory

センサー1個で簡単機回しスクリプト

自動センサーの機能を使って機回しをしようとすると幾つものセンサーを連動させる必要があり何かと面倒です。そこで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個で簡単機回しスクリプト

これを使えば簡単に機回しが設定できるようになることでしょう(^^)/
PVアクセスランキング にほんブログ村


ランキングに参加中。クリックして応援お願いします!

名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最新の画像もっと見る

最近の「Pythonスクリプト」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事