我想使用OBD2蓝牙/ USB适配器测量汽车油箱内的当前燃油油位。
当我尝试查询PID时,我将后续数据称为“无数据”,同时我可以检查其他PIDS,如RPM,所有数据都可以。
我有一个小的python程序,它读取它但我无法得到它。
import serial
#ser = serial.Serial('COM12',38400,timeout=1)
#ser.write("01 2F \r")
#speed_hex = ser.readline().split(' ')
#print speed_hex
#convert hex to decprint ("SpeedHex",speed_hex)
#speed = float(int('0x'+speed_hex[3],0))
#print ('Speed',speed,'Km/h')
ser1 = serial.Serial("COM12",38400,timeout=1)
#ser1.write("ATZ \r")
#ser1.write("ATE0 \r")
#ser1.write("ATL0 \r")
#ser1.write("ATH1 \r")
#ser1.write("ATSP 5 \r")
ser1.write("01 0C \r")
fuel_hex= ser1.readline()
print fuel_hex
#convert to hex to decprint ("FuelHex",fuel_hex)
#fuel = float(int('0x'+fuel_hex[3],0))
#print ("Fuel in Per",fuel)
任何人都可以在这里建议如何在当前时间获得汽车内部的燃油油位。正如我在带有条形符号的面板中看到的那样。
答案 0 :(得分:1)
为了获得车辆中所有可用的PID,您必须首先请求以下PID,就像您询问车辆的转速一样:
0x00
,0x20
,0x40
,...... 0x80
等等。
例如,当您请求PID 0x00
时,ECU将返回4个字节,这意味着它支持来自0x01 - 0x20
的PID。每个字节总共有8位,共32位,完全是从PID 0x01
到PID 0x20
。现在是解析数据的时候了。如果每个位为1,则表示ECU将支持,0表示不支持。你有责任做一些按位操作来翻译这些位:
另外,你可以看一下图形中显示的Wikipedia link!
字节1位1:PID 0x01
字节1位2:PID 0x02
字节1位3:PID ox03
...
字节4位7:PID 0x1F
字节4位8:PID 0x20
的可用性 - >这里ECU告诉您是否支持接下来的32个PID中的任何PID。如果是0,则不需要再检查了!
解析并收集所有支持的PID后,您可以制定路线图来计算或检查所需的每个PID。不要忘记许多转换率由于计算的复杂性,维基百科中的公式是错误的。您必须阅读ISO 15031 part 5并且不要忘记ECU仅为您提供与排放相关的诊断而不是所有数据。