说明
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. 附件提供了本文使用的例程,仅限个人学习使用,不得用于其他用途。