このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
AUTOSAR アーキテクチャ モデルの共有されるインターフェイスとデータ型の管理
インターフェイス ディクショナリを使用して、インターフェイス、データ型、および AUTOSAR 固有の設計データを作成および管理し、Simulink® でモデル化された AUTOSAR のコンポーネントおよびコンポジションで共有できます。インターフェイス ディクショナリは、それらの共有要素を 1 か所に集約することで、システムレベルの複数コンポーネントの設計に対するスケーラビリティを提供します。
次の基本的なワークフローを使用して、インターフェイス ディクショナリの属性と内容を構成し、それらをアーキテクチャ モデルに適用できます。プログラムによる方法とグラフィカルな方法があります。
インターフェイス ディクショナリを作成します。
インターフェイス ディクショナリの API またはスタンドアロンのインターフェイス エディターを使用してインターフェイスとデータ型を設計します。
アーキテクチャ モデルにインターフェイス ディクショナリをリンクします。
Simulink 環境でアーキテクチャ モデルにインターフェイスを適用します。
インターフェイス ディクショナリ内の共有されるインターフェイスとデータ型の内容を最終的なアプリケーションに展開します。
ベース ワークスペースまたはデータ ディクショナリ階層に格納されているデータをアーキテクチャ モデルに関連付けられたインターフェイス ディクショナリに移行するには、インターフェイス ディクショナリの Migrator
オブジェクトを使用します。
インターフェイス ディクショナリの作成
インターフェイス ディクショナリをプログラムで作成するには、関数 Simulink.interface.dictionary.create
を使用します。
% create new interface dictionary dictName = 'MyInterfaces.sldd'; dictAPI = Simulink.interface.dictionary.create(dictName);
あるいは、AUTOSAR アーキテクチャ モデルのツールストリップからインターフェイス ディクショナリを作成するには、[モデル化] タブの [設計] メニューを開き、[インターフェイスとタイプ] セクションから [新規インターフェイス ディクショナリ] を選択します。
インターフェイス ディクショナリを使用したデータ型とインターフェイスの設計
インターフェイス ディクショナリを作成したら、設計データを追加できます。インターフェイス ディクショナリの API を使用してプログラムで追加する方法と、スタンドアロンのインターフェイス エディターを使用して対話形式で追加する方法があります。これらのツールを使用して、特定のコンポーネントまたはコンポジションのコンテキスト外で共有要素を作成し、それらの要素の定義と管理を複数のチーム メンバーで共有できます。
プログラムによる設計データの追加
インターフェイス ディクショナリのインターフェイスとデータ型の作成、構成、管理をプログラムで行うには、Simulink.interface.Dictionary
オブジェクトの関数を使用します。
ここでは、型固有の関数を使用して、エイリアス タイプ、数値型、値のタイプ、構造体型、および列挙をインターフェイス ディクショナリに追加します。
% add DataTypes %% AliasTypes myAliasType1 = dictAPI.addAliasType('aliasType', BaseType='single'); myAliasType1.Name = 'myAliasType1'; myAliasType1.BaseType = 'fixdt(1,32,16)'; myAliasType2 = dictAPI.addAliasType('myAliasType2'); % can also use interface dict type objs myAliasType2.BaseType = myAliasType1; %% EnumType myEnumType1 = dictAPI.addEnumType('myColor'); myEnumType1.addEnumeral('RED', '0', 'RED BLOOD'); myEnumType1.addEnumeral('BLUE', '1', 'Blue Skies'); myEnumType1.DefaultValue = 'BLUE'; myEnumType1.Description = 'I am a Simulink Enumeration'; myEnumType1.StorageType = 'int16'; % set base type of an alias type to be this enum object myAliasType3 = dictAPI.addAliasType('myAliasType3'); myAliasType3.BaseType = myEnumType1; %% NumericType myNumericType1 = addNumericType(dictAPI, 'myNumericType1'); myNumericType1.DataTypeMode = "Single"; %% ValueType myValueType1 = dictAPI.addValueType('myValueType1'); myValueType1.DataType = 'int32'; myValueType1.Dimensions = '[2 3]'; myValueType1.Description = 'I am a Simulink ValueType'; myValueType1.DataType = myEnumType1; % can also use interface dict type objs %% StructType myStructType1 = dictAPI.addStructType('myStructType1'); structElement1 = myStructType1.addElement('Element1'); structElement1.Type.DataType = 'single'; structElement1.Type.Dimensions = '3'; structElement2 = myStructType1.addElement('Element2'); structElement2.Type = myValueType1; % or structElement2.Type = 'ValueType: myValueType1'; %% Nested StructType myStructType2 = dictAPI.addStructType('myStructType2'); myStructType2.Description = 'I am a nested structure'; structElement = myStructType2.addElement('Element'); structElement.Dimensions = '5'; structElement.Type = myStructType1; % or structElement.Type = 'Bus: myStructType1';
通信インターフェイスとそのデータ要素を追加します。
nvInterface1 = dictAPI.addDataInterface('NV1'); dataElm1 = nvInterface1.addElement('DE1'); dataElm1.Type = myValueType1; dataElm2 = nvInterface1.addElement('DE2'); dataElm2.Type = myStructType2; dataElm2.Dimensions = '4'; dataElm2.Description = 'I am a data element with datatype = array of struct type'; % data element with owned type dataElm3 = nvInterface1.addElement('DE3'); dataElm3.Type.DataType = 'single'; dataElm3.Type.Dimensions = '10'; dataElm3.Type.Minimum = '-5'; srInterface2 = dictAPI.addDataInterface('SR1');
次に、プラットフォーム固有のプロパティを作成、構成、管理します。
% now add AUTOSARClassic mapping platformMapping = dictAPI.addPlatformMapping('AUTOSARClassic'); % set platform properties platformMapping.setPlatformProperty(nvInterface1,... 'Package', '/Interface2', 'InterfaceKind', 'NvDataInterface'); % get the platform properties [pNames, pValues] = platformMapping.getPlatformProperties(nvInterface1); % managing AUTOSAR Classic platform related elements (these don't have mapping to Simulink) arObj = autosar.api.getAUTOSARProperties(dictName); arObj.addPackageableElement('SwAddrMethod','/SwAddressMethods', 'VAR1', 'SectionType', 'Var'); platformMapping.setPlatformProperty(dataElm1,... 'SwAddrMethod', 'VAR1', 'SwCalibrationAccess', 'ReadWrite', 'DisplayFormat', '%.3f');
スタンドアロンのエディターを使用した設計データの追加
あるいは、スタンドアロンのインターフェイス エディターを使用して設計データを追加できます。モデルのコンテキスト外でエディターを開くには次のようにします。
MATLAB® の現在のフォルダー ブラウザーで
.sldd
ファイルをダブルクリックする。インターフェイス ディクショナリ オブジェクトの関数
show
を使用する。MATLAB コマンド プロンプトで「
interfaceeditor
」と入力する。
モデルからスタンドアロンのエディターを開くには次のようにします。
AUTOSAR アーキテクチャ モデルの Simulink エディターで、[モデル化] タブの [設計] メニューを開き、[インターフェイス ディクショナリの編集] を選択する。
モデル エクスプローラーで、モデルの [外部データ] ノードにあるインターフェイス ディクショナリを選択し、[ダイアログ] ペインで [インターフェイス エディターを開く] をクリックする。
スタンドアロンのインターフェイス エディターで、設計データを作成、構成、管理できます。
作成 — ツールストリップの [作成] セクションでデータ型の定義とインターフェイスを追加します。データ型とインターフェイスのそれぞれについて、それらのデータを管理するための専用のタブがあります。
構成 — 右側のパネルで [詳細] ペインを使用してデータを構成します。[詳細] ペインでプラットフォーム固有のプロパティも表示できます。たとえば、展開プラットフォームを AUTOSAR Classic に設定すると、[InterfaceKind]、[IsService]、[パッケージ] など、AUTOSAR インターフェイスの通信プロパティが [詳細] に表示されます。それらのプロパティを [詳細] で設定すると、生成されるインターフェイス ディクショナリ
.sldd
ファイルでそれらが設定されます。管理 — [インターフェイス] タブと [データ型] タブでデータのフィルター処理、並べ替え、検索が可能です。
[インターフェイス] タブと [データ型] タブに加え、インターフェイス エディターの [SwAddrMethod] タブには、AUTOSAR Classic Platform のプラットフォーム固有のソフトウェア アドレス メソッド データが表示されます。
スタンドアロンのエディターを使用する方法の詳細については、インターフェイス エディターを参照してください。
アーキテクチャ モデルへのインターフェイス ディクショナリのリンク
インターフェイス ディクショナリを保存したら、それをアーキテクチャ モデルにリンクできます。プログラムで次のようにしてモデルにディクショナリをリンクします。
% open a previously defined interface dictionary dictName = 'MyInterfaces.sldd'; dictAPI = Simulink.interface.dictionary.open(dictName); % create AUTOSAR arch model and link interface dictionary archModel = autosar.arch.createModel('myTopArchModel'); archModel.linkDictionary(dictName);
データ ディクショナリとインターフェイス ディクショナリの併用
通常のデータ ディクショナリとインターフェイス ディクショナリを設計で共存させることもできます。この方法により、モデルの階層構造でデータの適切なスコープの設定とカプセル化が可能になります。
モデル ワークスペース — スコープがモデルに設定されたパラメーターと信号の定義が格納されます。
データ ディクショナリ — 他のコンポーネントと共有でき、インターフェイスの定義とは分ける必要があるコンフィギュレーション セット、値、バリアントが格納されます。
インターフェイス ディクショナリ — コンポーネント間で共有できるインターフェイスとデータ型の定義が格納されます。
両方のディクショナリを使用するには、まずコンポーネント モデルにデータ ディクショナリをリンクし、そのデータ ディクショナリからインターフェイス ディクショナリを参照します。
空のモデルを作成します。
Simulink エディターで、モデル キャンバスを右クリックして [モデル プロパティ] を選択します。
[モデル プロパティ] ダイアログ ボックスで、新しいデータ ディクショナリを作成するか、既存のディクショナリにリンクします。
モデルの左下隅にあるモデル データ バッジをクリックし、[外部データ] リンクをクリックします。
モデル エクスプローラーの [モデルの階層構造] ペインで、[外部データ] ノードにあるデータ ディクショナリのノードを選択します。
[ダイアログ] ペインの [参照ディクショナリ] セクションで、インターフェイス ディクショナリを参照ディクショナリとして追加します。
Simulink 環境でのアーキテクチャ モデルへのインターフェイスの適用
インターフェイス ディクショナリを AUTOSAR アーキテクチャ モデルにリンクしたら、モデル化された AUTOSAR アプリケーションにインターフェイスを適用できます。AUTOSAR アーキテクチャ モデルの API を使用してプログラムで適用する方法と、Simulink エディター ウィンドウでインターフェイス エディターを使用して適用する方法があります。
ここでは、AUTOSAR Classic Platform マッピングを含むディクショナリをアーキテクチャ モデルにリンクし、そのディクショナリ内のインターフェイスに SenderPort
をマッピングします。
% open previously created interface dictionary dictName = 'MyInterfaces.sldd'; dictAPI = Simulink.interface.dictionary.open(dictName); % link interface dictionary to an AUTOSAR arch model archModel = autosar.arch.createModel('myTopComposition'); archModel.linkDictionary(dictName); pport = archModel.addPort("Sender", 'PPort'); pport.setInterface(srInterface2);
あるいは、インターフェイス エディターまたはプロパティ インスペクターを使用して AUTOSAR アーキテクチャ モデルにインターフェイスを適用できます。AUTOSAR アーキテクチャ モデルのツールストリップで、[モデル化] タブの [設計] メニューを開き、[インターフェイス エディター] を選択します。現在の Simulink エディター ウィンドウにエディターがペインとして開きます。
このモデル中心のエディターの主な焦点は、ポートにインターフェイスを適用することです。リンクされたインターフェイス ディクショナリ内の利用可能なインターフェイスが表示されます。インターフェイス エディターを使用して次のことが可能です。
インターフェイスを右クリックし、キャンバス上の選択したポートにインターフェイスを割り当てる。
ポートとインターフェイスの間でトレースする
[ポート インターフェイス ビュー] を使用して特定のインターフェイスにフォーカスする
選択したインターフェイスをプロパティ インスペクターを使用して表示および構成する
AUTOSAR アーキテクチャ モデルでデータ インターフェイスを追加する。これらのインターフェイスは、プロパティ インスペクターを使用して
[SenderReceiverInterface]
、[ModeSwitchInterface]
、または[NvDataInterface]
にマッピングできます。
インターフェイス ディクショナリの展開
最後に、インターフェイス ディクショナリを特定のプラットフォームに展開するには、プラットフォームへのディクショナリ要素のマッピングを指定する必要があります。AUTOSAR アーキテクチャ モデルをビルドすると、ビルド プロセスにより、モデルにリンクされているインターフェイス ディクショナリがインターフェイス ディクショナリの名前が付いたフォルダーに ARXML としてエクスポートされます。これにより、ディクショナリで定義されているインターフェイスと型が ARXML に確実に含まれます。さらに、作成される ZIP ファイルにはディクショナリから取得された ARXML ファイルが含まれます。
アーキテクチャ モデルのインターフェイス ディクショナリは、スタンドアロンのインターフェイス エディターまたはインターフェイス ディクショナリの API を使用して個別にエクスポートすることもできます。インターフェイス エディターの [共有] セクションで、[エクスポート] 、 [ARXML にエクスポートします] を選択します。プログラムでエクスポートするには、次のコマンドを使用します。
platformMapping = dictAPI.getPlatformMapping('AUTOSARClassic');
exportDictionary(platformMapping);
制限
インターフェイス ディクショナリについて、以下を含むいくつかの制限があります。
AUTOSAR Classic コンポーネント モデルでは、複数のインターフェイス ディクショナリを参照することはできません。
AUTOSAR Classic Platform にマッピングされたインターフェイス ディクショナリについては、インターフェイス ディクショナリ参照階層はサポートされません。
インターフェイス ディクショナリのエディターでは、データ インターフェイスの表示と編集のみが可能です。クライアント/サーバー、パラメーター、トリガー インターフェイスなど、AUTOSAR ワークフローの他の種類のインターフェイスを作成および表示するには、AUTOSAR コンポーネント ディクショナリを開きます。
インターフェイス ディクショナリでは、ARXML からの AUTOSAR 情報のインポートはサポートされていません。
参考
Simulink.interface.Dictionary
| autosar.dictionary.ARClassicPlatformMapping
| exportDictionary
| getPlatformProperties
| getPlatformProperty
| setPlatformProperty
| Simulink.interface.dictionary.create
| Simulink.interface.dictionary.open
| Migrator
| インターフェイス エディター