単純折り返し動作(センサ)について説明します。

Simple wrapping behavior (sensor) describes.

以下の”エリア6”と”エリア1”部をセンシングすることで、単純折り返し自動運転してみます。

import jarray

import jmri


class A_tanjun_orikaeshi(jmri.jmrit.automat.AbstractAutomaton) :


    def init(self):

      self.Sensor1 = sensors.provideSensor("1")

      self.Sensor6 = sensors.provideSensor("6")

      self.throttle = self.getThrottle(5, True)

      if (self.throttle == None) :

        print "Couldn't assign throttle!"

      return


    def handle(self):


      # <forward>

      self.throttle.setIsForward(True)

      self.throttle.speedSetting = 0.30

      self.waitSensorActive(self.Sensor1)

      self.throttle.speedSetting = 0

      self.waitMsec(2000)


      # <reverse>

      self.throttle.setIsForward(False)

      self.throttle.speedSetting = 0.30

      self.waitSensorActive(self.Sensor6)

      self.throttle.speedSetting = 0

      self.waitMsec(2000)


      return 1# to continue


# end of class definition


# create one of these

a = A_tanjun_orikaeshi()


# set the name

a.setName(" A_tanjun_orikaeshi script")


# and start it running

a.start()

実際のスクリプトは、以下のとおりです。

これで実行すると、「前進”エリア1”検知→停止→後進→”エリア6”検知→停止」

を繰り返す動作をします。

上記の赤文字部分が、センシング部分になります。

例をとって説明します。


    self.Sensor1 = sensors.provideSensor("1")

    self.Sensor6 = sensors.provideSensor("6")


BDL168のセンサ”1”を”Sensor1”に割り当てます。

“6”も同じです。


    self.waitSensorActive(self.Sensor1)


“Sensor1”がアクティブになるのを待っている行になります。

アクティブになったら次の行に行きます。


    self.waitSensorActive(self.Sensor6)


同じく“Sensor6”についての行になります。



これを動かしたときの、LocoNet監視の表示は以下のようになります。

実際に動かした動かした様子が以下の動画です。