MATLAB AUTOSAR中增加并配置Entry Point Function(Step Function)的方法

说明

        MATLAB对AUTOSAR提供了广泛的支持。本文仅记录一个曾经困扰作者多日的问题及其解决方法:在Simulink模型中新增不同运行周期的输入模块,并和Runnable做映射。作者在全网和官方文档中都没找到相关教程,希望这篇博文对读者有少许帮助。

        本文使用的版本为MATLAB R2020a,并在官方例程autosar_swc.slx上做演示。

        本文假设读者对MATLAB/Simulink和AUTOSAR有一定了解,并有在MATLAB中配置AUTOSAR并生成代码的基本经验。

        作者也为AUTOSAR的入门菜鸟,文中如有谬误还请不吝赐教。

具体步骤

步骤1:打开并复制例程

        打开MATLAB,在Command Window中输入命令:

openExample('autosar_swc')

        以打开官方例程autosar_swc.slx。同时,Current Folder窗口的路径自动跳转至类似下图位置。

        为避免修改官方例程,可将该模型复制粘贴到别的目录下(务必先关闭当前的autosar_swc.slx),再将工作路径(Current Folder)切换至新路径下。打开新目录下的模型autosar_swc.slx进行编辑。

步骤2:打开Code Mappings编辑器

        在打开的模型上方工具栏,切换至APP页,找到AUTOSAR Component Designer,单击打开。

        如果是首次打开AUTOSAR Component Designer,会弹出AUTOSAR Component Quick Start对话框。一直点击右下方的Next直至Finish,模型下方就会打开Code Mappings - AUTOSAR SW Component。单击即可打开Code Mappings编辑器。

        可见,官方例程中,共生成了3个Entry Point Function:第一个是初始化函数Initialize Function,下面两个是Step Function,在RTE中分别按1秒和2秒的周期循环巡行。

步骤3:增加输入输出

        为方便演示,直接复制模型的2秒周期的相关模块,并在SS1子系统中增加一组输入输出(两者之间连接一个简单的Gain模块),按下图所示重新命名各模块。

从Code Mappings Editor的Functions页可以看到,增加新的输入(In3_3s)并没有自动生成对应的Entry Point Function。这个问题困扰了作者好几天,官方文档对此没有做具体介绍,网上也找不到具体教程。

        增加新的周期运行的Entry Point Function的方法如下。

步骤4:修改属性

4.1 修改输入模块采样时间

        首先,修改输入模块的采样时间。双击In3_3s模块,切换到Signal Attributes页,修改Sample time为3,点击OK保存设置。

4.2 增加采样时间属性

        切换至MODELING页面,点击Model Settings(或按下快捷键Ctrl+E),打开Configuration Prarmters对话框。左侧选择Solver,展开Solver details,修改Sample time properties,增加一组3秒的数组[3,0,2](各数组用英文分号“;”隔开)。[3,0,2]分别代表运行周期(单位为秒)、偏移量、优先级。点击OK保存配置。

        保存模型,点击Code Mappings Editor中的Update Code Mappings按钮,Functions页面就会自动生成一个新的Steps Functions,其运行周期为3秒。

步骤5:配置AUTOSAR属性

5.1 配置输入的AUTOSAR属性

        点击Code Mappings Editor左上方的Configure AUTOSAR Dictionary按钮,打开AUTOSAR配置字典。

        左侧选择S-R Interfaces,Input If,DataElements。

        点击上方的“+”按钮,新增一个Data Element,双击Name栏,修改为In3。

        Code Mappings Editor切换至Inports页,配置新增的In3_3s模块的端口和元素。

        点击Port栏中的Select,在下拉框中选择端口ReceivePort。

        点击Element栏中的Select,在下拉框中选择新增的元素In3。

5.2 配置输出的AUTOSAR属性

        用类似5.1的步骤配置Out3模块的AUTOSAR属性。这里不再赘述。

5.3 配置Entry Point Function的AUTOSAR属性

        Simulink中,每个Entry Point Function对应一个AUTOSAR的可运行变量Runnalbe。因此,需要为新增的Entry Point Function(即运行周期为3秒的Step Function)配置一个新的Runnable。

        打开AUTOSAR字典,左侧选择Runnables,点击上方的“+”号,新增一个Runnable,命名为Runnable_3s(symbol命名和Name一样就行)。

        为新增的Runnable配置一个触发事件:在下方的Events中,点击Add Event按钮新增一个事件,Event Type选择TimingEvent(计时器触发事件),Event Name设为Event_3s。点击Apply保存配置。

        为Entry Point Function配置对应的Runnable:Code Mappings Editor切换至Functions页,选择Step Function [Sample Time:3s],点击Select下拉菜单,选择新增的Runnable_3s。保存模型。

5.4 配置IRV

        由于模型的各输入运行周期不同,因此需要RateTransition模块转换运行速率。Simulink中,每个RateTransition模块对应一个AUTOSAR的内部可运行变量Inter-Runnable Variable(IRV)。因此需要新增一个IRV,与新增的RateTransition3模块做映射。

        打开AUTOSAR字典,选择IRV,点击上方的“+”号,新增一个IRV并命名为IRV3。

        Code Mappings Editor切换至Data Transfers页,为RateTransition3模块选择新增的IRV3。

5.5 更新并检验模型配置

        保存模型,点击Update Code Mappings按钮,以更新配置。

        点击Validate Code Mappings按钮,以验证模型配置。如果配置无误,则弹出的AUTOSAR Validation提示框会显示Validation succeeded。

步骤6:生成代码

        点击AUTOSAR页的Generate Code按钮,或按下快捷键Ctrl+B,将模型生成符合AUTOSAR的C/C++代码。打开右侧的Code页面(或在生成的工程autosar_swc_autosar_rtw中打开autosar_swc.c),选择autosar_swc.c文件,可以看到生成的C文件中多了一个函数Runnable_3s(void)。该函数即对应模型中新增的周期为3秒的输入模块,以及相应的速率转换模块等。

Tips

        1. 只有同时修改了4.1和和4.2的配置,AUTOSAR Component Designer才会自动生成新的Step function。这一点很关键。

        2. 若是自有模型,想要生成符合AUTOSAR标准的代码,务必将System target file设置成autosar.tlc或autosar_adaptive.tlc。上述官方例程已默认设置成autosar.tlc了,所以无需修改。

        3. 附件提供了本文使用的例程,仅限个人学习使用,不得用于其他用途。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值