
Simulink不仅可以开发汽车电子应用层算法,还可以直接在实车上验证算法。比如电脑上仿真无误的Simulink模型,拿到实车上,通过Can总线与车辆通讯,就可以快速验证Simulink模型。这是基于模型的设计中,非常重要的测试手段。这种测试手段可以完整保留Simulink实车控制过程中的所有信号数据,非常便于快速排查问题&验证迭代算法。
实现这种测试方法,需要两方面的准备:
- Simulink模型的仿真时间必须是实时的。
- Simulink要能够与车上Can总线通讯。
1,实时仿真Simulink模型
我在知乎上写过这个教程:
达仔:实时仿真Simulink的方法zhuanlan.zhihu.com
2,Simulink与车辆Can总线通讯
2.1,硬件准备
- 和车辆can总线通讯的工具。比如:国外的Vector(图1),国内周立功的can转usb设备。
- matlab需要安装一个支持包才能识别Vector设备,见图2。安装完成后,Vector的usb端接电脑,db9头一端接车辆Can总线。两边都接上后,matlab命令行会显示:Vector型号,连通的是第几路Can通道(Channel)。


2,2,Simulink模型的配置
Simulink工具箱:Vehicle Network Toolbox,是专门用于和车辆网络通讯的工具箱。使用它的模块来配置simulink模型的can总线收发。
2.2.1,CAN Configuration模块:配置Simulink模型的CAN总线设置,一个Simulink模型只需要一个CAN Configuration。
-
- 将该模块置于模型的顶层,确保Vector已经接好,然后双击该模块进行配置。
- 该模块的配置,是需要你指定Can通道。一旦Vector接好,在Device下拉选项框中选择接通的Can通道。

2.2.2,CAN Receive模块与CAN Unpack模块:接收Can总线,提取Can报文
-
- CAN Receive模块:从指定can通道接收can报文,一个Simulink模型只需要一个CAN Receive模块。
- CAN Unpack模块:根据dbc文件进行解析can报文。一个CAN Unpack模块只能解析一个报文,所以一般来说,Simulink模型需要用若干个CAN Unpack模块。
- CAN Receive模块与 CAN Unpack模块必须搭配使用。前者输出所有的can报文,后者解析can报文。


2.2.3,CAN Transmit模块与CAN Pack模块:打包Can报文,发送Can总线(和上一组模块正好对应)
-
- Can Transmit模块:往can总线上发送报文。对应于CAN Receive模块。
- Can Pack模块:把信号按照报文格式打包,对应于CAN Unpack模块。
- Can Transmit模块 与 Can Pack模块搭配使用,后者先打包can报文,前者将报文发往can总线。


3,整体布局展示,供参考

如图8所示,Can Configuration模块与Real-Time Sync模块置于模型顶层、接收can总线的CAN Receive模块与 CAN Unpack模块放在最左边的subsystem、发送can总线的Can Transmit模块与Can Pack模块放在最右边的subsystem。中间的Subsystem实现算法部分。
4,资源分享
第一次使用这些模块时,建议参照这个链接的Example:
https://ww2.mathworks.cn/help/vnt/examples/set-up-communication-between-host-and-target-models.htmlww2.mathworks.cn