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® スクリプトのリストからコマンドを MATLAB® コマンド ウィンドウにコピーします。
% 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); % autosar.arch.createModel creates a classic architecture model by default % Use setPlatform to explicitly set the platform kind setPlatform(archModel,'Classic'); % 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 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
Receiver port TPS_HwIO Receiver port APP_HwIO Sender port APP_Percent Sender port TPS_Percent
% simulate the architecture model
sim(modelName);
参考
Software Component | Software Composition | Diagnostic Service Component | NVRAM Service Component