モデル コンポーネントのインターフェイスの定義
Simulink® サブシステム、サブシステム参照、モデル参照などのモデル コンポーネントのインターフェイスを定義することは、他のユーザーがコンポーネントを使用する前の重要な第一歩です。
コンポーネント インターフェイスに関して合意することは、大規模なシステムの機能をコンポーネントに分割する方法を決定するのに有用です。
コンポーネント間のインターフェイスを定義すれば、それらのコンポーネントの開発を並行して行うことができます。インターフェイスが安定していれば、それらのコンポーネントを大規模なシステムに統合することは簡単です。
コンポーネント間のインターフェイスの変更にはコストがかかります。コンポーネント インターフェイスの変更には、少なくとも 2 つのコンポーネント (ソースとシンク) とテスト ハーネスの変更が必要になります。また、変更により、それらのコンポーネントの以前のバージョンと現在および今後のバージョンとの互換性がなくなります。
コンポーネント インターフェイスの変更は、コンポーネントが構成管理下に格納されているとかなり簡単になります。互換性のあるコンポーネントのバージョンの構成を追跡して、互換性のないコンポーネントの組み合わせを回避できます。
メモ
このトピックでは、モデル化およびシミュレーションのためのコンポーネント インターフェイスに着目します。コード生成と展開のためのインターフェイスを構成するには、次を参照してください。
Inport ブロックと Outport ブロックの設定によるデータ インターフェイスの設計 (Simulink Coder)
Choose Storage Class for Controlling Data Representation in Generated Code (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)
コンポーネント境界の特定
コンポーネントの境界は、対応する実際のシステムの境界に基づいて決定します。モデルに以下が含まれている場合は、このガイドラインが特に役立ちます。
物理システム (プラントおよび環境) と制御システムの両方
異なるレートで実行されるアルゴリズム
複数回再使用するシステム
モデルを詳細化する際にセンサーやその他のコンポーネントを追加する意図がある場合、それらを表すコンポーネントを作成します。これらのコンポーネントを構成して、信号をそのまま通過させたり、単位遅延または名前変換を実行したりできます。
コンポーネント インターフェイスの作成
コンポーネント インターフェイスを表示および作成したり、インターフェイスの要素の使用をトレースしたりするには、コンポーネント インターフェイス ビューを使用します。Simulink ツールストリップの [モデル化] タブの [設計] ギャラリーで [インターフェイス ビュー] を選択します。
詳細については、Trace Connections and Author Ports Using Component Interface Viewを参照してください。
バスを使用したコンポーネント インターフェイスの簡略化
インターフェイスを簡略化するには、信号とメッセージをバスにグループ化します。バスを使用すると、複数の信号またはメッセージを 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 ツールストリップの [モデル化] タブの [設計] ギャラリーで [型エディター] をクリックします。
風速、タイヤ圧、水温など、アプリケーション固有の値のタイプに基づく信号のプロパティの割り当てまたは検証には、
Simulink.ValueTypeオブジェクトを使用します。バスの各要素のプロパティの割り当てまたは検証には、
Simulink.Busオブジェクトを使用します。