見出し画像

Rosso Laboratory

センサー1個で追い越し運転

「センサー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個で追い越し運転

ビューワーで見ると中央が停車する駅、右奥が通過する駅です。これで追い越し運転も簡単に設定できるようになることでしょう(^^)/
PVアクセスランキング にほんブログ村


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

名前:
コメント:

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

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

 

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

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

最新の画像もっと見る

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

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