データ ディクショナリを使用したモデル参照階層用のデータ分割
モデル参照を使用して、大規模なシステムから小規模なコンポーネントとサブコンポーネントにモデルを分割する場合、データ ディクショナリを作成して "設計データ" を分離できます。設計データは、ブロック パラメーターと信号の特性を指定するためにモデルが使用するワークスペース変数のセットです。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。
データ管理にこのコンポーネントベースのアプローチを採用するには、共通のデータを含む共有ディクショナリと、各コンポーネントで必要なデータを含む、そのコンポーネント用の個別のディクショナリを作成します。
モデル例を開いて設計データを読み込む
モデル例 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
各コンポーネントのディクショナリの作成
以下の例は、設計データを複数のディクショナリに分割する方法を示しています。終了すると、システムのコンポーネントはそれぞれディクショナリをもち、ディクショナリ参照によりコンポーネントでデータを共有できるようになります。
モデルの階層構造例の確認
モデル内でブロック線図を更新します。モデル内の各バス信号は
Simulink.Busオブジェクトをデータ型として使用します。オブジェクト (SensorBusとCtrlBus) はベース ワークスペース内にあります。参照モデル
ex_PlantComp_Lvl1とex_ContrCompはルートレベルの入力と出力にバス オブジェクトを使用します。つまり、プラント コンポーネントとコントローラー コンポーネントはオブジェクトを共有します。ベース ワークスペースで、
FloatTypeという名前のSimulink.NumericTypeオブジェクトをダブルクリックします。コントローラー コンポーネント内の信号、パラメーター、その他のデータ項目はこの共有データ型を使用します。モデル エクスプローラーの [モデルの階層構造] ペインで
ex_SystemModelノードを展開します。Configurationsノードをクリックします。[コンテンツ] ペインで、ノードReference to SimConfigSetが表示されます。SimConfigSetはベース ワークスペース内のSimulink.ConfigSetオブジェクトです。シミュレーションでのコンフィギュレーション パラメーターの統一性を維持するために、階層内のすべてのモデルはSimConfigSetを参照します。ノード
Controller (ex_ContrComp)を右クリックして [開く] を選択します。モデル エクスプローラーの [モデルの階層構造] ペインで新しいノード
ex_ContrCompを展開します。Configurationsノードをクリックします。[コンテンツ] ペインで、ノード
Reference to CodeGenConfigSetが表示されます。CodeGenConfigSetはベース ワークスペース内のSimulink.ConfigSetオブジェクトです。コード生成でのコンフィギュレーション パラメーターの統一性を維持するために、コントローラー コンポーネント内のモデルはCodeGenConfigSetを参照します。プラント コンポーネント内のモデルはCodeGenConfigSetを使用しません。[モデルの階層構造] ペインで [Base Workspace] を選択します。[コンテンツ] ペインで、変数
diffを右クリックして、[使用されている場所の検索] を選択します。[システムを選択] ダイアログ ボックスで、ex_SystemModelを選択し、[OK] をクリックします。ブロック線図の更新に関するメッセージが表示された場合、[OK] をクリックします。[コンテンツ] ペインで、変数
diffは最初のコントローラーのサブコンポーネントを構成するモデルex_ContrComp_Sub1_Lvl1およびex_ContrComp_Sub1_Lvl2の Constant ブロックで使用されています。同様に、階層内の他のモデルはベース ワークスペース変数coeff、init、muおよびrhoを共有します。
次の表に、ベース ワークスペースで各変数を共有するモデルを示します。
| 変数名 | 変数を使用するモデル | 共有範囲 |
|---|---|---|
CtrlBus | プラント コンポーネントとコントローラー コンポーネント内の最上位モデル | システム全体でグローバルに共有 |
SensorBus | プラント コンポーネントとコントローラー コンポーネント内の最上位モデル | システム全体でグローバルに共有 |
SimConfigSet | 階層内のすべてのモデル | システム全体でグローバルに共有 |
rho | ex_PlantComp_Lvl2、ex_ContrComp_Sub1_Lvl2 および ex_ContrComp_Sub2_Lvl2 | システム全体でグローバルに共有 |
mu | ex_PlantComp_Lvl1 と ex_PlantComp_Lvl2 | プラント コンポーネント内のモデルで共有 |
FloatType | コントローラー コンポーネント内のすべてのモデル | コントローラー コンポーネントとサブコンポーネントで共有 |
CodeGenConfigSet | コントローラー コンポーネント内のすべてのモデル | コントローラー コンポーネントとサブコンポーネントで共有 |
init | ex_ContrComp_Sub1_Lvl2 と ex_ContrComp_Sub2_Lvl1 | コントローラー サブコンポーネントで共有 |
diff | ex_ContrComp_Sub1_Lvl1 と ex_ContrComp_Sub1_Lvl2 | 最初のコントローラー サブコンポーネント内のモデルで共有 |
coeff | ex_ContrComp_Sub2_Lvl1 と ex_ContrComp_Sub2_Lvl2 | 2 番目のコントローラー サブコンポーネント内のモデルで共有 |
開発者の個別のチームがプラント コンポーネントとコントローラー コンポーネントを保守していると仮定します。データ ディクショナリを使用して共有設計データを格納し、スコープを指定できます。
共有グローバル ディクショナリの作成
システム全体でグローバルに共有されるデータを含む共有グローバル ディクショナリを作成します。
モデル エクスプローラーで、[ファイル] 、 [新規] 、 [データ ディクショナリ] を選択します。
新しいディクショナリ名を
GlobalShareに設定し、[保存] をクリックします。[モデルの階層構造] ペインで、
GlobalShareノードを右クリックして、[空のセクションを表示] を選択します。[モデルの階層構造] ペインで [Base Workspace] を選択します。[コンテンツ] ペインで、システム全体でグローバルに共有される設計データを選択します。
CtrlBus、SensorBus、およびrhoです。右クリックして [コピー] を選択します。
[モデルの階層構造] ペインで、
GlobalShareの下のDesign Dataノードを右クリックし、[貼り付け] を選択します。同様に、
SimConfigSetを [ベース ワークスペース] からコピーし、GlobalShareの下のConfigurationsノードにコピーします。
プラント コンポーネント用のディクショナリの作成
Plant コンポーネントでモデルによって共有されるデータのデータ ディクショナリを作成します。このディクショナリから共有グローバル ディクショナリへの参照を追加します。
モデル エクスプローラーで、[ファイル] 、 [新規] 、 [データ ディクショナリ] を選択します。
新しいディクショナリ名を
Plantに設定し、[保存] をクリックします。[モデルの階層構造] ペインで、ノード
Plantを選択します。[ダイアログ] ペインの [参照ディクショナリ] で、[追加] をクリックします。GlobalShare.slddをダブルクリックします。[モデルの階層構造] ペインで、ノード
Plantを右クリックし、[変更の保存] を選択します。
Plant コンポーネントのディクショナリへのリンクとデータの移行
Plant コンポーネントを自身のコンポーネント ディクショナリにリンクし、次に Plant コンポーネント内のモデルで共有されるデータをベース ワークスペースからディクショナリへ移行します。
モデル
ex_PlantComp_Lvl1を開きます。モデル内でブロック線図を更新します。
診断ビューアーに
SimConfigSetの複数の矛盾する定義のエラーが表示される場合は、GlobalShareインスタンスの隣にある [他の定義を一致するように更新] を選択します。この修正により、GlobalShareの定義と一致するように他の定義が更新されます。[モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。
ダイアログ ボックスで [参照] をクリックします。
Plant.slddをダブルクリックします。[モデル プロパティ] ダイアログ ボックスで、[適用] をクリックします。参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。
[モデル プロパティ] ダイアログ ボックスで、[データの移行] をクリックします。
[データの移行] ダイアログ ボックスで、[参照モデルのデータを含める] を選択し [移行] をクリックします。
(オプション) [モデル プロパティ] ダイアログ ボックスで [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。
モデル データを読み込むための前のメソッドを削除します。[モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、モデルの
PreLoadFcnをオフにします。[OK] をクリックします。
コントローラー コンポーネント用のディクショナリの作成
コントローラー コンポーネント内のモデルで共有されるデータを含むデータ ディクショナリを作成します。このディクショナリは共有グローバル ディクショナリも参照できます。
モデル エクスプローラーで、[ファイル] 、 [新規] 、 [データ ディクショナリ] を選択します。
新しいディクショナリ名を
Controllerに設定し、[保存] をクリックします。[モデルの階層構造] ペインで、ノード
Controllerを選択します。[ダイアログ] ペインの [参照ディクショナリ] で、[追加] をクリックします。GlobalShare.slddをダブルクリックします。[モデルの階層構造] ペインで、ノード
Controllerを右クリックし、[変更の保存] を選択します。
コントローラー コンポーネントのディクショナリへのリンクとデータの移行
コントローラー コンポーネントを自身のコンポーネント ディクショナリにリンクし、次にコントローラー コンポーネント内のモデルで共有されるデータをベース ワークスペースからディクショナリへ移行します。
モデル
ex_ContrCompを開きます。診断ビューアーに
SimConfigSetの複数の矛盾する定義のエラーが表示される場合は、GlobalShareインスタンスの隣にある [他の定義を一致するように更新] を選択します。[モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。
ダイアログ ボックスで [参照] をクリックします。
Controller.slddをダブルクリックします。[モデル プロパティ] ダイアログ ボックスで、[適用] をクリックします。参照モデルのリンクについてのメッセージに対して、[すべてのモデルを変更] をクリックします。
[モデル プロパティ] ダイアログ ボックスで、[データの移行] をクリックします。
[データの移行] ダイアログ ボックスで、[参照モデルのデータを含める] を選択し [移行] をクリックします。
(オプション) [モデル プロパティ] ダイアログ ボックスで [モデルからベース ワークスペースへのアクセスを有効にする] をオフにします。
モデル データを読み込むための前のメソッドを削除します。[モデル プロパティ] ダイアログ ボックスの [コールバック] タブで、モデルの
PreLoadFcnをオフにします。[OK] をクリックします。
システムのグローバル ディクショナリへのリンク
最後に、最上位モデルをグローバル ディクショナリにリンクします。
モデル
ex_SystemModelを開きます。[モデル化] タブの [設計] の下で、[データ ディクショナリへのリンク] をクリックします。
ダイアログ ボックスで [参照] をクリックします。
GlobalShare.slddをダブルクリックします。[モデル プロパティ] ダイアログ ボックスで、[OK] をクリックします。参照モデルのリンクについてのメッセージに対して、[このモデルのみを変更] をクリックします。
データ ストレージの検査
モデル エクスプローラーの [モデルの階層構造] ペインで、Plant ディクショナリ ノードを選択します。[コンテンツ] ペインで Plant.sldd の内容を表示するには、[現在のシステム以下を表示]
をクリックします。[Design Data] および [Configurations] セクションの内容が表示されます。

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

[DataSource] 列には、各ディクショナリに格納される変数およびオブジェクトが表示されます。
CtrlBus や SensorBus などのすべてのグローバルな共有変数は、GlobalShare.sldd にあります。両方のコントローラー サブコンポーネントが共有する変数 init は、Controller.sldd にあります。
コントローラー コンポーネントに割り当てられた開発チームがグローバルな共有変数に変更を加えなければならない場合は、GlobalShare ディクショナリ ファイルにアクセスします。同様に、チームが変数 init に変更を加える必要がある場合は、Controller ディクショナリ ファイルにアクセスしなければなりません。
ディクショナリ階層の検査
ディクショナリ全体とモデルの階層構造を表示するには、依存関係の分析を実行します。
保存したモデル
ex_SystemModelを開きます。[モデル化] タブの [設計] セクションで、[依存関係アナライザー] をクリックします。

システム モデル ex_SystemModel はディクショナリ GlobalShare.sldd にリンクされています。プラント コンポーネントとコントローラー コンポーネントはそれぞれ個別のディクショナリにリンクされています。共有データにアクセスするため、コンポーネント ディクショナリはディクショナリ GlobalShare.sldd を参照します。これらのディクショナリは参照階層を形成します。
共有データを検出する方法
モデル参照階層内でのモデルのデータ共有については、以下の手法を使用して確認することができます。
開いているモデルの [モデル化] タブで、[検索] 、 [参照される変数の検索] を選択します。モデル エクスプローラーにモデルが使用する変数と、参照モデルが使用する変数が表示されます。変数を右クリックし、[使用されている場所の検索] を選択して、その変数を使用するすべてのモデルを表示します。詳細については、モデル エクスプローラーを使用したワークスペース変数の編集と管理を参照してください。
コマンド プロンプトで、関数
Simulink.findVarsを使用してモデルが使用する変数を特定します。次に、関数intersectを使用して 2 つのモデル、コンポーネントまたはサブコンポーネントが共有する変数を特定します。