首先,不仅是电池管理系统(BMS),很多汽车控制器的开发测试都在用Simulink开发。其次,做出这个决定的,是公司,而不是某个工程师;所以得从公司的角度来分析这个问题,而不是一个精通C代码的工程师的角度。
从公司的角度,为什么喜欢用Simulink开发控制器呢?可能有以下几个原因:
1、Simulink开发,不但降低了公司的招聘门槛,而且减小了人员流动对团队的不利影响。
毋庸置疑,Simulink的入门难度比C的入门难度低。现在这个年代,但凡汽车专业毕业(甚至可以扩大为理工科毕业),几乎人人都会Simulink,但熟悉C的人就没那么多了,公司在招人的时候,招熟悉Simulink的人比招熟悉C的人就简单太多了,因此招聘难度降低,而且给的工资也可以低一些(毕竟更多的Simulink人在卷)。
汽车行业跳槽是一个很正常的事情,如果用C开发控制器,一个工程师的离开,可能导致团队损失惨重,还得花较长时间来招聘另一个合适的代码工程师;如果用Simulink开发控制器,一个工程师的离开,相对来说对团队的影响比较小,有很多人可以顶他的位置。
说白了,Simulink工程师比较容易被替代,这事情对工程师来说不是好事,但对公司来说肯定不是什么坏事。
2、Simulink模块信息量大,模型可读性好,比C代码更便于管理和传承
Simulink是图形化建模,大多数情况下,Simulink模型比C代码的可读性更好,因此更便于管理和传承。想象一下,如果你们团队的前辈写了一堆控制器代码,如果代码编写不规范、也没做好注释,读这些代码绝对让你抓耳挠腮。Simulink模型也存在类似的问题,但是相对来说影响小一些,前辈的模型建得再差,只要他把子系统都独立封装,读起来是容易的。
而且,一个Simulink模块可能包含了几十、上百甚至更多行的代码,也就意味着Simulink能以更小的体积去传递更大的信息量。所以如果你既懂C代码,也懂Simulink,给你同样的算法对应的C程序和Simulink模型,读懂Simulink所花的时间大概率是比你读懂C程序要少。
基于可读性和信息量的两个优点,Simulink模型更便于管理和传承。
3、Simulink实现算法的速度比C代码更快
这个其实也是因为Simulink模块包含的信息量更大,你用几百行代码要实现的功能,可能1个或者几个Simulink模块就能实现了。当然也不排除有些功能,用代码实现比Simulink模块方便得多,但绝大多数情况下是反过来的。而且Simulink有S-Function,可以集成代码,也就是你不一定要全部都用Simulink模块建模,也可以使用你手写的代码,模块+代码的形式来实现你的完整算法。
当然最终烧写到控制器中的还是代码,这时候Simulink可以用Embeded Coder自动生成代码。
4、Simulink可以在多个环节加速控制器的开发和测试
除了第3点提到的算法实现速度更快,Simulink还有一些方式可以加速控制器的开发和测试。比如Simulink控制算法模型可以直接下载到快速控制原型设备(RCP)中,以原型控制器的形式去控制真实的被控对象,快速验证和迭代算法。
以上的3和4很关键,Simulink可以加速开发控制器,可以缩短控制器的开发周期,促进新车尽快上市,这对车企来说非常关键。尤其是这几年,各种新势力介入汽车行业,把整个汽车行业的节奏都带起来了,新车的开发周期被要求大大缩短了。
总的来说,Simulink是一个比C更简单、门槛更低的工具,用这样的工具,对个人而言未必是好事,但对公司而言不是什么坏事。