以编程方式配置 AUTOSAR 发送方-接收方通信
此示例提供一个编程工作流,用于使用 autosar.api.getAUTOSARProperties 对象函数配置模型 autosar_swc_expfcns 的发送方-接收方端口、接口、数据元素和可运行实体。它还提供使用 autosar.api.getSimulinkMapping 对象函数将 Simulink® 映射到 AUTOSAR 元素的编程工作流。
配置和映射发送方-接收方接口
打开示例模型 autosar_swc_expfcns 并创建 autosar.api.getAUTOSARProperties 对象。
hModel = 'autosar_swc_expfcns';
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);添加一个 AUTOSAR 发送方-接收方接口,使用接口包和名称将 IsService 属性指定为 false。
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);
向接口 mySrIf 添加 AUTOSAR 接收方(需型)端口和发送方(供型)端口。
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_swc_expfcns 中的可运行实体添加 AUTOSAR TimingEvent、DataReceivedEvent 和 DataReceiveErrorEvent 的属性函数语法。
对于 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' }