Matlab / Simulink CAN 通讯学习

参考:【Matlab】Simulink中CAN模块的使用(车辆网络工具箱)

             Peak CAN与Matlab建立通信 & Simulink仿真接收CAN报文

           【Matlab】Simulink中CAN模块的使用(车辆网络工具箱)

发现并连接硬件
canChannelList有关可用 CAN 设备的信息
canChannel构造连接到指定设备的 CAN 通道
discard丢弃来自 CAN 通道的所有报文
configBusSpeed设置 CAN 通道的位定时速率
canSupport生成技术支持日志
传输报文
canMessage基于用户指定的结构体构建 CAN 报文
pack将信号数据打包到 CAN 报文中
start

将 CAN 通道设置为在线状态

transmit将 CAN 报文发送到 CAN 总线
replay从 CAN 总线重新传输报文
transmitConfiguration显示配置为自动传输的报文
transmitEvent将报文配置为基于事件传输
transmitPeriodic将报文配置为周期性传输
接收报文
receive从 CAN 总线接收报文
attachDatabase

将 CAN 数据库连接到报文以及

从报文中删除 CAN 数据库

stop将 CAN 通道设置为离线状态
unpack从 CAN 报文中解包信号数据
extractAll从报文数组中选择 CAN 报文的所有实例
extractRecent从报文数组中选择最新 CAN 报文
extractTime选择在指定时间范围内发生的 CAN 报文
canMessageImport从第三方日志文件导入 CAN 报文
canSignalImport将 CAN 日志文件导入解码的信号时间表中
canMessageTimetable将 CAN 报文转换为时间表
canSignalTimetable基于 CAN 报文时间表创建 CAN 信号时间表

在Matlab中使用PCAN还需要如下APP

但是在Matab的附加功能安装APP时会提示请续订您的软件维护服务

解决方法参考:MATLAB获取硬件支持包失败,显示请续订您的软件维护服务,解决办法,保姆教程

 到官网离线下载支持包:Download Hardware Support Packages and Optional Features

双击后登录自己的账号,并选择自己的matlab版本

 搜索peak支持包框选后下一步

等待下载完成

开始安装:下载完成之后去软件的安装文件夹 E:\Matlab2021b\AnZhuangMuLu\bin\win64

找到“SupportSoftwareInstaller.exe”,双击安装

输入账号密码后将自动找到你下载的安装包,框选上,点击下一步继续

等待安装完成

 打开Matlab的管理附加功能

 

 可以观察到安装成功

 插上PCAN在 Matlab 命令行窗口中输入canChannelList 可以看到

插上PCAN后也会在命令行窗口自动弹出如下信息,表示安装大功告成

 CAN通讯 Matlab 代码学习

发送CAN报文

% canChannelList 
%%%%% 发送CAN报文 %%%%%

clear all;
canch1 = canChannel('PEAK-System','PCAN_USBBUS1');  %构造连接到指定设备的 CAN 通道
configBusSpeed(canch1,250000);%设置波特率250k


message1 = canMessage(101,false,8);  %(id,extended,datalength) false为标准帧  构建 CAN 报文
transmitPeriodic(canch1,message1,'On',1);  %canch,msg,'On',period  设置报文传送周期  Off禁用周期性传输
start(canch1);
%pack(message,value,startbit,signalsize,byteorder) startbit:起始位 signalsize:数据长度
%Little Endian(小端序)是一种数据存储和表示的字节顺序。
%它指的是将多字节数据类型(如整数、浮点数)的最低有效字节存储在内存的最低地址处,而最高有效字节存储在内存的最高地址处。
pack(message1,int16(1),0,16,'LittleEndian'); %将 16 位整数值 1000 打包为 CAN 报文
pack(message1,int16(2000),16,16,'LittleEndian');
pack(message1,int16(2000),32,16,'LittleEndian');
message1.Data
transmit(canch1,message1);  %将 CAN 报文发送到 CAN 总线
stop(canch1);

接收CAN报文

% canChannelList
%%%%% 接收CAN报文 %%%%%
clear all;
canch1 = canChannel('PEAK-System','PCAN_USBBUS1');  %构造连接到指定设备的 CAN 通道
configBusSpeed(canch1,250000);%设置波特率250k
start(canch1);

%将 'OutputFormat' 选项值指定为 'timetable' 可获得报文的时间表
message2 = receive(canch1,Inf,'OutputFormat','timetable');%通道 要接收的最大报文数{指定为正数值或 Inf(无穷)}
%message2 = receive(canch1,Inf);
%stop(canch1);


%value = unpack(message2,0,16,'LittleEndian','int16');%%unpack(message,startbit,signalsize,byteorder,datatype)
%unpack在这报错,因为message2包含了不同时间的报文 (Simulink中有仿真时间,可在Simulink中使用?)

 在 Simulink 进行 CAN 通讯

CAN通讯模块在 Vehicle Network Toolbox 模块中

模块介绍

CAN Configuration

默认情况下,Acknowledge mode 为 Normal。在此模式下,通道可以正常接收和传输报文,也可以在网络上执行其他任务,例如确认报文和创建错误帧。要观察网络上的所有报文活动并执行分析,而不影响网络状态或行为,请选择 Silent。在 Silent 模式下,通道只能接收报文而不能传输报文

 CAN Receive

 f() 输出端口是 Function-Call 子系统的触发器。如果模块接收到新报文,则会从这个端口触发 Function-Call。然后,可以连接到 Function-Call Subsystem (Simulink) 以解包(unpack)并处理报文。

因此,一般使用 CAN Receive 时会搭配使用Simulink的Ports & Subsystems库中的Function-Call Subsystem模块构建CAN Message pack子系统,在子系统内部进行解包(unpack)并处理报文。

  CAN Unpack(解包)

 

对于手动或 CANdb 指定的信号,默认输出信号数据类型为 double。要指定其他类型,请使用 Signal Specification (Simulink) 模块。该模块可支持以下输出信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点类型。 

输出的数据格式:

        raw data:将数据输出为一个 uint8 向量数组。如果选择此选项,则只需指定报文的字段。其他信号参数字段不可用。此选项仅在模块上创建一个输出端口。

        转换公式为:physical_value = raw_value * Factor + Offset
        其中 raw_value 是解包的信号值,physical_value 是缩放的信号值。
        manually specified signals:您可以指定数据信号。如果选择此选项,请使用 Signals 表来手动创建信号报文。模块上的输出端口数取决于您指定的信号数。例如,如果指定四个信号,则模块具有四个输出端口。

        CANdb specified signals:您可以指定包含数据信号的 CAN 数据库文件。如果选择此选项,请选择 CANdb 文件。模块上的输出端口数取决于 CANdb 文件中指定的信号数。例如,如果 CANdb 文件中的所选报文有四个信号,则您的模块有四个输出端口。

 ​​使用manually specified signals 格式指定三个输出如下:

 CAN Pack (将单个信号打包到 CAN 报文中)

 CAN Pack 模块默认有一个输入端口。模块输入的数量是动态的,取决于您为模块指定的信号数量。例如,如果您的模块有四个信号,则它有四个模块输入。

该模块支持以下输入信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点数据类型。

生成代码以将模型部署到目标。如果信号信息包含大于 32 位长度的有符号或无符号整数,则不支持代码生成。

 CAN Transmit  (将 CAN 报文传输到所选 CAN 设备) 

使用示例如下:

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Matlab/Simulink系统是当今工程和科研领域最普遍使用的仿真工具,因为它提供了广泛的工具箱和应用程序接口,使得工程师和研究人员可以快速建立复杂的模型和应用程序。超级学习手册是一本Matlab/Simulink系统仿真的指南,它旨在向读者提供Matlab/Simulink系统仿真的完整概念和实践。 这本超级学习手册包括了Matlab/Simulink系统和Matlab/Simulink应用程序接口的所有基础知识。手册开始介绍了Matlab编程环境和Simulink的基本概念,然后涵盖了各种Matlab工具箱,例如信号处理工具箱、优化工具箱和控制系统工具箱。此外,手册还涵盖了使用Matlab/Simulink系统进行数据可视化和分析的方法以及Matlab/Simulink与其它软件和硬件工具集成的方法。 手册的最后一部分重点介绍了Matlab/Simulink系统仿真的实践应用。这部分包括了各种应用程序,例如机器学习、无人驾驶汽车控制、机器人控制和嵌入式系统设计等。 总之,Matlab/Simulink系统仿真超级学习手册是一本理解和应用Matlab/Simulink系统仿真的优质指南。它不仅适用于工程师和研究人员,还适用于任何对Matlab/Simulink系统仿真有兴趣的人。 ### 回答2: Matlab/Simulink是一套广泛应用于工程科学领域的软件,其主要用途是进行建模、仿真和分析。与传统的编程语言不同,Matlab/Simulink实现了可视化建模,使得用户能够通过拖拽模块来设计系统及其输入输出。 Matlab/Simulink的仿真能力也十分强大,用户能够在仿真过程中进行各种实验,如调整参数、检查系统的动态响应、预测系统的行为等等。Matlab/Simulink还提供了丰富的分析和数据处理工具,如曲线拟合,频谱分析等等。 对于初学者来说,Matlab/Simulink系统仿真超级学习手册是一个非常有用的资源。该手册包含了大量的教程、示例和提示,帮助用户快速掌握工具的使用和基本概念。对于有经验的用户来说,该手册也是一个不错的参考资料,可以帮助他们进一步深入了解系统建模和仿真。 总而言之,Matlab/Simulink系统仿真超级学习手册是一个非常实用的资源,它可以帮助用户理解和应用Matlab/Simulink系统,并且深入了解系统仿真的原理和方法。这种深度认识可以使工程师和科学家更好地设计和开发系统,并更好地解决实际的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值