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

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

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

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

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

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

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

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

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

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

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

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

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

この例のモデルは、Atomic サブチャートを使用しない古いモデルを再設計したバージョンです。元のモデルは、個別のサブチャートを使用してフロア リクエストの管理 (Elevator System チャートのサブチャート Elevator_A および Elevator_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 サブチャートと Elevator_A サブチャートを、移行した関数と変数を使用するように変更します。

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

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

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

関連するトピック