主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

配置 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'}

为带速率转换的数据传输配置可运行实体间变量。

此示例:

  1. 打开一个具有多个速率的模型。

  2. 将一个 AUTOSAR 可运行实体间变量 (IRV) 添加到模型。

  3. 将一个 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'}

另请参阅

对象

函数

主题