Moore のセマンティクスを使用した信号機のモデル化
この例では、Moore のセマンティクスを使用して信号機をモデル化する方法を説明します。Moore チャートは、遷移内ではなく、ステート内でのみ出力を計算します。詳細については、Moore チャートを設計する際の注意事項を参照してください。
Moore の信号機ロジック
上記の例では、5 種類の交通状態で動作する Light_Controller という Moore チャートが信号機モデルに含まれています。各ステートは、2 つの対向車線 (南北と東西) の信号機の色と、現在の色の duration (持続期間) を表しています。各ステートの名前は、南北方向から見た信号機の動作を表しています。
このチャートは、時相論理を使用してステートの遷移を調整します。after
演算子は、遷移元ステートに入力した時点で初期化されるカウントダウン タイマーを実装します。東西方向の道路の方が交通量が多いため、既定の設定では、タイマーは南北方向よりも東西方向に対して青信号の時間を長く設定しています。東西方向では少なくとも 20 時間刻みの間、青信号が持続しますが、南北方向に交通量が存在しなければ、東西方向は青信号のままです。南北方向の赤信号で自動車が待機しているかどうかをセンサーが検出します。自動車が待機している場合は、南北方向は青信号になり交通の往来を可能にします。
新しいステートへの遷移の前に現在のステートに基づいて出力を更新するため、Light_Controller チャートの動作は Moore マシンと同様です。
Stop
— 信号機は、南北方向で赤信号、東西方向で青信号です。
現在のステートに基づいて出力
y1 = RED
(南北) を設定します。現在のステートに基づいて出力
y2 = GREEN
(東西) を設定します。20 時間刻み後、アクティブ ステートは
StopForTraffic
になります。
StopForTraffic
— 信号機は少なくとも 20 時間刻みの間は、南北方向で赤信号、東西方向で青信号になっています。
現在のステートに基づいて出力
y1 = RED
(南北) を設定します。現在のステートに基づいて出力
y2 = GREEN
(東西) を設定します。センサーをチェックします。
南北方向で自動車が待機していることをセンサーが通知した場合 (
[sens]
が真)、アクティブ ステートはStopToGo
になります。
StopToGo
— 信号機は、センサーに対応して交通の流れを入れ替える必要があります。
現在のステートに基づいて出力
y1 = RED
(南北) を設定します。現在のステートに基づいて出力
y2 = YELLOW
(東西) を設定します。3 時間刻み後、アクティブ ステートは
Go
になります。
Go
— 信号機は 3 時間刻みの間、南北方向で赤信号、東西方向で黄信号になっていました。
現在のステートに基づいて出力
y1 = GREEN
(南北) を設定します。現在のステートに基づいて出力
y2 = RED
(東西) を設定します。10 時間刻み後、アクティブ ステートは
GoToStop
になります。
GoToStop
— 信号機は 10 時間刻みの間、南北方向で青信号、東西方向で赤信号になっていました。
現在のステートに基づいて出力
y1 = YELLOW
(南北) を設定します。現在のステートに基づいて出力
y2 = RED
(東西) を設定します。3 時間刻み後、アクティブ ステートは
Stop
になります。
Moore の信号機の設計ルール
上記の Moore の信号機の例は、以下の Moore の設計ルールを図示したものです。
チャートは、ステート アクションの出力
y1
およびy2
を計算する。チャートは、遷移の条件に基づいて入力
sens
をテストする。チャートは、非同期イベントではなく、時相論理を使用する。