前面

都说生成的代码可读性很差,又有哪些优化方式呢?
还是咱们的老模型:只不过信号线咱都先给它取一个名字。
image.png

信号与参数配置

没有对信号进行优化前,在step函数里生成的代码长这样
image.png
leason01_Y.Out1、leason01_U.In1这都是simulink自己生成信号名字
image.png

对信号

提高可读性第一步,改名字!!
新建三个信号类型的变量z = Simulink.Signal,同理建立x、y。
image.png
然后在工作区双击其中一个信号量:
image.png
进行一些配置和检查:
image.png
重点在这里:code生成时,信号的数据类型,改为ExportedGlobal
image.png
同理对x、y也进行配置
然后再回到模型界面:选中z线,右键选择properities
image.png
勾选这个:
image.png
再回到模型,你就会发现,信号上多出来了一个符号,这个符号代表着信号与数据的绑定。
image.png
电机代码生成,你再看:原来那个奇奇怪怪的名字,被换成了咱们定义的东西:
image.png
同理对x、y进行操作:发现名字也跟着变化了。
image.png

还有一种操作,就是结构体类型的定义:回到工作区,对x、y的配置进行以下修改
image.png
生成代码:自己还可以定义一个结构体:
image.png
image.png

对参数

可以对模型中某个具体的模块参数进行替代,比如两个增益的数值,和开关的判断选择值。
首先,工作区先新建三个Simulink.Parameter
image.png
对其进行如下配置:数值改成你需要的值,但会关联到模型上。
image.png
同样不要忘记数据类型的更改:
image.png
同理对k1、k2、k3进行配置,然后回到模型:
image.png
把原来具体的数值,都更改关联到你工作区定义的数据参数。
生成代码:会发现原来具体的参数,被变量名字所取代了。
image.png
其实还有很多的数据存储类型,大家都可以自己尝试一下,看生成的效果如何。
(有的甚至可以把自己定义的一些数据放在新的源文件与头文件中)

函数名配置

配置模型函数原型

就是对标配的一些函数改改名字,比如初始化函数、step函数、terimnal函数。
现在matla版本修改的很快,很多教程上显示的配置都换了地方,所以大家也要注意。
我这里用的时2020b:打开你的模型,在下边找到code mappings-C,进图Functions标签栏
image.png
点击初始函数:这里的名字是我修改过的
image.png
然后会弹出一个窗口,在这里输入你想取的名字:
image.png
然后再进入step函数:这里也是我修改之后的名字
image.png
弹出窗口,1-改成自己想要的名字,2-勾选上,3-点击会出现下面的输入参数配置(也可以改名字和变量类型),5-验证一下
image.png
万事俱备,点击代码生成:你就会发现初始化函数、step函数,以及传递的参数都变成了咱们刚刚起的名字。
image.png

创建子系统

咱们搭建模型的时候经常会用到很多子系统,如果这些子系统也可以根据咱们的需要生成代码的时候,改变一下名字,那岂不是美滋滋。
选中模型,建立子系统:
image.png
建立完成,咱给取个名字My_Fun
image.png
然后右键子系统,进行配置
image.png
勾选原子子系统选项
image.png
对函数打包类型选择 可复用的函数,函数名选择 用户自定义,然后自己取一个名字。
image.png
完成,生成代码:就会发现代码中出现了一个子系统函数My_Fun,并且step函数直接调用了这个函数。
image.png

模型与数据分离

这个其实和上面有些重复,大家还记得对信号与参数的配置吗?
第一步,咱们就是先在工作区创建了一个新的数据类型
第二步,把模型里面的信号或者参数关联到工作区的数据类型上
image.png
其实这个过程就是模型与数据的隔离过程,关联之后,不需要去管实际模型中的信号与参数,直接对工作区数据类型进行修改就可以,这样既便于之后管理,又实现了隔离

总结

其实对生成代码的优化本质上是便于工程师能更好的理解生成的代码,也就是增加代码的可读性,如何增加可读性?
程序里最多的是什么?
当然是各种变量的名字,函数的名字。
所以优化的方式就是改名字。