本文提供一种可以解析CAN信号各信号值的一种方法并进行说明。

一般情况下,高端一点的设备会计算每一个信号的值,但是接受到CAN信号的报文实际上有各种情况,如何通过设定的起始位和数据长度来获取某一信号的值,详情请参考,本文方法比较笨拙,如有更好的办法,欢迎指教。

假设,我们获取到的数据长度为8byte,即DLC为8。CAN Matrix表格如下:

我们约定,一种表示信号的方式如下:

lsb起始位

数据长度

按照上面的图来说,该信号起始位为40,长度为10。所以,该信号表示值的范围在0-1023之间,至于具体表示的物理量的含义需要有其他的文件规定。

获取到一帧数据以后,如何通过一系列的运算来得到信号值呢?

这里提供一种思路:

根据起始位和长度信息确定信息跨越的byte位

根据起始位确定LSB所在的bit位

根据跨越的byte位组合为数据

把以上组合的数据进行位与,得到信号值。

大概分为以上的4部分,以下分别说明:

设定:lsbbit,lsbbyte,msbbyte,start,length.按照以上的例子就是:

lsbbit  = 0

lsbbyte = 5

msbbyte = 4

start = 40

length = 10

计算lsbbit:

lsbbit = start & 7

计算lsbbyte:

lsbbyte = start >> 3

计算msbbyte:

由于数据是向byte减少的方向进行的。所以:

msbbyte = lsbbyte - x

x为跨越的位数,也就是:lsbbit + length - 1所占的长度,如果大于7说明为另一行,即:

msbbyte = lsbbyte - ((lsbbit + length - 1) >> 3)

组合data:

我们知道数据介于msbbyte-lsbbyte之间,那么我们可以组合这两个数据:

for(index = msbbyte -> (lsbbyte+1)):

data_merge  += data[index] << (( lsbbyte - index ) << 3)

获取数据value:

去尾:value = data_merge >> lsbbit

按位与:value = value & ((1 << length) - 1)

所以,最终得到的结果为筛选出来的信号值,然后根据该信号值关联上实际的物理值,就可以得到具体的物理数据了。

代码实现的方式有很多,大体思路为此。

很久以前写的,今天用的时候居然发现了一个bug,所以记录下来,表示注意。

can总线用java怎么解析_CAN信号值解析相关推荐

  1. can总线用java怎么解析_CAN报文DBC解析的编程方法说明

    主要内容1. 概述2. 我们要做一件什么事情在软件框架中的位置 DBC介绍3. 我们怎么去做这件事情数据存储 输入输出1概述前面介绍过PEAK的所有CAN卡都有提供如下图所示这些二次开发包,非常适合于 ...

  2. Java并发编程:volatile关键字解析(转载)

    转自https://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatile关键字解析 Java并发编程:volatile关键字解析 v ...

  3. 转载:Java并发编程:volatile关键字解析

    看到一篇写的很细致的文章,感谢作者 作者:Matrix海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者Matrix海子和博客园共有,欢 ...

  4. Android事件总线(一)EventBus3.0用法全解析

    相关文章 Android事件总线(一)EventBus3.0用法全解析 Android事件总线(二)EventBus3.0源码解析 Android事件总线(三)otto用法全解析 Android事件总 ...

  5. X-Analyser 总线分析软件:CANopen、1939解析、UDS诊断、NMEA2000 协议解析、DBC文件解析、仿真工具、CAN报文分析、仿CANoe曲线显示 CAN仪表模拟器

    X-Analyser 总线分析软件主要用于:CANopen协议解析.J1939解析 J1939地址ISO15765(UDS诊断) .NMEA2000 协议解析.DBC文件解析 DBC仿真工具.CANo ...

  6. 经典Java面试题汇总及答案解析

    面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...

  7. java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?

    最近要做一个导入导出 Excel 的功能,上一次做这个功能的时候,还是用的 Java Apache POI,这是一个用 Java 编写的免费开源的跨平台的 Java API,能够对 Microsoft ...

  8. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  9. atitit. java jsoup html table的读取解析 总结

    atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个   htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...

最新文章

  1. 深度学习入门笔记,三流程序员如何凭借实力逆袭高薪?你不服不行!
  2. 大三本科生获最佳短论文奖,清华大学狂揽信息检索顶会SIGIR 2020多个奖项
  3. 【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和普通变量之完全解读...
  4. 如何保证两个不同宽高的canvas用同一组坐标正常显示_如何1人5天开发完3D数据可视化大屏 【一】...
  5. ASP.NET MVC3书店--第九节 注册与下订单(第一部分)(转)
  6. CSS3学习笔记1:结构性伪类选择器
  7. sleep函数_MySQL中的sleep函数介绍
  8. 个人IHttpHandler,IHttpModule认识
  9. C++编程技巧—对数运算实现
  10. Centos7 安装 Python3.9
  11. jbpm 5 安装教程
  12. PocketSphinx语音识别系统的编译、安装和使用
  13. java中定义一个栈容器_Java 容器之 Connection栈队列及一些常用
  14. linux fastboot 工具下载,linuxadb fastboot 和VNC工具的安装使用
  15. 天勤计算机考研高分笔记(一)绪论1数据结构
  16. 【报错】Verion 9 of Highlight.js has reached EOL
  17. 帝国cms生成静态php,帝国cms自动生成手机版静态插件
  18. html5课程总结500字,体育课心得体会500字(精选6篇)
  19. leetcode 78.不含重复元素数组的子集
  20. 当代大学生应该加强礼仪修养

热门文章

  1. 生日贺卡---flash逐帧动画练习
  2. cass有坐标文件生成里程文件_CASS里程文件生成
  3. 领英手册-领英精灵批量加好友方法分享
  4. srs提供的rtmp客户端srs-librtmp
  5. docker安装oracle19c
  6. 【C语言】用C语言实现最大公约数和最小公倍数【超详细讲解】
  7. 5G与AI,共舞“华尔兹”
  8. SINUMERIK西门子808D 828D数控机床实操视频教程
  9. 怎么看服务器内存型号频率,如何看服务器内存频率
  10. 每日三个笑话-201510117