見出し画像

Rosso Laboratory

Python版踏切スクリプト改

昨夜ななついろチャンネルさんにお邪魔したところ、踏切にて警報機が鳴り始めた後、数秒経ってから遮断機が降りるということに気づかされまして、以前「Python版踏切スクリプト」で作ったスクリプトにこのディレイを組み込んでみようと思いました。「「鉄道模型シミュレーターNX」で学ぶPythonプログラミング」に答えが載ってるかな?と思って見てみたところ、「こだわる方はチャレンジしてみてください」と書いてあっただけでした(^_^;)

LAYOUT
crossarea01 = 0
crossing41 = vrmapi.LAYOUT().GetCrossing(41)
crossing42 = vrmapi.LAYOUT().GetCrossing(42)
crossing43 = vrmapi.LAYOUT().GetCrossing(43)
crossing45 = vrmapi.LAYOUT().GetCrossing(45)

CROSSINGBAR_LEFT
CROSSINGBAR_RIGHT
    if ev == 'init':
        obj.SetCrossingTime(3.0)

SENSOR_IN_IN
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'after':
        if param['eventUID'] == 100:
            crossing43.SetCrossingStatus(2)
            crossing45.SetCrossingStatus(2)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 + 1
            vrmapi.LOG(crossarea01)
            crossing41.IncAutoSignStatus(0)
            crossing42.IncAutoSignStatus(1)
            crossing41.SetCrossingStatus(2)
            crossing42.SetCrossingStatus(2)
            obj.SetEventAfter(3,100)

SENSOR_IN_OUT
    if ev == 'init':
        obj.SetSNSMode(1)
    elif ev == 'after':
        if param['eventUID'] == 101:
            crossing43.SetCrossingStatus(1)
            crossing45.SetCrossingStatus(1)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 - 1
            vrmapi.LOG(crossarea01)
            crossing41.DecAutoSignStatus(0)
            crossing42.DecAutoSignStatus(1)
            if crossarea01 == 0:
                crossing41.SetCrossingStatus(1)
                crossing42.SetCrossingStatus(1)
                obj.SetEventAfter(3,101)

SENSOR_OUT_IN
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'after':
        if param['eventUID'] == 102:
            crossing43.SetCrossingStatus(2)
            crossing45.SetCrossingStatus(2)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 + 1
            vrmapi.LOG(crossarea01)
            crossing41.IncAutoSignStatus(1)
            crossing42.IncAutoSignStatus(0)
            crossing41.SetCrossingStatus(2)
            crossing42.SetCrossingStatus(2)
            obj.SetEventAfter(3,102)

SENSOR_OUT_OUT
    if ev == 'init':
        obj.SetSNSMode(1)
    elif ev == 'after':
        if param['eventUID'] == 103:
            crossing43.SetCrossingStatus(1)
            crossing45.SetCrossingStatus(1)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 - 1
            vrmapi.LOG(crossarea01)
            crossing41.DecAutoSignStatus(1)
            crossing42.DecAutoSignStatus(0)
            if crossarea01 == 0:
                crossing41.SetCrossingStatus(1)
                crossing42.SetCrossingStatus(1)
                obj.SetEventAfter(3,103)

ということで、SetEventAfterを追加しただけですね。簡単でした(^_^;)
PVアクセスランキング にほんブログ村


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

コメント一覧

rosso_laboratory
おはようございます、ななついろさん
遮断機のディレイの件、教えていただきありがとうございました。
先日も少し訪問させていただいていましたが、「隙」とはGetDirection2の初期方向絡みですよね。またグローバル変数が増えてしまうのですかね(^_^;) 今度の配信にも伺わせていただきます(^^)/
nanatsuiro
zio様

先日の当方鉄道模型ライブ配信では、お世話になりました。

VRM4の踏切スクリプトは、標準装備のウィザードが生成するスクリプトも、書籍「鉄道模型シミュレーター4 エキスパートガイド」の付録に収録されている「スクロール」により生成されるスクリプトも、警報機が鳴り始めると同時に遮断機が降りてきます。
しかし、現実の踏切は警報機が鳴り始めてから遮断機が降り始めるまでに時間が有り、以前からこの事が違和感となっておりました。

TOMIXさんの「TCS自動踏切II」でも、実物同様の動作をするので、そのシミュレーターである「VRM」が、ディレイを再現できなかったら切ないですので、スクリプトに「ディレイタイム」を加える事にいたしました。

とりあえず、意図したとおりの動作は行えておりますが、そもそもの拙作編集複線踏切制御スクリプトにはまだ「隙」がございます(先日の配信中に発覚いたしました)ので、より汎用性の高い動作ができるように、スクリプトを更新できればと思っております。
名前:
コメント:

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

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

 

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

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

最新の画像もっと見る

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

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