鉄道模型フォーラム Model Train

信通区

39 / 54 ツリー ←次へ | 前へ→

【80】JAMでDCC自動運転を展示 橋本孔明 2004/08/25 15:26 [未読]
【81】RE: JAMでDCC自動運転を展示 真水博之 2004/08/26 09:26 [未読]
【82】Re:RE: JAMでDCC自動運転を展示 橋本孔明 2004/08/26 14:36 [未読]
【83】Re2:RE: JAMでDCC自動運転を展示 真水博之 2004/08/27 23:00 [未読]
【85】Re:Re2:RE: JAMでDCC自動運転を展示 橋本孔明 2004/08/28 02:26 [未読]

【80】JAMでDCC自動運転を展示
 橋本孔明  2004/08/25 15:26

橋本孔明@結伝杜です。

今回のJAMの結伝杜ブースで、今まで開発したDCC制御関連の集大成として
・全自動ダイヤ運転(仙石線)
・電車でGo!コントローラを使ってトレインスコープを走らせる
という展示を行い、好評を博せたようですので、ご報告しておきます。

---------------------------------------------------------------------------

自動運転はLoconetをPC制御することで行っています。

線路
||
||
||
||====フィーダー========[DCS100]--------[USB]--[PC(Loconetドライバ)]
||
||----[センサ入力]----[センサユニット]--[USB]--[PC(センサドライバ)]
||

今回は御殿場と同じく、試作のUSBのものを利用していますが、MS100でも同等の動
作を行うようデバイスドライバ側で吸収しています。
デバイスドライバはTCP/IPのサーバになっており、クライアントプログラムはここ
と通信することで、Windows上で起動する任意の複数のプログラムがLoconetを弄る
ことができるようになっています。

センサはCdSセルを利用しています。線路に埋め込み、その入力を、PC用ジョイパッ
ド基板のボタンのスイッチ部分に繋ぐことで、「CdSが通電中はジョイパッドのボタ
ンが押されていることにする」という構造にしてみました。こうすることで入力回
路は安いジョイパッドを分解することで得られ、プログラムからもDirectXという安
定動作するシステムを利用することができます。

自動運転システムについては、COMサーバをひとつ作成しました。このCOMサーバは
上記のTCP/IPのクライアントとなっており、メソッドからLoconetの命令を発行でき
ます。コードネームは「SkyBlue(青22号)」です。
このサーバは、Loconetとのやりとりの他、上記のセンサの入力や、ダイヤ運転用の
スケール(任意倍速)タイマ(別途起動してあります)と通信して時刻を入出力す
るメソッドも実装しています。

COMサーバとすることで、VBScriptやJavaScriptからこれらを操作できるようになり
ます。
下記は路面等で使える「3秒ごとにポイントを切り替える」スクリプトの例です。

>>Option Explicit
>>Dim obj
>>Dim nSwitch
>>
>>nSwitch = 33          ' ポイントデコーダID
>>
>>Set obj = CreateObject("SkyBlue.AutoTrain")
>>
>>while true
>>    obj.SetSwitch nSwitch, true ' ポイントを true(closed)に
>>    obj.Sleep 3000        ' 3000ミリ秒待つ
>>    obj.SetSwitch nSwitch, false ' ポイントを false(thrown)に
>>wend
>>
>>Set obj = Nothing

ダイヤを別途作成してもらい、それを元に列車ごとにタイムチャートを作成して、
1列車1スクリプトという構造にしました。

下記は仙石線ダイヤ運転の一部の抜粋です。10時〜18時で一巡します。
「obj.WaitRunStop nSlot, nRunSpeed, nDay, 12, 50, 1」というのは「nDay日の
12時50分になったら発車し、1番センサを踏んだら止まれ」という命令です。
nDayは「何日目」という変数で、一日のダイヤが終了したらインクリメントして10
時に戻ります。

>>obj.AllocateSlot 10, nSlot1, false
...
>>nSlot = nSlot1
...
>>obj.DebugPrint " 10:00  石巻   待機"
>>obj.DebugPrint " 10:10  石巻   待機"
>>obj.DebugPrint " 10:20  石巻   上り発車"
>>obj.SetSlotDirection nSlot, false
>>obj.WaitRunStop nSlot, nRunSpeed, nDay, 10, 20, 6
>>obj.DebugPrint " 10:30  松島海岸 発車"
>>obj.WaitRunStop nSlot, nRunSpeed, nDay, 10, 30, 4
>>obj.DebugPrint " 10:40  多賀城  発車"
>>obj.WaitRunStop nSlot, nRunSpeed, nDay, 10, 40, 2
>>obj.DebugPrint " 10:50  仙台   終着    2"
>>obj.DebugPrint " 11:00  仙台   待機"
>>obj.DebugPrint " 11:10  仙台   下り発車"
>>obj.SetSlotDirection nSlot, true
>>obj.WaitRunStop nSlot, nRunSpeed, nDay, 11, 10, 3
...
>>obj.DebugPrint " 12:50  多賀城  上り発車  ポイント転換"
>>obj.WaitForScaleTime nDay, 12, 50, 0
>>obj.SetSwitch nSwitch, false
>>obj.WaitRunStop nSlot, nRunSpeed, nDay, 12, 50, 1
>>obj.DebugPrint " 13:00  仙台   終着1番線 ポイント復元"
>>obj.SetSwitch nSwitch, true


ダイヤが10分区切りのためこのように10分ごとのタイムチャートベース構造として
います。他の列車の動作に干渉していないため、行き違い駅で「対向列車が来るま
で発車しない」などの動作が行えない難点がまだあります。

---------------------------------------------------------------------------

実際の運用結果ですが、「ランタイムトラブルさえ発生しなければいつまででも安
定動作できる」という結果を得ました。
ここでのランタイムトラブルは

・集電不良で走らなくなる(メンテを入念にしてこれは激減しました)
・観客、特に子供が車両や線路を触ってしまう
・観客がポイントを勝手に転換してしまい誤動作する、あるいはポイントデコーダ
 動作不良でポイントが転換してくれなかったりする
・観客がセンサを覗き込むことでセンサが誤検知する(発生しませんでした)
・DCS100のパケロスで列車暴走など(過負荷時に何度か発生)
・当方作成プログラムのバグ(確証がありませんがどうやらあった模様)
・Loconet-USBインターフェースの不具合(まだ開発中なので‥‥)

といったものです。できるだけプログラム側でトラブルを吸収できるようにはして
いますが、ポイント転換ミスなどハードウェアトラブルはどうしようもありません
ので、この場合はタイマを停止し、列車を初期配置に戻して再開するなどしました。
結論としては3日間あまり弄ることなく動作し、鑑賞に堪え得る結果を見せてくれた
と判断します。

---------------------------------------------------------------------------

列車が走るだけでは観客も何がなんだかわかりませんので、駅の電光掲示を各駅の
前に設置した液晶モニタに表示するシステムも開発しています。
こちらだけは昨年のJAMで手動ダイヤ運転用に作ったものをベースにほとんど流用し
ており、自動運転システムとはスケールタイマの時刻を共有している以外は独立し
て動作します。
内容的には、XMLファイルに記述された各駅の時刻・列車種別情報を元に、デザイン
テンプレートのHTMLファイルの中の変数を置き換えて表示更新するというものにし
ました。このデータはLANで共有されたフォルダの中にHTMLファイルで出力します。
すなわちビューアにはInternetExplorerを利用する形ですが、単なるIEのウィンド
ウでは不格好ですので、ActiveXコントロールとして自前のプログラムに埋め込んだ
独自のブラウザを作成して利用しています。表示更新はこのブラウザがIEに2秒おき
に更新命令を発行する形で、各駅のPCはLANで接続されていますので、上記の共有フ
ォルダのデータが更新されれば表示も更新される仕組みです。
もうちょっと発展すればhttpサーバとして実装もできるかと思います。

---------------------------------------------------------------------------

今回のもうひとつの展示が「トレインスコープ+電車でGo!コントローラ」です。
トレインスコープ自体は御殿場でも試用していましたのでご覧になった方もおられ
るかと思いますが、画質は満足のいくものです。
さすがに価格が安くなったためJAMの他のサークルでも導入してきたようで、今回も
1件だけ他サークルとの信号混信が発生しました。
トレインスコープを液晶テレビに映し、手前にあるノートPCにMS-100と電車でGo!コ
ントローラを接続して上記の自動運転と同様にLoconetのPC制御を行いました。
コントローラは「電車でGo!コントローラ TYPE2」という PlayStation2専用のもの
です。こちらはPCに繋いでも汎用のゲームコントローラとは認識してくれませんで
したので、自分でデバイスドライバから自作しました。といってもそこまで詳しく
ないため、USB解説書に付録で付いていた汎用のものを小加工した程度です。
以前販売されていた、Windows用の電車でGo!コントローラなら、汎用のゲームパッ
ドとして認識されますので、DirectXで入力を得ることができます。
いずれにしても、入力を得たらそれをもとに実車のような加速・減速動作をエミュ
レーションするプログラムを作成し、車載デコーダへのスピード設定命令として
Loconetに送ります。以上でカメラカーのコントローラ操作が可能になります。

---------------------------------------------------------------------------

というわけで、今回は結伝杜が今まで開発してきたDCC関連の技術をフル動員する形
の展示となりました。一応の成果を得ましたので成功だったと思います。

システム設計にあたっては、ソフトウェアは私の担当ですが、センサやジョイパッ
ド改造などハードウェア設計(山口氏)やダイヤ作成(こしょう氏)など分業する
形となりました。とても一人で全部設計できるものではありません。
写真はあまりありませんが、当方のウェブサイトの8月23日の日記に掲載しましたの
で、よろしければご笑覧下さい。

---------------------------------------------------------------------------

橋本孔明 / Yoshiaki "Koumei" Hashimoto
http://train.khsoft.gr.jp/
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR...@naan3.webtech.co.jp>

【81】RE: JAMでDCC自動運転を展示
 真水博之  2004/08/26 09:26

真水です。

御紹介ありがとうございます。

こだ運で動かしているところを見せていただきましたが、動作も確実
で、安定したシステムという感じを受けました。

この手のものは、論理的には動くと判っていても、実際やってみると
いろいろ思い通りに行かないことが多いですから。

また、ソフトの構成については、私にも、いろいろと勉強になります。
私の場合には、httpサーバのマシンにMS100をつないで、そこで列車等
の情報管理とLoconetとの通信を一括して行い、センサー入力や自動運転
のプログラムは、そこと通信しながら行う形に考えています。

私には、デバイスドライバを書くほどの技術はない(本は買いましたが)
ので、MS100とは普通にRS232Cでの通信ですし、センサーは既成の汎用
ドライバを使用したプリンタポート入力です。

それから、通過検出には、CdSセルを使用しているとのことですが、感度
や反応速度はいかがですか?
反応速度が遅いと単行の機関車がフルスピードで通過したら、反応しな
かった、なんてことが起こりかねませんが。(そこまで遅くはないですか)

          信通区助役  真水 博之/さいたま市南区
<INCM1.23a@k161194.ppp.asahi-net.or.jp>

【82】Re:RE: JAMでDCC自動運転を展示
 橋本孔明  2004/08/26 14:36

橋本孔明@結伝杜です。

>>私には、デバイスドライバを書くほどの技術はない(本は買いましたが)
>>ので、MS100とは普通にRS232Cでの通信ですし、センサーは既成の汎用
>>ドライバを使用したプリンタポート入力です。

センサについては、もちろん専用のA/Dユニットなどで信号として入力するの
が一番簡単で確実なのですが、御殿場でも少しお話したかもしれませんが、
なにしろ資金的な問題からコストダウンを追求することになったため、ジョイ
パッド流用ということにしてみました。

結果としてセンサ11箇所が入力できる(ボタン11個)ジョイパッドはひとつ
500円程度です。ジョイパッドですのでUSB接続、ドライバもWindows標準添付
ですからどのPCでもすぐに使え、ソフトウェアもDirectX(DirectInput)の開
発(割と簡単)ですからこれも工数が少なくてすみます。

>>それから、通過検出には、CdSセルを使用しているとのことですが、感度
>>や反応速度はいかがですか?
>>反応速度が遅いと単行の機関車がフルスピードで通過したら、反応しな
>>かった、なんてことが起こりかねませんが。(そこまで遅くはないですか)

CdSは「上に何か居るかどうか」がon/offで常時調べられるものですので、こ
れを「通過検知」の信号にするため、プログラム側で別スレッドで無限ループ
を回して信号をポーリングする形を採用しています。実はジョイパッドの基板
はノイズがあるようで、たまに一瞬On/Offが切り替わったような信号が流れて
くることがあります。このようなノイズ対策のため、センサONを検知したらそ
れから一定秒間(今回は0.3秒)ONが続くかどうか調べてからプログラム上で
センサONと判断するようにしています。実際にはこれにCdS素子自身の反応速
度が加わります。

御殿場での検証の感想としては、最低限「車両が上に居る時間」は0.5秒を確
保できるようにしたほうがよさそうだという印象を受けました。
機関車を常識的な速度で動かすなら問題はありませんが、路面電車の1両編成
フルスピード通過だと少々厳しいかもしれません。


センサについては時間の関係で今回はそれまで検証していたCdSをそのまま採
用という形になりましたが、今後は他の形式のセンサも研究予定です。
ただ、車両に何らかの加工(DCCデコーダ搭載を除く)を要求するものはなる
べく避けたいと考えています。リードスイッチ用の金属片やフォトリフレクタ
用のアルミテープなどがこれに該当します。どれだけ簡単な加工であっても、
結伝杜内の車両の総数がシャレにならない数になっているため‥‥です。

タッチセンサについてはTOMIXの製品がありますので、次はこれを研究してみ
ようかと考えています。
当然ながら、素子ごとに「通過検知」と「在線検知」の得意不得意があります
から、これらの組み合わせを採用していくのがベストかもしれません。

また、センサ入力をそのままLoconetパケットに乗せてしまう方式などを研究
予定です。というのも、センサが増えるとセンサ用の配線の手間がバカになら
ないと今回痛感したためです。

---------------------------------------------------------------------------

橋本孔明 / Yoshiaki "Koumei" Hashimoto
http://train.khsoft.gr.jp/
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR...@naan3.webtech.co.jp>

【83】Re2:RE: JAMでDCC自動運転を展示
 真水博之  2004/08/27 23:00

>センサについては、もちろん専用のA/Dユニットなどで信号として入力するの
>が一番簡単で確実なのですが、御殿場でも少しお話したかもしれませんが、
>なにしろ資金的な問題からコストダウンを追求することになったため、ジョイ
>パッド流用ということにしてみました。

そうですね、ジョイパッド流用なら、ドライバはすでにあるわけですし、ラッチ
しないで直接パソコン側でポーリングをしていれば、ハードは最小限で済みます
ね。

センサ数が11個を超える場合に、ジョイパッドを複数接続しても、個々のジョイ
パッドについては識別できるんでしょうか。ドライバのつくり次第なんでしょうか。

>センサについては時間の関係で今回はそれまで検証していたCdSをそのまま採
>用という形になりましたが、今後は他の形式のセンサも研究予定です。

私のほうは、フォトトランジスタをレール間に埋め込み、その真上に赤外線LED
を配置するという方法を考えています。
フォトトランジスタは、比較的、反応速度が速いとされているんですが、実際は
やってみないとわかりません。
十分明るいところなら、赤外線LEDはなくてもよいのですが、感度がいいので、
覗き込みによる誤作動防止のため、取り付けようと思っています。

>また、センサ入力をそのままLoconetパケットに乗せてしまう方式などを研究
>予定です。というのも、センサが増えるとセンサ用の配線の手間がバカになら
>ないと今回痛感したためです。
これは、私も悩んでいるところです。これができると、すばらしいですねぇ。

          信通区助役  真水 博之/さいたま市南区
<INCM1.23a@k161194.ppp.asahi-net.or.jp>

【85】Re:Re2:RE: JAMでDCC自動運転を展示
 橋本孔明  2004/08/28 02:26

橋本孔明@結伝杜です。

>>センサ数が11個を超える場合に、ジョイパッドを複数接続しても、個々のジョイ
>>パッドについては識別できるんでしょうか。ドライバのつくり次第なんでしょうか。

DirectInputでは、ジョイパッドが複数ある場合はインデックス指定でいくつでも
操作できます。
きちんと作り込んでやることで、センサ数はUSBの上限まで行けると思います。
今回作ったのは手抜きのためまだ1パッドしか対応できていませんが‥‥

>>>また、センサ入力をそのままLoconetパケットに乗せてしまう方式などを研究
>>>予定です。というのも、センサが増えるとセンサ用の配線の手間がバカになら
>>>ないと今回痛感したためです。
>>これは、私も悩んでいるところです。これができると、すばらしいですねぇ。

一番手っ取り早いのは、専用のセンサデコーダを開発してしまうことかもしれません。
デコーダの作れる人に今度ちょっと聞いてみようかと考えています。

---------------------------------------------------------------------------

橋本孔明 / Yoshiaki "Koumei" Hashimoto
http://train.khsoft.gr.jp/
<Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)@tetkyo018060.tkyo.te.ftth2.ppp.infoweb.ne.jp>

39 / 54 ツリー ←次へ | 前へ→
アクセス数:76,721 (SS)C-BOARD v3.5.4 is Free.