Skip to content

Simulink CAN 通信

本章节介绍如何使用 MATLAB、Simulink 及 Vehicle Network Toolbox 与 CAN/CAN FD 设备建立 CAN 总线通信,包括软件环境配置、设备识别、Simulink 模型搭建以及报文发送与接收等内容。

概述

MATLAB 是用于算法开发、数据分析和自动化测试的工程计算平台,Simulink 是 MATLAB 的图形化建模与仿真环境。借助 Vehicle Network Toolbox,用户可以在 MATLAB 或 Simulink 中访问 CAN/CAN FD 网络,实现报文收发、总线监控、数据记录以及 DBC 信号解析等功能;如需实时仿真或硬件在环(HIL)测试,还需要结合对应的实时仿真平台和项目硬件环境。

Vehicle Network Toolbox 支持多种主流 CAN 接口设备,常见包括 PEAK-System PCAN、Vector 和 Kvaser 等。不同 MATLAB 版本的硬件支持范围可能不同,实际项目中应以 MathWorks 当前支持列表和本机识别结果为准。

核心功能:

  • 支持 CAN 2.0 与 CAN FD 通信(取决于硬件、驱动和 MATLAB 版本)
  • 支持 MATLAB 脚本和 Simulink 模型两种使用方式
  • 支持 DBC 文件导入、信号解析和报文打包/解包
  • 支持多通道 CAN 网络通信
  • 支持报文记录、分析和回放
  • 可配合实时仿真平台用于 HIL 或自动化测试场景

前置条件

在使用 MATLAB / Simulink 进行 CAN 通信前,请确保已具备以下条件:

硬件环境

  • 已连接 CAN 或 CAN FD 接口设备
  • CAN 总线连接正常
  • 总线终端电阻配置正确

驱动环境

根据所使用设备安装对应厂商驱动,确认设备已被操作系统正常识别。

MATLAB 安装

前往 MathWorks 官网下载并安装 MATLAB。

安装过程中建议勾选以下组件:

组件用途
MATLAB编程与数据分析环境
Simulink图形化建模与仿真
Vehicle Network ToolboxCAN/CAN FD 通信
Simulink Coder代码生成(可选)
Embedded Coder嵌入式开发(可选)

安装完成后,可在 MATLAB 命令窗口执行:

matlab
ver

列表中应当存在 Vehicle Network Toolbox 、Simulink

本节以 Classic CAN 收发模型为例,演示在 Simulink 中完成 CAN Configuration、发送链路和接收链路的基本配置。MathWorks 官方搭建流程可参考:

https://ww2.mathworks.cn/help/vnt/ug/build-can-communication-simulink-models.html

创建Simulink工程

在 MATLAB® 命令提示符下输入以下内容:

simulink

在 Simulink 起始页对话框中,点击空白模型,然后点击创建模型。将打开一个空的“编辑器”窗口。

alt text

在“编辑器”工具条的仿真选项卡上,点击保存 > 另存为为新模型指定名称。

模型结构

模型整体由两部分组成:

  • 发送链路:Constant -> CAN Pack -> CAN Transmit
  • 接收链路:CAN Receive -> Function-Call Subsystem -> CAN Unpack -> Scope

配置完成后的模型结构如下:

Simulink CAN 收发模型整体结构

发送链路配置

  1. 添加 CAN Configuration 模块,选择对应设备、波特率和模式。

CAN Configuration 模块配置

  1. 添加 Constant 模块作为发送数据源,并配置要发送的字节数据和类型。

Constant 模块数据配置

Constant 模块输出类型配置

  1. 添加 CAN Pack 模块,配置报文 ID、帧类型、DLC 和输入信号映射。

CAN Pack 模块配置

  1. 添加 CAN Transmit 模块,选择与 CAN Configuration 一致的设备和通道。

CAN Transmit 模块配置

接收链路配置

  1. 添加 CAN Receive 模块,配置接收通道、采样方式和过滤条件。

CAN Receive 模块配置

  1. 添加 Function-Call Subsystem,用于在收到报文后触发解析逻辑。

Function-Call Subsystem 配置

  1. 在子系统中添加 CAN Unpack 模块,配置要解析的报文 ID 和输出信号。

CAN Unpack 模块配置

模型设置与运行

打开模型设置,确认求解器、步长和运行时间满足测试需求。CAN 通信模型通常建议使用固定步长离散求解器。

Simulink 模型求解器配置

配置完成后,打开 Scope,点击 Run 运行模型,即可观察接收链路解析后的数据变化。

Scope 运行结果

MATLAB 脚本方式

除 Simulink 模型外,也可以在 MATLAB 脚本中创建 CAN 通道并收发报文。典型流程如下:

matlab
% 先查看本机可用通道,再按实际识别结果填写 vendor、device 和 channel
canChannelList

ch = canChannel("VendorName", "DeviceName", 1);
configBusSpeed(ch, 500000);
start(ch);

msg = canMessage(100, false, 8);
msg.Data = uint8([1 2 3 4 5 6 7 8]);
transmit(ch, msg);

rx = receive(ch, 1);
stop(ch);

CAN FD 脚本应使用 CAN FD 对应的通道和报文接口,并分别配置仲裁域和数据域波特率。具体函数名称和参数以当前 MATLAB 版本文档为准。

雪球电子 · 专注通讯