SSブログ

JMRIでトランスポンディング(3) [JMRI]

トランスポンディングを利用して操作を自動化するスクリプトです。
lr1 = reporters.provideReporter("1")
class LrListener(java.beans.PropertyChangeListener):
    def propertyChange(self, event):
        value = event.newValue.split(" ")
        if value[1] == 'enter':
            self.enter(value[0])
        elif value[1] == 'exits':
            self.exits(value[0])
            
    def enter(self, value):
        if value in ['アドレス1','アドレス2',・・・]:
            <処理を記述>
   
    def exits(self, value):
        if value in ['アドレス3','アドレス4',・・・]:
            <処理を記述>
        
lrlistener = LrListener()
lr1.addPropertyChangeListener(lrlistener)
1行目で定義したreporterの出力からzone進入時にdef enter()が、外れた時にdef exits()が呼ばれ、それぞれif value以下の[]内に記述したアドレスと検知したアドレスが一致した時に処理が行われます。

特定のアドレスを検知した時にポイントを切り換える例です。
lr1 = reporters.provideReporter("1")
lt1 = turnouts.provideTurnout("1")

class LrListener(java.beans.PropertyChangeListener):
    def propertyChange(self, event):
        value = event.newValue.split(" ")
        if value[1] == 'enter':
            self.enter(value[0])
        elif value[1] == 'exits':
            self.exits(value[0])
            
    def enter(self, value):
        if value in ['64']:
            lt1.setCommandedState(THROWN)
        elif value in ['65', '301']:
            lt1.setCommandedState(CLOSED)
    
    def exits(self, value):
        pass
        
lrlistener = LrListener()
lr1.addPropertyChangeListener(lrlistener)
2行目で定義したアドレス1のポイントに対して処理を行います。
この例ではアドレス64の車両がzoneに進入した際にポイントがTHROWNに、アドレス65と301の車両が進入した際にCLOSEDに切り替わります。また車両がzoneを抜ける際には何も処理を行わないのでdef exits()には「pass」と記述します(何も書かないとエラーになるため)。

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。