Simulink学习笔记——构建用于CAN通信的Simulink模型

前言:

       为了构建完整的CAN通信仿真,我们需要建立消息传输模型、消息接收模型、保存并运行模型、消息传输模型。本文学习如何通过CAN网络发送数据。该示例使用Simulink中的Vehicle Network Toolbox库与其他模块库一起来构建一个简单模型,整个运行过程如下:

(1)使用虚拟CAN通道传输消息。
(2)使用CAN配置块配置CAN通道。
(3)使用常量块将数据发送到CAN包块。
(4)使用CAN Transmit块将数据发送到虚拟CAN通道。
(5)将此部分与构建消息接收模型并保存并运行模型一起使用以构建完整模型并运行模拟。

     

一、建立模型

       在模型编辑器窗口中,单击视图->库浏览器,打开Simulink Library Browser。 展开Vehicle Network Toolbox节点,然后单击CAN Communication。选择相应的模块,在CAN Pack块的输出端口和CAN发送模块的输入端口之间建立连接,CAN配置块不连接到任何其他块, 该块配置CAN发送块使用的CAN通道以发送打包消息。连接如下:

  二、配置模块的参数

      通过双击模块为模型中的相应模块设置参数。配置CAN配置块,双击CAN配置块以打开其参数对话框,配置设备到矢量虚拟1(通道1),总线速度为500000,确认模式为正常,配置好后模块图标如下:

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

       配置CAN Transmit块。双击CAN Transmit块以打开其参数对话框,设置如下:将设备设置为矢量虚拟1(通道1),然后单击OK。

       配置常量块。双击常量块以打开其参数对话框,设置常数值为[1 2 3 4 5 6 7 8],采样时间为0.01秒,如下所示:


在“信号属性”选项卡上,将“输出”数据类型设置为uint8:

模型参数配置完成后,如下所示:

 

三、拖动其他块以完成模型

      继续添加如下模块:

      将Vehicle Network Toolbox库中的CAN Unpack模块添加到Function-Call Subsystem子系统中去:

       为了直观地查看模拟结果,再将Scope模块从Simulink块库拖到模型中。

    将CAN接收块上的CAN Msg输出端口连接到Function-Call Subsystem块上的In1输入端口:

     打开Function-Call Subsystem模块,先双击In1将其重命名为CAN Msg,双击Out1将其重命名为数据。然后将Function-Call Subsystem块重命名为CAN Unpack Subsystem:

 

最后将CAN接收块上的f()输出端口连接到Function-Call Subsystem块上的function()输入端口,如下:

    配置CAN解包子系统。 双击CAN Unpack子系统以打开Function-Call Subsystem编辑器。 在模型中,双击CAN Unpack块以打开其参数对话框。 设置如下:

 

子系统内部配置好,如下所示:

四、运行模拟时

       CAN发送模块从CAN Pack模块中获取消息。 然后通过虚拟通道1发送它。虚拟通道2上的CAN接收块接收此消息并将其交给CAN解包块以解压缩消息。打开示波器:

         在示波器窗口中,横轴表示以秒为单位的模拟时间,纵轴表示接收的数据值。 在消息传输模型中,您配置了每隔0.01秒的模拟时间打包并传输一组常量值 [1 2 3 4 5 6 7 8] 的数据。 在消息接收模型中,接收和解压缩这些值。 示波器窗口中的输出表示接收的数据值。