网站大量收购闲置独家精品文档,联系QQ:2885784924

CAN报文的打包与解包及代码自动生成.pdfVIP

CAN报文的打包与解包及代码自动生成.pdf

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CAN报⽂的打包与解包及代码 ⾃动⽣成 本⽂ ⽬录 1.背景 学汽车电⼦的同学可能都⽆法逃 CAN总线这道坎,我个⼈认为⼊门CAN总线是学习汽车电⼦的第⼀课。如何根据信号对CAN信号进⾏打 包和如何根据CAN协议对数据进⾏解包,是在实践中必须解决的问题,得不到CAN线上的数据,说啥都是⽩扯。写这篇博客的⽬的是因为 ⾃⼰在前期对CAN通信矩阵的理解不到位,⽐如摩托罗拉编码和因特尔编码在CAN矩阵中的形式。这篇博客我也是将最近学到的知识分享 出来,在此也特别感谢某主机⼚的⼯程师在这⼏天在代码⽣成⽅⾯对我的指导,没有他的帮助,我也不会很快将某些概念理解透彻。 2.所需要的软件与硬件 1. 电脑⼀台。 2. Matlab/Simulink (Simulink VV Toolbox ,Vehicle Network Toolbox,Embedded Coder) 3. Keil5编译器。 (⽤于⽣成的代码集成) 3.Motorola编码和Intel编码 作为在校学⽣,学校⾥⾯的项 ⽬或者外购的⼀些产品回来后,都⽆法获得产品的DBC⽂件 (商家总说说我们没有,我TM…),所以⼏乎都 需要⾃⼰⼿动根据商家提供的各种花⾥胡哨的⽂档进⾏CAN协议的处理。 CAN总线数据场有8个字节,扩展帧和标准帧是⼀样的,只不 ID范围更多,这⾥只讨论标准帧。因为我 ⽬前还不会制作DBC⽂件,所以就 ⽤⼿绘图的形式表达⼀下CAN通信矩阵。如下图所⽰。 对于⼀个uint8的字节有8个位,数据场有8个字节,所以整个数据场能包含的最⼤数值是2的64⽅减去1。只需要确定报⽂的ID和数据长 度,就可以将这8个字节发送出去,其他节点收到后进⾏解包即可。回到主题,Inter编码和Motorola编码是两种不同的⽅式,计算机有两 种储存数据的⽅式:⼤端字节序 (Big Endian)和⼩端字节序 (Little Endian)。 ⼤端字节序 :⾼位字节在前,低位字节在后,这是咱们⼈的写字⽅式。 ⼩端字节序 :低位字节在前,⾼位字节在后。 如果⼤家不理解我上⼀个图给⼤家看⼀下。这⾥我们定义⼀个车速信号, 这⾥我假设⼀个车速信号在CAN矩阵的起始位是bit20,长度是8个bit。那么按照⼩端字节 (Intel)就数据在CAN矩阵中应该如下图所⽰。 很明显,从低字节到⾼字节。那么如果按照⼤端字节序 (Motorola)来定义就应该按照下图所⽰。 从图看很明显,⾼位字节在前,低位字节在后。不 在⾮跨字节的信号中,摩托罗拉和因特尔编码没有区别。 在数据场中,信号还会涉及到分辨率和偏移量这两个概念。⽐如车速信号的分辨率是0.0078 125,偏移量是 1,那么在解包的时候就需要按 照如下公式计算。 ⾮跨字节 :解包值 = 字节数据*分辨率+偏移量。跨字节就是需要视情况⽽定了,毕竟占位不同。 在打包的时候是不是就可以按照相反⽅向计算了呢? 1.⾃动打包和解包 第⼀次接触 ⾃动打包和解析还是使⽤的dSPACE的RTICAN,确实⾮常⽅便。最近我发现Simulink⼯具箱中的Vehicle Network Toolbox也 可以做到,但是…,⽀持的硬件就只有Vector,NI等⼟豪朋友使⽤的,淘宝的⼏百块钱的CAN卡是不⽀持的,屌丝还是退出直播间吧。不 不影响打包和解包模块的使⽤。 使⽤⽅法很简单,就⽤上⼀节的例⼦。车速信号,Inter编码,起始位值是第3个字节的第5位,长度8位,分辨率0.5,⽆偏移量。在CAN PACK和CAN UNPACK模块中设置如下。 PACK和CAN UNPACK模块中设置如下。 打包和解包的信号定义必须完全⼀致,ID必须完全⼀致,长度也必须完全⼀致。那么运⾏仿真看⼀下,可以发现输⼊和输出的值是⼀样的。 2.⼿动解包 如果需要⼿动进⾏解包应该如何处理呢,那就需要⽤到C的知识了,我相信看我博客的编程能⼒肯定都⽐我厉害。我再次看⼀下信号的定 义,属于跨字节定义。计算公式如下 : 速度值 = 第三个字节的⾼四位 +第四个字节的低四位。 我认为CAN矩阵可以给我带来最直观的认识,这也是我为什么在解包和打包的时候会将CAN矩阵画出来再看信号定义。 既然知道怎么做了,那么我们就可以开始⼿动解包了。 感觉⼿动解包也是⾮常简单的,⽤到了C语⾔的位运算和移位处理。第3个字节⾸先与 进⾏与运算,取出该字节的⾼四位, 然后进⾏右移4位的运算计算低4位的实际值 ;第4个字节⾸先与 “0000 1111”进⾏与运算取出车速数据的⾼四位,再乘2的4次⽅

文档评论(0)

有志者事竟成 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7114163151000053

1亿VIP精品文档

相关文档