見出し画像

Rosso Laboratory

Python版踏切スクリプト改の改

おいちゃんが2車線の場合の踏切動作を紹介していたので、それに合わせてコチラも更に改造しました(^^)/

踏切テスト

LAYOUT
crossarea01 = 0
crossing79 = vrmapi.LAYOUT().GetCrossing(79)
crossing80 = vrmapi.LAYOUT().GetCrossing(80)
crossing81 = vrmapi.LAYOUT().GetCrossing(81)
crossing82 = vrmapi.LAYOUT().GetCrossing(82)
crossing83 = vrmapi.LAYOUT().GetCrossing(83)
crossing84 = vrmapi.LAYOUT().GetCrossing(84)

CROSSINGBAR_IN_LEFT
CROSSINGBAR_IN_RIGHT
CROSSINGBAR_OUT_LEFT
CROSSINGBAR_OUT_RIGHT
    if ev == 'init':
        obj.SetCrossingTime(3.0)

SENSOR_IN_IN
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'after':
        if param['eventUID'] == 100:
            crossing81.SetCrossingStatus(2)
            crossing83.SetCrossingStatus(2)
        if param['eventUID'] == 200:
            crossing82.SetCrossingStatus(2)
            crossing84.SetCrossingStatus(2)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 + 1
            vrmapi.LOG(crossarea01)
            crossing79.IncAutoSignStatus(0)
            crossing80.IncAutoSignStatus(1)
            crossing79.SetCrossingStatus(2)
            crossing80.SetCrossingStatus(2)
            obj.SetEventAfter(3,100)
            obj.SetEventAfter(6,200)

SENSOR_IN_OUT
    if ev == 'init':
        obj.SetSNSMode(1)
    elif ev == 'after':
        if param['eventUID'] == 101:
            crossing81.SetCrossingStatus(1)
            crossing83.SetCrossingStatus(1)
            crossing82.SetCrossingStatus(1)
            crossing84.SetCrossingStatus(1)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 - 1
            vrmapi.LOG(crossarea01)
            crossing79.DecAutoSignStatus(0)
            crossing80.DecAutoSignStatus(1)
            if crossarea01 == 0:
                crossing79.SetCrossingStatus(1)
                crossing80.SetCrossingStatus(1)
                obj.SetEventAfter(3,101)

SENSOR_OUT_IN
    if ev == 'init':
        obj.SetSNSMode(0)
    elif ev == 'after':
        if param['eventUID'] == 102:
            crossing81.SetCrossingStatus(2)
            crossing83.SetCrossingStatus(2)
        if param['eventUID'] == 202:
            crossing82.SetCrossingStatus(2)
            crossing84.SetCrossingStatus(2)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 + 1
            vrmapi.LOG(crossarea01)
            crossing79.IncAutoSignStatus(1)
            crossing80.IncAutoSignStatus(0)
            crossing79.SetCrossingStatus(2)
            crossing80.SetCrossingStatus(2)
            obj.SetEventAfter(3,102)
            obj.SetEventAfter(6,202)

SENSOR_OUT_OUT
    if ev == 'init':
        obj.SetSNSMode(1)
    elif ev == 'after':
        if param['eventUID'] == 103:
            crossing81.SetCrossingStatus(1)
            crossing83.SetCrossingStatus(1)
            crossing82.SetCrossingStatus(1)
            crossing84.SetCrossingStatus(1)
    elif ev == 'catch':
        global crossarea01
        train = obj.GetTrain()
        d = train.GetDirection()
        if d == 1:
            crossarea01 = crossarea01 - 1
            vrmapi.LOG(crossarea01)
            crossing79.DecAutoSignStatus(1)
            crossing80.DecAutoSignStatus(0)
            if crossarea01 == 0:
                crossing79.SetCrossingStatus(1)
                crossing80.SetCrossingStatus(1)
                obj.SetEventAfter(3,103)

なお新規に7mmレールでレイアウトを作ったので踏切のID番号は変わっています。
PVアクセスランキング にほんブログ村


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

コメント一覧

rosso_laboratory
少し検討してみましたが共通ステータスで分岐する部分をどうやれば良いのかが分からないなぁ。時間差は付けられるけど複線対応の踏切動作を自動センサーで設定するのが難しい。
rosso_laboratory
出来ないだろうと思っていましたが、頑張れば出来るのかな? 自動センサーだと踏切はグループ番号で自動処理できるので簡単ですが、これをやめて一つ一つの部品に対して命令を組んでやることでもしかすると時間差の再現は出来るかもしれません。ただこの場合共通ステータスを使って管理することになりますから、私からするとスクリプトで組んだ方が早いし確実な気がします。スクリプトのSetEventAfterみたいな機能があれば良いのですけどね。
おいちゃん
そうですか やっぱりVRM5版でもスクリプトを組まないと 完璧な踏切動作は、出来ないのですか

VRM5版に関しては、702さんから スプリクトを作らずに自動サンサーだけで 色々自動制御が出来ますよと 紹介されて一度は、色々挑戦しましたが 途中で挫折して 今又再挑戦しています。今度のVRMNXには、自動センサーが ある見たいですが マニュアルで見る限りVRM5版とは、全然違うみたいですね

無料のサンプルレイアウトの自動センサーを開こうとしましたが 開けませんでした。あれって 読み込み専用のレイアウトだったんでしょうかね そりゃ無料で レイアウトが作れたら 商売になりませんからね

まあ 今の所は、なんとかVRM5版の自動センサーで 色々試しながら そこで 遊んで見るつもりです。
rosso_laboratory
こんにちは、おいちゃん。ありがとうございます(^^)/
まずその本ですがPythonスクリプトなのでVRMNX専用です。VRM4&5はVRMスクリプトなので全く違います。
ななついろチャンネルさんがVRM4のVRMスクリプトで時間差を再現していましたからVRM5でも出来るんですが、自動センサーの機能だけでは再現できません。VRMスクリプトで組んでやる必要がありますね。
おいちゃん
凄いですね 完璧な踏切動作の確認です。VRM5版だと自動センサーのパラメーターなどで 設定して踏切動作と 配置で なんとか時間差踏切しゃ断を行っていました。この「「鉄道模型シミュレーターNX」で学ぶPythonプログラミング」というのは、VRMNXに関してなのでしょうかね そこら辺のVRM5版とVRMNXの違いがよく わかりませんが いづれにしても このスクリプトの組み方などは、ちと 素人ユーザーには、手に負えませんが 実際に 踏切鳴動が 鳴ってからの踏切しゃ断の降下は、魅力的ですね

でも そこまで踏み込んでしまうと せっかくVRM5版で自動センサーで ほとんどの設定が出来る見たいなので 今の所は、高みを望まないで そちらの方で 頑張ってやって行くつもりです。
名前:
コメント:

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

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

 

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

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

最新の画像もっと見る

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

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