イベントスクリプト機能は、S88などのセンサや機関車の動作状況などをきっかけとして、予め指定した命令一覧(スクリプト)を動かすための仕組みです。この機能を使うことで、以下の様な機能を実現できます。
トリガの種類 | トリガの内容 |
---|---|
進入 | S88センサがOFFからONに変わった瞬間に発生します。 |
退出 | S88センサがONからOFFに変わった瞬間に発生します。 |
在線 | S88センサがONの時に発生します。ONが続く場合はイベント命令が全て実行が終わった時に最初に戻って繰り返します。 |
非在線 | S88センサがOFFの時に発生します。OFFが続く場合はイベント命令が全て実行が終わった時に最初に戻って繰り返します。 |
定周期 | 一定周期でスクリプトを実行させます。何かの監視をする時に便利です。 |
時刻 | 懐中時計の時刻に合わせて動かすタイミングを選べます。 |
ランダム | 指定した時間間隔の中でランダムにイベントを発生させます。1時間と指定したら、1時間以内でいつ発生するかは分かりません。1分後かもしれませんし、59分後かもしれません。 |
走行中 | 指定の車両が走行中(指定速度以上)かどうかでスクリプトを動作させます。 |
停止中 | 指定の車両が停止中(指定速度以下)かどうかでスクリプトを動作させます。 |
フラグ | フラグの値が指定の条件を満たす場合にスクリプトを動作させます。 |
ルート | ルート条件に適合するかどうか(ルートが開通しているか)でスクリプトを動作させます。 |
電源投入時(Startup) | 線路に電源が投入された時に動作します。ルートの初期設定、たとえばポイントや信号機の初期化に使うと良いです。 |
よく使う機関車を何度も設定するのは面倒なので、一括して動かす車両を簡単に選べるようになっています。 レイアウトで車両を変えるのに簡単なように、複数機関車操作画面のスロットからも選べるようになっています。排他選択なので、スロットを選ぶか、機関車リストから選ぶかは各自の構成で判断ください。
複数機関車操作画面で左上によく見ると、A,B,C・・・と書いてあります。これがスロットA、スロットB・・・となっています。
通常は、上記で示した通り、自動置換機能で、車両をコマンドごとに設定する必要はありませんが、たまに特定の車両だけ動かしたい場合があります。この時は、置換機能を使わずに直接、アドレスを設定します。切替方法は簡単で、「自動置換」のチェックボックスを外せば、アドレスを指定できます。 なお、アドレスではなくスロットを指定することもできます。スロットは、SPEED,FUNCTION,DIRECTIONのみ、指定が可能です。
SPEEDコマンドを使うと、選んだ機関車の速度を自由に変えることができます。 アドレスについては上記で既に説明済みですが、速度と遷移時間について解説します。
速度は0~1024の値の範囲で自由に設定ができます。1024が最高速度、512が半分の速度、0が停止です。速度値は、機関車リストに登録されていて最高速度を落として設定されている場合、最高速度は設定に合わせて自動比率調整されます。 たとえば、機関車リストで最高速度50%(512)と設定されていた場合で、SPEEDコマンドで50%速度設定(512)と指定すると、機関車が出せる最高速度を100%とするときに対して25%の速度で動きます。計算式にすると簡単で0.5×0.5=0.25です。
遷移時間とは、上記の設定速度に到達するように速度とウェイトを自動的に挿入する機能です。 たとえば、遷移時間を20(2秒)、速度256(25%)とすると、その機関車が停止していた時は、2秒かけて速度を256になるように徐々に速度を上げていきます。0.5秒後に64、1秒後に128、2秒後に256になります。
以下に、遷移時間を使った速度切替の例を挙げます。速度0から256まで、2秒で遷移します。5秒待った後、速度を0に2秒で遷移するというスクリプトを書きました。
実際の機関車の速度は以下のようになります。
0.97以降からサポート
ラッチ機能=S88の指定センサの状態を強制的にOFF(赤)かON(緑,在線)に設定変更して、解除の合図があるまではそれを保持する機能です。
理由としては、センサはどうしてもチャタリングすることが多く、電流式であっても、ギャップをまたぐときに誤動作のリスクもありました。また、複数のセンサを連動して考えるとき、S88のハードでは実現が難しいので、プログラミングでどうにかするには、結構面倒でした。
なぜ複数のセンサを連動させたいかというと、次の閉塞区間まできちんと行ったかどうかを判定するとき、センサを通過してしまうと自動的に非在線に戻ります(特に光式センサの場合が顕著)。特に信号機などを連動させると、自動的に戻るのが困る状況がよくあります。そこで、自動で戻らないようにして、ある条件で復帰するようにするためにラッチ機能を使用するのです。
SETすると、その状態を強制的に保持する形になります。 OPENすると、ラッチ(SETした状態の保持)を解除します。
JUMP系命令は廃止予定です。0.97以降からコマンド追加ができません。汎用性の高いGOTOIFコマンドを使用下さい。
JUMP命令と、LABEL命令はセットで使うものです。JUMP命令には条件を設定します。その条件に合うとき、指定されたLABELの付いた行に飛ぶ処理を行います。LABEL関数は、それだけは何もしません。単なるJUMP先の目印でしか使いません。なので、何個設置しても何も起きません。たとえば、以下の様な使い方ができます。
(A)オーソドックスな形です。(B)はちょっと変則ですが、何かの条件が成立するまで待つなどの処理に使えます。
(A) 処理Aを動かす条件と、動かさない条件を分ける例:
(B) 処理Bを動かすまで、処理Aを処理し続ける例:
命令には以下のものがあります。
コマンド | 内容 |
---|---|
JUMP | フラグの値を条件にする |
JUMPS88 | S88センサの状態を条件にする |
JUMPRUN | 車両の走行状態を条件にする 設定するのはアドレスとしきい値となる速度(この速度以下は走行とみなす) |
JUMPSTOP | 車両の停止状態を条件にする。設定するのはアドレスとしきい値となる速度(この速度以下は停止とみなす) |
JUMPROUTE | ルートの開通状態を条件にする |
GOTOIF関数は、条件が成立している場合、指定ラベルにジャンプします。条件が不成立の場合、何も実行しません。ジャンプするための条件は、IF構文を入れて指定します。WAITIF関数は、条件が成立するまでひたすらイベントの中で待つ動作をします。待つための条件は、IF構文を入れて指定します。
条件演算子 | 意味 | 使用例 |
---|---|---|
== | 値が同じ | LSPD.39155==100 |
!= | 値が異なる | LSPD.39155!=100 |
>= | 以上 | LSPD.39155>=100 |
⇐ | 以下 | LSPD.39155⇐100 |
> | 超 | LSPD.39155>100 |
< | 未満 | LSPD.39155<100 |
構文に使える命令:
命令 | 意味 |
---|---|
FLAG | フラグ変数。自然数(0,1,2,・・・)が指定できます。 |
LSPD | 指定アドレスの車両の速度, 速度の範囲は0-1023. DCCの場合は49152+車両アドレスを指定します。アドレス3の場合は、LSPD.49155とします。MM2の場合はそのまま車両アドレスを指定できます。 |
LDIR | 指定アドレスの車両の進行方向, 1=FWD, 2=REV. DCCの場合は49152+車両アドレスを指定します。アドレス3の場合は、LDIR .49155とします。MM2の場合はそのまま車両アドレスを指定できます。 |
SSPD | 指定スロットの速度。速度の範囲は0-1023.スロットはA~Hまで指定できます。SSPD.G==500 |
SDIR | 指定スロットの車両の進行方向, 1=FWD, 2=REV. スロットはA~Hまで指定できます。SDIR.G==1 |
S88 | S88デコーダのアドレス。数字のみ。センサ1ならS88.1、センサ52ならS88.52 |
ACC | ポイント・信号機の分岐方向, 0=分岐, 1=直進。アドレスはそのまま指定できます。ACC.1==1 |
ROUTE | ルートが開通状態(1)か、非開通状態(0)かを返します。ROUTE.2==1 |
ドットを入れて、構文に指定したい数値条件のための命令を指定します。すべて大文字で、ACC.5やSIDR.Cなどと指定してください。
実際の使い方ですが、ぱっと思いつくのは、ポイントが開通するまで待つという処理です。ポイント3が、直進に開通するまで待つ、という処理であれば以下のように記載します。
WAITIF,ACC.3==1,
もしくは
WAITIF,ACC.3!=0,
DesktopStationSoftwareを使用した、イベントスクリプトのサンプルスクリプトや、解説のサイトをご紹介します。
あそびっとさん:
エンゼルエクスプレスさん