データ ディクショナリを使用したモデル参照階層用のデータ分割
モデル参照を使用して、大規模なシステムから小規模なコンポーネントとサブコンポーネントにモデルを分割する場合、データ ディクショナリを作成して "設計データ" を分離できます。設計データは、ブロック パラメーターと信号の特性を指定するためにモデルが使用するワークスペース変数のセットです。データ ディクショナリの基本的な情報は、データ ディクショナリとはを参照してください。
データ管理にこのコンポーネントベースのアプローチを採用するには、共通のデータを含む共有ディクショナリと、各コンポーネントで必要なデータを含む、そのコンポーネント用の個別のディクショナリを作成します。
モデル例を開いて設計データを読み込む
モデル例 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 つのモデル、コンポーネントまたはサブコンポーネントが共有する変数を特定します。