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';
openExample(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';
openExample(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 entry point functions
functions = find(slMap, "Functions")'
functions = 

  4×1 string array

    "Initialize"
    "ExportedFunction:Runnable1"
    "ExportedFunction:Runnable2"
    "ExportedFunction:Runnable3"
% Get AUTOSAR mapping info for a specific 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 クライアント/サーバーインターフェイスの設定も参照してください。

モデル 'mControllerWithInterface_server' を作成し、開きます。

hModel = 'mControllerWithInterface_server';
open_system(hModel);

AUTOSAR プロパティ関数を取得します。

arProps = autosar.api.getAUTOSARProperties(hModel);

AUTOSAR ポートを検出し、ServerPort または ClientPort のいずれかを指定します。

arPortType = 'ServerPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
sPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified');

ポートをループし、検出された AUTOSAR ポートに関連付けられたインターフェイスを一覧表示します。

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

検出された AUTOSAR ポートの 'Interface' プロパティを設定します。

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

モード受信ポートの設定とマッピング

モデル 'mAutosarMsConfigAfter' を使用して、AUTOSAR モード受信ポートを検出し、ループして、これらのポートに関連付けられているモード スイッチ インターフェイスを一覧表示します。ポートに関連付けられているインターフェイスを変更します。Simulink® 入力端子を AUTOSAR モデルの受信ポートにマッピングします。

AUTOSAR モード スイッチ インターフェイスの設定も参照してください。

モデル 'mAutosarMsConfigAfter' を開きます。

hModel = 'mAutosarMsConfigAfter';
open_system(hModel);

AUTOSAR プロパティ関数を取得します。

arProps = autosar.api.getAUTOSARProperties(hModel);

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

arPortType = 'ModeReceiverPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
mrPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified');

ポートをループし、それらに関連付けられたインターフェイスを一覧表示します。

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

AUTOSAR ポートの 'Interface' プロパティを設定します。

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

AUTOSAR map 関数を使用します。

slMap=autosar.api.getSimulinkMapping(hModel);

Simulink 入力端子に関する AUTOSAR マッピング情報を取得します

[arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 
'myMRPort'
arDataElementName =

  0x0 empty char array
arDataAccessMode = 
'ModeReceive'

Simulink 入力端子を AUTOSAR ポート、モード グループ、およびデータ アクセス モードにマッピングします。

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';
openExample(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';
openExample(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'}

信号と状態の取得とマッピング.  この例では、次を行います。

  1. モデルを開きます。

  2. Simulink Mapping オブジェクトを作成します。

  3. 信号と状態を取得します。

  4. 信号と状態をマッピングします。

% Open model
hModel = "autosar_swc_counter";
openExample(hModel);

% Use AUTOSAR map functions
slMap=autosar.api.getSimulinkMapping(hModel);

% Use AUTOSAR mapping find function to retrieve Signals
listOfSignals = find(slMap,"Signals")
namesOfSignals = get_param(listOfSignals, "Name")
listOfSignals =

   36.0001   37.0001   38.0001


namesOfSignals =

  3×1 cell array

    {'equal_to_count'}
    {'sum_out'       }
    {'switch_out'    }
% Use AUTOSAR mapping find function to retrieve States 
listOfStates = find(slMap,"States")'
ans = 

    "autosar_swc_counter/X"
% Map Signals 
mapSignal(slMap, listOfSignals(1),'StaticMemory')
mapSignal(slMap, listOfSignals(2),'ArTypedPerInstanceMemory')
mapSignal(slMap, listOfSignals(3),'Auto')
% Map States 
mapState(slMap, 'autosar_swc_counter/X', '', 'StaticMemory')

ランナブル アクティベーションのイベントの設定.  この例では、AUTOSAR TimingEventDataReceivedEventDataReceiveErrorEvent をモデルのランナブルに追加するプロパティ関数の構文について説明します。DataReceivedEvent または DataReceiveErrorEvent では、トリガーを指定します。トリガー名には、イベントを受信する AUTOSAR 受信ポートの名前とデータ要素が含まれ、'RPort.DE1' のようになります。

OperationInvokedEvent 構文については、AUTOSAR クライアント/サーバーインターフェイスの設定を参照してください。

ModeSwitchEvent 構文については、AUTOSAR モード スイッチ インターフェイスの設定を参照してください。

% Open model
hModel = 'autosar_swc_expfcns';
openExample(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 モデルの名前を指定します。この場合は、'autosar_swc_expfcns' です。

次のコードは、ランナブルのタイミング情報を抽出して、カスタム スケジューラへの接続を準備する方法の例です。

まず、AUTOSAR プロパティ関数を使用して、ソフトウェア コンポーネントのプロパティ値を取得します。

hModel = 'autosar_swc_expfcns';
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);
swc = get(arProps,'XmlOptions','ComponentQualifiedName');

AUTOSAR の内部動作、ランナブル、およびイベントの特定も行います。

ib = get(arProps,swc,'Behavior');
events = get(arProps,ib,'Events');
runnables = get(arProps,ib,'Runnables');

for ループを使用して、これらのイベントやランナブルを順にループします。

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
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
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
Runnable Runnable_Init has symbol Runnable_Init
Runnable Runnable1 has symbol Runnable1
Runnable Runnable2 has symbol Runnable2
Runnable Runnable3 has symbol Runnable3

モデル例 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

モデル例 mMultitasking_4rates でコード例を実行すると、次の出力が生成されます。

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';
openExample(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);

% Retrieve list of DataTransfers
listOfDataTransfers = find(slMap, "DataTransfers")
listOfDataTransfers = 

  1×4 string array

    "irv3"    "irv1"    "irv2"    "irv4"
% 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 にマッピングします。

モデル 'mMultitasking_4rates' を開きます。

hModel = 'mMultitasking_4rates';
open_system(hModel);

AUTOSAR プロパティ関数を使用します。

arProps = autosar.api.getAUTOSARProperties(hModel);

AUTOSAR の内部動作を取得し、SwCalibrationAccess に ReadWrite を指定して IRV 'myIrv' を追加します。

irvName = 'myIrv';
swCalibValue = 'ReadWrite';
swc = get(arProps,'XmlOptions','ComponentQualifiedName')
swc = 
'/mMultitasking_4rates_pkg/mMultitasking_4rates_swc/mMultitasking_4rates'
ib = get(arProps,swc,'Behavior')
ib = 
'mMultitasking_4rates/Behavior'
irvs = get(arProps,ib,'IRV')
irvs = 1x3 cell
    {'mMultitasking_4rates/Behavior/IRV1'}    {'mMultitasking_4rates/Behavior/IRV2'}    {'mMultitasking_4rates/Behavior/IRV3'}

add(arProps,ib,'IRV',irvName,'SwCalibrationAccess',swCalibValue);
irvs = get(arProps,ib,'IRV');

AUTOSAR map 関数を使用します。

slMap=autosar.api.getSimulinkMapping(hModel);

アクセス モードを Explicit として、Simulink Real-Time ブロック 'RateTransition2' を AUTOSAR IRV 'myIrv' にマッピングします。

irvAccess = 'Explicit';
[arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2');
mapDataTransfer(slMap,'mMultitasking_4rates/RateTransition2',irvName,irvAccess);
[arIrvName,arDataAccessMode] = getDataTransfer(slMap,'mMultitasking_4rates/RateTransition2')
arIrvName = 
'myIrv'
arDataAccessMode = 
'Explicit'

検証にパスするために、AUTOSAR 構成で冗長な IRV をすべて削除します。

irvs = get(arProps,ib,'IRV');
delete(arProps,[ib,'/IRV3'])
irvs = get(arProps,ib,'IRV')
irvs = 1x3 cell
    {'mMultitasking_4rates/Behavior/IRV1'}    {'mMultitasking_4rates/Behavior/IRV2'}    {'mMultitasking_4rates/Behavior/myIrv'}

AUTOSAR インターフェイスの設定

AUTOSAR ソフトウェア コンポーネントはポートとインターフェイスを使用して次の形式の通信を実装できます。

  • 送信側/受信側 (S-R)

  • クライアント/サーバー (C-S)

  • モード スイッチ (M-S)

  • 不揮発性 (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';
openExample(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';
openExample(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 クライアント/サーバーインターフェイスの設定

サーバー プロパティの設定

モデル例 'mControllerWithInterface_server' を使用して、AUTOSAR クライアント/サーバー (C-S) インターフェイスを追加および設定します。

モデル例 'mControllerWithInterface_server' を開きます。

hModel = 'mControllerWithInterface_server';
open_system(hModel);

AUTOSAR プロパティ関数を使用します。

arProps = autosar.api.getAUTOSARProperties(hModel);

AUTOSAR C-S インターフェイスを追加します。

ifName = 'myCsIf';
ifPkg = get(arProps,'XmlOptions','InterfacePackage')
ifPkg = 
'/ControllerWithInterface_ar_pkg/ControllerWithInterface_ar_if'
addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false);
ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified');

AUTOSAR オペレーションを C-S インターフェイスに追加します。

csOp = 'readData';
add(arProps, [ifPkg '/' ifName],'Operations',csOp);

Direction プロパティと SwCalibrationAccess プロパティを使用して、C-S オペレーションに AUTOSAR 引数を追加します。

args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'}
args = 4x2 cell
    {'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')
ans = 1x4 cell
    {'myCsIf/readData/Op'}    {'myCsIf/readData/Data'}    {'myCsIf/readData/ERR'}    {'myCsIf/readData/NegCode'}

C-S インターフェイス名を使用して、AUTOSAR サーバー ポートを追加します。

sPortName = 'mySPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
add(arProps,aswcPath{1},'ServerPorts',sPortName,'Interface',ifName);

Simulink 関数名と一致するシンボル名を使用して、AUTOSAR サーバーのランナブルを追加します。

serverRunnable = 'Runnable_myReadData';
serverRunnableSymbol = 'readData';
swc = get(arProps,'XmlOptions','ComponentQualifiedName')
swc = 
'/pkg/swc/SWC_Controller'
ib = get(arProps,swc,'Behavior')
ib = 
'SWC_Controller/ControllerWithInterface_ar'
runnables = get(arProps,ib,'Runnables');

シンボルの競合を避けるためシンボル名が readData の既存のランナブルを削除します

delete(arProps,'SWC_Controller/ControllerWithInterface_ar/Runnable_readData')
add(arProps,ib,'Runnables',serverRunnable,'symbol',serverRunnableSymbol);
runnables = get(arProps,ib,'Runnables');

AUTOSAR オペレーション起動イベントを追加します

oiEventName = 'Event_myReadData';
add(arProps,ib,'Events',oiEventName,'Category','OperationInvokedEvent',...
    'Trigger','mySPort.readData','StartOnEvent',[ib '/' serverRunnable]);

AUTOSAR map 関数を使用します。

slMap=autosar.api.getSimulinkMapping(hModel);

Simulink 関数 readData を AUTOSAR ランナブル Runnable_myReadData にマッピングします。

mapFunction(slMap,'readData',serverRunnable);
The function name value 'readData' is obsolete and will be removed in a future
release. For valid function name values, use
autosar.api.getSimulinkMapping(modelName).find("Functions").
The function name value 'readData' is obsolete and will be removed in a future
release. For valid function name values, use
autosar.api.getSimulinkMapping(modelName).find("Functions").
arRunnableName=getFunction(slMap,'readData')
The function name value 'readData' is obsolete and will be removed in a future
release. For valid function name values, use
autosar.api.getSimulinkMapping(modelName).find("Functions").
arRunnableName = 
'Runnable_myReadData'

クライアント プロパティの設定

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

  1. モデルを開きます。

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

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

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

  5. Simulink® 関数呼び出しを AUTOSAR クライアント ポートとオペレーションにマッピングします。

モデル 'mControllerWithInterface_client' を開きます。

hModel = 'mControllerWithInterface_client';
open_system(hModel);

AUTOSAR プロパティ関数を取得します。

arProps = autosar.api.getAUTOSARProperties(hModel);

AUTOSAR C-S インターフェイスを追加します。

ifName = 'myCsIf';
ifPkg = get(arProps,'XmlOptions','InterfacePackage');
addPackageableElement(arProps,'ClientServerInterface',ifPkg,ifName,'IsService',false);
ifPaths=find(arProps,[],'ClientServerInterface','PathType','FullyQualified')
ifPaths = 1x2 cell
    {'/pkg/if/csInterface'}    {'/pkg/if/myCsIf'}

AUTOSAR オペレーションを C-S インターフェイスに追加します。

csOp = 'readData';
add(arProps, [ifPkg '/' ifName],'Operations',csOp);

Direction プロパティと SwCalibrationAccess プロパティを使用して、C-S オペレーションに AUTOSAR 引数を追加します。

args = {'Op','In'; 'Data','Out'; 'ERR','Out'; 'NegCode','Out'}
args = 4x2 cell
    {'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')
ans = 1x4 cell
    {'myCsIf/readData/Op'}    {'myCsIf/readData/Data'}    {'myCsIf/readData/ERR'}    {'myCsIf/readData/NegCode'}

C-S インターフェイス名を使用した AUTOSAR クライアント ポートを追加します

cPortName = 'myCPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
add(arProps,aswcPath{1},'ClientPorts',cPortName,'Interface',ifName);

AUTOSAR map 関数を使用します

slMap=autosar.api.getSimulinkMapping(hModel);

Simulink 関数呼び出し readData を AUTOSAR クライアント ポートとオペレーションへマッピングします

[arPort,arOp] = getFunctionCaller(slMap,'readData');
mapFunctionCaller(slMap,'readData',cPortName,csOp);
[arPort,arOp] = getFunctionCaller(slMap,'readData')
arPort = 
'myCPort'
arOp = 
'readData'

AUTOSAR モード スイッチ インターフェイスの設定

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

  1. モデルを開きます。

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

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

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

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

  6. Simulink® 入力端子を AUTOSAR モード受信ポートとモード グループにマッピングします。

モデル 'mAutosarMsConfig' を開きます。

hModel = 'mAutosarMsConfig';
open_system(hModel);

AUTOSAR プロパティ関数を取得します。

arProps = autosar.api.getAUTOSARProperties(hModel);

ファイル mdgModes.m は、M-S インターフェイスで使用するための AUTOSAR モード宣言グループ mdgModes を宣言します。

列挙モード値は次のとおりです。

  • STARTUP(0)

  • RUN(1)

  • SHUTDOWN(2)

以下の個別コードは、XML エクスポート用のモード宣言グループ情報を定義します。

データ型 mdgModes を Simulink 入力端子 MRPort に適用します

set_param([hModel,'/MRPort'],'OutDataTypeStr','Enum: mdgModes')
get_param([hModel,'/MRPort'],'OutDataTypeStr');

データ型 mdgModes と値 STARTUP を Runnable1_subsystem/Enumerated Constant に適用します。

set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'OutDataTypeStr','Enum: mdgModes')
set_param([hModel,'/Runnable1_subsystem/Enumerated Constant'],'Value','mdgModes.STARTUP')

AUTOSAR M-S インターフェイスを追加し、その ModeGroup を 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')
ifPaths = 1x1 cell array
    {'/pkg/if/myMsIf'}

M-S インターフェイス名を使用して、AUTOSAR モード受信ポートを追加します。

mrPortName = 'myMRPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
add(arProps,aswcPath{1},'ModeReceiverPorts',mrPortName,'Interface',ifName);

ランナブルの AUTOSAR ModeSwitchEvent を定義します。

msRunnable = 'Runnable1';
msEventName = 'myMSEvent';
swc = get(arProps,'XmlOptions','ComponentQualifiedName');
ib = get(arProps,swc,'Behavior');
runnables = get(arProps,ib,'Runnables')
runnables = 1x4 cell
    {'ASWC/Behavior/Runnable_Init'}    {'ASWC/Behavior/Runnable1'}    {'ASWC/Behavior/Runnable2'}    {'ASWC/Behavior/Runnable3'}

add(arProps,ib,'Events',msEventName,'Category','ModeSwitchEvent',...
    'Activation', 'OnTransition', ...
    'StartOnEvent', [ib '/' msRunnable]);

以下のコードを分離します。以下のコードは、ModeSwitchEvent のポートとトリガー値を設定します。

検証にパスするために、AUTOSAR 構成で冗長なタイミング イベントを削除します。

events = get(arProps,ib,'Events');
delete(arProps,[ib,'/Event_t_1tic_A'])
events = get(arProps,ib,'Events')
events = 1x3 cell
    {'ASWC/Behavior/Event_t_1tic_B'}    {'ASWC/Behavior/Event_t_10tic'}    {'ASWC/Behavior/myMSEvent'}

モード宣言グループ情報を XML の AUTOSAR データ型パッケージにエクスポートします。

mdgPkg = get(arProps,'XmlOptions','DataTypePackage');
mdgPath = [mdgPkg '/' modeGroup]
mdgPath = 
'/pkg/dt/mdgModes'
initMode = [mdgPath '/STARTUP']
initMode = 
'/pkg/dt/mdgModes/STARTUP'
addPackageableElement(arProps,'ModeDeclarationGroup',mdgPkg,modeGroup,'OnTransitionValue',100)

ModeDeclarationGroup にモードを追加して 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)

M-S インターフェイスの ModeGroup を設定します。

set(arProps,[ifPkg '/' ifName '/' modeGroup],'ModeGroup',mdgPath)

AUTOSAR プロパティ ModeSwitchEvent のポートとトリガーを設定します。

expTrigger = {[mrPortName '.STARTUP'], [mrPortName '.SHUTDOWN']}
expTrigger = 1x2 cell
    {'myMRPort.STARTUP'}    {'myMRPort.SHUTDOWN'}

set(arProps,[ib '/' msEventName],'Trigger',expTrigger)

AUTOSAR map 関数を取得します。

slMap=autosar.api.getSimulinkMapping(hModel);

Simulink® 入力端子 MRPort を AUTOSAR モード受信ポート myMRPort とモード グループ mdgModes にマッピングします。

msDataAccessMode = 'ModeReceive';
[arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort');
mapInport(slMap,'MRPort',mrPortName,modeGroup,msDataAccessMode);
[arPortName,arDataElementName,arDataAccessMode]=getInport(slMap,'MRPort')
arPortName = 
'myMRPort'
arDataElementName = 
'mdgModes'
arDataAccessMode = 
'ModeReceive'

検証にパスするために、入力端子 Runnable1 のサンプル時間を -1 (継承) に設定します。

set_param([hModel,'/Runnable1'],'SampleTime','-1')

AUTOSAR XML エクスポートの設定

XML エクスポート オプションの設定

この例では、AUTOSAR XML エクスポート パラメーター [エクスポートされた XML ファイルのパッケージ化] (ArxmlFilePackaging) を設定します。

AUTOSAR パッケージ パスの設定については、AUTOSAR パッケージ パスの設定を参照してください。

% Open model
hModel = 'autosar_swc_counter';
openExample(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';
openExample(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'

参考

|

関連する例

詳細