JMRIでトランスポンディング(3) [JMRI]
トランスポンディングを利用して操作を自動化するスクリプトです。
特定のアドレスを検知した時にポイントを切り換える例です。
この例ではアドレス64の車両がzoneに進入した際にポイントがTHROWNに、アドレス65と301の車両が進入した際にCLOSEDに切り替わります。また車両がzoneを抜ける際には何も処理を行わないのでdef exits()には「pass」と記述します(何も書かないとエラーになるため)。
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」と記述します(何も書かないとエラーになるため)。
コメント 0