Main Content

データ ディクショナリを使用したモデル参照階層用のデータ分割

モデル参照を使用して、大規模なシステムから小規模なコンポーネントとサブコンポーネントにモデルを分割する場合、データ ディクショナリを作成して "設計データ" を分離できます。設計データは、ブロック パラメーターと信号の特性を指定するためにモデルが使用するワークスペース変数のセットです。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。

データ管理にこのコンポーネントベースのアプローチを採用するには、共通のデータを含む共有ディクショナリと、各コンポーネントで必要なデータを含む、そのコンポーネント用の個別のディクショナリを作成します。

モデル例を開いて設計データを読み込む

モデル例 ex_SystemModel を開きます。このモデルは、他のモデル例も含まれる参照階層の一番上にあります。

作業ディレクトリに格納されている MAT ファイルを読み込んで、ベース ワークスペースに設計データを作成します。

load ProjectData_Contr.mat
load ProjectData_ContrSub1.mat
load ProjectData_ContrSub2.mat
load ProjectData_ContrSubs.mat
load ProjectData_Plant.mat
load ProjectData_System.mat

各コンポーネントのディクショナリの作成

以下の例は、設計データを複数のディクショナリに分割する方法を示しています。終了すると、システムのコンポーネントはそれぞれディクショナリをもち、ディクショナリ参照によりコンポーネントでデータを共有できるようになります。

モデルの階層構造例の確認

  1. モデル内でブロック線図を更新します。モデル内の各バス信号は Simulink.Bus オブジェクトをデータ型として使用します。オブジェクト (SensorBusCtrlBus) はベース ワークスペース内にあります。

    参照モデル ex_PlantComp_Lvl1ex_ContrComp はルートレベルの入力と出力にバス オブジェクトを使用します。つまり、プラント コンポーネントとコントローラー コンポーネントはオブジェクトを共有します。

  2. ベース ワークスペースで、FloatType という名前の Simulink.NumericType オブジェクトをダブルクリックします。コントローラー コンポーネント内の信号、パラメーター、その他のデータ項目はこの共有データ型を使用します。

  3. モデル エクスプローラーの [モデルの階層構造] ペインで ex_SystemModel ノードを展開します。

    Configurations ノードをクリックします。[コンテンツ] ペインで、ノード Reference to SimConfigSet が表示されます。SimConfigSet はベース ワークスペース内の Simulink.ConfigSet オブジェクトです。シミュレーションでのコンフィギュレーション パラメーターの統一性を維持するために、階層内のすべてのモデルは SimConfigSet を参照します。

  4. ノード Controller (ex_ContrComp) を右クリックして [開く] を選択します。

  5. モデル エクスプローラーの [モデルの階層構造] ペインで新しいノード ex_ContrComp を展開します。Configurations ノードをクリックします。

    [コンテンツ] ペインで、ノード Reference to CodeGenConfigSet が表示されます。CodeGenConfigSet はベース ワークスペース内の Simulink.ConfigSet オブジェクトです。コード生成でのコンフィギュレーション パラメーターの統一性を維持するために、コントローラー コンポーネント内のモデルは CodeGenConfigSet を参照します。プラント コンポーネント内のモデルは CodeGenConfigSet を使用しません。

  6. [モデルの階層構造] ペインで [Base Workspace] を選択します。[コンテンツ] ペインで、変数 diff を右クリックして、[使用されている場所の検索] を選択します。[システムを選択] ダイアログ ボックスで、ex_SystemModel を選択し、[OK] をクリックします。ブロック線図の更新に関するメッセージが表示された場合、[OK] をクリックします。

    [コンテンツ] ペインで、変数 diff は最初のコントローラーのサブコンポーネントを構成するモデル ex_ContrComp_Sub1_Lvl1 および ex_ContrComp_Sub1_Lvl2Constant ブロックで使用されています。同様に、階層内の他のモデルはベース ワークスペース変数 coeffinitmu および rho を共有します。

次の表に、ベース ワークスペースで各変数を共有するモデルを示します。

変数名変数を使用するモデル共有範囲
CtrlBusプラント コンポーネントとコントローラー コンポーネント内の最上位モデルシステム全体でグローバルに共有
SensorBusプラント コンポーネントとコントローラー コンポーネント内の最上位モデルシステム全体でグローバルに共有
SimConfigSet階層内のすべてのモデルシステム全体でグローバルに共有
rhoex_PlantComp_Lvl2ex_ContrComp_Sub1_Lvl2 および ex_ContrComp_Sub2_Lvl2システム全体でグローバルに共有
muex_PlantComp_Lvl1ex_PlantComp_Lvl2プラント コンポーネント内のモデルで共有
FloatTypeコントローラー コンポーネント内のすべてのモデルコントローラー コンポーネントとサブコンポーネントで共有
CodeGenConfigSetコントローラー コンポーネント内のすべてのモデルコントローラー コンポーネントとサブコンポーネントで共有
initex_ContrComp_Sub1_Lvl2ex_ContrComp_Sub2_Lvl1コントローラー サブコンポーネントで共有
diffex_ContrComp_Sub1_Lvl1ex_ContrComp_Sub1_Lvl2最初のコントローラー サブコンポーネント内のモデルで共有
coeffex_ContrComp_Sub2_Lvl1ex_ContrComp_Sub2_Lvl22 番目のコントローラー サブコンポーネント内のモデルで共有

開発者の個別のチームがプラント コンポーネントとコントローラー コンポーネントを保守していると仮定します。データ ディクショナリを使用して共有設計データを格納し、スコープを指定できます。

共有グローバル ディクショナリの作成

システム全体でグローバルに共有されるデータを含む共有グローバル ディクショナリを作成します。

  1. モデル エクスプローラーで、[ファイル][新規][データ ディクショナリ] を選択します。

  2. 新しいディクショナリ名を GlobalShare に設定し、[保存] をクリックします。

  3. [モデルの階層構造] ペインで、GlobalShare ノードを右クリックして、[空のセクションを表示] を選択します。

  4. [モデルの階層構造] ペインで [Base Workspace] を選択します。[コンテンツ] ペインで、システム全体でグローバルに共有される設計データを選択します。CtrlBusSensorBus、および rho です。

  5. 右クリックして [コピー] を選択します。

  6. [モデルの階層構造] ペインで、GlobalShare の下の Design Data ノードを右クリックし、[貼り付け] を選択します。

  7. 同様に、SimConfigSet[ベース ワークスペース] からコピーし、GlobalShare の下の Configurations ノードにコピーします。

プラント コンポーネント用のディクショナリの作成

Plant コンポーネントでモデルによって共有されるデータのデータ ディクショナリを作成します。このディクショナリから共有グローバル ディクショナリへの参照を追加します。

  1. モデル エクスプローラーで、[ファイル][新規][データ ディクショナリ] を選択します。

  2. 新しいディクショナリ名を Plant に設定し、[保存] をクリックします。

  3. [モデルの階層構造] ペインで、ノード Plant を選択します。[ダイアログ] ペインの [参照ディクショナリ] で、[追加] をクリックします。

  4. GlobalShare.sldd をダブルクリックします。

  5. [モデルの階層構造] ペインで、ノード Plant を右クリックし、[変更の保存] を選択します。

Plant コンポーネントのディクショナリへのリンクとデータの移行

Plant コンポーネントを自身のコンポーネント ディクショナリにリンクし、次に Plant コンポーネント内のモデルで共有されるデータをベース ワークスペースからディクショナリへ移行します。

  1. モデル ex_PlantComp_Lvl1 を開きます。

  2. モデル内でブロック線図を更新します。

  3. 診断ビューアーに SimConfigSet の複数の矛盾する定義のエラーが表示される場合は、GlobalShare インスタンスの隣にある [他の定義を一致するように更新] を選択します。この修正により、GlobalShare の定義と一致するように他の定義が更新されます。

  4. [モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。

  5. ダイアログ ボックスで [参照] をクリックします。

  6. Plant.sldd をダブルクリックします。

  7. [モデル プロパティ] ダイアログ ボックスで、[適用] をクリックします。参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。

  8. [モデル プロパティ] ダイアログ ボックスで、[データの移行] をクリックします。

  9. [データの移行] ダイアログ ボックスで、[参照モデルのデータを含める] を選択し [移行] をクリックします。

  10. (オプション) [モデル プロパティ] ダイアログ ボックスで [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。

  11. モデル データを読み込むための前のメソッドを削除します。[モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、モデルの PreLoadFcn をオフにします。

  12. [OK] をクリックします。

コントローラー コンポーネント用のディクショナリの作成

コントローラー コンポーネント内のモデルで共有されるデータを含むデータ ディクショナリを作成します。このディクショナリは共有グローバル ディクショナリも参照できます。

  1. モデル エクスプローラーで、[ファイル][新規][データ ディクショナリ] を選択します。

  2. 新しいディクショナリ名を Controller に設定し、[保存] をクリックします。

  3. [モデルの階層構造] ペインで、ノード Controller を選択します。[ダイアログ] ペインの [参照ディクショナリ] で、[追加] をクリックします。

  4. GlobalShare.sldd をダブルクリックします。

  5. [モデルの階層構造] ペインで、ノード Controller を右クリックし、[変更の保存] を選択します。

コントローラー コンポーネントのディクショナリへのリンクとデータの移行

コントローラー コンポーネントを自身のコンポーネント ディクショナリにリンクし、次にコントローラー コンポーネント内のモデルで共有されるデータをベース ワークスペースからディクショナリへ移行します。

  1. モデル ex_ContrComp を開きます。

  2. 診断ビューアーに SimConfigSet の複数の矛盾する定義のエラーが表示される場合は、GlobalShare インスタンスの隣にある [他の定義を一致するように更新] を選択します。

  3. [モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。

  4. ダイアログ ボックスで [参照] をクリックします。

  5. Controller.sldd をダブルクリックします。

  6. [モデル プロパティ] ダイアログ ボックスで、[適用] をクリックします。参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。

  7. [モデル プロパティ] ダイアログ ボックスで、[データの移行] をクリックします。

  8. [データの移行] ダイアログ ボックスで、[参照モデルのデータを含める] を選択し [移行] をクリックします。

  9. (オプション) [モデル プロパティ] ダイアログ ボックスで [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。

  10. モデル データを読み込むための前のメソッドを削除します。[モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、モデルの PreLoadFcn をオフにします。

  11. [OK] をクリックします。

システムのグローバル ディクショナリへのリンク

最後に、最上位モデルをグローバル ディクショナリにリンクします。

  1. モデル ex_SystemModel を開きます。

  2. [モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。

  3. ダイアログ ボックスで [参照] をクリックします。

  4. GlobalShare.sldd をダブルクリックします。

  5. [モデル プロパティ] ダイアログ ボックスで、[OK] をクリックします。参照モデルのリンクについてのメッセージに対して、[このモデルのみを変更] をクリックします。

データ ストレージの検査

モデル エクスプローラーの [モデルの階層構造] ペインで、Plant ディクショナリ ノードを選択します。[コンテンツ] ペインで Plant.sldd の内容を表示するには、[現在のシステム以下を表示] をクリックします。[Design Data] および [Configurations] セクションの内容が表示されます。

The Contents pane of Model Explorer with Design Data and Configuration sections from Plant.sldd displayed

同様に、Controller.sldd の内容を表示します。

The Contents pane of Model Explorer with Design Data and Configuration sections from Controller.sldd displayed

[DataSource] 列には、各ディクショナリに格納される変数およびオブジェクトが表示されます。

CtrlBusSensorBus などのすべてのグローバルな共有変数は、GlobalShare.sldd にあります。両方のコントローラー サブコンポーネントが共有する変数 init は、Controller.sldd にあります。

コントローラー コンポーネントに割り当てられた開発チームがグローバルな共有変数に変更を加えなければならない場合は、GlobalShare ディクショナリ ファイルにアクセスします。同様に、チームが変数 init に変更を加える必要がある場合は、Controller ディクショナリ ファイルにアクセスしなければなりません。

ディクショナリ階層の検査

ディクショナリ全体とモデルの階層構造を表示するには、依存関係の分析を実行します。

  1. 保存したモデル ex_SystemModel を開きます。

  2. [モデル化] タブの [設計] セクションで、[依存関係アナライザー] をクリックします。

Dependency analyzer that displays the dictionary and model hierarchy

システム モデル ex_SystemModel はディクショナリ GlobalShare.sldd にリンクされています。プラント コンポーネントとコントローラー コンポーネントはそれぞれ個別のディクショナリにリンクされています。共有データにアクセスするため、コンポーネント ディクショナリはディクショナリ GlobalShare.sldd を参照します。これらのディクショナリは参照階層を形成します。

共有データを検出する方法

モデル参照階層内でのモデルのデータ共有については、以下の手法を使用して確認することができます。

  • 開いているモデルの [モデル化] タブで、[検索][参照される変数の検索] を選択します。モデル エクスプローラーにモデルが使用する変数と、参照モデルが使用する変数が表示されます。変数を右クリックし、[使用されている場所の検索] を選択して、その変数を使用するすべてのモデルを表示します。詳細については、モデル エクスプローラーを使用したワークスペース変数の編集と管理を参照してください。

  • コマンド プロンプトで、関数 Simulink.findVars を使用してモデルが使用する変数を特定します。次に、関数 intersect を使用して 2 つのモデル、コンポーネントまたはサブコンポーネントが共有する変数を特定します。

関連するトピック