メインコンテンツ

AUTOSAR インターランナブル変数の設定

複数のランナブルを含む AUTOSAR ソフトウェア コンポーネントでは、ランナブル間のデータ通信にインターランナブル変数 (IRV) を使用します。Simulink® では、サブシステムを接続するデータ転送ラインを使用して IRV をモデル化します。複数のレートを含むアプリケーションでは、異なるレート間の変換を処理する Rate Transition ブロックがデータ転送ラインに含まれる場合があります。

この例では、AUTOSAR のプロパティ関数と map 関数を使用して、レート変換を含まない場合と含む場合で AUTOSAR IRV を設定する方法を示します。

データ転送ラインのインターランナブル変数の設定

この例では、AUTOSAR のインターランナブル変数 (IRV) をモデル例 autosar_swc_expfcns に対して追加、設定、およびマッピングする方法を示します。

IRV の追加および設定

モデル例 autosar_swc_expfcns および関連する autosar.api.getAUTOSARProperties オブジェクトを使用して、IRV myIRVSwCalibrationAccess ReadWrite で追加します。

hModel = "autosar_swc_expfcns";
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);

irvName = "myIrv";
swCalibValue = "ReadWrite";
swc = get(arProps,"XmlOptions","ComponentQualifiedName")
swc = 
'/pkg/swc/ASWC'
ib = get(arProps,swc,"Behavior")
ib = 
'ASWC/IB'
irvs = get(arProps,ib,"IRV")'
irvs = 4×1 cell
    {'ASWC/IB/IRV1'}
    {'ASWC/IB/IRV2'}
    {'ASWC/IB/IRV3'}
    {'ASWC/IB/IRV4'}

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

AUTOSAR IRV への Simulink 信号のマッピング

autosar.api.getSimulinkMapping オブジェクトのオブジェクト関数 slMap を使用して、Simulink 信号 irv1 を AUTOSAR IRV myIRV にマッピングします。データ アクセス モードを Explicit に設定します。

slMap=autosar.api.getSimulinkMapping(hModel);
listOfDataTransfers = find(slMap, "DataTransfers")
listOfDataTransfers = 1×4 string
    "irv3"    "irv1"    "irv2"    "irv4"

irvAccess = "Explicit";
[arIrvName,arDataAccessMode] = getDataTransfer(slMap,"irv1");
mapDataTransfer(slMap,"irv1",irvName,irvAccess);
[arIrvName,arDataAccessMode] = getDataTransfer(slMap,"irv1")
arIrvName = 
'myIrv'
arDataAccessMode = 
'Explicit'

検証に合格するには、AUTOSAR 構成内の冗長な IRV を削除する必要があります。

irvs = get(arProps,ib,"IRV");
delete(arProps,[ib,'/IRV1'])
irvs = get(arProps,ib,"IRV")'
irvs = 4×1 cell
    {'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 の内部動作を取得し、IRV 'myIrv' を SwCalibrationAccess ReadWrite で追加します。

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 = 1×3 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);

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

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 = 1×3 cell
    {'mMultitasking_4rates/Behavior/IRV1'}    {'mMultitasking_4rates/Behavior/IRV2'}    {'mMultitasking_4rates/Behavior/myIrv'}

参考

オブジェクト

関数

トピック