Main Content

AUTOSAR アーキテクチャ モデルのプログラムでの設定

AUTOSAR アーキテクチャ モデルは、AUTOSAR コンポジションおよびコンポーネント モデルを開発するためのリソースとキャンバスを提供します。ソフトウェア アーキテクチャを開発する際は、グラフィカル ユーザー インターフェイスまたは同等のアーキテクチャ モデル化関数、もしくはその両方を使用します。AUTOSAR Blockset には、これらのアーキテクチャ関連タスク用関数があります。

タスク関数
AUTOSAR アーキテクチャ モデルの作成、読み込み、開く、保存、閉じるautosar.arch.createModel
autosar.arch.loadModel
close
open
save
AUTOSAR アーキテクチャ モデルのプラットフォームの種類の指定setPlatform
AUTOSAR コンポーネント、コンポジション、ポートの追加、接続、削除addComponent
addComposition
addPort
connect
destroy
importFromARXML
layout
AUTOSAR 要素の検索とプロパティの変更find
get
set
Simulink® モデルの作成またはリンクによるコンポーネントの動作の定義createModel
linkToModel
BSW サービス呼び出しのシミュレーションのための基本ソフトウェア (BSW) サービス コンポーネント ブロックの追加addBSWService
コンポジションとコンポーネントの ARXML 記述のエクスポートと、コンポーネント コードの生成 (Embedded Coder® が必要)export
getXmlOptions
setXmlOptions

プログラムによるアーキテクチャ モデルの作成と構成

この例では次の方法を示します。

  1. AUTOSAR アーキテクチャ モデルを作成して開く。

  2. データ型とインターフェイスを含むデータ ディクショナリを開いてリンクする。

  3. アーキテクチャ モデルのプラットフォームの種類を明示的に Classic Platform に設定する。

  4. コンポジションとコンポーネントを追加する。

  5. アーキテクチャ、コンポジション、およびコンポーネントのポートを追加する。

  6. アーキテクチャ、コンポジション、およびコンポーネントのポートを接続する。

  7. コンポーネントの Simulink® 実装モデルを作成してリンクする。

  8. アーキテクチャ モデルのレイアウトをヒューリスティックな方法に基づいて調整する。

  9. コンポーネントとポートのプロパティを設定する。

  10. コンポーネントを削除する。

  11. アーキテクチャ モデルの階層構造のさまざまなレベルで要素を検索する。

  12. コンポジションのポートのプロパティ値をリストする。

以下の手順のコマンドを 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. コンポジション SensorsmyArchModel に追加します。

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. myArchModelSensors にポートを追加します。ポートの種類として 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_sensorautosar_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);

参考

| | |

関連するトピック