研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录

前言

背景介绍

问题描述

分析排查

解决方案

总结


前言

见《研发日记,Matlab/Simulink避坑指南(一)------Data Store Memory模块执行时序Bug》

见《研发日记,Matlab/Simulink避坑指南(二)------非对称数据溢出Bug》

见《研发日记,Matlab/Simulink避坑指南(三)------向上取整Bug》

见《研发日记,Matlab/Simulink避坑指南(四)------transpose()转置函数Bug》

背景介绍

在一个嵌入式软件项目中,需要按照如下通信协议接收一帧CAN消息。思路是直接用Simulink Library中的CAN Unpack模块进行解包,示例如下:

问题描述

按照上述示例,预想应该没有什么问题,但是实际运行起来,两个指令都接收不到。

分析排查

既然指令接收不到,我就往前推一步检查报文是否接收到了。在程序中添加一个调试信号,示例如下:

运行上述程序,看到有报文时,Counter Limited的值在增加,说明前面的CAN Receive模块没有问题。

进一步检查CAN Unpack模块中的每一个参数,发现唯一不一致的地方是Length Bytes(DLC),示例如下:

解决方案

把CAN Unpack模块中的Length Bytes(DLC)改成8,再次运行程序,可以正常接收该报文中的两个指令了。示例如下:

异常问题不再出现,Bug修复完工。

总结

CAN Unpack模块中的Length Bytes(DLC)参数,不只是一个解析参数,同时也是是一个判定条件参数,用改模块接收报文时,除了ID要一致外,DLC也必须一致。


版权声明:原创文章,转载和引用请注明出处和链接,侵权必究!

上述例程使用的Demo工程,可以到笔者的主页查找和下载。

相关推荐
Evand J3 小时前
【MATLAB例程】三维快速扩展随机树(RRT)路径规划与到达角(AOA)、到达时间差(TDOA)融合定位,附下载链接
开发语言·matlab·代码·定位·例程
Evand J4 小时前
【MATLAB例程】三维A*路径规划与TOA-AOA-TDOA融合定位算法。附下载链接
数据库·算法·matlab
水桶学习吧_6 小时前
电网负载无功MATLAB仿真
matlab·cnn·simulink
happy_baymax2 天前
MATLAB2026B 已经公布
matlab
Zootopia6262 天前
快递无人车与无人机各自进入配送网络后,路线能否一起算?
c++·人工智能·机器学习·matlab·ai·机器人·无人机
Evand J2 天前
【MATLAB例程】三维RRT路径规划与TDOA定位算法。有中文注释、包运行成功,文末有完整代码的下载链接
matlab·路径规划·代码·定位
老饼讲解-BP神经网络2 天前
一篇详解-BP神经网络matlab实现例子与方法(newff)
人工智能·神经网络·matlab
通信仿真爱好者3 天前
第【130】期--OFDM系统中LS、MMSE与DFT信道估计方法的仿真--matlab完整代码
matlab·ofdm·dft·ls·信道估计·mmse
weixin_307779133 天前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
slandarer4 天前
MATLAB | R2026b 更新了哪些有趣的新东西
开发语言·数据库·matlab