このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 |
プログラムによるアーキテクチャ モデルの作成と構成
この例では次の方法を示します。
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