2007/8/3

ポイント制御の成否を判定する方法  VRMスクリプト禅問答
【怎麼生】

操作しようとするポイント上に編成が存在した場合、ポイントの切り替えが失敗しますが、これを調べてそのポイントに向かっている編成を停車させることは出来ないでしょうか?

【説破】 4.0.7.1

出来ます。

基本的な考え方は、SetPointBranch命令で切り替えを試みた直後に、GetPointBranch命令で本当に切り替わったかを調べればよろしい。


以下に、汎用的に使えるサンプルコードを示します。
[ポイントスクリプト]

Var VarPointStatus
Var VarReturnCode
Var EvtRetry

//正位切替メソッド
BeginFunc MtdStraight
KillEvent EvtRetry
set VarPointStatus 0
call this MtdChangePoint
EndFunc

//反位切替メソッド
BeginFunc MtdTurnout
KillEvent EvtRetry
set VarPointStatus 1
call this MtdChangePoint
EndFunc

//第三位切替メソッド
//※この部分は三叉ポイント意外では消しても構わない
BeginFunc MtdTurnout2
KillEvent EvtRetry
set VarPointStatus 2
call this MtdChangePoint
EndFunc

//ポイント切替・再試行メソッド
BeginFunc MtdChangePoint
Var TmpPointStatus
//ポイント切替
SetPointBranch VarPointStatus
//ポイント状態を取得
GetPointBranch TmpPointStatus
//意図した状態になったかチェック
ifeq VarPointStatus TmpPointStatus
//切替成功なら、VarReturnCodeに1を代入
set VarReturnCode 1
else
//切替失敗なら、VarReturnCodeに0を代入し・・・
set VarReturnCode 0
//100ミリ秒後に再試行
SetEventAfter this MtdChangePoint EvtRetry 100
endif
EndFunc

[呼び出し側スクリプト]

VarPoint ObjControlPoint
get ObjControlPoint {ポイント名}

BeginFunc MtdSample
//以下は正位切替の例
// 3つのうち適切なヤツを選ぶべし
call ObjControlPoint MtdStraight
// call ObjControlPoint MtdTurnout
// call ObjControlPoint MtdTurnout2
//ポイントの変数VarReturnCodeを調べて・・・
if ObjControlPoint.VarReturnCode
//
// ポイント切替が成功したときの処理をここに書く
//
else
//
// ポイント切替が失敗したときの処理をここに書く
//
endif
EndFunc
と、こんな感じ。

オマケ機能として、ポイント切替に失敗した(ポイント上に編成が存在した)場合、100ミリ秒待ってもう一度ポイント切替を再試行するロジックを組み込んでいます。この再試行はポイント切替に成功するまで続くので、ポイント上に存在した編成が走行中であれば、いずれは切替が成功することになります。この機能が不要であれば、SetEventAfter命令と、対となるKillEvent命令を全部消して使ってください。

察しの良い人は「あ、コレを使えばこんなことも出来るじゃん!!」と気づいたことでしょう。察しの悪い人のために、後日それについて書きます。
0

コメントを書く

この記事にはコメントを投稿できません




teacup.ブログ “AutoPage”
AutoPage最新お知らせ