AUTOSAR のプロパティ関数と map 関数の例
AUTOSAR ソフトウェア コンポーネントの Simulink® モデル表現を作成した後に、AUTOSAR 構成を調整します。AUTOSAR 構成は、AUTOSAR ディクショナリとコード マッピング エディターを使用してグラフィカルに調整できるほか、AUTOSAR のプロパティ関数と map 関数を使用してプログラムで調整することもできます。
このトピックでは、AUTOSAR 構成をプログラムで調整するための AUTOSAR のプロパティ関数と map 関数の使用例を示します。この例は、コンポーネントの作成で説明されているように、最初の AUTOSAR 構成で Simulink モデルを作成していることを前提にしています (AUTOSAR 構成をグラフィカルに調整するには、AUTOSAR コンポーネントの構成を参照してください)。
次に、プログラムでの構成タスクの代表的な順序を示します。
AUTOSAR のプロパティ関数と map 関数のリストについては、AUTOSAR プログラム インターフェイスページの関数リストを参照してください。
この例で使用する関数呼び出し形式では、AUTOSAR のプロパティまたはマッピング情報のハンドルが、最初の呼び出しの引数として渡されます。
arProps = autosar.api.getAUTOSARProperties(hModel); swc = get(arProps,'XmlOptions','ComponentQualifiedName');
同じ呼び出しはメソッド呼び出し形式にコーディングできます。形式は相互交換可能です。次に例を示します。
arProps = autosar.api.getAUTOSARProperties(hModel); swc = arProps.get('XmlOptions','ComponentQualifiedName');
AUTOSAR コード生成のモデルを構成している間に、以下の関数を使用して AUTOSAR モデル コンフィギュレーションを更新および検証します。
autosar.api.syncModel
— 指定されたモデルの Simulink から AUTOSAR へのマッピングを Simulink エントリポイント関数、データ転送、関数呼び出しの変更で更新します。autosar.api.validateModel
— 指定されたモデルの AUTOSAR プロパティと Simulink から AUTOSAR へのマッピングを検証します。
これらの関数は、コード マッピング エディターで [更新] ボタンと [検証]
ボタンを使用するのと同じです。
AUTOSAR ソフトウェア コンポーネントの設定
AUTOSAR ソフトウェア コンポーネントの名前とタイプの設定
この例では、次を行います。
モデルを開きます。
AUTOSAR ソフトウェア コンポーネントを検出します。
コンポーネントをループしてプロパティ値のリストを表示します。
コンポーネントの名前と種類のプロパティを編集します。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR software components aswcPaths = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); % Loop through components and list Name and Kind property values for ii=1:length(aswcPaths) aswcPath = aswcPaths{ii}; swcName = get(arProps,aswcPath,'Name'); swcKind = get(arProps,aswcPath,'Kind'); % Application, SensorActuator, etc. fprintf('Component %s: Name %s, Kind %s\n',aswcPath,swcName,swcKind); end
Component /pkg/swc/ASWC: Name ASWC, Kind Application
% Modify component Name and Kind aswcName = 'mySwc'; aswcKind = 'SensorActuator'; set(arProps,aswcPaths{1},'Name',aswcName); aswcPaths = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); set(arProps,aswcPaths{1},'Kind',aswcKind); swcName = get(arProps,aswcPaths{1},'Name'); swcKind = get(arProps,aswcPaths{1},'Kind'); fprintf('Component %s: Name %s, Kind %s\n',aswcPaths{1},swcName,swcKind);
Component /pkg/swc/mySwc: Name mySwc, Kind SensorActuator
AUTOSAR ポートの設定
3 種類の AUTOSAR ポートがあります。
Require
(In)Provide
(Out)結合された
Provide-Require
(InOut)
AUTOSAR ポートは以下のタイプの AUTOSAR 通信インターフェイスを参照できます。
送信側/受信側
クライアント/サーバー
モード スイッチ
AUTOSAR ポートに設定できるプロパティとマッピングは、AUTOSAR ポートが参照するインターフェイスの種類によって異なります。これらの例では、AUTOSAR のプロパティ関数と map 関数を使用して各インターフェイス タイプ用に AUTOSAR ポートを設定する方法を示します。
送受信ポートの設定とマッピング. この例では、次を行います。
モデルを開きます。
AUTOSAR 送信ポートまたは受信ポートを検出します。
ポートをループして関連付けられている送信側/受信側インターフェイスの一覧を表示します。
ポートの関連付けられているインターフェイスを編集します。
Simulink 入力端子を AUTOSAR 受信ポートにマッピングします。
AUTOSAR 送信側/受信側インターフェイスの設定も参照してください。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR ports - specify DataReceiverPort, DataSenderPort, or DataSenderReceiverPort arPortType = 'DataReceiverPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); rPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified')
rPorts = {'/pkg/swc/ASWC/RPort'}
% Loop through ports and list their associated interfaces for ii=1:length(rPorts) rPort = rPorts{ii}; portIf = get(arProps,rPort,'Interface'); fprintf('Port %s has S-R interface %s\n',rPort,portIf); end
Port /pkg/swc/ASWC/RPort has S-R interface Interface1
% Set Interface property for AUTOSAR port rPort = '/pkg/swc/ASWC/RPort'; set(arProps,rPort,'Interface','Interface2') portIf = get(arProps,rPort,'Interface'); fprintf('Port %s has S-R interface %s\n',rPort,portIf);
Port /pkg/swc/ASWC/RPort has S-R interface Interface2
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Get AUTOSAR mapping info for Simulink inport [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2')
arPortName = 'RPort' arDataElementName = 0×0 empty char array arDataAccessMode = 'ImplicitReceive'
% Map Simulink inport to AUTOSAR port, data element, and data access mode mapInport(slMap,'RPort_DE2','RPort','DE2','ExplicitReceive') [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2')
arPortName = RPort arDataElementName = DE2 arDataAccessMode = ExplicitReceive
クライアント/サーバー ポートの設定. この例では、次を行います。
モデルを開きます。
AUTOSAR クライアント/サーバー ポートを検索します。
ポートをループして関連付けられているクライアント/サーバー インターフェイスの一覧を表示します。
ポートの関連付けられているインターフェイスを編集します。
AUTOSAR クライアント/サーバーインターフェイスの設定も参照してください。
% Open model hModel = 'mControllerWithInterface_server'; addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR ports - specify ServerPort or ClientPort arPortType = 'ServerPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); sPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified'); % Loop through ports and list their associated interfaces for ii=1:length(sPorts) sPort = sPorts{ii}; portIf = get(arProps,sPort,'Interface'); fprintf('Port %s has C-S interface %s\n',sPort,portIf); end
Port /pkg/swc/SWC_Controller/sPort has C-S interface CsIf1
% Set Interface property for AUTOSAR port set(arProps,sPorts{1},'Interface','CsIf2') portIf = get(arProps,sPorts{1},'Interface'); fprintf('Port %s has C-S interface %s\n',sPorts{1},portIf);
Port /pkg/swc/SWC_Controller/sPort has C-S interface CsIf2
モード受信ポートの設定とマッピング. この例では、次を行います。
モデルを開きます。
AUTOSAR モード受信ポートを検出します。
ポートをループして関連付けられているモード スイッチ インターフェイスの一覧を表示します。
ポートの関連付けられているインターフェイスを編集します。
Simulink 入力端子を AUTOSAR モード受信ポートにマッピングします。
AUTOSAR モード スイッチ インターフェイスの設定も参照してください。
% Add path to model and mode definition files and open model addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); hModel = 'mAutosarMsConfigAfter'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR mode receiver ports arPortType = 'ModeReceiverPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); mrPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified'); % Loop through ports and list their associated interfaces for ii=1:length(mrPorts) mrPort = mrPorts{ii}; portIf = get(arProps,mrPort,'Interface'); fprintf('Port %s has M-S interface %s\n',mrPort,portIf); end
Port /pkg/swc/ASWC/myMRPort has M-S interface myMsIf
% Set Interface property for AUTOSAR port set(arProps,mrPorts{1},'Interface','MsIf2') portIf = get(arProps,mrPort,'Interface'); fprintf('Port %s has M-S interface %s\n',mrPorts{1},portIf);
Port /pkg/swc/ASWC/myMRPort has M-S interface MsIf2
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Get AUTOSAR mapping info for Simulink inport [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 'myMRPort' arDataElementName = 0×0 empty char array arDataAccessMode = 'ModeReceive'
% Map Simulink inport to AUTOSAR port, mode group, and data access mode mapInport(slMap,'MRPort','myMRPort','mdgModes','ModeReceive') [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 'myMRPort' arDataElementName = 'mdgModes' arDataAccessMode = 'ModeReceive'
AUTOSAR ランナブルとイベントの設定
AUTOSAR ソフトウェア コンポーネントの動作は 1 つ以上のランナブルによって実装されます。AUTOSAR ランナブルは、基になる AUTOSAR オペレーティング システムによって直接的または間接的にスケジュールされる、スケジュール可能なエンティティです。各ランナブルは AUTOSAR ランタイム環境 (RTE) で生成されたイベント RTEEvents でトリガーされます。ランナブルごとに、ランナブルの応答先のイベントを設定します。次に、ランナブルが応答する AUTOSAR イベントの例を示します。
TimingEvent
— 周期的なランナブルをトリガーします。DataReceivedEvent
またはDataReceiveErrorEvent
— 送信側/受信側通信に参加している受信ポートを使用してランナブルをトリガーします。OperationInvokedEvent
— クライアント/サーバー通信に参加しているサーバー ポートを使用してランナブルをトリガーします。ModeSwitchEvent
— モード スイッチ通信に参加しているモード受信ポートを使用してランナブルをトリガーします。InitEvent
(AUTOSAR スキーマ 4.1 以上) — コンポーネントの初期化を実行するランナブルをトリガーします。ExternalTriggerOccurredEvent
— 外部トリガー イベント通信に参加しているトリガー受信ポートを使用してランナブルをトリガーします。
周期的なランナブルのための AUTOSAR TimingEvent の設定. この例では、次を行います。
モデルを開きます。
AUTOSAR ランナブルを検索します。
ランナブルをループして、プロパティの一覧を表示します。
AUTOSAR の周期的なランナブルの名前と記号を編集します。
AUTOSAR タイミング イベントをループして関連付けられているランナブルの一覧を表示します。
AUTOSAR タイミング イベントの名前を変更します。
Simulink エントリポイント関数を AUTOSAR の周期的なランナブルにマッピングします。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Find AUTOSAR runnables swc = get(arProps,'XmlOptions','ComponentQualifiedName'); ib = get(arProps,swc,'Behavior'); runnables = find(arProps,ib,'Runnable','PathType','FullyQualified'); runnables{2}
ans = '/pkg/swc/ASWC/IB/Runnable1'
% Loop through runnables and list property values for ii=1:length(runnables) runnable = runnables{ii}; rnName = get(arProps,runnable,'Name'); rnSymbol = get(arProps,runnable,'symbol'); rnCBIC = get(arProps,runnable,'canBeInvokedConcurrently'); fprintf('Runnable %s: symbol %s, canBeInvokedConcurrently %u\n',... rnName,rnSymbol,rnCBIC); end
Runnable Runnable_Init: symbol Runnable_Init, canBeInvokedConcurrently 0 Runnable Runnable1: symbol Runnable1, canBeInvokedConcurrently 0 Runnable Runnable2: symbol Runnable2, canBeInvokedConcurrently 0 Runnable Runnable3: symbol Runnable3, canBeInvokedConcurrently 0
% Modify Runnable1 name and symbol set(arProps,runnables{2},'Name','myRunnable','symbol','myAlgorithm'); runnables = find(arProps,ib,'Runnable','PathType','FullyQualified'); rnName = get(arProps,runnables{2},'Name'); rnSymbol = get(arProps,runnables{2},'symbol'); rnCBIC = get(arProps,runnables{2},'canBeInvokedConcurrently'); fprintf('Runnable %s: symbol %s, canBeInvokedConcurrently %u\n',... rnName,rnSymbol,rnCBIC);
Runnable myRunnable: symbol myAlgorithm, canBeInvokedConcurrently 0
% Loop through AUTOSAR timing events and list runnable associations events = find(arProps,ib,'TimingEvent','PathType','FullyQualified'); for ii=1:length(events) event = events{ii}; eventStartOn = get(arProps,event,'StartOnEvent'); fprintf('AUTOSAR event %s triggers %s\n',event,eventStartOn); end
AUTOSAR event /pkg/swc/ASWC/IB/Event_t_1tic_A triggers ASWC/IB/myRunnable AUTOSAR event /pkg/swc/ASWC/IB/Event_t_1tic_B triggers ASWC/IB/Runnable2 AUTOSAR event /pkg/swc/ASWC/IB/Event_t_10tic triggers ASWC/IB/Runnable3
% Modify AUTOSAR event name set(arProps,events{1},'Name','myEvent'); events = find(arProps,ib,'TimingEvent','PathType','FullyQualified'); eventStartOn = get(arProps,events{1},'StartOnEvent'); fprintf('AUTOSAR event %s triggers %s\n',events{1},eventStartOn);
AUTOSAR event /pkg/swc/ASWC/IB/myEvent triggers ASWC/IB/myRunnable
% Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink exported function Runnable1 to renamed AUTOSAR runnable mapFunction(slMap,'Runnable1','myRunnable'); arRunnableName = getFunction(slMap,'Runnable1')
arRunnableName = 'myRunnable'
ランナブルの設定とマッピング. この例では、次を行います。
モデルを開きます。
AUTOSAR の初期化ランナブルと周期的なランナブルをモデルに追加します。
タイミング イベントを周期的なランナブルに追加します。
Simulink 初期化関数とステップ関数を AUTOSAR ランナブルにマッピングします。
ランナブル アクティベーションのイベントの設定も参照してください。
% Open model hModel = 'autosar_swc_counter'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR initialization and periodic runnables initRunnable = 'myInitRunnable'; periodicRunnable = 'myPeriodicRunnable'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') add(arProps,ib,'Runnables',initRunnable); add(arProps,ib,'Runnables',periodicRunnable); % Add AUTOSAR timing event eventName = 'myPeriodicEvent'; add(arProps,ib,'Events',eventName,'Category','TimingEvent','Period',1,... 'StartOnEvent',[ib '/' periodicRunnable]); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map AUTOSAR runnables to Simulink initialize and step functions mapFunction(slMap,'InitializeFunction',initRunnable); mapFunction(slMap,'StepFunction',periodicRunnable); % To pass validation, remove redundant initialize and step runnables in AUTOSAR configuration runnables = get(arProps,ib,'Runnables'); delete(arProps,[ib,'/Runnable_Init']); delete(arProps,[ib,'/Runnable_Step']); runnables = get(arProps,ib,'Runnables')
swc = '/Company/Powertrain/Components/autosar_swc_counter' ib = 'autosar_swc_counter/ASWC_IB' runnables = {'autosar_swc_counter/ASWC_IB/myInitRunnable'} {'autosar_swc_counter/ASWC_IB/myPeriodicRunnable'}
ランナブル アクティベーションのイベントの設定. この例では、AUTOSAR TimingEvent
、DataReceivedEvent
、DataReceiveErrorEvent
をモデルのランナブルに追加するプロパティ関数の構文について説明します。DataReceivedEvent
または DataReceiveErrorEvent
では、トリガーを指定します。トリガー名には、イベントを受信する AUTOSAR 受信ポートの名前とデータ要素が含まれ、'RPort.DE1'
のようになります。
OperationInvokedEvent
構文については、AUTOSAR クライアント/サーバーインターフェイスの設定を参照してください。
ModeSwitchEvent
構文については、AUTOSAR モード スイッチ インターフェイスの設定を参照してください。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Specify AUTOSAR runnable to which to add event swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') runnables = get(arProps,ib,'Runnables') runnable = 'Runnable1'; % Add AUTOSAR timing event timingEventName = 'myTimingEvent'; add(arProps,ib,'Events',timingEventName,'Category','TimingEvent',... 'Period',1,'StartOnEvent',[ib '/' runnable]); % Add AUTOSAR data received event drEventName = 'myDREvent'; add(arProps,ib,'Events',drEventName,'Category','DataReceivedEvent',... 'Trigger','RPort.DE1','StartOnEvent',[ib '/' runnable]); % Add AUTOSAR data receive error event dreEventName = 'myDREEvent'; add(arProps,ib,'Events',dreEventName,'Category','DataReceiveErrorEvent',... 'Trigger','RPort.DE1','StartOnEvent',[ib '/' runnable]); % To pass validation, remove redundant timing event in AUTOSAR configuration events = get(arProps,ib,'Events'); delete(arProps,[ib,'/Event_t_1tic_A']) events = get(arProps,ib,'Events')
swc = '/pkg/swc/ASWC' ib = 'ASWC/IB' runnables = 1×4 cell array {'ASWC/IB/Runnable_Init'} {'ASWC/IB/Runnable1'} {'ASWC/IB/Runnable2'} {'ASWC/IB/Runnable3'} events = 1×5 cell array {'ASWC/IB/Event_t_1tic_B'} {'ASWC/IB/Event_t_10tic'} {'ASWC/IB/myTimingEvent'} {'ASWC/IB/myDREvent'} {'ASWC/IB/myDREEvent'}
AUTOSAR カスタム スケジューラ スクリプト用の情報の収集. この例では、次を行います。
開いているモデル内のイベントやランナブルを順にループします。
イベントまたはランナブルごとに、カスタム スケジューラで使用する情報を抽出します。
hModel
は、開いている AUTOSAR モデルの名前を指定します。
% Example of how to extract timing information for runnables % to prepare for hooking up a custom scheduler % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); swc = get(arProps,'XmlOptions','ComponentQualifiedName'); % Get AUTOSAR internal behavior ib = get(arProps,swc,'Behavior'); % Get AUTOSAR events and runnables events = get(arProps,ib,'Events'); runnables = get(arProps,ib,'Runnables'); % Loop through events for ii=1:length(events) event = events{ii}; category = get(arProps,event,'Category'); switch category case 'TimingEvent' runnablePath = get(arProps,event,'StartOnEvent'); period = get(arProps,event,'Period'); eventName = get(arProps,event,'Name'); runnableName = get(arProps,runnablePath,'Name'); fprintf('Event %s triggers runnable %s with period %g\n',eventName,runnableName,period); otherwise % Not interested in other events end end % Loop through runnables for ii=1:length(runnables) runnable = runnables{ii}; runnableName = get(arProps,runnable,'Name'); runnableSymbol = get(arProps,runnable,'symbol'); fprintf('Runnable %s has symbol %s\n',runnableName,runnableSymbol); end
モデル例 autosar_swc_expfcns
でコード例を実行すると、次の出力が生成されます。
Event Event_t_1tic_A triggers runnable Runnable1 with period 1 Event Event_t_1tic_B triggers runnable Runnable2 with period 1 Event Event_t_10tic triggers runnable Runnable3 with period 10 Runnable Runnable_Init has symbol Runnable_Init Runnable Runnable1 has symbol Runnable1 Runnable Runnable2 has symbol Runnable2 Runnable Runnable3 has symbol Runnable3
モデル例
でコード例を実行すると、次の出力が生成されます。matlabroot
/help/toolbox/autosar/examples/mMultitasking_4rates.slx
Event Event_Runnable_Step triggers runnable Runnable_Step with period 1 Event Event_Runnable_Step1 triggers runnable Runnable_Step1 with period 2 Event Event_Runnable_Step2 triggers runnable Runnable_Step2 with period 4 Event Event_Runnable_Step3 triggers runnable Runnable_Step3 with period 8 Runnable Runnable_Init has symbol Runnable_Init Runnable Runnable_Step has symbol Runnable_Step Runnable Runnable_Step1 has symbol Runnable_Step1 Runnable Runnable_Step2 has symbol Runnable_Step2 Runnable Runnable_Step3 has symbol Runnable_Step3
AUTOSAR インターランナブル変数の設定
複数のランナブルをもつ AUTOSAR ソフトウェア コンポーネントでは、インターランナブル変数 (IRV) を使用してランナブル間でデータをやりとりします。Simulink では、サブシステムを接続するデータ転送ラインを使用して IRV をモデル化します。複数のレートを使用するアプリケーションでは、データ転送ラインに異なるレート間の変換を処理する Rate Transition ブロックが含まれている場合があります。
以下の例では、AUTOSAR のプロパティ関数と map 関数を使用して、レート変換を使用しないまたは使用する AUTOSAR IRV を設定する方法を説明します。
データ転送ライン用のインターランナブル変数の設定. この例では、次を行います。
モデルを開きます。
AUTOSAR インターランナブル変数 (IRV) をモデルに追加します。
Simulink データ転送を IRV にマッピングします。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Get AUTOSAR internal behavior and add IRV myIrv with SwCalibrationAccess ReadWrite irvName = 'myIrv'; swCalibValue = 'ReadWrite'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') irvs = get(arProps,ib,'IRV') add(arProps,ib,'IRV',irvName,'SwCalibrationAccess',swCalibValue); irvs = get(arProps,ib,'IRV'); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink signal irv1 to AUTOSAR IRV myIrv with access mode Explicit irvAccess = 'Explicit'; [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'irv1'); mapDataTransfer(slMap,'irv1',irvName,irvAccess); [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'irv1') % To pass validation, remove redundant IRV in AUTOSAR configuration irvs = get(arProps,ib,'IRV'); delete(arProps,[ib,'/IRV1']) irvs = get(arProps,ib,'IRV')
swc = '/pkg/swc/ASWC' ib = 'ASWC/IB' irvs = {'ASWC/IB/IRV1'} {'ASWC/IB/IRV2'} {'ASWC/IB/IRV3'} {'ASWC/IB/IRV4'} arIrvName = 'myIrv' arDataAccessMode = 'Explicit' irvs = {'ASWC/IB/IRV2'} {'ASWC/IB/IRV3'} {'ASWC/IB/IRV4'} {'ASWC/IB/myIrv'}
レート変換を使用するデータ転送用のインターランナブル変数の設定. この例では、次を行います。
複数のレートを使用するモデルを開きます。
AUTOSAR インターランナブル変数 (IRV) をモデルに追加します。
Simulink Rate Transition ブロックを IRV にマッピングします。
% Open model hModel = 'mMultitasking_4rates'; addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Get AUTOSAR internal behavior and add IRV myIrv with SwCalibrationAccess ReadWrite irvName = 'myIrv'; swCalibValue = 'ReadWrite'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') irvs = get(arProps,ib,'IRV') add(arProps,ib,'IRV',irvName,'SwCalibrationAccess',swCalibValue); irvs = get(arProps,ib,'IRV'); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink RT block RateTransition2 to AUTOSAR IRV myIrv with access mode Explicit irvAccess = 'Explicit'; [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2'); mapDataTransfer(slMap,'mMultitasking_4rates/RateTransition2',irvName,irvAccess); [arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2') % To pass validation, remove redundant IRV in AUTOSAR configuration irvs = get(arProps,ib,'IRV'); delete(arProps,[ib,'/IRV3']) irvs = get(arProps,ib,'IRV')
swc = '/mMultitasking_4rates_pkg/mMultitasking_4rates_swc/mMultitasking_4rates' ib = 'mMultitasking_4rates/Behavior' irvs = {'mMultitasking_4rates/Behavior/IRV1'} {'mMultitasking_4rates/Behavior/IRV2'} {'mMultitasking_4rates/Behavior/IRV3'} arIrvName = 'myIrv' arDataAccessMode = 'Explicit' irvs = {'mMultitasking_4rates/Behavior/IRV1'} {'mMultitasking_4rates/Behavior/IRV2'} {'mMultitasking_4rates/Behavior/myIrv'}
AUTOSAR インターフェイスの設定
AUTOSAR ソフトウェア コンポーネントはポートとインターフェイスを使用して次の形式の通信を実装できます。
送信側/受信側 (S-R)
クライアント/サーバー (C-S)
モード スイッチ (M-S)
非 volatile (NV) データ
以下の例では、AUTOSAR のプロパティ関数と map 関数を使用して、S-R、C-S、M-S 通信用に AUTOSAR ポート、インターフェイス、関連要素を設定する方法を示します。S-R ポートとインターフェイスを設定するための手法は、NV 通信にも広範囲に適用されます。
AUTOSAR 送信側/受信側インターフェイスの設定
送信側/受信側インターフェイスの設定とマッピング. この例では、次を行います。
モデルを開きます。
AUTOSAR 送信側/受信側インターフェイスをモデルに追加します。
データ要素を追加します。
送受信ポートを作成します。
Simulink 入力端子と出力端子を AUTOSAR 送受信ポートにマッピングします。
AUTOSAR ランナブルとイベントの設定も参照してください。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR S-R interface ifName = 'mySrIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage') addPackageableElement(arProps,'SenderReceiverInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified') % Add AUTOSAR S-R data elements with ReadWrite calibration access de1 = 'myDE1'; de2 = 'myDE2'; swCalibValue= 'ReadWrite'; add(arProps, [ifPkg '/' ifName],'DataElements',de1,'SwCalibrationAccess',swCalibValue); add(arProps, [ifPkg '/' ifName],'DataElements',de2,'SwCalibrationAccess',swCalibValue); % Add AUTOSAR receiver and sender ports with S-R interface name rPortName = 'myRPort'; pPortName = 'myPPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ReceiverPorts',rPortName,'Interface',ifName); add(arProps,aswcPath{1},'SenderPorts',pPortName,'Interface',ifName); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink inport RPort_DE2 to AUTOSAR receiver port myRPort and data element myDE2 rDataAccessMode = 'ImplicitReceive'; [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2') mapInport(slMap,'RPort_DE2',rPortName,de2,rDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'RPort_DE2') % Map Simulink outport PPort_DE1 to AUTOSAR sender port myPPort and data element myDE1 sDataAccessMode = 'ImplicitSend'; [arPortName,arDataElementName,arDataAccessMode]=getOutport(slMap,'PPort_DE1') mapOutport(slMap,'PPort_DE1',pPortName,de1,sDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getOutport(slMap,'PPort_DE1')
ifPkg = '/pkg/if' ifPaths = {'/pkg/if/Interface1'} {'/pkg/if/Interface2'} {'/pkg/if/mySrIf'} arPortName = 'RPort' arDataElementName = 'DE2' arDataAccessMode = 'ImplicitReceive' arPortName = 'myRPort' arDataElementName = 'myDE2' arDataAccessMode = 'ImplicitReceive' arPortName = 'PPort' arDataElementName = 'DE1' arDataAccessMode = 'ImplicitSend' arPortName = 'myPPort' arDataElementName = 'myDE1' arDataAccessMode = 'ImplicitSend'
送信側/受信側データ要素プロパティの設定. この例では、AUTOSAR 送信側/受信側 (S-R) インターフェイスとデータ要素をループして、S-R データ要素のキャリブレーション プロパティを設定します。
% Open model hModel = 'autosar_swc_expfcns'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Configure SwCalibrationAccess for AUTOSAR data elements in S-R interfaces srIfs = find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified') % Loop through S-R interfaces and get data elements for i=1:length(srIfs) srIf = srIfs{i}; dataElements = get(arProps,srIf,'DataElements','PathType','FullyQualified') % Loop through data elements for each S-R interface and set SwCalibrationAccess swCalibValue = 'ReadWrite'; for ii=1:length(dataElements) dataElement = dataElements{ii}; set(arProps,dataElement,'SwCalibrationAccess',swCalibValue) get(arProps,dataElement,'SwCalibrationAccess'); end end
srIfs = {'/pkg/if/Interface1'} {'/pkg/if/Interface2'} dataElements = {'/pkg/if/Interface1/DE1'} {'/pkg/if/Interface1/DE2'} dataElements = {'/pkg/if/Interface2/DE1'} {'/pkg/if/Interface2/DE2'} {'/pkg/if/Interface2/DE3'} {'/pkg/if/Interface2/DE4'}
AUTOSAR クライアント/サーバーインターフェイスの設定
サーバー プロパティの設定. この例では、次を行います。
モデルを開きます。
AUTOSAR クライアント/サーバー インターフェイスをモデルに追加します。
オペレーションを追加します。
サーバー ポートを作成します。
サーバー ランナブルを作成します。
Simulink 関数を AUTOSAR サーバーのランナブルにマッピングします。
% Open model hModel = 'mControllerWithInterface_server'; addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR C-S interface ifName = 'myCsIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage') addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified'); % Add AUTOSAR operation to C-S interface csOp = 'readData'; add(arProps, [ifPkg '/' ifName],'Operations',csOp); % Add AUTOSAR arguments to C-S operation with Direction and SwCalibrationAccess properties args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'} swCalibValue = 'ReadOnly'; for i=1:length(args) add(arProps,[ifPkg '/' ifName '/' csOp],'Arguments',args{i,1},'Direction',args{i,2},... 'SwCalibrationAccess',swCalibValue); end get(arProps,[ifPkg '/' ifName '/' csOp],'Arguments') % Add AUTOSAR server port with C-S interface name sPortName = 'mySPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ServerPorts',sPortName,'Interface',ifName); % Add AUTOSAR server runnable with symbol name that matches Simulink function name serverRunnable = 'Runnable_myReadData'; serverRunnableSymbol = 'readData'; swc = get(arProps,'XmlOptions','ComponentQualifiedName') ib = get(arProps,swc,'Behavior') runnables = get(arProps,ib,'Runnables'); % To avoid symbol conflict, remove existing runnable with symbol name readData delete(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData') add(arProps,ib,'Runnables',serverRunnable,'symbol',serverRunnableSymbol); runnables = get(arProps,ib,'Runnables'); % Add AUTOSAR operation invoked event oiEventName = 'Event_myReadData'; add(arProps,ib,'Events',oiEventName,'Category','OperationInvokedEvent',... 'Trigger','mySPort.readData','StartOnEvent',[ib '/' serverRunnable]); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink function readData to AUTOSAR runnable Runnable_myReadData mapFunction(slMap,'readData',serverRunnable); arRunnableName=getFunction(slMap,'readData')
ifPkg = '/ControllerWithInterface_ar_pkg/ControllerWithInterface_ar_if' args = {'Op' } {'In' } {'Data' } {'Out'} {'ERR' } {'Out'} {'NegCode'} {'Out'} ans = {'myCsIf/readData/Op'} {'myCsIf/readData/Data'} {'myCsIf/readData/ERR'} {'myCsIf/readData/NegCode'} swc = '/pkg/swc/SWC_Controller' ib = 'SWC_Controller/ControllerWithInterface_ar' arRunnableName = 'Runnable_myReadData'
クライアント プロパティの設定. この例では、次を行います。
モデルを開きます。
AUTOSAR クライアント/サーバー インターフェイスをモデルに追加します。
オペレーションを追加します。
クライアント ポートを作成します。
Simulink 関数呼び出しを AUTOSAR クライアント ポートとオペレーションにマッピングします。
% Open model hModel = 'mControllerWithInterface_client'; addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Add AUTOSAR C-S interface ifName = 'myCsIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage'); addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified') % Add AUTOSAR operation to C-S interface csOp = 'readData'; add(arProps, [ifPkg '/' ifName],'Operations',csOp); % Add AUTOSAR arguments to C-S operation with Direction and SwCalibrationAccess properties args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'} swCalibValue = 'ReadOnly'; for i=1:length(args) add(arProps,[ifPkg '/' ifName '/' csOp],'Arguments',args{i,1},'Direction',args{i,2},... 'SwCalibrationAccess',swCalibValue); end get(arProps,[ifPkg '/' ifName '/' csOp],'Arguments') % Add AUTOSAR client port with C-S interface name cPortName = 'myCPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ClientPorts',cPortName,'Interface',ifName); % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink function caller readData to AUTOSAR client port and operation [arPort,arOp] = getFunctionCaller(slMap,'readData'); mapFunctionCaller(slMap,'readData',cPortName,csOp); [arPort,arOp] = getFunctionCaller(slMap,'readData')
ifPaths = {'/pkg/if/csInterface'} {'/pkg/if/myCsIf'} args = {'Op' } {'In' } {'Data' } {'Out'} {'ERR' } {'Out'} {'NegCode'} {'Out'} ans = {'myCsIf/readData/Op'} {'myCsIf/readData/Data'} {'myCsIf/readData/ERR'} {'myCsIf/readData/NegCode'} arPort = 'myCPort' arOp = 'readData'
AUTOSAR モード スイッチ インターフェイスの設定
この例では、次を行います。
モデルを開きます。
AUTOSAR モード宣言グループを宣言します。
モード スイッチ インターフェイスをモデルに追加します。
モード受信ポートを追加します。
ModeSwitchEvent をランナブルに追加します。
Simulink 入力端子を AUTOSAR モード受信ポートとモード グループにマッピングします。
% Add path to model and mode definition files and open model addpath(fullfile(matlabroot,'/help/toolbox/autosar/examples')); hModel = 'mAutosarMsConfig'; open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % File mdgModes.m declares AUTOSAR mode declaration group mdgModes for use with the M-S interface. % See matlabroot/help/toolbox/autosar/examples/mdgModes.m, which must be on the MATLAB path. % The enumerated mode values are: % STARTUP(0) % RUN(1) % SHUTDOWN(2) % Separate code, below, defines mode declaration group information for XML export. % Apply data type mdgModes to Simulink inport MRPort set_param([hModel,'/MRPort'],'OutDataTypeStr','Enum: mdgModes') get_param([hModel,'/MRPort'],'OutDataTypeStr'); % Apply data type mdgModes and value STARTUP to Runnable1_subsystem/Enumerated Constant set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'OutDataTypeStr','Enum: mdgModes') set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'Value','mdgModes.STARTUP') % Add AUTOSAR M-S interface and set its ModeGroup to mdgModes ifName = 'myMsIf'; modeGroup = 'mdgModes'; ifPkg = get(arProps,'XmlOptions','InterfacePackage'); addPackageableElement(arProps,'ModeSwitchInterface',ifPkg,ifName,'IsService',true); add(arProps,[ifPkg '/' ifName],'ModeGroup',modeGroup) ifPaths=find(arProps,[],'ModeSwitchInterface','PathType','FullyQualified') % Add AUTOSAR mode-receiver port with M-S interface name mrPortName = 'myMRPort'; aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); add(arProps,aswcPath{1},'ModeReceiverPorts',mrPortName,'Interface',ifName); % Define AUTOSAR ModeSwitchEvent for runnable msRunnable = 'Runnable1'; msEventName = 'myMSEvent'; swc = get(arProps,'XmlOptions','ComponentQualifiedName'); ib = get(arProps,swc,'Behavior'); runnables = get(arProps,ib,'Runnables') add(arProps,ib,'Events',msEventName,'Category','ModeSwitchEvent',... 'Activation', 'OnTransition', ... 'StartOnEvent', [ib '/' msRunnable]); % Separate code, below, sets ModeSwitchEvent port and trigger values. % To pass validation, remove redundant timing event in AUTOSAR configuration events = get(arProps,ib,'Events'); delete(arProps,[ib,'/Event_t_1tic_A']) events = get(arProps,ib,'Events') % Export mode declaration group information to AUTOSAR data type package in XML mdgPkg = get(arProps,'XmlOptions','DataTypePackage'); mdgPath = [mdgPkg '/' modeGroup] initMode = [mdgPath '/STARTUP'] addPackageableElement(arProps,'ModeDeclarationGroup',mdgPkg,modeGroup,'OnTransitionValue',100) % Add modes to ModeDeclarationGroup and set InitialMode add(arProps,mdgPath,'Mode','STARTUP','Value',0) add(arProps,mdgPath,'Mode','RUN','Value',1) add(arProps,mdgPath,'Mode','SHUTDOWN','Value',2) set(arProps,mdgPath,'InitialMode',initMode) % Set ModeGroup for M-S interface set(arProps,[ifPkg '/' ifName '/' modeGroup],'ModeGroup',mdgPath) % Set port and trigger for AUTOSAR ModeSwitchEvent expTrigger = {[mrPortName '.STARTUP'], [mrPortName '.SHUTDOWN']} set(arProps,[ib '/' msEventName],'Trigger',expTrigger) % Use AUTOSAR map functions slMap=autosar.api.getSimulinkMapping(hModel); % Map Simulink inport MRPort to AUTOSAR mode receiver port myMRPort and mode group mdgModes msDataAccessMode = 'ModeReceive'; [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort'); mapInport(slMap,'MRPort',mrPortName,modeGroup,msDataAccessMode); [arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort') % To pass validation, set inport Runnable1 sample time to -1 (inherited) set_param([hModel,'/Runnable1'],'SampleTime','-1')
ifPaths = {'/pkg/if/myMsIf'} runnables = {'ASWC/Behavior/Runnable_Init'} {'ASWC/Behavior/Runnable1'} {'ASWC/Behavior/Runnable2'} {'ASWC/Behavior/Runnable3'} events = {'ASWC/Behavior/Event_t_1tic_B'} {'ASWC/Behavior/Event_t_10tic'} {'ASWC/Behavior/myMSEvent'} mdgPath = '/pkg/dt/mdgModes' initMode = '/pkg/dt/mdgModes/STARTUP' expTrigger = {'myMRPort.STARTUP'} {'myMRPort.SHUTDOWN'} arPortName = 'myMRPort' arDataElementName = 'mdgModes' arDataAccessMode = 'ModeReceive'
AUTOSAR XML エクスポートの設定
XML エクスポート オプションの設定
この例では、AUTOSAR XML エクスポート パラメーター [エクスポートされた XML ファイルのパッケージ化] (ArxmlFilePackaging
) を設定します。
AUTOSAR パッケージ パスの設定については、AUTOSAR パッケージ パスの設定を参照してください。
% Open model hModel = 'autosar_swc_counter'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Set exported AUTOSAR XML file packaging to Single file get(arProps,'XmlOptions','ArxmlFilePackaging') set(arProps,'XmlOptions','ArxmlFilePackaging','SingleFile'); get(arProps,'XmlOptions','ArxmlFilePackaging')
ans = 'Modular' ans = 'SingleFile'
AUTOSAR パッケージ パスの設定
この例では、XML エクスポート用に AUTOSAR パッケージ パスを設定します。その他の AUTOSAR パッケージ パスのプロパティ名については、AUTOSAR パッケージとパスの構成を参照してください。
その他の XML エクスポート オプションの設定については、XML エクスポート オプションの設定を参照してください。
% Open model hModel = 'autosar_swc_counter'; addpath(fullfile(matlabroot,'/examples/autosarblockset/main')); open_system(hModel); % Use AUTOSAR property functions arProps = autosar.api.getAUTOSARProperties(hModel); % Specify AUTOSAR application data type package path for XML export get(arProps,'XmlOptions','ApplicationDataTypePackage') set(arProps,'XmlOptions','ApplicationDataTypePackage','/Company/Powertrain/DataTypes/ADTs'); get(arProps,'XmlOptions','ApplicationDataTypePackage')
ans = '/Company/Powertrain/DataTypes/ApplDataTypes' ans = '/Company/Powertrain/DataTypes/ADTs'