CAN总线大众Polo轿车中的数据解密

今天,我们将以2019大众Polo轿车为例,讨论解密CAN总线数据的方法。在互联网上,这类文章通常被称为CAN Bus Hacks,但我不喜欢这个名字。

本文介绍了在汽车的CAN总线中查找必要数据的方法,以及这些技术在大众Polo Sedan上的应用示例。Vega MTX用作连接到CAN总线的设备。让我们再谈谈远程信息处理。在剪裁下,有很多关于该主题的图片,一些GIF和视频。

请您简短自我介绍。

我叫Alexey Fokin,目前我在Vega Absolute工作vega_absolute。新西伯利亚的总部,但我在莫斯科工作。远程信息处理是我们的方向之一。我们制造用于跟踪商用车辆,汽车共享,出租车等的设备。我的工作是从汽车中收集数据,并将其转换为设备的设置。

现在到车上。

与CAN总线的连接在两个地方进行:仪表板后面(500 Kbit / s总线)和无线电后面(100 Kbit / s)。还有一个冗余连接-直接连接到连接器上的OBDII连接器(500 Kbit / s)。

通过使用的工具:配有CAN扫描仪的Vega MTX车辆监控单元。要在PC上进行配置,请使用Configurator 1.27.14程序。

在文章结尾的视频中,可以找到有关连接汽车和MTX的更多信息。

当连接到所有CAN总线时,我们将看到下图:



在此数据流中,您需要找到负责我们所需参数的位和字节。

下面的屏幕截图显示了远程信息处理模块中当前注册了多少个传感器,这不是完整的列表。您可以更深入地寻找更多的传感器。这些传感器中的一些实时发送读数到服务器,使您可以随时查看汽车的状态。

远程信息处理是另一篇文章的主题,因此在此我们将不对其进行详细介绍。



问题立即出现-如果可以通过ELM327或其他诊断设备查看数据流,为什么我需要搜索数据流?

这里的问题是为什么我们需要这些数据。在我们的案例中,我们需要用于远程信息处理的数据,并且为了不干扰CAN总线并且不向其发送任何数据,我们在流中寻找它们。 Vega MTX具有用于CAN总线的特殊模式-“监听”模式。该模式说明了一切,该设备仅侦听总线,不向总线发送任何内容,从而将对常规汽车系统的影响降至最低。

例如,用于打开门的传感器。如果我们问他一个要求,那么我们只能在点火开关打开的情况下进行。点火开关关闭且CAN总线进入睡眠状态后,我们将无法使用该传感器。如果我们在CAN流中找到该传感器,那么当CAN总线工作时,我们将一直看到它。而且,当您打开门时,CAN会自动唤醒。

还应该理解,以下所有示例仅与Polo Sedan连接有关。在其他设备中,设备可能没有列出任何传感器,但是对于其他品牌和型号的汽车,数据将具有完全不同的ID。

我提请您注意以下事实:默认情况下,在Configurator中以十六进制格式显示值。将来,我们将不得不多次将数据从HEX格式转换为十进制值。最简单的方法是使用Windows 10内置的Calculator应用程序。我们将其转换为“程序员”模式,我们可以选择使用哪种数字系统输入数据,这些数字在其他数字系统中是重复的。

通过搜索方法,我将汽车中的所有传感器分为几种类型:

  1. 二进制传感器。
  2. 快速更换传感器。
  3. 温度传感器。
  4. 汽车行驶里程。
  5. 液位传感器。
  6. 指示传感器
  7. 带有请求的传感器。

现在,让我们继续查找每种类型的传感器的方法。

1.二进制传感器


让我们从最简单的二进制传感器开始。

这些传感器包括门传感器,安全带,制动器(是否打开了刹车灯),手制动器,按钮是否按下等。它们的值放在1位中,即可以是0(门已关闭)或1(门已打开)。

找到它们很简单,但需要小心。要搜索驾驶员的车门,请打开/关闭车门,并观察CAN总线中的变化。

配置器以红色突出显示在过去几秒钟内发生更改的数据。



在我们的案例中,驾驶员的车门负责ID 470消息的第一个字节的零位
。所有其他车门的传感器+后备箱传感器位于同一字节中。

2.快速更换传感器


快速变化的传感器类似于二进制传感器,只是其值大于1位。我们可以对这些传感器进行操作,并立即查看CAN总线中的变化。
这些传感器包括大多数位置传感器:油门踏板位置,玻璃位置,自动变速器位置,点火钥匙位置。除了这些以外,还包括速度,转速,方向盘加速度,油门踏板加速度等传感器。

首先,我们将以油门踏板位置传感器为例处理位置传感器。

为此,我们关闭汽车,打开点火开关,然后在不启动发动机的情况下踩油门踏板并监控CAN总线的变化。

通常,松开油门踏板时,此传感器的值为0,并且当您踩下油门踏板时,该传感器的值会增加到某个值。我们在ID 280的第一个CAN中看到了这样的参数。第五个字节从0(释放踏板)变为FA(将踏板“踩到地板”)。



如果将FA从HEX转换为DEC,则得到数字250。因此,要以百分比(从0到100)踩下油门踏板,我们需要将数值乘以0.4。

现在,让我们继续研究不适合一个字节的传感器,例如发动机转速。我们在观察CAN总线变化的同时逐渐提高和降低发动机转速。发动机转速与油门踏板的ID相同。



使用油门踏板后,您可以理解这里的数据是相反的顺序。也就是说,最老的部分在第三个字节(从零开始计数字节),而最小的部分在第二个字节。

接下来,您需要将数据从十六进制传输到DEC。



接下来,我们需要通过转速表或诊断仪器评估实际转速。在我的情况下,转速表上的指针约为1600 rpm。

接下来,我们用十进制格式(6508)的CAN数据除以转速表(1600)的发动机转速,得到4.0675。给出用眼确定转数的错误,将分频器四舍五入到4。之后,您需要检查几个点的读数。为此,将发动机转速设置为不同的转速,并通过CAN总线中的数据进行检查。

在配置器中,您可以替换传感器设置中的所有系数,并实时观察速度的变化。

因此,需要大量的传感器:制动力,方向盘位置,方向盘加速度,车速等。

3.温度传感器


在波罗轿车中很难找到温度。首先,找到一个字节,当汽车被加热时,它慢慢向上变化。之后,开始寻找必要的系数。

我们连接诊断程序,选择发动机温度,然后比较CAN总线的读数和诊断程序中的数据。我们建立一个对应表并选择系数。
作为系数选择的结果,出现了用于计算温度的公式。

XX * 0.75-48,
其中XX是DEC中ID 288中1个字节的值。



根据该公式可以计算出屏幕截图的温度为

179 * 0.75-48 = 86.25°C。

其中179是ID 288的第一个字节起的十进制数字B3。

但这是一个困难的情况,在许多汽车中,温度更容易找到。

由于很难在总线上传输负数,因此制造商接受-40°C,-48°C或-58°C的值作为0测量值。因此,我们连接诊断程序并查看现在的温度。为此添加40(48或58),并将其转换为十六进制。我们正在寻找流中的结果编号。我们正在等待机器温度改变一度,然后检查发现的值。如果其值也增加1,则这是我们需要的传感器。

重要的是不要将CAN总线的值与诊断查询的值混淆。如果您同时在总线上搜索读数并连接了诊断工具,则诊断请求的答案也将出现在总线上。可以通过ID进行标识。通常,超过700个ID就是诊断请求和答案。

同样,总是可以要求冷却液的温度,有关此方法的信息将在下面带有请求的传感器部分中进行描述。

您可以使用另一种方法来搜索温度:在物理上,我们在发动机上找到冷却液温度传感器(DTOZH),将其关闭并将可变电阻器连接至汽车接线。然后,根据搜索快速变化数据的方法旋转电阻器并遵循CAN总线,即可找到发动机温度读数。

实际上,我没有使用此方法,因为ALT始终在流中,或者他们向计算机请求了请求。

4.行驶里程


远程信息处理最重要的参数之一。

首先,您需要评估我们要寻找的数字的大小。如果您使用2个字节(16位)的数据,则最大数量FF FF = 65,535将适合其中,这辆汽车显然可以行驶超过6.5万,这意味着该车辆必须至少具有24位长。已经可以行驶1600万公里了。显然,这足以运行。

但话又说回来,以不同的方式以不同的汽车。在Polo Sedan中,里程以公里为单位,用某些法语则以100米的精度传输。那么该数字可以占用32位或更多位。

对于进一步的搜索,您应该从汽车的仪表盘获取里程,并将其传输到十六进制。



在我们的例子中,它是5732公里。我们将其转换为HEX并得到1664。接下来,搜索您需要找到将发生此组合的行。您需要按一个字节搜索,即首先搜索16,然后在找到的选项中,查看数字16旁边是否还有数字64。数字64可以在数字16的左侧或右侧。大的,然后很可能在数字64旁边也将是00。在Configurator中,可以方便地进行搜索(CTRL + F),如果使用其他工具,则必须手动搜索此数据。

在我们的案例中,里程数为520 ID



00 16 64 = 5732公里。

要进行检查,建议再行驶几公里并检查找到的传感器的值。

以相同的方式在加油之前搜索里程。在这辆车中,仪表板不会将行驶至加油站的里程转移至轮胎,因此应要求提供。

6.液位传感器


远程信息处理的第二重要传感器是油位传感器。您可以在流中找到它,这是更可取的,也可以根据请求找到它(不那么可取,但是在某些汽车中,它的工作方式将有所不同)。

首先,您需要在诊断工具中找到油位读数。在组合仪表盘(17块)中发现了我的燃油水平。在组合仪表中,液位传感器的读数以升为单位。

现在,汽车的燃油量为21升。



我们将DEC从21转换为十六进制,并得到数字15。通过搜索,我们尝试找到它。该流包含ID 320中的给定数字。如果找不到该数字,则应尝试查找一个或多个值。在某些汽车中,燃油的精确度为半公升,因此您需要查找的数值要大两倍。



找到燃油量后,有必要将几升燃油倒入汽车并查看结果。

您还可以按照CAN总线的读数,拆卸储气罐,从储气罐中拉出FLS并移动它。或从FLS上卸下连接器,然后在此处连接一个可变电阻器。旋转并跟随更改,您可以找到燃油油位传感器。如果决定拆卸,则应通过搜索快速变化的传感器的方法来寻找燃油量。

同样,在搜索时,ID超过700的数据也不应考虑,这是诊断查询。断开诊断设备的连接后,该数据将消失。我们将在下面更详细地处理这些请求。

例如,从仪表板查询燃油油位诊断设备的答案看起来像这样。



同样,可以在标准OBDII查询中找到燃油水平(百分比),但是在VAG组中,它们并不总是显示正确的数据。在配备满油箱的Skoda Rapid和Skoda Oktavia上,诊断显示燃油水平为85%。



6.指示传感器


指示传感器与二进制传感器非常相似,应使用相同的方法进行搜索。这些传感器在仪表板上包括各种图标。例如,检查引擎图标的状态在ID 480的第一个字节中。当在此传感器2C中打开点火开关时。



启动后,当Check Engine(CE)图标熄灭时,该传感器中将显示00,



现在问题仍然存在,哪一位负责CE图标。我们将2C转换为BIN并得到数字00101100。

接下来,复制整个480 ID,将第一个字节更改为2C(0010 1100),然后尝试将此数据包发送到汽车。

注意!,将数据发送到汽车并不总是安全的,您可能会破坏某些东西或加速行驶。只有在通过搜索二进制传感器找不到传感器的情况下才值得采用此方法。

就我而言,我被送上了一辆修整的汽车(不建议这样做),并且我的CE和EPC图标闪烁,保持整洁。



然后,我们发送而不是2C(0010 1100)08(0000 1000)。CE整齐地闪烁。因此,此图标由3位元负责。



如果发送04(0000 0100),则EPC图标闪烁。

7.带有请求的传感器


并非所有数据都可以在流中找到。例如,在柴油大众运输车T4中,流中没有发动机温度。她不整洁。因此,您必须向汽车询问这些参数。这同样适用于Rio \ Solaris上的燃油水平。

在此示例中,让我们尝试询问Polo轿车的燃油水平。就像在该段中对燃油水平的搜索一样,我们进入第17块,并询问仪表板。在分析了请求之后,我们看到诊断通过以下命令询问燃油水平:



并针对她:



接下来,复制ID 714,关闭诊断工具,然后尝试向汽车发送请求。如果ID 77E收到的答案与连接诊断程序时得到的答案相同,则我们收到的数据包燃油量为(4字节。十六进制15 = DEC 21)21升。

Vega MTX具有用于处理带有查询的传感器的内置工具。您可以在那里配置在一定间隔或特定条件下打开点火开关后发送请求。

这以在CAN总线中搜索数据的方法结束。如果其他人知道用什么方法在CAN总线上查找必要的数据或分享他们的经验,那么我会很乐意听他们的。

在撰写本文之前,我制作了关于该主题的视频。该视频包含有关使用配置器和文件服务器连接到车辆的CAN总线的更多信息。


链接到配置器

服务器具有一些汽车,卡车和农业机械的设置。所有文件均已加密,您可以在车辆的CAN中看到哪些传感器可见。连接后,传感器值将可见,但无法查看地址。

未完待续。

All Articles