AUTOSAR インターランナブル変数の設定
複数のランナブルを含む AUTOSAR ソフトウェア コンポーネントでは、ランナブル間のデータ通信にインターランナブル変数 (IRV) を使用します。Simulink® では、サブシステムを接続するデータ転送ラインを使用して IRV をモデル化します。複数のレートを含むアプリケーションでは、異なるレート間の変換を処理する Rate Transition ブロックがデータ転送ラインに含まれる場合があります。
この例では、AUTOSAR のプロパティ関数と map 関数を使用して、レート変換を含まない場合と含む場合で AUTOSAR IRV を設定する方法を示します。
データ転送ラインのインターランナブル変数の設定
この例では、AUTOSAR のインターランナブル変数 (IRV) をモデル例 autosar_swc_expfcns に対して追加、設定、およびマッピングする方法を示します。
IRV の追加および設定
モデル例 autosar_swc_expfcns および関連する autosar.api.getAUTOSARProperties オブジェクトを使用して、IRV myIRV を SwCalibrationAccess 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'}
レート変換を含むデータ転送のインターランナブル変数の設定。
この例では、次を行います。
複数のレートをもつモデルを開きます。
AUTOSAR のインターランナブル変数 (IRV) をモデルに追加します。
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'}