Simulink脚本自动创建Autosar Parameter Port及Mapping

  • Post author:
  • Post category:其他




前言

在之前一篇文章中,介绍了Autosar Parameter Port的使用方法,传送门:

Autosar SWC在Simulink中Parameter的使用

但是这种方法手动创建的话,会浪费大量时间。本文通过Simulink提供的Autosar API函数,实现Paramter Port端口的

自动创建

,并与Model Workspace中的Paramter进行

自动Mapping



通过M文件向Model Workspace添加Paramter



Model Workspace中Parameter的格式

在Model Workspace中新建一个parameter,导出m文件的格式如下:


Param = Simulink.Parameter;
Param.Value = 2;
Param.HasCoderInfo = false;
Param.Description = '';
Param.DataType = 'single';
Param.Min = [];
Param.Max = [];
Param.DocUnits = '';

相比于之前的sldd中的parameter,此处少了

StorageClass

,且

不支持

自定义的mypackage。



自动生成Model Workspace中Parameter

通过上一篇文章Excel自动生成Paramter的脚本,稍加修改(

取消StorageClass的写入

),就可以生成Model Workspace需要的Paramter的m文件。

通过m脚本生成的Paramter的m文件如下:

MyPortParam1 =Simulink.Parameter;
MyPortParam1.Value =[1800  1500  1200   900   600   300   100     0];
MyPortParam1.Description ='test parameter2';
MyPortParam1.DataType ='uint16';
MyPortParam1.Min =0;
MyPortParam1.Max =5000;
MyPortParam1.DocUnits ='mA';

MyPortParam3 =Simulink.Parameter;
MyPortParam3.Value =22;
MyPortParam3.Description ='test parameter3';
MyPortParam3.DataType ='uint8';
MyPortParam3.Min =0;
MyPortParam3.Max =255;
MyPortParam3.DocUnits ='



配置Model Workspace中的参数来自于对应的m文件

对应的脚本如下:

mdlWks = get_param(bdroot,'ModelWorkspace');%获取当前活动的模型
whos(mdlWks);%列出当前modelworkspace中的变量
mdlWks.DataSource = 'MATLAB File';%选择导入数据的文件类型
mdlWks.FileName = 'Model_parameter.m';%选择名称
reload(mdlWks)%重新加载工作区
whos(mdlWks);%列出当前modelworkspace中的变量

运行上述脚本后。就可以在Model Workspace中看到生成的Paramter参数



此处,对于

Argument属性

,没法用脚本进行勾选,找了很久都没有找到函数,目前只能手动全选后进行勾选,也不是很复杂。(或者有大佬知道如何自动勾选,欢迎评论区留言)



自动创建Autosar Parameter Port及Mapping到对应的Paramter

在设计Excel模板时,就考虑了Parameter Port,如下图



目前只关注上面几个属性,有了这些属性,就可以创建Paramter Port了。



M脚本创建Parameter Port及Mapping

在创建Port前,需要先删除之前模型中存在的Parameter Port,不然重名的会有冲突(也可以比较后再选择是否删除,本脚本没有这么操作)

hModel= bdroot;
arProps = autosar.api.getAUTOSARProperties(hModel)
slMap = autosar.api.getSimulinkMapping(hModel);

%删除port
arPortType = 'ParameterReceiverPort';
aswcPath = find(arProps,[],'AtomicComponent','PathType','FullyQualified');
pPorts=find(arProps,aswcPath{1},arPortType,'PathType','FullyQualified')
 for ii=1:length(pPorts)
     delete(arProps,pPorts{ii})
 end
%删除Interface
ifPaths = find(arProps,[],'ParameterInterface','PathType','FullyQualified')
for ii=1:length(ifPaths)
    delete(arProps,ifPaths{ii})
end

通过Excel读取对应的属性,并创建端口及Mapping

用到的主要函数如下:

addPackageableElement(arProps,'ParameterInterface','/Interface',ParameterPort,...
    'IsService',false);%创建Interface
    add(arProps,ParameterPort,'DataElements',DataElement);%创建dataElement
    add(arProps,aswcPath{1},'ParameterReceiverPorts',ParameterPort,'Interface',ParameterPort);%创建port
    %mapping parameter
    mapParameter(slMap,ParameterName,'PortParameter','Port',ParameterPort,'DataElement',DataElement,...
    'SwCalibrationAccess',SwCalibrationAccess)



实现的效果



自动创建的Port



自动Mapping端口:



总结

目前只针对于Parameter Port进行了自动化创建及配置,其实对应S/R接口,也是类似的操作,理清思路,找到对应的API函数即可。

若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~

你的鼓励是对小弟的最大支持~~~

建了一个WX公众号,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~



版权声明:本文为weixin_49000276原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。