配置 AUTOSAR 可运行实体间变量
在一个具有多个可运行实体的 AUTOSAR 软件组件中,可运行实体间变量 (IRV) 用于在可运行实体之间进行数据通信。在 Simulink® 中,您使用连接子系统的数据传输线对 IRV 进行建模。在一个具有多个速率的应用程序中,数据传输线可能包括 Rate Transition 模块以处理不同速率之间的转换。
以下示例说明如何使用 AUTOSAR 属性和映射函数来配置具有或不具有速率转换的 AUTOSAR IRV。
为数据传输线配置可运行实体间变量
此示例说明如何添加、配置 AUTOSAR 可运行实体间变量 (IRV) 和将其映射到示例模型 autosar_swc_expfcns。
添加和配置 IRV
使用示例模型 autosar_swc_expfcns 和相关的 autosar.api.getAUTOSARProperties 对象添加一个具有 SwCalibrationAccess ReadWrite 的 IRV myIRV。
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");
将 Simulink 信号映射到 AUTOSAR IRV
使用 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 映射函数:
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'}