参考链接:
https://ww2.mathworks.cn/help/vnt/ug/build-can-communication-simulink-models.html#brzf0ew-4

一、Simulink模型简述

在该模型中使用MathWorks虚拟CAN通道传输和接收报文。

  1. 报文传输部分:使用CAN Configuration模块配置CAN通道,Constant模块CAN Pack模块提供数据,并使用CAN Transmit模块将数据发送到虚拟CAN通道。
  2. 报文接收部分:使用CAN Configuration模块配置CAN通道,CAN Receive模块接收报文,同时使用包含CAN Unpack模块的Function-Call Subsystem模块从CAN Receive模块获取数据,并使用CAN Unpack模块的参数来解包报文数据,最后通过Scope模块显示接收到的数据。

二、构建模型的报文传输部分

Step 1. 创建新模型

1.要启动Simulink并创建新模型,请在MATLAB命令提示符下输入以下内容:

simulink

在Simulink Start Page对话框中,点击Blank Model,然后点击Create Model,将打开一个空的Editor窗口。
2.在Editor工具条的Simulation选项卡上,点击Save > Save As为新模型指定名称。

Step 2. 打开模型库

1.在模型Editor工具条的Simulation选项卡中,点击Library Browser

2.Simulink Library Browser将打开。其左窗格包含按字母顺序显示的可用模块库的树。展开Vehicle Network Toolbox节点,然后点击CAN Communication

Step 3. 将Vehicle Network Toolbox模块拖到模型中

要将模块放入模型中,请点击库中的一个模块并将其拖到编辑器中。对于此示例,模型中需要针对以下每个模块创建一个实例:

  • CAN Configuration
    在这里插入图片描述

  • CAN Pack
    在这里插入图片描述

  • CAN Transmit
    在这里插入图片描述

Step 4. 拖放其他模块以完成模型

此示例使用Constant(Simulink)模块作为数据源。从Simulink > Commonly Used Blocks库中,向模型添加一个Constant(Simulink)模块
在这里插入图片描述

Step 5. 连接模块

在Constant模块和CAN Pack模块输入之间建立连接。将指针移至Constant模块的输出端口附近时,指针将变为十字准线。点击Constant模块输出端口并按住鼠标按键,将指针拖动到CAN Pack模块的输入端口。然后松开按键。
以相同的方式,在CAN Pack模块的输出端口与CAN Transmit模块的输入端口之间建立连接。
CAN Configuration模块不连接到任何其他模块,此模块配置其CAN通道以用于通信。

Step 6. 指定模块参数值

通过双击模型中的每个模块为模块设置参数。
1.配置CAN Configuration模块。双击CAN Configuration模块以打开其参数对话框。验证或设置以下参数:

在这里插入图片描述

2.配置CAN Pack模块。双击CAN Pack模块以打开其参数对话框。验证或设置以下参数:
在这里插入图片描述

3.配置CAN Transmit模块。双击CAN Transmit模块以打开其参数对话框。验证或设置以下参数:
在这里插入图片描述

4.配置Constant模块。双击Constant模块以打开其参数对话框。
Main选项卡上,进行如下设置:
在这里插入图片描述

Signal Attributes选项卡上,进行如下设置:
在这里插入图片描述

经过配置的模型如下图所示:
在这里插入图片描述

三、构建模型的报文接收部分

Step 7. 将Vehicle Network Toolbox模块拖到模型中

对于示例的这一部分,首先为Vehicle Network Toolbox CAN Communication库中的以下每个模块创建一个实例:

  • CAN Configuration
    在这里插入图片描述

  • CAN Receive
    在这里插入图片描述

Step 8. 拖放其他模块以完成模型

使用SimulinkPorts & Subsystems库中的Function-Call Subsystem模块构建CAN Message pack子系统
在这里插入图片描述

双击Function-Call Subsystem模块以打开子系统编辑器。双击In1端口标签,将其重命名为CAN Msg。双击Out1端口标签,将其重命名为Data。将CAN Unpack模块从Vehicle Network Toolbox库中拖放到此子系统中。如果将该模块放置在输入信号线和输出信号线之间,它们将自动连接。
此时Function-Call Subsystem模块的内部应如下图所示。

在这里插入图片描述

CAN Unpack放在Function-Call Subsystem内的原因是为了捕获所有可能的报文。

Step 9. 连接模块

将Function-Call Subsystem模块重命名为CAN Unpack Subsystem。将CAN Receive模块的CAN Msg输出端口连接到CAN Unpack Subsyste模块的In1输入端口。将CAN Receive模块的f()输出端口连接到CAN Unpack Subsystem模块的function()输入端口。要直观地显示仿真结果,请将Scope(Simulink)模块从Simulink模块库拖放到您的模型中。将CAN Unpack Subsystem模块的CAN Msg输出端口连接到Scope模块的输入端口。CAN Configuration模块不连接到任何其他模块。该模块用于配置CAN Receive模块所使用的CAN通道以接收CAN报文。

Step 10. 指定模块参数值

1.配置CAN Configuration1模块。双击CAN Configuration模块以打开其参数对话框。进行如下设置:
在这里插入图片描述

2.配置CAN Receive模块。双击CAN Receive模块以打开其Parameters对话框。进行如下设置:

在这里插入图片描述

3.配置CAN Unpack子系统。双击CAN Unpack子系统以打开Function-Call Subsystem编辑器。在模型中,双击CAN Unpack模块以打开其参数对话框。进行如下设置:
在这里插入图片描述

四、保存并运行模型

Step 11. 保存模型

在运行仿真之前,点击Save图标或从Editor工具条的Simulation选项卡中选择Save保存模型。

Step 12. 更改配置参数

在模型Editor工具条的Modeling选项卡中,点击Model Settings。将打开Configuration Parameters对话框。
Solver Options部分中,进行如下选择:

在这里插入图片描述

Step 13. 运行仿真

要运行仿真,请点击Editor工具条的Simulation或Modeling选项卡中的Run按钮。
运行仿真时,CAN Transmit模块将从CAN Pack模块中获取报文。然后它会通过Virtual Channel 1传输该报文。Virtual Channel 2上的CAN Receive模块会接收该报文并将其传递到CAN Unpack Subsystem模块以解包报文。
在仿真运行时,模型窗口底部的状态栏会更新仿真的进度。

Step 14. 查看结果

双击Scope模块以在图上查看报文传输。如果您在图上看不到所有数据,请点击Autoscale工具栏按钮,这会自动缩放坐标轴以显示所有存储的仿真数据。
在这里插入图片描述