Algo de teoría
La comunicación con la ECU es establecida mediante la norma ISO 15765. Se define una línea CAN-BUS que enlaza los pines 6 (CAN High) y 14 (CAN
Low) del conector OBD con las diferentes sistemas inteligentes del automóvil.
Es necesario realizar peticiones con el ID 7DFh a los sistemas del vehículo para conocer los valores de sensores o parámetros del motor. También se
pueden obtener los códigos DTC (códigos de avería) así como su borrado.
Como norma general se establecen los siguientes modos (MODE) para obtener la información del vehículo:
01h. Show current data
02h. Show freeze frame data
03h. Show stored Diagnostic Trouble Codes
04h. Clear Diagnostic Trouble Codes and stored values
05h. Test results, oxygen sensor monitoring (non CAN only)
06h. Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only)
07h. Show pending Diagnostic Trouble Codes (detected during current or last driving cycle)
08h. Control operation of on-board component/system
09h. Request vehicle information
0Ah. Permanent DTC's (Cleared DTC's)
Para solicitar la información en alguno de los modos antes mostrados, hay que añadir un nuevo parámetro llamado PID que tiene que ser soportado
por la ECU del vehículo.
Como ejemplo, se muestran algunos de los más habituales (todos los vehículos no tienen porque soportar los PIDs mostrados):
Mode
PID
Description
Min value
Max value
Units
Formula
..............................
..............................
01h
0Ah
Fuel pressure
0
765
kPa (gauge)
A*3
01h
0Bh
Intake manifold absolute pressure
0
255
kPa (absolute)
A
01h
0Ch
Engine RPM
0
16,383.75
rpm
((A*256)+B)/4
01h
0Dh
Vehicle speed
0
255
km/h
A
01h
0Eh
Timing advance
-64
63.5
°rel #1 cylinder
A/2 - 64
01h
0Fh
Intake air temperature
-40
215
°C
A-40
01h
10h
MAF air flow rate
0
655.35
grams/sec
((A*256)+B) / 100
01h
11h
Throttle position
0
100
%
A*100/255
..............................
..............................
Petición de información
Byte 0
Número de datos adicionales, 2 (bytes).
Byte 1
Mode.
ej. 01h = show current data;
ej. 02h = freeze frame;
etc.
Byte 2
Código PID.
ej. 05h = Engine coolant temperature;
Byte 3, 4, 5, 6 y 7
No usado.
Respuesta del vehículo
Byte 0
Número de datos adicionales, de 3 a 6 (bytes).
Byte 1
Mode. Mismo valor que en la petición añadiendo 40h.
ej. 41h = show current data;
Byte 2
Código PID.
ej. 05h = Engine coolant temperature;
Byte 3
Valor específico del código PID.
Byte 4, 5, 6
Valores opcionales.
Byte 7
No usado.
Ejemplo: Petición PID 05h (temperatura motor).
byte
0
1
2
3
4 5 6 7
8
7DFh 02h 01h 05h --- --- --- --- --- ---
- 7DFh: Petición de datos.
- 02h: Los datos que se acompañan. En este caso dos (01h y 05h).
- 01h: Mode. Consultar tabla según standard PIDs (mostrar datos actuales).
- 05h: PID. Consultar tabla según standar PIDs (temperatura motor).
Como respuesta el vehículos nos mostrara la siguiente información:
byte
0
1
2
3
4 5 6 7
8
7E8h 03h 41h 05h 50h --- --- --- --- ---
- 7E8h: Respuesta de datos.
- 03h: Los datos que se acompañan. En este caso tres (41h, 05h y 60h).
- 41h: Mode. Respuesta a la consulta de Mode + 40h (01h + 40h).
- 05h: PID consultado (temperatura motor).
- 50h: Valor del PID consultado. Para nuestro caso y aplicando la fórmula según norma establece que el valor real de la
temperatura será de “A- 40”; es decir 20º (50h --> 80d - 40 = 40ºC)
Nota:
Parte de esta información ha sido recogida de Wikipedia, donde se puede obtener un buen resumen de los PID así como su interpretación.
Bricos Peugeot 308