Main Content

构建 CAN 通信 Simulink 模型

构建模型的报文传输部分

本节说明如何结合使用 Vehicle Network Toolbox™ 模块与 Simulink® 库中的其他模块,来构建模型中传输 CAN 报文的部分。

构建传输 CAN 报文的模型将在下列步骤中详细说明:

对于这部分示例

  • 使用 MathWorks 虚拟 CAN 通道传输报文。

  • 使用 CAN Configuration 模块配置 CAN 通道。

  • 使用 Constant (Simulink) 模块向 CAN Pack 模块提供数据。

  • 使用 CAN Transmit 模块将数据发送到虚拟 CAN 通道。

将此部分与构建模型的报文接收部分保存并运行模型部分结合使用,可构建完整的模型并运行仿真。

步骤 1:创建新模型

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

    simulink

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

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

步骤 2:打开模块库

  1. 在模型“编辑器”工具条的仿真选项卡中,点击库浏览器

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

步骤 3:将 Vehicle Network Toolbox 模块拖到模型中

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

  • CAN Configuration

  • CAN Pack

  • CAN Transmit

注意

模型中每个模块的默认配置使用 MathWorks Virtual 1 Channel 1。您可以将模型中的模块配置为使用来自其他供应商的虚拟通道或硬件设备。

注意

默认情况下,模块名称不显示在模型中。在模型编辑器中工作时,要显示模块名称,请在工具条的格式选项卡中,点击自动并取消选中隐藏自动模块名称选项。

步骤 4:拖放其他模块以完成模型

此示例使用 Constant (Simulink) 模块作为数据源。从 Simulink > Commonly Used Blocks 库中,向模型添加一个 Constant (Simulink) 模块。

步骤 5:连接模块

Constant 模块和 CAN Pack 模块输入之间建立连接。将指针移至 Constant 模块的输出端口附近时,指针将变为十字准线。点击 Constant 模块输出端口并按住鼠标按键,将指针拖动到 CAN Pack 模块的输入端口。然后松开按键。

以相同的方式,在 CAN Pack 模块的输出端口与 CAN Transmit 模块的输入端口之间建立连接。

CAN Configuration 模块不连接到任何其他模块。此模块配置其 CAN 通道以用于通信。

步骤 6:指定模块参数值

通过双击模型中的每个模块为模块设置参数。

配置 CAN Configuration 模块.  双击 CAN Configuration 模块以打开其参数对话框。验证或设置以下参数:

  • 设备设置为 MathWorks Virtual 1 (Channel 1)

  • 总线速度设置为 500000

  • 确认模式设置为普通

  • 点击确定

配置 CAN Pack 模块.  双击 CAN Pack 模块以打开其参数对话框。验证或设置以下参数:

  • 数据输入为设置为原始数据

  • 名称设置为默认值 CAN Msg

  • 标识符类型设置为默认的 Standard (11-bit identifier) 类型。

  • 标识符设置为 500

  • 长度(字节)设置为默认长度 8

  • 点击确定

配置 CAN Transmit 模块.  双击 CAN Transmit 模块以打开其参数对话框。验证或设置以下参数:

  • 设备设置为 MathWorks Virtual 1 (Channel 1)

    点击确定

配置 Constant 模块.  双击 Constant 模块以打开其参数对话框。

选项卡上,进行如下设置:

  • 常量值设置为 [1 2 3 4 5 6 7 8]

  • 采样时间设置为 0.01 秒。

信号属性选项卡上,进行如下设置:

  • 输出数据类型设置为 uint8

    点击确定

经过配置的模型如下图所示。

Model for basic CAN transmission

构建模型的报文接收部分

本节说明如何结合使用 Vehicle Network Toolbox 模块与 Simulink 库中的其他模块,来构建模型中接收 CAN 报文的部分。以下示例说明如何通过 CAN 网络接收数据,步骤如下:

对于这部分示例

步骤 7:将 Vehicle Network Toolbox 模块拖到模型中

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

  • CAN Configuration

  • CAN Receive

提示

CAN ReceiveCAN Transmit 模块各配置一个 CAN 通道。每个通道都需要有自己的 CAN Configuration 模块。

步骤 8:拖放其他模块以完成模型

使用 Simulink 的 Ports & Subsystems 模块库中的 Function-Call Subsystem 模块构建您的 CAN Message pack 子系统。

  1. Function-Call Subsystem 模块拖到模型中。

  2. 双击 Function-Call Subsystem 模块以打开子系统编辑器。

  3. 双击 In1 端口标签,将其重命名为 CAN Msg

  4. 双击 Out1 端口标签,将其重命名为 Data

  5. CAN Unpack 模块从 Vehicle Network Toolbox 模块库中拖放到此子系统中。如果将该模块放置在输入信号线和输出信号线之间,它们将自动连接。

    现在,您的 Function-Call Subsystem 模块的内部应如下图所示。

    Function call subsystem to unpack a message

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

  6. 点击工具条中的后退箭头返回模型视图。

步骤 9:连接模块

  1. Function-Call Subsystem 模块重命名为 CAN Unpack Subsystem

  2. CAN Receive 模块的 CAN Msg 输出端口连接到 CAN Unpack Subsystem 模块的 In1 输入端口。

  3. CAN Receive 模块的 f() 输出端口连接到 CAN Unpack Subsystem 模块的 function() 输入端口。

  4. 要直观地显示仿真结果,请将 Scope (Simulink) 模块从 Simulink 模块库拖放到您的模型中。

  5. CAN Unpack Subsystem 模块的 CAN Msg 输出端口连接到 Scope 模块的输入端口。

    CAN Configuration 模块不连接到任何其他模块。该模块用于配置 CAN Receive 模块所使用的 CAN 通道以接收 CAN 报文。

经过配置的模型如下图所示。

Model to transmit and receive CAN messages

步骤 10:指定模块参数值

通过双击模型中的模块为模块设置参数。

配置 CAN Configuration1 模块.  双击 CAN Configuration 模块以打开其参数对话框。进行如下设置:

  • 设备设置为 MathWorks Virtual 1 (Channel 2)

  • 总线速度设置为 500000

  • 确认模式设置为普通

    点击确定

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

  • 设备设置为 MathWorks Virtual 1 (Channel 2)

  • 采样时间设置为 0.01

  • 每个时间步收到的报文数设置为 all

    点击确定

配置 CAN Unpack 子系统.  双击 CAN Unpack 子系统以打开“函数调用子系统”编辑器。在模型中,双击 CAN Unpack 模块以打开其参数对话框。进行如下设置:

  • 数据输出为设置为原始数据

  • 名称设置为默认值 CAN Msg

  • 标识符类型设置为默认的 Standard (11-bit identifier)

  • 标识符设置为 500

  • 长度(字节)设置为默认长度 8

    点击确定

保存并运行模型

本节介绍如何保存您构建的模型、构建模型的报文传输部分构建模型的报文接收部分

步骤 11:保存模型

在运行仿真之前,请先点击保存图标或从“编辑器”工具条的仿真选项卡中选择保存来保存您的模型。

步骤 12:更改配置参数

  1. 在模型“编辑器”工具条的建模选项卡中,点击模型设置。将打开“配置参数”对话框。

  2. 在“求解器选项”部分中,进行如下选择:

    • 类型列表中选择固定步

    • 求解器列表中选择离散(无连续状态)

步骤 13:运行仿真

要运行仿真,请点击“编辑器”工具条的仿真建模选项卡中的运行按钮。

运行仿真时,CAN Transmit 模块将从 CAN Pack 模块中获取报文。然后,它会通过 Virtual Channel 1 传输该报文。Virtual Channel 2 上的 CAN Receive 模块会接收该报文并将其传递到 CAN Unpack Subsystem 模块以解包报文。

在仿真运行时,模型窗口底部的状态栏会更新仿真的进度。

步骤 14:查看结果

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

Scope block display of received CAN messages

在图中,水平轴表示以秒为单位的仿真时间,垂直轴表示接收的数据值。您将模型配置为每隔 0.01 秒的仿真时间打包并传输一个常量值数组 [1 2 3 4 5 6 7 8]。这些值被接收和解包。Scope 窗口中的输出表示接收的数据值。

相关主题