• 211查看
  • 0回复

[应用层软件] Simulink自动生成代码笔记

[复制链接]


该用户从未签到

发表于 15-4-2024 20:01:09 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


在车载控制器的软件开发中,simulink的身影几乎随处可见,主要是在控制算法和控制逻辑的实现。平时看同事点点点就生成代码了,看起来很简单,但是实际操作起来确各种磕磕绊绊。

下面记录了一下步骤作为现阶段的学习笔记吧。
一、建立任务  

Matlab的版本为R2014。下图是一个简单的模型,其中Signal为模型输入接口变量,Act为模型输出接口变量,每个Task中的内容均一样。

[img=540.0599975585938,312.010009765625]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsYiaALbDJDgpj48Q6PoTnKbae59ej0UToAO92JMX7P6qUFic13dV4BJsA/640?wx_fmt=png[/img]

[img=390.0099792480469,155.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsriaPgkq77HXTSZDTREfeNLSRSXBicsLZDghrvIc3XYy5E06o4OVyu7JQ/640?wx_fmt=png[/img]

接口配置需要注意其数据类型和Storage Class,两者影响生成代码中的变量的声明。在Storage type qualifier中可以加入其他的限定符。

这里将Signal全部设定为Double类型的Imported Entern类型,将Act全部设定为Exported Global类型。

[img=539.97998046875,492.010009765625]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsyQAHqxPX31miaTI3Uc3dUCPMhqd1mQeq5yeWiaA9GRibfiagfVFibo2vHGQ/640?wx_fmt=png[/img]

二、环境配置  

在Simlink模型窗口中选择Simulation | Modele Configuration Parameters命令,弹出如下图所示的参数设置对话框。在左边的目录树中我们关心的项有Solver,Hardware Implementation,Code Generation.

1. Sover 配置

Type选项需要配置成定步长。步长时间和任务调度周期一致。仿真终止时间设置为inf。其他参数为默认。

[img=540.010009765625,256.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsvibiaJia4c3kBSl0PsSN1AWznfXrgv6b2QjsDOo164wBic4ZuK9ec0rJHQ/640?wx_fmt=png[/img]

2. Hardware配置
根据自己的开发环境,选择相应的目标板。
[img=540.0,288.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsjJUYxIrVekfB8R7O9hkCXXjwadjKADDPLG295iaaUhCDibOF9K6feyKw/640?wx_fmt=png[/img]

3. Code Generation配置

第一页勾选Generate code only,其它为默认。

在Reprot中勾选生成报告和自动打开报告。
将Interface中data exchange的勾去掉,并将Interface设置为None。配置完毕后点Apply和OK。
[img=540.02001953125,263.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsIOF5ic8ZM15gWLSIv0FqaJMyJoBnxOCq7ypeiaoemcGw9poJMG7GW3Eg/640?wx_fmt=png[/img]

[img=539.989990234375,334.0099792480469]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsLGlFA0JLwFzsS7nT3qhm22pcqBjtCjDjnEBf0zIrLHzk3c08ZC3zKw/640?wx_fmt=png[/img]

三、代码生成  

在模型界面Bulid Modle即可自动生成代码。由于我们勾选了报告生成,代码生成完毕后会自动弹出报告。   
Simulink自动生成代码笔记w1.jpg

其中ModelFiles和DataFiles中的5个文件就是和我们模型结构紧密相关的文件。其它的也是运行必须的Mabltab数据类型声明文件。一并拷贝到我们的工程环境编译即可。
四、封装成函数及优先级设置  

打开Demo_1.h和Demo_1_Pricat.h可以看到我们定义的输出变量和出入变量。
[img=493.0099792480469,117.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsKEzGZNgYOyoFTicJP4RHtf1ibeDsUIfbXFeQ3wHGk5ibxY5bu8WaDxWSg/640?wx_fmt=png[/img]

[img=515.010009765625,84.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsu3QvzWnX4yWv9QsEicbRJ64dgBpHFdV04osPqv1QYbzOaXy66t0BRxQ/640?wx_fmt=png[/img]

生成代码时除了我们的任务函数外,Matlab自动生成了初始化的和终止函数。   

[img=437.010009765625,86.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOs8J7z7uCwVF1JIb074FSJWquBm3mlgf2RCFM1UnibM4WEjs8sXrK3rFA/640?wx_fmt=png[/img]

我们在模型中我们定义了三个Task,但如果不另外配置,生成代码时默认只生成一个函数。如果需要打包到独立的函数和文件中,需要做如下配置。
在Task模块上点右键,选择Block Parameters,勾选treat as acomic unit.
[img=469.0099792480469,442.010009765625]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOsZJ0EYMusMPSkFP9WNQoxosPYTdh2kGP2kY2bm6WiaH1iaWWVDEJyOYAA/640?wx_fmt=png[/img]
   

Simulink自动生成代码笔记w2.jpg

在Code Generation一栏,设置任务的重入属性,函数名,文件名信息。
右键选择Block Properties,在Priority一栏中设置Task优先级ID,该值越小,则任务的执行次序越靠前。   
[img=540.030029296875,463.989990234375]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOshOUuqPAYUBEN7tYzdibn78AQh5ZWTVUjpFNQxf4ClsWfN3PS57KfdaQ/640?wx_fmt=png[/img]

这里我将Task1~3的优先级分别设置为2,1,3。
以下是自动生成代码后的任务顺序。生成了Task的.c和.h文件。任务执行顺序也按照优先级顺序执行。   
[img=540.0,413.0]https://mmbiz.qpic.cn/mmbiz_png/CvyFYUrD5pcMAAxxwdpbP9McDPm8sWOspbT2wfmafFVHVLicgLQ9ueYOIlBLjLQDEdc396BOVTNbGIUibUHwSr4A/640?wx_fmt=png[/img]

-end-

分享不易,恳请点个【👍】和【在看】

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 08:02 , Processed in 0.295276 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.