以编程方式配置和映射 AUTOSAR 组件
在 Simulink® 中,作为图形化配置的替代方案,您可以通过编程方式配置 AUTOSAR 软件组件。通过 AUTOSAR 属性和映射函数,您可以获取、设置、添加和删除 AUTOSAR 组件模型的 AUTOSAR 字典和代码映射编辑器视图中显示的相同组件属性与映射信息。
AUTOSAR 属性和映射函数
您可以使用 AUTOSAR 属性和映射函数以编程方式配置 AUTOSAR 软件组件的 Simulink 表示。例如:
使用 AUTOSAR 属性函数添加 AUTOSAR 元素、查找元素、获取和设置元素的属性、删除元素以及定义元素的 ARXML 打包。
使用 AUTOSAR 映射函数将 Simulink 模型元素映射到 AUTOSAR 元素,并返回模型元素的 AUTOSAR 映射信息。
AUTOSAR 属性和映射函数还验证所请求的 AUTOSAR 属性与映射更改的语法和语义。
有关属性和映射函数的完整列表,请参阅组件开发中列出的函数。
有关使用这些函数的示例脚本,请参阅:
.
注意
有关创建或导入 AUTOSAR 软件组件的函数的信息,请参阅组件创建。
AUTOSAR 配置的树视图
AUTOSAR 配置的以下树视图显示可以应用 AUTOSAR 属性和映射函数的 AUTOSAR 元素的类型。此视图对应于 AUTOSAR 字典树显示画面,但包括可能不在每个配置中出现的元素。italics
中显示的名称是用户选择的名称。
AUTOSAR
AtomicComponents
MyComponent
ReceiverPorts
SenderPorts
SenderReceiverPorts
ModeReceiverPorts
ModeSenderPorts
ClientPorts
ServerPorts
NvReceiverPorts
NvSenderPorts
NvSenderReceiverPorts
ParameterReceiverPorts
TriggerReceiverPorts
Runnables
IRV
参数
S-R 接口
SRInterface1
DataElements
M-S 接口
MSInterface1
C-S 接口
CSInterface1
操作
operation1
Arguments
NV 接口
NVInterface1
DataElements
参数接口
ParameterInterface1
DataElements
触发接口
TriggerInterface1
Triggers
CompuMethods
XML 选项
AUTOSAR 元素的属性
下表列出了与 AUTOSAR 元素相关联的属性。有关详细信息,请参阅 AUTOSAR Element Properties。
AUTOSAR 元素类 | 属性 |
---|---|
AtomicComponent |
|
ApplicationComponentBehavior |
|
DataReceiverPort DataSenderPort DataSenderReceiverPort ClientPort ServerPort ModeReceiverPort NvDataReceiverPort NvDataSenderPort NvDataSenderReceiverPort ParameterReceiverPort TriggerReceiverPort |
|
Runnable |
|
TimingEvent |
|
DataReceivedEvent DataReceiveErrorEvent OperationInvokedEvent |
|
ModeSwitchEvent |
|
InitEvent |
|
IrvData |
|
ParameterData |
|
SenderReceiverInterface NvDataInterface ParameterInterface |
|
FlowData |
|
ModeSwitchInterface |
|
ModeDeclarationGroupElement |
|
ClientServerInterface |
|
TriggerInterface |
|
以编程方式配置 AUTOSAR 软件组件
此示例说明如何配置 AUTOSAR 软件组件。您可以使用 find 函数查找模型中存在的 AUTOSAR 软件组件。
配置 AUTOSAR 软件组件名称和类型
打开示例模型 autosar_swc_expfcns
并创建 autosar.api.getAUTOSARProperties
对象。
hModel = "autosar_swc_expfcns";
open_system(hModel);
arProps = autosar.api.getAUTOSARProperties(hModel);
查找 AUTOSAR 软件组件。
aswcPaths = find(arProps,[],"AtomicComponent","PathType","FullyQualified");
遍历组件并列出 Name
和 Kind
属性值。
for ii=1:length(aswcPaths) aswcPath = aswcPaths{ii}; swcName = get(arProps,aswcPath,"Name"); swcKind = get(arProps,aswcPath,"Kind"); fprintf("Component %s: Name %s, Kind %s\n",aswcPath,swcName,swcKind); end
Component /pkg/swc/ASWC: Name ASWC, Kind Application
修改 Name
和 Kind
属性值。
aswcName = 'mySwc'; aswcKind = 'SensorActuator'; set(arProps,aswcPaths{1},'Name',aswcName); aswcPaths = find(arProps,[],'AtomicComponent','PathType','FullyQualified'); set(arProps,aswcPaths{1},'Kind',aswcKind); swcName = get(arProps,aswcPaths{1},'Name'); swcKind = get(arProps,aswcPaths{1},'Kind'); fprintf('Component %s: Name %s, Kind %s\n',aswcPaths{1},swcName,swcKind);
Component /pkg/swc/mySwc: Name mySwc, Kind SensorActuator
指定 AUTOSAR 元素位置
AUTOSAR 属性函数通常要求您指定元素的名称和位置。AUTOSAR 元素在 AUTOSAR 包和对象层次结构中的位置可以使用完全限定路径唯一指定。完全限定路径可能包括包层次结构和对象层次结构中的元素位置,例如:
/pkgLevel1/pkgLevel2/pkgLevel3/grandParentName/parentName/childName
对于 addPackageableElement
以外的 AUTOSAR 属性函数,您可以指定不包括包层次结构的部分限定路径,例如:
grandParentName/parentName/childName
以下代码将示例模型 autosar_swc_expfcns
中路径 Interface1
下的发送方-接收方接口的 IsService
属性设置为 true
。在本例中,指定名称 Interface1
足以定位元素。
hModel = 'autosar_swc_expfcns'; openExample(hModel); arProps = autosar.api.getAUTOSARProperties(hModel); set(arProps,'Interface1','IsService',true);
以下是 AUTOSAR 字典中 S-R 接口视图中的结果显示画面。
如果您将发送方-接收方接口添加到组件包中,您将指定完全限定路径,例如:
hModel = 'autosar_swc_expfcns'; openExample(hModel); arProps = autosar.api.getAUTOSARProperties(hModel); addPackageableElement(arProps,'SenderReceiverInterface','/pkg/if','Interface3',... 'IsService',true);
相较于使用完全限定路径,使用部分限定路径的一个潜在优点是,通过查看 AUTOSAR 组件的 AUTOSAR 字典视图,可以更轻松地构造部分限定路径。一个潜在缺点是部分限定路径可能引用 AUTOSAR 配置中的多个元素。例如,路径 s/r
可能既指定发送方-接收方接口的数据元素,又指定组件的可运行实体。当发生冲突时,软件会显示错误并列出完全限定路径。
大多数 AUTOSAR 元素具有由多个部分组成的属性(复合属性)。例如,原子软件组件具有复合属性,如 ReceiverPorts
、SenderPorts
和 InternalBehavior
。对于具有可操作的复合属性的元素,如组件的属性 ReceiverPorts
,子元素会被命名并在父元素内唯一定义。要在复合属性中定位子元素,请使用父元素路径和子元素名称,而不使用属性名称。例如,如果父原子软件组件的限定路径是 /A/B/SWC
,并且子接收方端口名为 RPort1
,则接收方端口的位置是 /A/B/SWC/RPort1
。