このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
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_A
とElevator_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 サブチャートおよびボックスでの変数のマッピングを参照してください。