数据分两大类:
1. CAN总线数据
CAN总线数据是各个控制模块交互所需要的数据。举个例子,油门踏板位置信号通过传感器传给发动机了,而这个信号对自动变速箱也是最基本的输入信号,于是发动机控制模块会把这个信号一直往CAN总线上发,变速箱控制模块实时读取这个信号。
因为总线数据是用来交互的,数据流一直在总线上走,所以采集这些数据仅仅去读就行了。原理比较简单,搜一搜就能找到很多资料,此处不展开。
CAN总线上的数据已经比较丰富了:车速、各种温度、轮速、发动机扭矩、油门、制动踏板、排档杆位置、空调等各种设备是否工作、故障信息……非常多。这些信号的特点一般是:不同控制模块都会需要用到的数据。
2. 控制器内部数据
说简单一点,CAN总线给你提供一个数据流通的通道。通过这个通道,采集设备给相关的控制器发送指令,控制器返回相关数据。通过这种方式可以采集到控制器软件运行中的各种变量,于是几乎所有的数据都能采集到。因为多了发送指令的动作,所以更加耗费资源。这种数据的丰富程度,远远远远远远远远大于前一种。但是只有开发方才可能知道怎样配置来采集这些数据,非开发方还是别想了,除非有人泄密给你。
能记录任何数据并不代表能记录所有数据。特别是对于控制器数据来说,可以去读的量实在太多了。即使购买最贵的设备,因为带宽有限,也只能记录很小一部分。对控制器内部数据的采集还和控制器本身的能力有关。产品车的控制器就比较弱,可同时采集的数据少。用于开发的车辆则会使用更加强大的控制器。
普通车辆在运行的时候会自动记录一些故障信息等少量基本信息,而对车辆运行的实时数据是不做记录的。因为需要额外加装设备,成本也不低。所以产品车上是没有黑匣子的。
VIN
OBDII
源码分析用到的开源项目:
工具:obd2开发板一套,这个使用到的开发板
整个硬件连接比较简单,间标准的elm327连接到开发版,打开手机蓝牙配对,密码1234,用调试工具即可在android上和obd设备进行通信
比较郁闷的是连接手机后读取到的vin竟然是乱码!
我想新的开发版,不应该有问题吧,于是,断点进入源码进行调试,发现原始的16进制数据无法正常解析:
进入类库obd-java-api的源码可以看到默认构造器调用了父类的构造器,并传入09 02的字符串,这个是obd2的协议指令,用于获取车辆vin码
VinCommand这个类负责解析vin,具体方法如下
我选的是ISO-15765协议,按说其返回的字符串应该包含有":",但却没有,这不得不让我怀疑是开发版的问题,我又用AutoApp输入09 02指令返回的原始数据一样,当然无法被正常解析。
在和厂商沟通后确实可能是开发版的问题,好吧,只有先退货了
参考:
百度百科
百度文库
Android有连接ELM327的app,比如Torque,有功能简化的免费版本。
如果想编写Android连接ELM327的程序,需要解决以下几个问题:
如何通过蓝牙连接到ELM327设备
发送和接收数据的格式
好在已经有人编写了开源项目,可实现基本的ELM327通讯的app,链接见:
https://code.google.com/p/android-obd-reader/
该作者编写的代码,依赖maven3,比较麻烦。我改写了他的代码:
不在需要依赖maven3,直接可导入到IDE工具生成项目
增加了手工输入命令和显示原始结果的功能
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)