SSブログ

スロットルのスティール [python]

前回までにご紹介した、信号現示に従って列車を制御するスクリプトですが、この方法では実は運転そのものを楽しむことは出来ません。
つまり自分でレバーを操作して列車を列車を運転しているときに、PC側が勝手に前方の赤現示で減速停止してくれません。

_________self.throttle = self.getThrottle(int(trainList[j]), False)
_________self.throttle.speedSetting = self.sp
のような形で各車両のDCCデコーダーにスピードを指令するわけですが、
デコーダーを制御する権利を複数のコントローラーに持たせることが出来ないのです。

制御権を横取りすることをDCCではスティールと言っています。
PCで持っている制御権はコントローラーからスティール出来ますが、
逆にPCからはうまくスティール出来ません。
「うまく」と書いたのは、コマンドは通るのですが、相手からリリースさせることが出来ないために、コントローラーからの命令が入るとそちらも通ってしまい、結果的に強制的な停止とはならないことを意味します。
PCからスピード0を命令しても、コントローラーでスピード100を入れてしまうと、100になってしまうのです。
ですので、人間が運転しているものの安全を確保することは出来ません。
なんか、PCに任せっきりにしなければならないということで、実は当初の目的とは違ったものが出来上がっています。

もう一点、スクリプトを走らせる前の注意点ですが、
getThrottleコマンドの前に、PC側で一度バーチャルスロットルを起動し、PCで列車を制御できる状態にしておかなければならないようです。
getThrottleコマンドがうまく通らないと、スクリプトはそこで止まってしまいます。

スロットル.png
赤枠で囲んだウィンドウがJMRIのバーチャルスロットルで、制御したい列車のこれを全て開いておく必要があります。(必要はないのかもしれませんが、こうしておくと上手く動きます。)

手作りなので、使い勝手に癖(流儀)がかなりあり、初めての人が簡単にということにはなりませんね。
タグ:DCC Python
nice!(2)  コメント(4)  トラックバック(0) 

nice! 2

コメント 4

トータン

私のところへも数名の方が来られましたが ご自分で運転する方は遠慮も伴ってかどなたもいらっしゃいませんでした なので誰でも運転できるようにって考えてやることはいいことかもしれませんが 普段から自分が運転しやすいように考えられた方が良いかと思いますよ(^^
by トータン (2013-05-11 07:56) 

ジュンパパ

人間が手動運転出来ないのでは今一面白さが欠けますね。
JMRI側のスロットルをWiFi Throttleにした場合はどうなるんでしょう?
自動運転中に手動で停車などの速度変更が可能となるとか?

by ジュンパパ (2013-05-11 08:21) 

pururu

トータン様、コメントありがとうございます。
DCC&JMRIはまだ熟れてませんので、おっしゃるとおりで「誰でも」というのは難しいですね。複雑なことをやりたいのですが、複雑なことを誰にでも簡単にというのは、至難の業です。私には「製品化」というのは出来ないみたいです。(そんなに複雑でもないんですが。。。)
by pururu (2013-05-13 09:20) 

pururu

ジュンパパ様、コメントありがとうございます。
おっしゃるとおり、苦労して作ったにしては運転のおもしろさに欠けるのですよ。今の使い方としては、2,3人で5つの列車を運転するときに、一人1つは責任を持って信号を守って運転し、その他を自動でという感じです。
また、WiFi Throttleで使う場合は、「乗っ取り、乗っ取られ」はないので併用できそうですが、例えば、赤現示で手で減速操作しているのに、無理矢理スロットル0になっちゃいます。これをまた手で戻せば良いのですが、ギクシャク(実際にはレスポンスを下げてますのでそれほどでもない) となってしまいます。上手く、リスナーを使って現示が変わったときと閉塞区間に入ったときだけ、命令を送れば良さそうです。これをやるにはもう少しpythonを勉強しないといけなそうです。
by pururu (2013-05-13 09:25) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。