Main Content

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 ソフトウェア コンポーネントの名前とタイプの設定

この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR ソフトウェア コンポーネントを検出します。

  3. コンポーネントをループしてプロパティ値のリストを表示します。

  4. コンポーネントの名前と種類のプロパティを編集します。

% 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 ポートを設定する方法を示します。

送受信ポートの設定とマッピング.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR 送信ポートまたは受信ポートを検出します。

  3. ポートをループして関連付けられている送信側/受信側インターフェイスの一覧を表示します。

  4. ポートの関連付けられているインターフェイスを編集します。

  5. 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

クライアント/サーバー ポートの設定.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR クライアント/サーバー ポートを検索します。

  3. ポートをループして関連付けられているクライアント/サーバー インターフェイスの一覧を表示します。

  4. ポートの関連付けられているインターフェイスを編集します。

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

モード受信ポートの設定とマッピング.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR モード受信ポートを検出します。

  3. ポートをループして関連付けられているモード スイッチ インターフェイスの一覧を表示します。

  4. ポートの関連付けられているインターフェイスを編集します。

  5. 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 の設定.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR ランナブルを検索します。

  3. ランナブルをループして、プロパティの一覧を表示します。

  4. AUTOSAR の周期的なランナブルの名前と記号を編集します。

  5. AUTOSAR タイミング イベントをループして関連付けられているランナブルの一覧を表示します。

  6. AUTOSAR タイミング イベントの名前を変更します。

  7. 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'

ランナブルの設定とマッピング.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR の初期化ランナブルと周期的なランナブルをモデルに追加します。

  3. タイミング イベントを周期的なランナブルに追加します。

  4. 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 TimingEventDataReceivedEventDataReceiveErrorEvent をモデルのランナブルに追加するプロパティ関数の構文について説明します。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 カスタム スケジューラ スクリプト用の情報の収集.  この例では、次を行います。

  1. 開いているモデル内のイベントやランナブルを順にループします。

  2. イベントまたはランナブルごとに、カスタム スケジューラで使用する情報を抽出します。

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 を設定する方法を説明します。

データ転送ライン用のインターランナブル変数の設定.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR インターランナブル変数 (IRV) をモデルに追加します。

  3. 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'}

レート変換を使用するデータ転送用のインターランナブル変数の設定.  この例では、次を行います。

  1. 複数のレートを使用するモデルを開きます。

  2. AUTOSAR インターランナブル変数 (IRV) をモデルに追加します。

  3. 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 送信側/受信側インターフェイスの設定

送信側/受信側インターフェイスの設定とマッピング.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR 送信側/受信側インターフェイスをモデルに追加します。

  3. データ要素を追加します。

  4. 送受信ポートを作成します。

  5. 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 クライアント/サーバーインターフェイスの設定

サーバー プロパティの設定.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR クライアント/サーバー インターフェイスをモデルに追加します。

  3. オペレーションを追加します。

  4. サーバー ポートを作成します。

  5. サーバー ランナブルを作成します。

  6. 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'

クライアント プロパティの設定.  この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR クライアント/サーバー インターフェイスをモデルに追加します。

  3. オペレーションを追加します。

  4. クライアント ポートを作成します。

  5. 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 モード スイッチ インターフェイスの設定

この例では、次を行います。

  1. モデルを開きます。

  2. AUTOSAR モード宣言グループを宣言します。

  3. モード スイッチ インターフェイスをモデルに追加します。

  4. モード受信ポートを追加します。

  5. ModeSwitchEvent をランナブルに追加します。

  6. 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'

参考

|

関連する例

詳細