小白在工作中需要将Simulink model转换成C++代码,于是参考了网上的资料记录一下这个过程。
工具
在Matlab中可以生成代码的工具有:
- Matlab Coder
- Simulink Coder
- Embedded Coder
Matlab Coder一般是用来将脚本文件生成c代码;Simulink Coder是自动从Simulink/Stateflow模型生成c代码,且不能用于嵌入式系统;Embedded Coder可自动生成可应用于嵌入式系统的c代码,而且支持自定义代码风格以及代码优化。

此处使用Embedded Coder生成cpp代码,需要先安装Embedded Coder插件。
生成代码的步骤
- 在生成代码之前需要进行一些设置,在Simulink窗口的MODELING界面下点击Model Settings打开配置界面

在Solver界面,将求解器设置为定步长离散求解器(如果模型里包含连续的状态的话选离散求解器会生成失败),

在Code Generation界面,将目标文件设为ert.tlc,

也可以勾选Code Generation/Report界面下的Create code generation report和Open report automatically,这样可以查看生成的报告。

- 在Simulink APPS中找到并点击Embedded Coder;

- 选择Embedded C++ Code下拉菜单中的Select System Target File,然后在弹出的界面选择ert.tlc。


- 点击Embedded C++ Code旁边的Quick Start,按照提示一步步的执行,如果都没有报错,即可成功生成代码,如果有报错就按照错误提示信息进行修改即可。
可能出现的问题
- 代数环问题,使用ashow显示代数环的位置,在反馈回路添加unit delay即可。
- Subsystem不是atomic,在Block Parameters中设置即可。
参考链接
链接1: 使用ashow命令寻找模型中的代数环
链接2: 什么是代数环
本文介绍了如何使用Embedded Coder将Simulink模型转换为C++代码。首先,需要安装Embedded Coder插件,并在Simulink的Model Settings中配置模型,如设置求解器为定步长离散求解器,目标文件为ert.tlc。然后,通过Embedded Coder App选择System Target File为ert.tlc,并按照提示生成代码。可能遇到的问题包括代数环问题和Subsystem非atomic,解决方法是添加unit delay和调整Block Parameters设置。

2万+


被折叠的 条评论
为什么被折叠?



