Main Content

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

Atomic サブチャートを使用したエレベーター システムのモデル化

以下の例では、Stateflow® でリンクされた Atomic サブチャートを使用して 2 台のかごをもつエレベーター システムをモデル化する方法を説明します。エレベーター システムは Simulink® モデルとユーザー インターフェイス (UI) で構成されています。モデルには 2 つの Stateflow チャートが含まれています。

  • Elevator System は、UI から受け取った要求を最も近い利用可能なエレベーターかごにデリゲートする中核のロジックをモデル化します。このチャートには、かごに対して同一のロジックを実装する 1 組の Atomic サブチャートが含まれています。

  • UI Controller は Elevator System チャートからの情報を処理して UI の表示を更新します。このチャートでは、それぞれの Atomic サブチャートがエレベーターかごを移動させるタイミングとそのドアを開閉するタイミングを判定します。

シミュレーションの開始に際し、モデルは UI を開きます。UI には 9 つの階に停止できる 2 台のエレベーターかごが表示されています。UI の一番下にある 2 つの黄色い四角形は、エレベーターかごの内部を表しています。例の実行中、エレベーターかごを呼び出すか、いずれかの階に停止するリクエストをするか、各階の廊下とエレベーターかごの中にあるボタンをクリックして火災報知器を鳴らします。UI は、Elevator System チャートの入力値を変更して、入力イベントをトリガーすることによって応答します。

ユーザー インターフェイスからのリクエストの管理

Elevator System チャートは 3 つのパラレル サブステートで構成されています。これらのサブチャートはそれぞれ UI からのリクエストのキューを管理します。

  • Elevator_Managerサブチャートはエレベーター システムのメインの制御ロジックを実装します。このサブチャートは、いずれかの階の廊下にあるボタンをクリックしたときに生成されるリクエストをすべて保持するホール キューを管理します。サブチャートはこれらのリクエストを処理し、リクエストされた階への近接性と可用性に応じて、どちらかのエレベーターかごにデリゲートします。

  • 电梯_A电梯_Bは 2 台のエレベーターかごのロジックを表します。各かごには、すべてのフロア リクエストを保持する独自のキューがあります。フロア リクエストは、エレベーターかごの中にあるボタンをクリックするか、Elevator_Managerにより、ホール キューからかごにリクエストがデリゲートされた時点で生成されます。

Atomic サブチャートを使用したロジック パターンの再利用

エレベーターかごは同一のロジックを使用してそれぞれのリクエスト キューを処理します。Elevator System チャートは、ライブラリ モデルからリンクされた Atomic サブチャートを使ってその動作をモデル化します。

ライブラリ モデルのチャートElevatorは,のごのロジックをします。サブチャート电梯_Aおよび电梯_Bが適切なかごを制御するようにプログラミングするには、各サブチャート内のデータとイベントを、メイン チャートの対応するデータとイベントにマッピングします。たとえば、电梯_Bについてはのように。。

  • サブチャートの入力floor_requestをチャートの入力CarB_floor_requestにマッピング。

  • サブチャートの出力位置をチャートの出力B_positionにマッピング。

  • サブチャートの出力doorOpenをチャートの出力doorBOpenにマッピング。

  • サブチャートのイベントCAR_CALLをチャートのイベントcar_call_bにマッピング。

各 Atomic サブチャートのマッピングを表示するには、サブチャートを右クリックして[サブチャートのマッピング]を選択します。

各エレベーターかごの UI の表示を制御するため、UI Controller チャートはライブラリ モデルからリンクされた原子サブチャートを2つ使用します。

Atomic サブチャートを使ってロジックをカプセル化し再利用する方法の詳細については、Atomic サブチャート使用した再利用可能なサブコンポーネントの作成を参照してください。

設計への Atomic サブチャートの組み込み

この例のモデルは、Atomic サブチャートを使用しない古いモデルを再設計したバージョンです。元のモデルは、個別のサブチャートを使用してフロア リクエストの管理 (Elevator System チャートのサブチャート电梯_Aおよび电梯_B) とエレベーターかごの UI 表示の制御 (UI Controller チャートのサブチャートCarA_ControllerおよびCarB_Controller) を行っています。どちらのサブチャートも、互いにほぼ同一であるコピーです。使用するデータとイベントの名前のみが異なっています。

重複するサブチャートを Atomic サブチャートに変換するには、まずいずれかのサブチャートから、ライブラリ Atomic サブチャートを作成します。次に、このライブラリのリンクされたインスタンスを使用して、重複するサブチャートを置き換えます。たとえば、Elevator System チャートで重複しているエレベーターかごのサブチャートについて考えます。これらのサブチャートは、Elevator_Managerサブチャートで定義されている関数とローカル変数をいくつか呼び出します。Atomic サブチャートを作成する前に、これらのサブチャートを独立した自己完結ユニットにしなければなりません。

1. 次の関数をElevator_Managerサブチャートから親チャートに移行します。

  • exists_in_queue

  • deregister

  • dequeue

これらの関数の名前を変更して、エレベーターかごのサブチャート内にある関数と区別します。

2.モデル エクスプローラーを使用して、次の変数をElevator_Managerサブチャートから親チャートに移行します。

  • hall_call_queue

  • hall_call_status

3. Elevator System チャートで、[チャート レベルの関数をエクスポート]チャート プロパティをtrueに設定します。詳細については、再利用のための Stateflow 関数のエクスポートを参照してください。

4.Elevator_Managerサブチャートと电梯_Aサブチャートを、移行した関数と変数を使用するように変更します。

5.チャートでステートの复数利用利用の説明に従って、电梯_Aサブチャートからライブラリ Atomic サブチャートを作成します。

6. サブチャート データ位置[スコープ]LocalからOutputに変更することで、Atomic サブチャートがそれを含むチャートにエレベーターかごの位置を渡すことができるようにします。

7. 2 つのエレベーター サブチャートを、リンクされた Atomic サブチャートに置き換えます。それぞれのリンクされた Atomic サブチャートについて、データとイベントを親チャートにマッピングします。詳細については、Atomic サブチャートおよびボックスでの変数のマッピングを参照してください。

関連するトピック