【ステップ2】スクリプト言語Luaで制御スクリプトを記述


をクリックして編集画面に切り替えます。

をクリックすると制御のためのコードを追加していない最小限の内容になります。

をクリックするとテキストを編集できるアプリケーションが起動され制御スクリプトの内容が表示されます。

function connectClicked()
	connect('192.168.4.1', 2001)
end

function reset()
	print('Reset state...')
end

function detected(rail, isYellow, train)
	print(string.format('DETECTED! %d, %s, %d', rail.id, tostring(isYellow), train.id))
end

print('Script started...')

function connectClicked()

ハードウェアと接続するとき実行されます。

【ステップ5】で説明します。

function reset()

をクリックして1台目の電車が走行する直前に実行されます。

グローバル変数のテーブルrails経由で、すべてのレールに対して後述のプロパティ、メソッドを使うことができます。

rails[<レール番号>]

例)rails[4].turnLeft()

レール番号4のレールのポイントを左方向に切り替えます。

function detected(rail, isYellow, train)

駅、ポイントに設置したセンサーが電車を検出したとき実行されます。

rail

Railクラスのインスタンスが渡されます。後述のプロパティ、メソッドを使うことができます。

isYellow

黄色のセンサーのときはtrue、緑色のセンサーのときはfalseが渡されます。

train

Trainクラスのインスタンスが渡されます。後述のプロパティを使うことができます。

をクリックしてシミュレータ上の電車を走行させます。停止するときは をクリックします。

まずfunction reset()に記述された”Reset state…”が画面に表示されます。

次にレールの状態が初期化されます。function reset()にレールの状態を初期化するコードを記述するとそちらが優先されます。

センサーの横を電車が通過するとセンサーは黄色に変わり、function detected()に記述された”DETECTED! …”が画面に表示されます。

function detected()に駅、ポイントを制御するコードが記述されていないため、電車は外周を単調に走行します。

をクリックするとインストール時の制御スクリプトの状態に戻ります。

【ステップ3】以降はこの制御スクリプトを使います。

function detected(rail, isYellow, train)に、駅、ポイントを制御するコードが追加されています。

【注意】ソフトウェアのバージョンによって、閉塞区間用のコードが追加されている場合があります。

function detected(rail, isYellow, train)
	print(string.format('DETECTED! %d, %s, %d', rail.id, tostring(isYellow), train.id))

	if isYellow and rail.isStation then
		rail.stop()
		coroutine.yield(0.5 / train.speedFactor)
		rail.addPassengers()
		coroutine.yield(1)
		rail.removePassengers()
		coroutine.yield(1)
		rail.go()
	end

	if isYellow and rail.isPoint then
		coroutine.yield(1.5 / train.speedFactor)
		rail.nextDirection()
	end
end

をクリックしてシミュレータ上の電車を走行させます。停止するときは をクリックします。

駅のセンサーの横を電車が通過すると、function detected()に記述されたコードによって次のように動作します。

停止

0.5秒待機(電車の速度により調整)

ホームに新しい乗客を追加

1秒待機

ホームから古い乗客を移動

1秒待機

走行

ポイントのセンサーの横を電車が通過すると、次のように動作します。

1.5秒待機(電車の速度により調整)

ポイント切り替え

function detected(rail, isYellow, train)で渡されたRailクラスのインスタンス、Trainクラスのインスタンスに対して下記のプロパティ、メソッドを使えます。