モデル コンポーネントのインターフェイスの定義
Simulink® サブシステム、サブシステム参照、モデル参照などのモデル コンポーネントのインターフェイスを定義することは、他のユーザーがコンポーネントを使用する前の重要な第一歩です。
インターフェイスに関して合意することは、大規模なシステムの機能をコンポーネントに分割する方法を決定するのに有用です。
コンポーネント間のインターフェイスを定義すれば、それらのコンポーネントの開発を並行して行うことができます。インターフェイスが安定していれば、それらのコンポーネントを大規模なシステムに統合することは簡単です。
コンポーネント間のインターフェイスの変更にはコストがかかります。インターフェイスの変更には、少なくとも 2 つのコンポーネント (ソースとシンク) と、テスト ハーネスの変更が必要になります。また、それらのコンポーネントの以前のすべてのバージョンと、現在および今後のバージョンとの互換性がなくなります。
インターフェイスを変更するのに、コンポーネントが構成管理内に格納されていると、かなり簡単になります。互換性のあるコンポーネントのバージョンの構成を追跡して、互換性のないコンポーネントの組み合わせを回避できます。
メモ
このトピックでは、モデル化およびシミュレーションのための設計インターフェイスに着目します。コード生成と展開のためのインターフェイスを構成するには、次を参照してください。
Inport ブロックと Outport ブロックの設定によるデータ インターフェイスの設計 (Simulink Coder)
生成されたコードでのデータ表示を制御するストレージ クラスの選択 (Simulink Coder)
C Data Code Interface Configuration for Model Interface Elements (Simulink Coder)
Interactively Configure C++ Interface (Embedded Coder)
Programmatically Configure C++ Interface (Embedded Coder)
コンポーネント境界の特定
コンポーネントの境界は、対応する実際のシステムの境界に基づいて決定します。モデルに以下が含まれている場合は、このガイドラインが特に役立ちます。
物理システム (プラントおよび環境) と制御システムの両方
異なるレートで実行されるアルゴリズム
複数回再使用するシステム
モデルを詳細化する際にセンサーやその他のコンポーネントを追加する意図がある場合、それらを表すコンポーネントを作成します。これらのコンポーネントを構成して、信号をそのまま通過させたり、単位遅延または名前変換を実行したりできます。
バスを使用したインターフェイスの簡略化
インターフェイスを簡略化するには、信号とメッセージをバスにグループ化します。バスを使用すると、複数の信号またはメッセージを 1 つの端子に関連付けることで、サブシステムおよびモデルのインターフェイスを簡略化できます。ブロック線図における線の複雑さと煩雑さが低減され、インターフェイスの段階的な変更が容易になります。たとえば、コンポーネントのインターフェイスに要素を追加または削除する必要がある場合、端子を追加または削除するよりバスを変更するほうが簡単です。インターフェイスの一部のプロパティを論理的にグループ化したり定義したりするには、複数のバス端子を使用します。
バスは、多くの入力信号と出力信号があるものの、使用可能なすべての信号を使用するわけではないコンポーネントに非常に適しています。バスは、各コンポーネントに必要なデータのみを入力および出力から渡します。Simulink.Bus
オブジェクトを使用してインターフェイスでのバスを定義する場合、インターフェイスにはバス全体のデータが必要です。
入力バスからの要素にアクセスするには、In Bus Element ブロックを使用します。出力バスを作成するには、Out Bus Element ブロックを使用します。詳細については、バス要素端子を使用したサブシステム インターフェイスとモデル インターフェイスの簡略化を参照してください。
インターフェイスでのバスを実装する方法は、要件によって異なります。
要件 | バスの実装 |
---|---|
インターフェイスで要素の中から名前ベースの一致を提供し、ライン ルーティングを簡略化する | バスを使用します。バーチャル バスは、ほとんどのモデル化の要件を満たします。詳細については、合成インターフェイスのガイドラインを参照してください。 |
定義されたインターフェイスを使用したロバストなコンポーネント統合の有効化 | In Bus Element ブロックと Out Bus Element ブロックを使用してインターフェイスでのバスのプロパティを定義します。バスとバス要素には厳密な命名規則を使用します。 オプションで、 |
生成されたコードで構造体の型を複製する | 非バーチャル バスを使用してインターフェイスの要素の構造化されたデータ型を記述します。 |
外部 C コードで定義される struct の型定義に対応する構造体に信号またはパラメーターをパッケージ化する | 型をバス オブジェクトとしてインポートし、そのオブジェクトをバスと MATLAB® 構造体のデータ型として使用します。オブジェクトを作成するには、関数 Simulink.importExternalCTypes を使用します。 |
インターフェイス データの分割
グローバル パラメーターと非グローバル パラメーターを使用して、コンポーネントのデータのスコープを厳密に制御します。
グローバル パラメーター — 自動車業界で一般的な方法は、パラメーターのストレージをモデルのストレージと完全に分けることです。モデルのパラメーターはキャリブレーション データのデータベースに由来していて、使用される特定のキャリブレーション ファイルは構成の一部になります。キャリブレーション データはグローバル データとして扱われ、ベース MATLAB ワークスペースに配置されます。さらに制御するために、ベース ワークスペース データをデータ ディクショナリに移行できます。
グローバルではないパラメーター — 独自のパラメーター データを格納するコンポーネントを組み合わせると、パラメーター名が競合するリスクが生じます。パラメーターの命名規則や、固有のパラメーター名と定義のリストを使用しない場合、2 つのコンポーネントが、異なる意味をもつ同じ名前のパラメーターを使用する可能性があります。
ローカル パラメーターのデータを格納するには次のようにします。
コンポーネントごとに、データを分割して参照ディクショナリを作成します。
参照モデルの場合、モデル ワークスペースを使用することができます。
パラメーター ファイル (
.m
または.mat
) および個々の Simulink モデルのコールバック (たとえば関数preload
) を使用します。プロジェクトのショートカットを使用して、必要なデータを自動的に読み込むこともできます。
マスク初期化関数を使用するかどうかにかかわらずマスク ワークスペースを使用します。
サブシステムの場合は、Subsystem ブロックの [階層の関連付けを許可] パラメーターを使用してサブシステムのデータのスコープを制御できます。
データ インターフェイスの構成
インターフェイスの設計属性 (データ型や数値の実数/複素数など) を明示的に構成して、モデリング エラーを回避し、コンポーネントの統合を容易にします。また、内部アルゴリズムを開発する前にコンポーネントのインターフェイスを構成することもできます。この場合、コンポーネントには、接続されていないブロックが含まれます。コンポーネント インターフェイスに対応するブロックを作成した後、次を使用します。
ブロックの設計属性を構成するモデル データ エディター。
モデル データ エディターを開くには、Simulink ツールストリップの [モデル化] タブで [モデル データ エディター] をクリックします。モデル データ エディターの [入力端子/出力端子] タブで、各行は 1 つの入力ブロックまたは出力ブロックに対応し、列はそれらのブロックについて設定できる属性に対応します。
コンポーネントのインターフェイス全体を表示し、内部ブロック アルゴリズムにおける使用ポイントに対するインターフェイスの要素を追跡するインターフェイス表示パースペクティブ。
インターフェイス表示パースペクティブを開くには、[モデル化] タブの [設計] ギャラリーで、[モデル インターフェイス] をクリックします。詳細については、インターフェイスの表示を使用した接続の追跡を参照してください。
既定では、モデル データ エディターの [ビューの変更] リストは [設計]
に設定されます。これにより、列が設計属性に対応するよう構成されます。列を使用して、インターフェイスの設計属性を明示的に構成します。たとえば、[最小値] 列と [最大値] 列を使用して各ブロックの最小値と最大値を指定します。
あるいは、それぞれの属性を個別に指定する代わりに、コンポーネント インターフェイスでの設計属性の再利用可能なセットを指定できます。
Simulink.ValueType
オブジェクトを使用して、風速、タイヤ圧、水温など、アプリケーション固有の値のタイプに基づく信号のプロパティの割り当てまたは検証を行う。Simulink.Bus
オブジェクトを使用して、バスの各要素のプロパティの割り当てまたは検証を行う。
サブシステムの入力ブロックおよび出力ブロックを表示するには、[スコープの変更] ボタン を選択します。あるいは、サブシステム内のブロックを除外して、モデルのルート レベルの入力ブロックと出力ブロックのみを表示します。