前言
MBD学习和实践也有一年了,逐渐领悟到了一些MBD的思想以及其与传统“粗放型”、“随心所欲型”的手写代码开发方式的不同,特此总结一下,不断更新中。
MBD实践过程中的问题
由于现在在做的项目是多年前开始通过手写代码的形式一步步形成的(Simulink模型只有矢量控制部分),因此在做MBD时就自然而然地以能够自动生成和现有代码相同的代码为目标。在实际过程中发现,就算是一个稍复杂些的子模型(不含Model reference)想逐行相同也几乎是不可能的,后来只能把目标转为实现相同代码功能。原因主要有:
代码生成
自动代码生成都是以Simulink模型中的子模块为基本单元来生成的,模块生成代码形式固定,已经按照最优形式生成,不可随意更改,而手写代码并不都是最优的。例如手写y=(a+b)*c/d,模型是用Add、Product、Divide组成的,生成代码就会有一个中间临时变量,一步步计算,但其实MCU运行情况是完全相同的,即使有时候手写代码效率相同甚至更高,但两者并不会有质的区别,因此不需太过在意。
有返回值的函数
Atomic subsystem在封装成函数时,无法产生有返回值的函数,返回值只能以指针形式被函数调用,但是二者效果相同,也不需太过在意。生成有返回值的函数的方法有两种,一是整个Model的入口函数,在设置中的Interface可以进行配置;二是手写tlc文件,tlc文件可以根据用户的需求任意生成想要的函数形式,自由度很大,但是