前面
一直在看MBD,但却连matlab生成代码的过程都不了解,属实有点舍本逐末了。
一个模型
首先,先搭建一个简单的示例出来:
输入:正弦函数
经过:两路的增益,>0增益1.5,<0增益2,经过选择开关
输出:示波器观察
大家可以先想象一下,如果你是matlab你会怎么生成这个代码?
代码生成之前的工作
Ctrl+E进入设置界面,系统目标文件选择ert.tlc,语言选择C语言。
然后进入代码生成报告的选择里,选择生成报告、以及完成自动打开
对了还有步长设置,尽量直接选择固定步长,因为真要下载到MCU里,MCU是靠时钟工作的,时钟就是计数器,属于离散的,频率也是固定的。
然后还要修改刚刚的模型,把输入的正弦波,输出到示波器去掉,在生成的代码里一般都要以端口的形式存在。
完事具备,开始生成!!!!
生成代码
点它
界面会变成这样子,左边是生成并自动弹出的报告,中间是模型,右边是自动打开的代码窗口。
生成成功!!
然后咱们打开报告窗口:这里就是生成的代码。
具体的生成代码的内容以及文件结构后面再讲,这次重点是搞清楚这个代码是怎么生成的?难道真的只是把模型翻译一下,就变成C语言了?
代码生成流程
看图:图片来源《Simulink仿真及代码生成技术入门到精通》(需要PDF的同学可以私聊)
流程如下:
1、通过rtw命令将模型编译成rtw文件
2、利用TLC目标语言编译器将rtw文件转化成一系列的源文件
3、通过makefile编译链接源文件,生成可执行文件
4、下载到目标硬件上
咱们重点关注的是前两步。
其实如果往细了分析,还能分更多:
刚开始也没必要这么细,了解就可以,接下来重点关注两个东西:rtw文件、TLC目标语言编译器。
rtw文件
如何生成?
其实只要是生成代码,都会存在,只不过默认被清除,通过下面的选项把它保存下来:
再次生成文件,进入生成代码目录下,找到rtw文件:
文件里有什么?
rtw文件中包含了输入文件和编译过程的中间产物,记录了模型创建信息和编译信息、名字与版本号、配置参数集、输入输出、参数等所有信息。
所以文件贼长,不方便复制进来,大家可以自己尝试生成看一下。
就像一个大的结构体:
比如说:这一行NumBlockTypeCounts表示你这个模型用了几种模块。
比如说:每隔模块的名字以及ID号
比如:生成的文件树系统
现在有了rtw文件,下一步就是使用TLC语言,把rtw文件转化成我们想要的目标源文件。
TLC语言
Target Language Compiler目标语言编译器
是一种为了转化目标语言而存在的解释性语言,其存在的作用就是把模型编译出来的rtw文件转换位目标代码(C/C++)。
还是先教大家怎么用:
如何调取?
一样Ctrl+e,进入配置界面:勾选上TLC-debug
这个时候你再点击,生成代码的按钮就会发现,怎么没有代码生成?反而在命令行出现了这个:
这不就是debug嘛,没错就是debug,现在就由你来控制代码生成过程了。
有哪些简单命令?
其实严格来说也不是控制过程,而是可以借用TLC对rtw文件进行访问,编辑、修改。
比如说,我让它打印出来整个模型:print CompiledModel
会出现一个特变长的打印结果:
好像不太明显,咱们可以打印一个小的参数:print CompiledModel.ASTNodeDefaults
print也可以简化成p:
不仅可以访问,还可以修改:assign CompiledModel.ASTNodeDefaults.IsNonTerminal = 1
assign可以简化为a
………………
以上只是最简单的一些命令,很浅,更细节的东西还是需要大家自己下去摸索。
最后
大概介绍了代码生成流程,网上也有很多好的资源:
视频:
【【吐血整理】Simulink入门建模仿真资料——MATLAB Simulink仿真及代码生成技术【适合零基础】】 https://www.bilibili.com/video/BV19G4y1t75Z/?p=35&share_source=copy_web&vd_source=5e4af9f1fbbc0fe4829af5e5129fe2bd
书籍:
《Simulink仿真及代码生成技术入门到精通》
后面准备分析一下生成代码内容以及代码文件的框架。