构建 CAN 通信 Simulink 模型
构建模型的报文传输部分
本节说明如何结合使用 Vehicle Network Toolbox™ 模块与 Simulink® 库中的其他模块,来构建模型中传输 CAN 报文的部分。
构建传输 CAN 报文的模型将在下列步骤中详细说明:
对于这部分示例
使用 MathWorks 虚拟 CAN 通道传输报文。
使用 CAN Configuration 模块配置 CAN 通道。
使用 CAN Transmit 模块将数据发送到虚拟 CAN 通道。
将此部分与构建模型的报文接收部分和保存并运行模型部分结合使用,可构建完整的模型并运行仿真。
步骤 1:创建新模型
要启动 Simulink 并创建新模型,请在 MATLAB® 命令提示符下输入以下内容:
simulink
在 Simulink 起始页对话框中,点击空白模型,然后点击创建模型。将打开一个空的“编辑器”窗口。
在“编辑器”工具条的仿真选项卡上,点击保存 > 另存为为新模型指定名称。
步骤 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
。点击确定。
经过配置的模型如下图所示。
构建模型的报文接收部分
本节说明如何结合使用 Vehicle Network Toolbox 模块与 Simulink 库中的其他模块,来构建模型中接收 CAN 报文的部分。以下示例说明如何通过 CAN 网络接收数据,步骤如下:
对于这部分示例
使用 MathWorks 虚拟 CAN 通道接收报文。
使用 CAN Configuration 模块来配置虚拟 CAN 通道。
使用 CAN Receive 模块接收报文。
使用包含 CAN Unpack 模块的 Function-Call Subsystem (Simulink) 模块。此函数从 CAN Receive 模块获取数据,并使用 CAN Unpack 模块的参数来解包报文数据。
使用 Scope (Simulink) 模块显示接收到的数据。
步骤 7:将 Vehicle Network Toolbox 模块拖到模型中
对于示例的这一部分,首先为 Vehicle Network Toolbox CAN Communication 模块库中的以下每个模块创建一个实例:
CAN Configuration
CAN Receive
提示
为 CAN Receive 和 CAN Transmit 模块各配置一个 CAN 通道。每个通道都需要有自己的 CAN Configuration 模块。
步骤 8:拖放其他模块以完成模型
使用 Simulink 的 Ports & Subsystems 模块库中的 Function-Call Subsystem 模块构建您的 CAN Message pack 子系统。
将 Function-Call Subsystem 模块拖到模型中。
双击 Function-Call Subsystem 模块以打开子系统编辑器。
双击 In1 端口标签,将其重命名为 CAN Msg。
双击 Out1 端口标签,将其重命名为 Data。
将 CAN Unpack 模块从 Vehicle Network Toolbox 模块库中拖放到此子系统中。如果将该模块放置在输入信号线和输出信号线之间,它们将自动连接。
现在,您的 Function-Call Subsystem 模块的内部应如下图所示。
将 CAN Unpack 放在 Function-Call Subsystem 内的原因是为了捕获所有可能的报文。
点击工具条中的后退箭头返回模型视图。
步骤 9:连接模块
将 Function-Call Subsystem 模块重命名为 CAN Unpack Subsystem。
将 CAN Receive 模块的 CAN Msg 输出端口连接到 CAN Unpack Subsystem 模块的 In1 输入端口。
将 CAN Receive 模块的 f() 输出端口连接到 CAN Unpack Subsystem 模块的 function() 输入端口。
要直观地显示仿真结果,请将 Scope (Simulink) 模块从 Simulink 模块库拖放到您的模型中。
将 CAN Unpack Subsystem 模块的 CAN Msg 输出端口连接到 Scope 模块的输入端口。
CAN Configuration 模块不连接到任何其他模块。该模块用于配置 CAN Receive 模块所使用的 CAN 通道以接收 CAN 报文。
经过配置的模型如下图所示。
步骤 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:更改配置参数
在模型“编辑器”工具条的建模选项卡中,点击模型设置。将打开“配置参数”对话框。
在“求解器选项”部分中,进行如下选择:
从类型列表中选择定步长。
从求解器列表中选择离散(无连续状态)。
步骤 13:运行仿真
要运行仿真,请点击“编辑器”工具条的仿真或建模选项卡中的运行按钮。
运行仿真时,CAN Transmit 模块将从 CAN Pack 模块中获取报文。然后,它会通过 Virtual Channel 1 传输该报文。Virtual Channel 2 上的 CAN Receive 模块会接收该报文并将其传递到 CAN Unpack Subsystem 模块以解包报文。
在仿真运行时,模型窗口底部的状态栏会更新仿真的进度。
步骤 14:查看结果
双击 Scope 模块以在图上查看报文传输。如果您在图上看不到所有数据,请点击自动缩放工具栏按钮,这会自动缩放坐标轴以显示所有存储的仿真数据。
在图中,水平轴表示以秒为单位的仿真时间,垂直轴表示接收的数据值。您将模型配置为每隔 0.01 秒的仿真时间打包并传输一个常量值数组 [1 2 3 4 5 6 7 8]
。这些值被接收和解包。Scope 窗口中的输出表示接收的数据值。
相关主题
- Open Models (Simulink)