このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
AUTOSAR アーキテクチャ モデルのプログラムでの設定
AUTOSAR アーキテクチャ モデルは、AUTOSAR コンポジションおよびコンポーネント モデルを開発するためのリソースとキャンバスを提供します。ソフトウェア アーキテクチャを開発する際は、グラフィカル ユーザー インターフェイスまたは同等のアーキテクチャ モデル化関数、もしくはその両方を使用します。AUTOSAR Blockset には、これらのアーキテクチャ関連タスク用関数があります。
| タスク | 関数 |
|---|---|
| AUTOSAR アーキテクチャ モデルの作成、読み込み、開く、保存、閉じる | autosar.arch.createModelautosar.arch.loadModelcloseopensave |
| AUTOSAR アーキテクチャ モデルのプラットフォームの種類の指定 | setPlatform |
| AUTOSAR コンポーネント、コンポジション、ポートの追加、接続、削除 | addComponentaddCompositionaddPortconnectdestroyimportFromARXMLlayout |
| AUTOSAR 要素の検索とプロパティの変更 | findgetset |
| Simulink® モデルの作成またはリンクによるコンポーネントの動作の定義 | createModellinkToModel |
| BSW サービス呼び出しのシミュレーションのための基本ソフトウェア (BSW) サービス コンポーネント ブロックの追加 | addBSWService |
| コンポジションとコンポーネントの ARXML 記述のエクスポートと、コンポーネント コードの生成 (Embedded Coder® が必要) | exportgetXmlOptionssetXmlOptions |
プログラムによるアーキテクチャ モデルの作成と構成
この例では、AUTOSAR アーキテクチャ モデルとそのコンポジションおよびコンポーネントをプログラムで操作し、Simulink® 実装モデルとデータ ディクショナリを作成してリンクするワークフローを示します。
この例では、プログラム インターフェイスを使用して次のタスクを実行します。
AUTOSAR アーキテクチャ モデルを作成して開く。
データ型とインターフェイスを含むデータ ディクショナリを開いてリンクする。
アーキテクチャ モデルのプラットフォームの種類を明示的に Classic Platform に設定する。
コンポジションとコンポーネントを追加する。
アーキテクチャ、コンポジション、およびコンポーネントのポートを追加する。
アーキテクチャ、コンポジション、およびコンポーネントのポートを接続する。
コンポーネントの Simulink 実装モデルを作成してリンクする。
アーキテクチャ モデルのレイアウトをヒューリスティックな方法に基づいて調整する。
コンポーネントとポートのプロパティを設定する。
コンポーネントを削除する。
アーキテクチャ モデルの階層構造のさまざまなレベルで要素を検索する。
コンポジションのポートのプロパティ値をリストする。
以下の手順のコマンドを MATLAB® コマンド ウィンドウにコピーします。
1. AUTOSAR アーキテクチャ モデル myArchModel を作成して開きます。
modelName = "myArchModel";
archModel = autosar.arch.createModel(modelName);2. データ ディクショナリ tpc_interfaces.sldd を開き、それを myArchModel にリンクします。
dictName = "tpc_interfaces.sldd"; archDataObj = Simulink.dictionary.archdata.open("tpc_interfaces.sldd"); set_param(modelName,"DataDictionary",dictName);
3. アーキテクチャ モデルのプラットフォームの種類を AUTOSAR Classic Platform に設定します。関数autosar.arch.createModelでは Classic Platform 向けに構成されたアーキテクチャ モデルが既定で作成されますが、関数setPlatformを使用してプラットフォームの種類を直接設定することもできます。
setPlatform(archModel,"Classic");4. コンポジション Sensors を myArchModel に追加します。
composition = addComposition(archModel,"Sensors");5. ペダルとスロットルのセンサーを表すコンポーネントをコンポジション Sensors に追加します。
names = {"PedalSnsr","ThrottleSnsr"};
sensorSWCs = addComponent(composition,names,"Kind","SensorActuator");6. 関数layoutを使用して、コンポジションのレイアウトを自動調整します。
layout(composition);
7. アーキテクチャ モデルの最上位レベルで、コントローラーとアクチュエータを表すコンポーネントを追加します。
controller = addComponent(archModel,"Controller"); actuator = addComponent(archModel,"Actuator");
8. 新しいコンポーネントを追加したので、アクチュエータの Kind プロパティを設定し、モデルのレイアウトを整理します。
set(actuator,"Kind","SensorActuator"); layout(archModel);
9. myArchModel と Sensors にポートを追加します。ポートの種類として Sender または Receiver をそれぞれ指定します。
addPort(archModel,"Receiver",{'APP_HwIO', 'TPS_HwIO'}); addPort(archModel,"Sender","ThrCmd_HwIO"); addPort(composition,"Receiver",{'TPS_HwIO','APP_HwIO'}); addPort(composition,"Sender",{'APP_Percent', 'TPS_Percent'});
10. ペダル センサー、アクチュエータ、およびコントローラーを表すコンポーネントを既存の Simulink モデル autosar_tpc_pedal_sensor、autosar_tpc_actuator、および autosar_tpc_controller にリンクします。
pedalSnsr = find(composition,"Component","Name","PedalSnsr"); linkToModel(pedalSnsr,"autosar_tpc_pedal_sensor"); linkToModel(actuator, "autosar_tpc_actuator"); linkToModel(controller, "autosar_tpc_controller")
11.関数findを使用して、Sensors コンポジションのスロットル センサー コンポーネントを探します。
ThrottleSensor = find(composition,"Component","Name","ThrottleSnsr");
12.関数addPortを使用して、スロットル センサー コンポーネントにポートを追加します。
sport = addPort(ThrottleSensor,"Sender","TPS_Percent"); rport = addPort(ThrottleSensor,"Receiver","TPS_HwIO");
13.データ ディクショナリから送信ポートと受信ポートのインターフェイスを取得して設定します。
sInt = getInterface(archDataObj,"TPS_Percent"); rInt = getInterface(archDataObj,"TPS_HwIO"); setInterface(sport,sInt); setInterface(rport,rInt);
14.スロットル センサーを表すモデルを作成します。
createModel(ThrottleSensor);
15.関数connectを使用して、コンポジションとコンポーネントを一致するポート名に基づいて接続します。
connect(archModel,composition,controller); connect(archModel,controller,actuator); connect(archModel,[],composition); connect(archModel,actuator,[]); connect(composition,[],pedalSnsr); connect(composition,[],ThrottleSensor); connect(composition,pedalSnsr,[]); connect(composition,ThrottleSensor,[]); connect(archModel,composition,controller);
16.あるいは、関数findを使用して特定のポートを探し、見つかった情報を使用して特定のポートのみを接続します。
ThrCmd_Percent_pport = find(controller,"Port","Name","ThrCmd_Percent"); ThrCmd_Percent_rport = find(actuator,"Port","Name","ThrCmd_Percent"); connect(archModel, ThrCmd_Percent_pport, ThrCmd_Percent_rport); layout(archModel);
17. 関数findを使用して、アーキテクチャ モデルの最上位レベルにあるコンポーネントを検索します。
components_in_arch_top_level = find(archModel,"Component");階層全体を検索します。
components_in_all_hierarchy = find(archModel,"Component","AllLevels",true);
単一のコンポジションのみを検索します。
composition_ports = find(composition,"Port");18. コンポジションのポートの特定のプロパティ値を for ループを使用してリストします。
for ii=1:length(composition_ports) Port = composition_ports(ii); portName = get(Port,"Name"); portKind = get(Port,"Kind"); fprintf('%s port %s\n',portKind,portName); end
Receiver port TPS_HwIO Receiver port APP_HwIO Sender port APP_Percent Sender port TPS_Percent
19. 最後に、アーキテクチャ モデルをシミュレートします。
sim(modelName);
参考
Classic Component | Software Composition | Diagnostic Service Component | NVRAM Service Component