HOME >> 鉄道模型自動運転システム >  運行プログラムの構築 その1

登山鉄道自動運転システム  運行プログラムの構築 その1

■ はじめに

 登山モジュールの工作も走行テストが可能なレベルまで仕上がったので、そっそくレイアウト上に設置してテストを行ったが、不具合続きで混乱してしまった。 センサ系が悪いのか、アクチュエータ系が悪いのか、あるいはプログラムが悪いのか、判断が付かないのである。 ステップを急ぎすぎたのである。 そこで、モジュールをレイアウト上から降ろして、腰を据えてテストを実施することにした。

 

■ 運行プログラム検討用のレイアウト

 先回は先走って、物置部屋のレイアウトに設置したが、ハード面の不具合点でも容易に修正できるようにと簡単なレイアウトを別に設定した。 落ち着いて、かつ頭を冷やしながら検討できるように、座敷の奥に一坪ばかりのスペースを確保している。 使用したベースは、「新RT鉄道製作日記 その2」 のついに解体 にて残っていたベースを使用している。 脚は飲料水用の段ボール箱を活用している。 下の写真。

 色々な道具類も手元に置いておけるし、ハードの修正作業も容易である。

 もし、予定している物置部屋のレイアウトで使えない場合には、このベースを使ってコンパクトなレイアウトを作っても面白そうである。 登山鉄道の下は、トンネルにするとか、隠しヤードにして電車類を待機させるなどの夢が膨らみそうであるが・・・・・・・・・! いやいや、ここは当初の予定どうりに実施することにする。

 

 

■ プログラミング前の準備

 多くの配線が入り乱れているので、もう一度、最終仕様として整理し直した。 まず、場所と記号の確認である。 下の図参照。 

 そして、配線図や実物を使って経路を確認してまとめたのが下の表である。 この表をまとめて、簡単にしたのが右の表である。 これらの資料は、そろそろ認知症の兆候が出て来ている小生にとっては、後から見直す時には必須の資料となるはずである。 

 そして、プログラムの元となるシーケンスとしての運行モードを整理しておくことにした。 その一部を下に示す。

  .

 運行モードについては、色々な運行ダイヤに於いても汎用的に使用できるように、各路線毎のパスを決めて、その時のポイントの設定状態、フィーダー線のプラスとマイナスの方向、および、通過センサや到着センサの指定などをあらかじめ決めておくことにしている。 このため、右の図のように d1 〜 d8 までの運行モードをあらかじめ設定しておくのである。

 ここで、都市駅(街中駅と呼んでみたりしていて、統一性がないが・・・・・・・)からスイッチバックの往復は、ホーム1の場合とホーム2の場合があるので、これを別々にしている。

 一方、登山口駅では、スイッチバックから入線する場合には、ホーム3にして、スイッチバックに下りる場合にはホーム4に固定している。 さらに頂上駅との往復もホームを右の図のように固定しているため、運行モードは簡単化している。 想定外の運行ダイヤを組む時は、新なモードの設定も必要になるかも知れない。

 実はこれらの資料は、物置部屋での走行テストを実施する前に作成して、テスト走行に臨んだのであるが、見事に失敗してしまってのである。 そこで、もう一度チェックし直し、問題の無い事を確認してから、次のテスト臨んだ。

 

■ テスト走行の実施

 設定条件を見直して問題無い事を確認後、電車1両による麓から山頂までの往復運転ダイヤを設定して走行チェックを実施する。 登山モジュールのポイント不良が発生したので、ポイントを取り換えたり、分解掃除などのメンテナンスを実施した。 フィーダー線の逆接続も有ったりしたが、何とか順調に走行させることが出来た。 その時の動画を下に紹介する。

 

 次に、二つの車両を使用して並列運転のテストを実施した。 車両は下に示す車両である。 鉄コレ電車とTOMIX製の箱根登山電車である。

 if __name__== '__main__':
    while GPIO.input(3) == GPIO.HIGH:
        sleep(0.2)
    while True:
        d6 = threading.Thread(target=direction6,args=(1,))
        d6.start()
        direction1(0)
        d6.join()
        sleep(0.5)
        
        direction7(0)
        sleep(0.5)
        
        direction8(1)
        sleep(0.5)


        d5 = threading.Thread(target=direction5,args=(0,))
        d5.start()
        direction2(1)
        d5.join()
        sleep(0.5)


        d6 = threading.Thread(target=direction6,args=(0,))
        d6.start()
        direction1(1)
        d6.join()
        sleep(0.5)
        
        direction7(1)
        sleep(0.5)
        
        direction8(0)
        sleep(0.5)


        d5 = threading.Thread(target=direction5,args=(1,))
        d5.start()
        direction2(0)
        d5.join()
        sleep(0.5)
		    

 途中でポイントの戻り不良が発生しているのでチェックが必要である。 最初は正常に稼働していたが、いつの間にか作動不良を起こしている。 このような事は日常茶判事なり・・・・・・・・・・・(=_=;)

 テスト走行-2でのプログラムの一部を紹介しよう。 その運行ダイヤを記述しているメインループの部分を右に示す。 スタート状態での電車の位置は、街中駅と頂上駅にせっていしている。

 ******************************************************

 今回のテストで修正した幾つかの部分を忘備録として、記録しておく。

  1. 最初の通過センサを通過すると、進行先の入線予定のホームが空いているかチェックさせ、もし、電車が停止していると追突するので、アラーム関数を実行させるようにセットしていたが、ノイズの影響か(?)誤動作が多かったので、この項目は削除した。
  2. ポイント動作の誤動作が多発した。 指令が確実に実行されるように各ポイント指令の間に sleep(1) を挿入するようにした。
  3. 各運動モード終了前に、供給電圧をゼロにしておく。 但し、すぐにゼロにしてしまうと停止信号を示す赤LEDがすぐに消灯してしまうので、2秒間の間は点灯するようにした。
       sleep(2)
       v1.ChangeDutyCycle(0)
       return
    を追加記述した。
  4. 速度設定用のボリュームは、 Duty比 が100%まで使う事が無いので調整範囲を狭くするようにした。 これによって低速での速度設定が緩やかになった。
  5. 登山の登り路線は、勾配がきついので速度が低下が大きかった。 このため、この登り部分の Duty比 は高めになるように設定した。
  6. メインループの最初に、プログラムのスタートボタンの指令が挿入した。 右のプルグラム参照。 今までは、12ボルト電源がOFFの状態でプログラムをスタートさせていたので、最初に設定するポイント指令が電源がOFFの状態で実施されてしまい、ポイント操作が未実施の状態で電車が走行する不具合となっていた。 当初は、このことに気が付かなくて、ポイントの不良とばかりうたぐっていたのであるが、完全にロジック・ミスであった。 スタートボタンは、中止したリセットボタンを使用した。
  7. 並列運行の場合、threading.Thread 命令で指定した指令の実行が遅れたとしても、その完了を待ってくれるように、d6.join() のような join 命令を追加している

 

 さて、次回は、3または4編成の電車を走らせる本命プログラムに挑戦しよう!

 

 しかし、ここでも問題があるのである。 肝心の走らせる電車が無いのである。 いくつかの電車を取り出してきたが、動きがいまいちなのである。 ギクシャク走行やダンマリ屋など、メンテナンス不良でもあるのだが、もともと中型の電車の手持ちが少ないのである。

 手持ちの多くの電車は、ミニカーブで構成したこのレイアウトでは、線路周りの障害物にぶつかって走行出来ないし、かといってBトレでは牽引力が不足しているので、エンドレールのブロックを押し付ける力が弱く、ガリガリと空転した状態で止まっているのである。 動きの確実な鉄コレ車両などをもう少しそろえる必要があるのである。

 Bトレ車両が運行出来ないのは痛いのである。 何か上手い工夫はないものだろうか!

ページトップへ戻る .


 2017/6/17 作成  M.T.