虹科工程机械诊断 | CAN总线J1939协议译码与分析:Manitou DEF 液位传感器

2026.01.16 | 焜财商富 | 34189次围观

01

故障现象

一台Manitou工程机械,客户反馈DEF(柴油机尾气处理液)油箱即使加注到无法再加的状态,设备仍显示DEF 液位为空,系统中还存有故障代码。由于这个DEF液位过低提示,整台机器的功率被自动降低,严重影响了正常作业。

面对这种情况,传统维修思路通常是直接更换液位传感器。但这个部件的价格高达上万元,如果诊断错误就会造成巨大损失。更关键的是,如何确保更换昂贵的部件真的能解决问题

为此,我们将使用虹科Pico汽车示波器测量相关波形,排查故障的真正原因

02

故障诊断

诊断思路确定

参考DEF液位传感器工作原理手册(如需源文件,可添加助教获取),DEF液位传感器的液位数据通过CAN总线传输,遵循J1939标准,没有终端电阻,标准传输速率为250 kbit/s。

PicoScope 7 中自带的J1939译码功能,可以帮助我们翻译和分析CAN总线上的数据,并借助PGN(参数组编号)和ID进行过滤。

根据技术文档,液位传感器使用的ID3是0xA3。ID3(source address)即指CAN J1939的ID源地址。有了这个关键信息,我们就可以使用译码功能来捕获和分析相关数据。

注:文档中的传感器和Manitou上搭载的并不是同款,但J1939标准的DEF液位相关信息具有通用性。

总线译码与过滤

首先使用虹科Pico汽车示波器,采集到DEF液位传感器所在的CAN总线的信号,并利用串行译码功能进行J1939协议译码。译码结果如图1所示:

bd338034-f1f8-11f0-8ce9-92fbcf53809c.png

图1 J1939协议译码结果

如图2,接下来进行过滤。通过添加ID3为0xA3的过滤器,我们就可以去除我们不感兴趣的数据,方法如下:

1.点击译码结果上方的【添加过滤】按钮,选择您想要过滤的参数。

2.选择【ID3】过滤。

3.操作符选择默认的【包含】

4.参数输入【A3】,即你希望软件筛选的内容,点击【添加】

图2 添加ID3为0xA3的过滤器

如图3,现在我们就排除了所有无关的数据,只关注液位传感器发送的信息即可。

bd542244-f1f8-11f0-8ce9-92fbcf53809c.png

图3 过滤后的数据

通过过滤,我们很快就发现,数据中包含多个不同的ID2(PGN),即参数组编号。如图4,参考技术文档,我们找到了液位相关的PGN编号。

图4 技术文档中液位传感器相关的PGN编号

接下来,我们添加第二个过滤器,按PGN进行过滤

根据之前的技术资料,PGN是CAN消息ID中间的2个字节。在我们的案例中,FE56就是我们要找的液位PGN

bd6e28ba-f1f8-11f0-8ce9-92fbcf53809c.png

图5 过滤出ID2(PGN)为FE56的数据

经过两层过滤后,只剩下2条报文了,现在处理起来就会轻松很多。

数据转化与分析

根据技术文档的说明,DEF液位百分比信息从第0个字节开始,占用8位(即1个字节)。在我们采集的数据中,第一个数据包的这个字节值是11(十六进制)。将十六进制的11转换成十进制,得到17。

但这并不是最终的液位百分比,需要根据技术文档提供的转换公式进行计算。文档显示,转换需应用0.4的缩放因子(图4),没有偏移量。

即DEF相对于油箱总容量的百分比为:

17 × 0.4 = 6.8%

但这里出现了一个问题:这个6.8%到底表示油箱实际油量占比,还是表示油箱剩余空间占比?考虑到仪表盘显示液位为空,我们可以推测百分比越低,液位就越低。为了验证这个推测,我们还需要分析物理液位传感器的数据。

物理液位测量可以通过多种方式实现,比如超声波或浮子式来测量油箱底部到液面的高度。由于我们不确定Manitou使用的是哪种方式,所以我们将根据技术文档中的信息进行计算,以进一步验证。

如图6,根据文档中的信息,物理液位数据的位长度是16位(2个字节),起始位的位置是16。

bd7abed6-f1f8-11f0-8ce9-92fbcf53809c.png

图6 技术文档中的相关资料

图7展示了总线数据中,前两个字节的位位置(bit position)分配方式。物理液位数据的起始位置是16,这就意味着我们需要使用第3和第4个字节的数据,其排布的逻辑和前两位也是相同的。

bd890c20-f1f8-11f0-8ce9-92fbcf53809c.png

图7 位位置的分配方式

在我们的数据中,第3和第4字节是55 0F。根据J1939标准,我们需要将字节顺序翻转,变成0F 55,然后将其转换为十进制。即0F55 = 3925。再应用技术文档中的0.1缩放因子(图6),可以得到:

3925 × 0.1 = 392.5mm

验证与对比

这个392.5mm(约40厘米)的读数,是油箱底部到液面的距离,还是液面到油箱顶部的距离呢?已知故障机器的油箱是满的,无论这个40cm指向哪一种情况,其实都说明了这个传感器组件存在故障——这个是数据无论如何,都是错的。

但我们是否还能收集更多证据来证明这一点?有没有办法确定这个40cm究竟指向什么?

有的,方法也很简单,找一台正常的设备进行验证即可。

于是我们找到了一台,没有故障且DEF油箱在仪表盘上显示为满的机器。捕捉到其CAN总线数据,并使用同样的方法进行译码、过滤和计算:

第一个字节的十六进制值是FA。使用相同的转换方法:0xFA = 250(十进制),250 × 0.4 = 100%。很显然,这表明这个数值指向的是油箱实际油量占比。当然这也验证了,我们的转换方法是正确的。

对于物理液位数据,正常机器显示的是4B 00,翻转后变成004B,转换为十进制是75,再乘以0.1得到7.5mm。显然,这指向的是液面到油箱顶部的距离。

bd94bc0a-f1f8-11f0-8ce9-92fbcf53809c.png

图8 正常机器的相关波形与译码结果

03

故障排除

通过一系列的数据分析和对比,我们有充分的证据证明:故障机器的液位传感器读数确实是错误的。基于这个准确的诊断结果,我们更换了液位传感器,故障未再出现,故障解决!

04

案例总结

随着总线的应用越来越广、愈来愈深,如今很多传感器的详细数据已无法直接读取,如:微尘传感器、液位传感器等。

而通过总线译码,对照传感器相关技术文档,我们就可以破译这些隐藏的信息,将电压信号转化为可以直接读取的物理量,进一步识别潜在的问题,实现精准维修!