Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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 の設計ルールを図示したものです。

  • チャートは、ステート アクションに基づいて出力を計算する。

  • チャートは、遷移の条件に基づいて入力をテストする。

  • チャートは、非同期イベントではなく、時相論理を使用する。

  • チャートは、チャートの入力 (sens) と出力 (y1y2) を定義する。

関連するトピック