主要内容

以编程方式配置 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 TimingEventDataReceivedEventDataReceiveErrorEvent 的属性函数语法。

对于 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'    }

另请参阅

对象

函数

属性

主题