我是靠谱客的博主 聪明故事,最近开发中收集的这篇文章主要介绍Simulink CAN PACK Message总线解包及处理Simulink CAN PACK Message总线解包,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Simulink CAN PACK Message总线解包
开发环境:本项目是基于simulink 2019a完成。
项目背景:需要在发出去的CANmessage中加载CRC16数据。
实现方案如下:
项目中要用到pack加载dbc,但data区后两字节需要加载CRC16,CRC16计算的数据为前6字节,而pack前均为信号量,故需要对pack后的封包数据进行提取解封,然后处理CRC然后再合并数据总线成CAN message BUS。网上找了许久也没有相关资源,就自己做了一个示例,验证运行正常。希望可以帮到和我一样对汽车CAN总线解包封包有需求的。
** 模型整体框图如下 **
** CRC子函数展开框图如下 **
模型中用到了BUS selector,create BUS 模块进行解包和封包。
CRC使用的是MATLAB Function实现。语言为M语言。
function CAN_Message = Modbus_CRC16(message)
CAN_Message =uint8(zeros(8,1));
crc_reg = uint16(hex2dec('0000'));
crc_reg_xor = uint16(hex2dec('0000'));
CRC_poly = uint16(hex2dec('C86C'));
for ii = 1:6 %length(message))
CAN_Message(ii)=message(ii);
data_s=uint16(message(ii));
current = bitshift(data_s,8);%左移8位
for jj = 1:8
crc_reg_xor = bitxor(crc_reg,current);
if bitget(crc_reg_xor,16) == 1
crc_reg = bitxor(bitshift(crc_reg,1),CRC_poly);%uint16(51308)
else
crc_reg = bitshift(crc_reg,1);
end
current = bitshift(current,1);
end
end
CAN_Message(7)=bitand( crc_reg, uint16(255));%uint8(mod(crc_reg,1e8));
CAN_Message(8)=uint8(bitshift(crc_reg,-8));
其中新建CAN message BUS 遇到过一点小麻烦,就是BUS总线中再包含data[8],通过对create BUS 设置后解决。
希望以上能帮到和我有一样问题的同学。
代码连接地址:
https://download.csdn.net/download/weixin_43255491/12245007
最后
以上就是聪明故事为你收集整理的Simulink CAN PACK Message总线解包及处理Simulink CAN PACK Message总线解包的全部内容,希望文章能够帮你解决Simulink CAN PACK Message总线解包及处理Simulink CAN PACK Message总线解包所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复