使われていそーで、使われていないのか・・・?
それはともかく、最近使い始めてみた命令。
「便利な物には罠がある」というか、自分の世界では時々発せられる言葉である。
AutoSpeedCtrl
SetEventAutoSpeed
SearchPoint
本日はAutoSpeed系をクローズアップしてみます。
マニュアルをさっと読むと、指定距離走行後、指定Volt(スピード)にするように読み取れる。早速センサーと組み合わせ、センサー通過後に指定距離で停止(volt=0.0)を組み込んでみた。おー止まったぞー!って当たり前っすよね。
AutoSpeedCtrlを使ったメリットは、指定距離走行後、指定速度に簡単に出来ることと、その間キー操作によるスピード変更が無視される事であろうと思う。SetVoltageやSetTimerVoltageの命令も無視されているようだから自動運転には便利な命令ですね。
指定距離はPCの状態により若干前後するようで、必ず同じ位置に停止するかといえば、そうでも無いようですが、誤差の内のレベルです。
SetEventAutoSpeedイベントを受け、指定時間後に発車を組み込んでみた。
普段編成の走行開始はSetTimerVoltageを使用しているのだが、今回はAutoSpeedCtrlで再出発をやてみた。
あれ?AutoSpeedCtrlは呼び出されているように見えるが発車しない!
KillEventの位置が悪いのかな〜とか悪戦苦闘してみたがうまくいかない。
マニュアルをもう一度よく読んでみた。
う〜ん。編成を停止する事は出来る様だが、停止している編成を出発させる事が出来るとは一言も書かれていない。でもオペランドからすれば出来るんじゃないかな〜と思いこんでしまう。まーダメならSetTimerVoltageを使えばいいだけなんで、改善して欲しいなんて話ではないし、バグってるかもしれないし。(笑)
便利な物の罠なんだろーか・・・。
スクリプトを掲載しておきますので、興味ある方は実験してみてくだされ。
バグ報告もお待ちしております。
単純なエンドレスループにセンサー1個を配置したレイアウトを作成。
自動的に発車し、センサーを通過すると600mm先で自動停止し、5秒後に再出発するはず?のテストスクリプトです。
編成の運転開始・再開のSetTimerVoltageを生かせば再出発する事は確認済です。
●センサーオブジェクト
//■グローバル変数
//■ローカル変数
Var eidSensor
VarTrain vTrain
SetEventSensor fncSensorEvent, eidSensor
//■ファンクション
//センサー検知イベント
BeginFunc fncSensorEvent
GetSenseTrain vTrain //通過編成取得
set vTrain.pvKyori, 600 //制御距離指定
setf vTrain.pvVolt, 0.0 //到達電圧指定
call vTrain, fncAutoSpeed //自動スピード制御開始
EndFunc
●編成オブジェクト
//■グローバル変数
Var pvKyori //制御距離
Var pvVolt //到達電圧
//■ローカル変数
Var eidAutoSpeedEnd
Var eidTrainStart
SetTimerVoltage 0.6, 1000
//■ファンクション
//自動スピード制御開始
BeginFunc fncAutoSpeed
DrawVar pvKyori
DrawVar pvVolt
AutoSpeedCtrl pvKyori, pvVolt
SetEventAutoSpeed fncAutoSpeedEnd, eidAutoSpeedEnd
// SetVoltage 1.0
EndFunc
//自動スピード制御終了
BeginFunc fncAutoSpeedEnd
SetEventAfter this, fncTrainStart, eidTrainStart, 5000
KillEvent eidAutoSpeedEnd
EndFunc
//運転開始・再開
BeginFunc fncTrainStart
set pvKyori, 600 //制御距離指定
setf pvVolt, 0.6 //到達電圧指定
call this, fncAutoSpeed //自動スピード制御開始
KillEvent eidTrainStart
// SetTimerVoltage 0.6, 10000
// SetVoltage 0.6
EndFunc

0