Main Content

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

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

タスク関数
AUTOSAR アーキテクチャ モデルの作成、読み込み、開く、保存、閉じるautosar.arch.createModel
autosar.arch.loadModel
close
open
save
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. アーキテクチャ、コンポジションおよびコンポーネント ポートを追加。

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

  5. コンポーネントのための Simulink 実装モデルを作成し、リンク。

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

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

  8. コンポーネントを削除。

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

  10. コンポジション ポートのプロパティ値をリスト表示。

スクリプトを実行するには、下記の MATLAB® スクリプトのリストからコマンドを MATLAB コマンド ウィンドウにコピーします。

あるいは、スクリプト ファイル configAutosarArchModel.m を作業フォルダーにコピーして、ファイルを実行できます。スクリプトを作業フォルダーにコピーするには、次の MATLAB コマンドを入力します。

copyfile(fullfile(matlabroot,'help/toolbox/autosar/examples/configAutosarArchModel.m'),'.')
% configAutosarArchModel.m
%
% Configure AUTOSAR architecture model.
% This script creates models Controller1.slx and Actuator.slx.
% To rerun the script, remove the models from the working folder.

% Create and open AUTOSAR architecture model
modelName = 'myArchModel';
archModel = autosar.arch.createModel(modelName);

% Add a composition
composition = addComposition(archModel,'Sensors');

% Add 2 components inside Sensors composition
names = {'PedalSnsr','ThrottleSnsr'};
sensorSWCs = addComponent(composition,names,'Kind','SensorActuator');
layout(composition);  % Auto-arrange composition layout

% Add components at architecture model top level
controller = addComponent(archModel,'Controller');
actuator = addComponent(archModel,'Actuator');
set(actuator,'Kind','SensorActuator');
layout(archModel); 

% Add ports to architecture model and the Sensors composition
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'});


% Link components to implementation models
% Add path to implementation model
addpath(fullfile(matlabroot,'/examples/autosarblockset/main'));
pedalSnsr = find(composition,'Component','Name','PedalSnsr');
linkToModel(pedalSnsr,'autosar_tpc_pedal_sensor');
throttleSnsr = find(composition,'Component','Name','ThrottleSnsr');
%linkToModel(throttleSnsr,'autosar_tpc_throttle_sensor1');
linkToModel(actuator, 'autosar_tpc_actuator');
linkToModel(controller, 'autosar_tpc_controller')

% add ports to throttle sensor component and create behavior model
addPort(throttleSnsr,'Sender','TPS_Percent');
addPort(throttleSnsr,'Receiver','TPS_HwIO');
createModel(throttleSnsr);

% implement internal behavior for throttle sensor. Here, we simply adjust
% datatypes on the ports.
set_param('ThrottleSnsr/In Bus Element', 'OutDataTypeStr', 'uint16');
set_param('ThrottleSnsr/Out Bus Element', 'OutDataTypeStr', 'single');

% connect composition and components based on matching port names
connect(archModel,composition,controller);
connect(archModel,controller,actuator);
connect(archModel,[],composition);
connect(archModel,actuator,[]);
connect(composition, [], pedalSnsr);
connect(composition, [], throttleSnsr);
connect(composition, pedalSnsr, []);
connect(composition, throttleSnsr, []);
connect(archModel,composition, controller);

% can also use API to connect specific ports
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);  % Auto-arrange layout

% Find components in architecture model top level only
components_in_arch_top_level = find(archModel,'Component');
% Find components in all hierarchy
components_in_all_hierarchy = find(archModel,'Component','AllLevels',true);
% Find ports for composition block only
composition_ports = find(composition,'Port');

% List Kind and Name property values for composition ports
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

% simulate the architecture model
sim(modelName);
components_in_arch_top_level = 
  2×1 Component array with properties:
    Name
    Kind
    Ports
    ReferenceName
    Parent
    SimulinkHandle

components_in_all_hierarchy = 
  3×1 Component array with properties:
    Name
    Kind
    Ports
    ReferenceName
    Parent
    SimulinkHandle

composition_ports = 
  4×1 CompPort array with properties:
    Kind
    Connected
    Name
    Parent
    SimulinkHandle

Receiver port NewPortName1
Receiver port APP_Hw
Sender port NewPortName2
Sender port APP_Perc

参考

| | |

関連するトピック