プログラムによる AUTOSAR 送信側/受信側通信の設定
この例では、autosar.api.getAUTOSARProperties オブジェクト関数を使用して、モデル autosar_swc_expfcns の送信側/受信側ポート、インターフェイス、データ要素、およびランナブルを設定するためのプログラム ワークフローを示します。autosar.api.getSimulinkMapping オブジェクト関数による AUTOSAR 要素への Simulink® のマッピングに関するプログラム ワークフローも提供されます。
送信側/受信側インターフェイスの設定およびマッピング
モデル例 autosar_swc_expfcns を開き、autosar.api.getAUTOSARProperties オブジェクトを作成します。
hModel = 'autosar_swc_expfcns';
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);インターフェイス パッケージと名前を使用して、IsService プロパティを false として指定する AUTOSAR 送信側/受信側インターフェイスを追加します。
ifName = 'mySrIf'; ifPkg = get(arProps,'XmlOptions','InterfacePackage'); addPackageableElement(arProps,'SenderReceiverInterface',ifPkg,ifName,'IsService',false); ifPaths=find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified')'
ifPaths = 3×1 cell
{'/pkg/if/Interface1'}
{'/pkg/if/Interface2'}
{'/pkg/if/mySrIf' }
SwCalibrationAccess プロパティを ReadWrite に設定してデータ要素を追加します。AUTOSAR プロパティの詳細については、AUTOSAR Element Propertiesを参照してください。
de1 = 'myDE1'; de2 = 'myDE2'; swCalibValue= 'ReadWrite'; add(arProps, [ifPkg '/' ifName],'DataElements',de1,'SwCalibrationAccess',swCalibValue); add(arProps, [ifPkg '/' ifName],'DataElements',de2,'SwCalibrationAccess',swCalibValue);
AUTOSAR 受信 (要求) 側ポートと送信 (提供) 側ポートをインターフェイス mySrIf に追加します。
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);
mapOutport による要求側のポートと提供側のポートのマッピング
autosar.api.getSimulinkMapping オブジェクトを作成します。
slMap=autosar.api.getSimulinkMapping(hModel);
オブジェクト関数を使用して出力端子 RPort_DE2 を取得し、ポート myRPort にマッピングします。データ アクセス モードを ImplicitReceive に設定します。詳細については、mapOutport関数を参照してください。
[rPortName,rDataElementName,rDataAccessMode] = getInport(slMap,'RPort_DE2')rPortName = 'RPort'
rDataElementName = 'DE2'
rDataAccessMode = 'ImplicitReceive'
mapInport(slMap,'RPort_DE2','myRPort',de2,'ImplicitReceive') [rPortName,rDataElementName,rDataAccessMode] = getInport(slMap,'RPort_DE2')
rPortName = 'myRPort'
rDataElementName = 'myDE2'
rDataAccessMode = 'ImplicitReceive'
オブジェクト関数を使用して出力端子 PPort_DE1 を取得し、ポート myPPort にマッピングします。データ アクセス モードを ImplicitSend に設定します。
[pPortName,pDataElementName,pDataAccessMode] = getOutport(slMap,'PPort_DE1')pPortName = 'PPort'
pDataElementName = 'DE1'
pDataAccessMode = 'ImplicitSend'
mapOutport(slMap,'PPort_DE1','myPPort','myDE1','ImplicitSend'); [pPortName,pDataElementName,pDataAccessMode] = getOutport(slMap,'PPort_DE1')
pPortName = 'myPPort'
pDataElementName = 'myDE1'
pDataAccessMode = 'ImplicitSend'
送信側/受信側データ要素のプロパティの設定
入れ子になった for ループを使用して、複数の AUTOSAR データ要素の SwCalibrationAccess プロパティを構成できます。
srIfs = find(arProps,[],'SenderReceiverInterface','PathType','FullyQualified')'
srIfs = 3×1 cell
{'/pkg/if/Interface1'}
{'/pkg/if/Interface2'}
{'/pkg/if/mySrIf' }
for i=1:length(srIfs) srIf = srIfs{i}; dataElements = get(arProps,srIf,'DataElements','PathType','FullyQualified'); swCalibValue = 'ReadWrite'; for ii=1:length(dataElements) dataElement = dataElements{ii}; set(arProps,dataElement,'SwCalibrationAccess',swCalibValue) end end
ランナブル有効化のイベントの設定
このセクションでは、AUTOSAR TimingEvent、DataReceivedEvent、および DataReceiveErrorEvent をモデル autosar_swc_expfcns のランナブルに追加するプロパティ関数の構文を示します。
DataReceiveErrorEvent の場合は、トリガーを指定する必要があります。トリガー名には、イベントを受信する AUTOSAR 受信側ポートとデータ要素の名前が含まれます。たとえば、"RPort.DE1" です。
OperationInvokedEvent の構文については、Programmatically Configure AUTOSAR Client-Server Communicationを参照してください。
ModeSwitchEvent の構文については、Programmatically Configure AUTOSAR Mode-Switch Communicationを参照してください。
モデル autosar_swc_expfcns を開き、関連する autosar.api.getAUTOSARProperties オブジェクトを作成します。
hModel = 'autosar_swc_expfcns';
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);TimingEvent を追加する対象の AUTOSAR ランナブルを特定します。
swc = get(arProps,"XmlOptions","ComponentQualifiedName"); ib = get(arProps,swc,"Behavior"); runnables = get(arProps,ib,"Runnables")'
runnables = 4×1 cell
{'ASWC/IB/Runnable_Init'}
{'ASWC/IB/Runnable1' }
{'ASWC/IB/Runnable2' }
{'ASWC/IB/Runnable3' }
runnable = "Runnable1"; timingEventName = "myTimingEvent"; add(arProps,ib,"Events",timingEventName,"Category","TimingEvent",... "Period",1,"StartOnEvent","ASWC/IB/Runnable2");
AUTOSAR データ受信イベントを追加します。
dreEventName = "myDREEvent"; add(arProps,ib,"Events",dreEventName,"Category","DataReceiveErrorEvent",... "Trigger","RPort.DE1","StartOnEvent","ASWC/IB/Runnable2");
検証に合格するには、AUTOSAR 構成内の冗長なタイミング イベントを削除します。
events = get(arProps,ib,"Events"); delete(arProps,"ASWC/IB/Event_t_1tic_A") events = get(arProps,ib,"Events")'
events = 4×1 cell
{'ASWC/IB/Event_t_1tic_B'}
{'ASWC/IB/Event_t_10tic' }
{'ASWC/IB/myTimingEvent' }
{'ASWC/IB/myDREEvent' }