VRM入道

VRM侍は出家しますた(w    カリカリ

 
投稿者
メール

 
コメント
URL
コメントは新しいものから表示されます。
コメント本文中とURL欄にURLを記入すると、自動的にリンクされます。
投稿者:ghost
ぶらぼー。>ゆゆぽん☆殿
投稿者:ゆゆぽん☆
待避列車の初期位置を変えて、出信号機の中身を改めたら、動きました。
[出信号機]

//信号灯火色管理変数
Var VarSignalColor
call this MtdSignalR

VarSignal ObjNextSignal
get ObjNextSignal Signal3

VarSignal ObjWaitSignal
get ObjWaitSignal Signal5

VarSensor ObjSensor1
get ObjSensor1 SigSns1

VarSensor ObjSensor11
get ObjSensor11 SigSns11

VarPoint ObjPointW
get ObjPointW Suma-W1

Var TmpType
Var VarTrainType
set TmpType 100

Var WaitID

//灯火色設定メソッド
BeginFunc MtdSignalR
set VarSignalColor 1
SetSignal VarSignalColor
EndFunc

BeginFunc MtdSignalG
set VarSignalColor 6
SetSignal VarSignalColor
call ObjPointW MtdTurnout
EndFunc


BeginFunc MtdWaitSignal
if ObjNextSignal.VarSignalColor 1
call this MtdWaitSignalR
else
SetEventAfter this MtdWaitSignal WaitID 100
endif
EndFunc

BeginFunc MtdWaitSignalR
call this MtdDepCtrl
EndFunc

BeginFunc MtdDepCtrl
ifeq ObjWaitSignal.VarSignalColor 1
call this MtdSignalG
call this MtdMainSigCtrl
else
SetEventAfter this MtdDepCtrl WaitID 100
endif
EndFunc

BeginFunc MtdMainSigCtrl
call ObjSensor11 MtdRelaySectionBlock
SetEventAfter ObjSensor1 MtdRelaySectionBlock WaitID 100
EndFunc

あと、最終ページの課題のみです。
投稿者:ghost
メール、受け取りました。
全部読んだワケではありませんが、概ね問題はわかりました。

(1) 退避列車の初期位置が悪い

今回の仕組みでは、出発信号を緑にする条件待ちは、[特]センサーが退避列車を検知することで始まるようになっています。つまり[特]センサーを何かが通過しない限り、出発信号は決して緑になりません。

送っていただいたレイアウトでは退避列車が既に退避線に収まっています。これでは意図通りの動作をしません。

退避列車の初期位置を駅の手前にしてビュワー起動後に入線させるか、今のままの初期位置を保つのであれば、ビュワー起動時に限り、Signal2のメソッドWaitMtdSignalRを強引に実行して(宣言部でSetEcentAfterで100ミリ秒後実行するのがお奨め)、退避列車が一度センサーを通ったのと同じ状況にしてやる必要があります。

(2) 肝心のSignal2のWaitMtdSignalRの中身もおかしい

これについてはもう一度本文を読み直して考えるように。少なくとも1つのメソッドでは無理です。

・追越列車が既に出発したこと。

 閉Bが赤でなければ次へ(1つ目のメソッド)

 閉Bが赤になれば次へ(2つ目のメソッド)

  =閉Bを追越列車が通過した

・追越列車が駅から十分に離れたこと。

 閉Bが緑であれば、出発信号を緑へ(3つ目のメソッド)

こういう構成になるはずです。
投稿者:ghost
流石にここまで来ると、これはああですか、あれはどうですか、のやりとりでは解決が難しいです。

“卒業試験”として、ここまで作ったレイアウトファイルをメールに添付して送ってもらえませんか?
投稿者:ゆゆぽん☆
[出]センサーは

//Var命令で宣言
VarSignal ObjSignal2
get ObjSignal2 Signal2


Var SigCtrl
SetEventSensor MtdRelaySectionBlock SigCtrl


BeginFunc MtdRelaySectionBlock
call ObjSignal2 MtdSignalR
EndFunc

これだけで、編成を感知したら赤にする以外何もしていません。出信号機のifeq VarTrainType 100 が
心に引っかかるのですが・・・。
投稿者:ghost
[出信号機]は・・・

(1) 退避線に退避列車が入ったら、追越列車の通過を待って緑になる。
(2) 退避列車が自身の位置を通過したら=出発したら赤になる。

以外の遷移をする必要がありません。

示していただいていませんが、おそらくは[出]センサーのセンサーイベントから、[出信号機]のWaitMtdSignalRをcallしておられるのではないかと。

これをすると、赤のままであってよい[出信号機]が、閉塞信号同様に前方の信号の遷移に連動して緑になってしまいます。その結果、連鎖メソッドが発動して[閉A]が赤になっている・・・と、まぁ、そういう感じではないかと思うのですが、いかが?
投稿者:ゆゆぽん☆
[出信号機]
//信号灯火色管理変数
Var VarSignalColor
call this MtdSignalR

VarSignal ObjNextSignal
get ObjNextSignal Signal3

VarSignal ObjMainSignal
get ObjMainSignal Signal5

VarSignal ObjSignal1
get ObjSignal1 Signal1

VarPoint ObjPointW
get ObjPointW Suma-W1

Var TmpType
Var VarTrainType
set TmpType 100

Var WaitID

//灯火色設定メソッド
BeginFunc MtdSignalR
set VarSignalColor 1
SetSignal VarSignalColor
EndFunc

BeginFunc MtdSignalG
set VarSignalColor 6
SetSignal VarSignalColor
call ObjPointW MtdTurnout
EndFunc


BeginFunc WaitMtdSignalR
if ObjMainSignal.VarSignalColor 6
SetEventAfter this WaitMtdSignalR WaitID 100
endif
ifeq ObjMainSignal.VarSignalColor 1
ifeq VarTrainType 100
call this MtdSignalG
call ObjSignal1 MtdSectionBlock
endif
endif
EndFunc

[特センサー]
VarPoint ObjPoint
get ObjPoint Suma-E1

VarSignal ObjSignal1
get ObjSignal1 Signal1

VarSignal ObjSignal2
get ObjSignal2 Signal2

VarSignal ObjSignal11
get ObjSignal11 Signal11

VarSignal ObjSignal10
get ObjSignal10 Signal10

Var EvtSensor
SetEventSensor MtdPointCtrl EvtSensor

SetSensorMode 1

BeginFunc MtdPointCtrl
call ObjPoint MtdTurnout
call ObjSignal2 WaitMtdSignalR
call ObjSignal11 MtdForceRelease
call ObjSignal10 MtdSignalG
EndFunc

※ObjSignal10=閉@の1つ前の信号
※ObjSignal11=閉@
※ObjSignal3=閉B(この前書き間違えました)

出以外すべて最初は青なので、閉Bが青=閉Bが青になるときに赤になる信号でくらべました。
でも、待避列車がいなくても出が青になり、閉Aが赤になります。よく読み直してスクリプトを変えてみたのですが、間違いは何なのでしょう?

投稿者:ゆゆぽん☆
>[閉@喚呼センサー]
たぶん、書くオブジェクトを間違えていたと思います。特センサーに書くのですね。前回の続きにというのはそれを応用するのかと思いました。
あと、PCの調子が悪い(急におちる)ので、やる回数が減るのでコメントなどできない場合があります。
投稿者:ghost
(1) [出]のWaitMtdSignalR について

示していただいたスクリプトは“ObjNextSignal(図の[閉B])が赤になったら[出]を緑にする”になってしまっていますが、これが間違いです。

落ち着いて本文を読み直してください。ゆゆぽん☆殿には、既にご自身で答えを見つける力があります。

(2) [閉@]のMtdRelaySectionBlock について

思うに、これは図の[特]センサーに書かれるべきものなので(厳密に言えばまだ抜けがありますが)認識合わせが必要です。

[閉@喚呼センサー]、と書かれたのがそもそもミスタイプなのか、あるいは、ゆゆぽん☆殿がこれを[閉@喚呼センサー]に書くべきものだ、とお考えなのか、で対応が変わります。

(3) [閉A信号機に追加]について

call this MtdSignalR しているのが“閉Aがずっと赤のまま”の原因です。これは“閉塞を解除するメソッド”なのですから、信号は緑にならなければおかしいです。
投稿者:ゆゆぽん☆
思い通りに動きません。

[出 信号機]
//信号灯火色管理変数
Var VarSignalColor
call this MtdSignalR

VarSignal ObjNextSignal
get ObjNextSignal Signal3

VarSignal ObjSignal1
get ObjSignal1 Signal1

VarPoint ObjPointW
get ObjPointW Suma-W1

Var WaitID

//灯火色設定メソッド
BeginFunc MtdSignalR
set VarSignalColor 1
SetSignal VarSignalColor
EndFunc

BeginFunc MtdSignalG
set VarSignalColor 6
SetSignal VarSignalColor
call ObjPointW MtdTurnout
EndFunc

//閉塞実施メソッド
BeginFunc MtdSectionBlock
//灯火色切替メソッドを実行
call this MtdSignalR
EndFunc

BeginFunc WaitMtdSignalR
ifeq ObjNextSignal.VarSignalColor 1
call this MtdSignalG
endif
if ObjNextSignal.VarSignalColor 6
SetEventAfter this WaitMtdSignalR WaitID 100
endif
EndFunc

[閉@喚呼センサー]
//Var命令で宣言
VarSignal ObjSignal3
get ObjSignal3 Signal3

VarSignal ObjSignal2
get ObjSignal2 Signal2

VarSignal ObjSignal1
get ObjSignal1 Signal1

Var SigCtrl
SetEventSensor MtdRelaySectionBlock SigCtrl


BeginFunc MtdRelaySectionBlock
call ObjSignal1 MtdForceRelease
call ObjSignal2 WaitMtdSignalR
call ObjSignal3 MtdSectionBlock
EndFunc

[閉A信号機に追加]
BeginFunc MtdForceRelease
KillEvent WaitID
call this MtdSignalR
EndFunc

※ObjSignal1=閉A
※ObjSignal2=出
※ObjSignal3=閉@

出信号機にメソッドは書いてあるのですが、
閉Bを追越列車が通った瞬間青になってしまいます。それと、閉Aがずっと赤のままになってしまいます。KillEventの使い方を間違えていると思うのですが、よく解りません。どうしたらよいのでしょうか?あと、前の件に関しては、解決しました。
すみませんでした。

実験的代物

CSS無効化 ここで知った方法を使ってます

真・世界征服新着情報

今月のお勤め

2008年
← August →
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
RSS
Copyright (C) GMO Tea Cup Communication, Inc. All Rights Reserved.