Märklin CS3による自動運転を前提としたレイアウトセクション”終着駅Großfurra”の紹介(2):自動運転プログラムの一例

今回は2回目としてメルクリンデジタルシステムによる自動運転を行うことを前提に製作したレイアウトセクション”終着駅Großfurra”の自動運転プログラムの一例をご紹介します. 今回はまず具体的なプログラムを紹介する前にシステムの概要とプログラムの基本構造を説明します。そのあと具体的なプログラムの例を提示しますのでプログラムの基本構造の説明を参考にして自動運転プログラム作成の参考にしていただければ幸いです.なお、今回, CS3のソフトウエアバージョンは2.4.0(5)(2022年7月時点の最新版)を使用しています.また,プログラムの作成方法は必ずしも最善の方法ではなく他にも方法があると思いますのでその点、ご留意ください.

最初に今回作成した自動運転プログラムによる自動運転の動画をご覧ください。

<メルクリンの自動運転システムの概要>
メルクリンデジタルシステムにはコントローラーとして”Central station”と”Mobile Station”が用意されていますが、このうちの”Central station”がいわば今回の自動運転の中核を成す機器になります。現行の機種はCentral station3(以下CS3と記載します)になります.そしてこのコントローラーに各種デコーダーを接続することにより、さまざまな自動運転が可能になります。これらのデコーダーを含めたシステムにはメルクリン独自のmfxというコントローラーとデコーダーの間で双方向通信が可能なプロトコルが採用されており,デコーダーの設定はCS3上で比較的簡単に行なうことができます.DCCにおけるCV値(Configuration Variable)の設定という概念は通常の設定作業ではほとんど不要です. また, 列車の在線検知もメルクリンの3線式の特徴を活かした簡単かつ信頼性の高い方法で行うことが可能です. メルクリンデジタルシステムはHWとSWを自社で開発し、それらをトータルシステムとして提供しているという点ではアップル製品と似たものがありますが、アップル製品と同様、他社の製品をこのシステムで使用しようとするとその特長は制限されます. ただ、CS3や各種デコーダーはDCCプロトコルにも対応していますのでDCCについてある程度専門的な知識さえあればDCC車両の自動運転も可能と思われます(私は実際にDCCを扱ったことがないのでこれ以上のコメントは控えます).なお、今回CS3と各種デコーダの詳細な機能と取扱方法, CS3へのデコーダーの登録方法(機関車,分岐器や信号機のCS3への登録方法)の詳細は説明しませんので、詳細はメルクリンのウエブサイトに掲載されているマニュアルまたは別売の解説本(Large Manual Controlling Digitally with the Central Station 3 (Item # :03093))を参照してください。いずれも英語版ですが,いずれも英語は比較的平易で図も豊富に掲載されていますので私のように英語があまり得意でなくてもある程度内容は理解できると思います. なお, 最新のデコーダーや信号機もmFxプロトコルに対応しており,設定は従来の機器より簡単に行なえます.

<線路配置の概要>
線路配置の概要は(1)にも記載しましたが,レイアウトの線路配置とS88コンタクトの位置をCS3のトラックダイヤグラムのスクリーンコピーで下図に再掲します. グレーアウトした部分は今回のレイアウト以外の部分で, 今回説明する自動運転は機関区のセクションを車両の引き上げ線として使用します。機関区セクションと終着駅のセクションはスペースの関係上対向した形で接続されていますが、中間にある程度のスペースをとれば両者ともより実感的に運転ができると考えられます. この間に挟む線路の長さはプログラムには影響しません(プログラムの作り方によっては多少の調整が必要になります).

レイアウトセクションの1番線、2番線、貨物駅にはそれぞれ2箇所のS88コンタクトを設置しています。一方, 引き上げ線となる機関区側は各々の線路終端にS88コンタクトを設置しています.なお、機関区側の自動運転では,S88コンタクトが線路終端にしか設置されていないため車両に停車コマンドが発動する前に車両に各種コマンドを与えることができないので停車直前の車両に汽笛吹鳴等、各種の動作指示を与えることができません.今回の終着駅セクションではこの反省に鑑みて,各引き込み線には複数のS88コンタクトを設置しました.

<S88コンタクトの種類>
メルクリンのマニュアルには列車検出の方法として以下の3種類の方法が紹介されています.
1. コンタクトトラック:両側のGND側のレールの片方のレールの一部を絶縁し,列車がその区間に入ると両側のGNDレールが車輪により同通することにより列車検出を行う方法で3線式特有の方法です.実物の信号システムと類似の方法で信頼性が高い検出方法です. 
2. サーキットトラック:レール近傍に設けられたスイッチを車輪(フランジ)が踏むことにより列車検出を行う方法で,専用のレールが発売されています.
3, リードコンタクト:レール近傍に設けられたリードスイッチと車両に設置したマグネットによる列車検出方法です.確実に検出するためにはスイッチとマグネットの位置調整が必要です.
今回はコンタクトトラックにより列車検出を行います。その配線を以下に示します

<プログラムの概要>

具体的なプログラムの内容を説明する前に、まずプログラムの基本構造を説明します.

プログラムは上図のようにTime Line上に青の矩形で示したコマンドを配置し各Commandに対する詳細条件の設定を行なうとともに,Time Line上でこのCommandの発効から次に配置されたコマンドが発効するまでの時間をDelay時間として設定します.各Commandにプログラム作成画面では上記のコマンドは画面のTime Line上にアイコンで表示されます. コマンドをタイムライン上に並べた集合体(上手の全体)をEventと呼びます. この際デコーダーを搭載した車両を制御するEventはその車両固有のEventになります.

複数のEventを別のEventのTime Line上に並べてEventを作成することも可能です. この場合次のEventを開始する時間はEvent開始からの時間(Delay1)とEvent終了からの時間(Delay2)どちらででも設定が可能です.
Delay時間をDelay1で設定した場合, 設定したDelay時間よりEventの実行時間が長いと前のEvent実行中に次のEventが起動しますので注意が必要です(Daley時間が適切でないと複数の列車が同時に動き,場合によっては列車衝突の危険が生じます).また, Delay時間をDelay1でで設定すると列車が移動中に集電不良等で停止した場合でも設定した時間が経過すると次のEventが発動します.このためEventをTime Line上に並べる場合にはDelayの設定をDelay2 で行う方が確実です. ただし,特にDeiayをDelay2(Ecent終了からの時間)で設定する際は,Event終了がそのEventに含まれる最後のEventまたはCommandが起動した時点となることに注意が必要です(詳細は後述します).

EventのTime Line上にCommandとEventを混在させることも可能です。ただし車両を制御するEvent(車両に紐づいているEvent)の中に埋め込めるCommandは分岐器の切り替え等,車両の制御するCommand以外のCommandに減退されます.

Time Line上に並んだEventにDelay時間を設定する際の注意事項
複数のEventを他のEventのTime Line上に並べた場合,Timeline上に並んでいる個々のEventの最後のCommandやEventのDelay時間を0にする(設定をDefaultのままにする)と,このEventはEventのTime Line上に並んでいる最後のCommandやEventが発動した時点でこのEventの終了したと判定されます.このため、EventのTime Line上に並べられたEventの中の最後のCommandやEventの実行に時間がかかる場合, そのEventにDelay2でDalay時間を設定しても前のEventが完了する前に次のEventが起動してしまうことがあります.これを避けるためにはEventを構成する最後ののcommandやEventにDelay時間を設定することが必要です.詳しくは下図を参照してください.

<Eventの作成方法>
⒈ コマンドの設定方法
CS3画面上の<Event>を選択し、プルダウンメニューの<Add event>を選択するとCS3の画面に設定用のDialogboxが現れます.赤枠の部分が上図のTime Lineに相当しますので、ここにコマンドをドラッグしていきます. 並べることができるコマンドは機関車制御画面またはArticle Listに現れる品目(あらかじめCS3にアドレスを登録した分岐器,信号,ON/OFFスイッチ等の品目)に対するアクションおよびS88コンタクトの状態です.なお、ここでの機関車はデコーダーを搭載した客貨車を含みます.

機関車制御画面の中のFunctionボタンはそのまTime Line上にドラッグするとそのコマンドが設定されます. この時点でこのEventは機関車制御画面に表示されている機関車固有のEventとなり, TimeLineの先頭に機関車のアイコンが表示されます。速度を設定するにはスピードバーの上の速度表示を、進行方向を設定するにはスピードバーの下の進行方向表示をドラッグします, なお, 機関車固有のEventでもそのタイムライン上にArticle Listの中の品目に対するコマンドを設定することは可能です(例:機関車の進行方向を切り替えた後に信号の現示を切り替える等). また機関車制御コマンドの中にルートを設定するEvent等、機関車を制御するのEventではないEventは埋め込むことが可能です. 下図に実際に作成したEventの一部を示します. 下図は機関車V160 をS88コンタクトのC2からC7に移動させるためのプログラムの一部で,この図ではBR160に対して進行方向,速度0を設定した後エンジン(Operating Sound)を起動し(エンジン音を鳴らし),S88コンタクトC2からC7への進路を設定したのち速度を42km/hまで加速,S 88コンタクトC13が列車を検知したら信号ES1を”Stop”にするというプロセスが表示されています. 左から5番目のS字状のアイコンは,別途作成した進路設定のEventです.前述のようにこの進路設定EventのようなArticle Listに対するコマンドのみで構成されたEvent(機関車が紐づいていないEvent)は機関車制御のためのEventに埋め込むことが可能です. 

⒉ コマンドの設定方法の詳細

2. 各コマンドに対する条件の設定方法
コマンドがTime Line上に並んだら個々のコマンドに対する条件設定を行います.<Event>アイコンをクリックし、さらにプルダウンメニューの中から<Edit event>選択すると設定画面の各コマンドの右上にX印が現れますのでその状態でコマンドアイコンをクリックするとそのコマンドに対する詳細設定画面が現れます.この画面は選択したコマンドにより異なります.以下に例を示します.

※ 値の切り替えコマンド(機関車のFunktionのON/OFFや分岐器の切り替え)の場合の条件設定
その一例が下の画面です.この部分のValueをクリックすると値(FunctionのON /OFF)のどちらかを選択する画面が現れますのでどちらかを選択します. このコマンドは機関車やスイッチへの動作指令ですのでラジオボタンはActionを選択します(Defaultのまま). 次に下のDelayの部分にこのコマンドの発効から次のコマンド発効までのDelay時間を入力します(入力部をクリックするとキーボードが現れます).このDelay時間はこのコマンドの発効から次のコマンド発効までの時間であり、このCommandのValue状態の持続時間とは関係ありません。例えば所定時間後サウンドをOFFにするにはサウンドOFFのコマンド(サウンドの”値”を変えるコマンド)を新たにTimeline上に追加し,OFFまでの時間をONを指示するCommandのDelay時間として設定することが必要です. 汽笛を所定時間鳴らす時等はこのように設定します.なお, Timeline上にCommandをドラッグする場合, Commandはドラッグした時に表示されているValueでTime Line上に配置されますので, そのコマンドをそのValueで発効する場合は詳細設定によるValueの再設定は不要です.

※スピードを指示するコマンドの場合の条件設定
スピード設定コマンドの場合はSpeedが表示されている部分をクリックするとスピードバーが現れますのでそのスピードバーを調整してスピードを設定します。Delay=0の場合、機関車はそのスピードまで加速し次のスピード設定コマンドが発効されるまでそのスピードを維持します. 所定時間後にスピードを変化させる場合には新たなスピード設定コマンドを追加してそこに変化後のスピードを設定し, そのスピードへの加速(減速)を開始するまでの時間を変化前のスピード設定コマンドのDelay時間として設定します.このDelay時間設定の際は車両が加速する時間も考慮することが必要です. そのため走行中にスピードを変化させたい場合, 前の速度コマンドのDelayを0にしたままで変化後のスピードを設定しても車両はDelayを設定したコマンドのスピードで走行することなく次に設定したコマンドの速度まで加速してしまいますので注意が必要です.

※イベントに対する条件設定
Event中に埋め込んだEventをクリックすると下記の画面が現れます。最下行のDelay時間を設定しますが、この時時間を入力する欄の左のDelayと表示されたボックスをクリックするとこの部分がレ表示となり、Delay時間がこのイベントが終了してからの時間(Delay2)として設定されます.ここレをつけなければこのイベント開始からの時間(Delay1)となります.Delay時間がDelay2として設定された場合,タイムライン上のEventアイコンの左上にWマークが表示されます.

※S88コンタクトに対する条件設定
S88コンタクトの設定画面は下記となります. Delay時間は他のコマンドと同じですが、S88コンタクトの場合、S88コンタクトに対してPodsitionに表示された状態になれという動作指示を行うのではなく、S88コンタクトの状態をチェックし, その状態が条件と一致すれば次のCommand (Event)を発動しますので,この点で前に説明したアクションを指示するコマンドとは異なります.今回のプログラムではS88コンタクトが列車の在線を検知したらアクションを起こすという設定にしますのでPositionは列車を検知している状態の黄色を選択します。またこのコマンドは対象物に対する動作指示のためのコマンドではなく,プログラムがここまで進んだところでこのコンタクトの状態を判定して次の動作を指示するコマンドなのでラジオボタンはCondition,プルダウンメニューはDelayに設定します。Delay時間は在線検知した時点から次のコマンドが発行するまでの時間です. 在線検知後所定位置で機関車を停止させたい場合にはこのDelay時間を調整します. このように設定するとEventのTime Line上のアイコンの左上にWマークが表示されます.

以上がプログラムの概要です. 今回のレイアウトの自動運転プログラムの主要部分は列車の2点間(2箇所のs 88コンタクト間)の往復動作ですが, このレイアウトは線路配置が単純なため,上記の内容を理解すれば自動運転プログラムが作成可能です. Eventの作成方法の中にはさらに高度な機能として条件文(I F \THEN/ELSE)が設定できるEventや赤信号で減速停止するEventも作成可能なようですが実際に試していませんのでここでは割愛します(行うにしてもマニュアル(ヘルプ)がまだ充実していないため試行錯誤の作業になりそうです).

<”終着駅”Großfurra”の自動運転プログラムの具体例>
”終着駅”Großfurra”の自動運転プログラムの具体例として下図に示した想定ダイヤでの終着駅”Großfurra”の自動運転プログラムの一例を紹介します。上記の説明とともに自動運転プログラム作成の参考にしていただければ幸いです.

このダイヤに従ってプログラムした自動運転の動画はこちらです(冒頭に掲載した動画と同一の動画です).

以下、実際にこの自動運転を構成するEventのプログラムの内容を掲載しますので参考にしてください.

VT98をC3からC7に移動させるプログラム

※機関車を制御するEventの中に進路設定を行なうEventが組み込まれています.

BR75をC8からC4に移動させるプログラム

※機関車を制御するEventの中に進路設定を行なうEventと分岐器切替のCommandが組み込まれています.

BR75が2番線到着後貨物駅で貨車を開放するプログラム

 ※ 貨車と機関車の連結部分が開放ランプ上に期待値で機関車を停止位置は, C11で車両(貨物列車の最後尾)を検知してから停止コマンドを発効するまでのDelay時間で調整しています.そのため貨車の長さ(貨車の連結両数)は変えることができません,

BR 323が貨車を貨物駅から2番線に移動させるプログラム

※貨車と機関車の連結はS88コンタクトC10のDelay時間で調整します。欧州の連結器はリンク式ですので本来は機関車と貨車のバッファ同士が接触したあたりで機関車を停車させ連結動作を完了させる必要がありますが,プログラムでは確実な連結のために衝突後少し機関車が貨車を押すように設定しています. また貨車側の走行抵抗を少し増加させておく(車軸にスポンジを接触ておく等を行う)とより確実な連結ができるようです. なお,マニュアルには駆動装置の温度特性により停止距離がばらつくという記載がありますが,今回のような運転パターンではばらつきは全く認識できません.

上記ダイヤグラムの自動運転プログラム全体

※自動運転プログラムはTime Line上のEvent(Command)数は36個でその所要時間は実測で41分弱です. またこのプログラムではEventのDelayは殆ど前のEvent終了からの時間(Delay2) で設定していますので機関区とレイアウトの間に線路を追加しても(両端のS88コンタクトの間の距離が変わっても)プログラムを変更する必要はありません.

注1 この部分はRailbusが1番線に入線するEventとBR323が入替作業をするEventを同時に動かすためRailbusを1番線に入線させるEventのDelayはDelay1で設定してあります. そのためアイコンにWマークがありません.

注2 BR212が牽引するPush Pull列車は編成中にデコーダーを搭載した車両が2両あります(機関車とCab Control Car). そのためこの列車の制御コマンドは機関車に対するEventとCab Control Carに対するEventで構成しています.このEventでは後(最後)のEventが機関車を移動させるEventで発動から完了までに時間がかかりますのでこのEventにDelay2を設定しておかないとEvent “B R 212-Bymf C1toC7”]にDelay時間を設定しても機関車の移動完了前(Event実行中)に次のEventが起動し衝突事故が発生してしまいます.

以上,簡単ですが今回作成したレイアウトの自動運転プログラムを紹介させていただきました.プログラミングの方法は最初は分かりにくいですが,一度要点を理解すればそれほど難しいものではありません.またこのブログで最初に自動運転プログラムを紹介した当時からCS3のソフトウエアの安定性は格段に向上しているという印象です.実際の運転では88コンタクトでの検出不良の発生は皆無と言ってよく,車両の集電不良にさえ気をつければ動作は安定しています.ただ, セッションの失敗は殆どがカプラーの動作不良(連結の失敗)に起因しますので,車両のカプラーの動作チェックは確実に行う必要があります.

近年教育界ではプログラミングの知識の習得の重要性が叫ばれていますが,今回の自動運転プログラムの作成は,一定の制限条件下(一定の線路配置)で設定したストーリーに沿っていかに車両に実物的な動きをさせるかという観点でプログラムの構想設計からプログラミングまでの一連のプロセスが体験でき,その結果が即列車の動きとなって現れるという点でプログラミングの教育ツールとして使用しても有効ではないかという気もします.

以上、最後までお世にいただきありがとうございました.