前面

一直在看MBD,但却连matlab生成代码的过程都不了解,属实有点舍本逐末了。

一个模型

首先,先搭建一个简单的示例出来:
image.png
输入:正弦函数
经过:两路的增益,>0增益1.5,<0增益2,经过选择开关
输出:示波器观察
image.png
大家可以先想象一下,如果你是matlab你会怎么生成这个代码?

代码生成之前的工作

Ctrl+E进入设置界面,系统目标文件选择ert.tlc,语言选择C语言。
image.png
然后进入代码生成报告的选择里,选择生成报告、以及完成自动打开
image.png
对了还有步长设置,尽量直接选择固定步长,因为真要下载到MCU里,MCU是靠时钟工作的,时钟就是计数器,属于离散的,频率也是固定的。
image.png
然后还要修改刚刚的模型,把输入的正弦波,输出到示波器去掉,在生成的代码里一般都要以端口的形式存在。
image.png
完事具备,开始生成!!!!

生成代码

点它
image.png
界面会变成这样子,左边是生成并自动弹出的报告,中间是模型,右边是自动打开的代码窗口。
image.png
生成成功!!
然后咱们打开报告窗口:这里就是生成的代码。
image.png
具体的生成代码的内容以及文件结构后面再讲,这次重点是搞清楚这个代码是怎么生成的?难道真的只是把模型翻译一下,就变成C语言了?

代码生成流程

看图:图片来源《Simulink仿真及代码生成技术入门到精通》(需要PDF的同学可以私聊)
image.png
流程如下:
1、通过rtw命令将模型编译成rtw文件
2、利用TLC目标语言编译器将rtw文件转化成一系列的源文件
3、通过makefile编译链接源文件,生成可执行文件
4、下载到目标硬件上
咱们重点关注的是前两步。
其实如果往细了分析,还能分更多:
image.png
刚开始也没必要这么细,了解就可以,接下来重点关注两个东西:rtw文件、TLC目标语言编译器。

rtw文件

先不将它是什么,下能生成它,找到它,看到它,再去分析:

如何生成?

其实只要是生成代码,都会存在,只不过默认被清除,通过下面的选项把它保存下来:
image.png
再次生成文件,进入生成代码目录下,找到rtw文件:
image.png

文件里有什么?

rtw文件中包含了输入文件和编译过程的中间产物,记录了模型创建信息和编译信息、名字与版本号、配置参数集、输入输出、参数等所有信息。
所以文件贼长,不方便复制进来,大家可以自己尝试生成看一下。
就像一个大的结构体:
image.png
比如说:这一行NumBlockTypeCounts表示你这个模型用了几种模块。
image.png
比如说:每隔模块的名字以及ID号
image.png
比如:生成的文件树系统
image.png
现在有了rtw文件,下一步就是使用TLC语言,把rtw文件转化成我们想要的目标源文件。

TLC语言

Target Language Compiler目标语言编译器
是一种为了转化目标语言而存在的解释性语言,其存在的作用就是把模型编译出来的rtw文件转换位目标代码(C/C++)。
还是先教大家怎么用:

如何调取?

一样Ctrl+e,进入配置界面:勾选上TLC-debug
image.png
这个时候你再点击,生成代码的按钮就会发现,怎么没有代码生成?反而在命令行出现了这个:
image.png
这不就是debug嘛,没错就是debug,现在就由你来控制代码生成过程了。

有哪些简单命令?

其实严格来说也不是控制过程,而是可以借用TLC对rtw文件进行访问,编辑、修改。
比如说,我让它打印出来整个模型:print CompiledModel
会出现一个特变长的打印结果:
image.png
好像不太明显,咱们可以打印一个小的参数:print CompiledModel.ASTNodeDefaults
image.png
print也可以简化成p:
image.png

不仅可以访问,还可以修改:assign CompiledModel.ASTNodeDefaults.IsNonTerminal = 1
image.png
assign可以简化为a

………………
以上只是最简单的一些命令,很浅,更细节的东西还是需要大家自己下去摸索。

最后

大概介绍了代码生成流程,网上也有很多好的资源:
视频:
【【吐血整理】Simulink入门建模仿真资料——MATLAB Simulink仿真及代码生成技术【适合零基础】】 https://www.bilibili.com/video/BV19G4y1t75Z/?p=35&share_source=copy_web&vd_source=5e4af9f1fbbc0fe4829af5e5129fe2bd
书籍:
《Simulink仿真及代码生成技术入门到精通》
后面准备分析一下生成代码内容以及代码文件的框架。