De acuerdo con muchas documentaciones, podemos solicitar a la ECU del vehículo que responda con los PID que admite. Enlace . Mi pregunta está al final.
He diseñado un escáner OBD2 utilizando STM32 y CAN. Y funciona perfectamente cuando uso el ID de solicitud de transmisión ( 0x7DF
) y la solicitud de PID individuales (como RPM, Velocidad, etc.). Pero en este caso, si varias ECU son compatibles con un PID particular, mi escáner recibirá múltiples respuestas para una sola solicitud. Entonces decidí elegir una ECU (no la ID de transmisión). Para este enfoque, necesitamos conocer los PID admitidos en una ECU y, por lo tanto, uso 0x00
en Mode 1
(consulte el enlace).
Pruebas con emulador
Esta solicitud cuando se probó con un emulador OBD2 estaba recibiendo una trama OBD2 esperada. En el que data[0]
es el msg-type
[identificando si se trata de una trama CAN, puede un cuadro consecutivo o de cualquier otro tipo] data[1]
es el byte que diferencia la respuesta PID o la respuesta DTC. Data[2]
es el valor PID solicitado. Y finalmente, el resto son los bytes de datos reales. Por ejemplo: una solicitud PID 0x0c (RPM) ha devuelto 2 bytes y, por lo tanto, tendrá datos 2 y datos 4 .
Y en mi caso, solicité el modo PID 0x00 1 y obtuve datos [3: 6]. Como se trataba de un emulador, todos los PID eran compatibles con la ECU.
Bench probó mi lógica con el emulador funcionó. Datos recibidos:
Pruebasenunautomóvil
Cuandoprobéestemismocódigoenunautomóvil,larespuestaqueobtuvenoestabadeacuerdoconloquerecibídurantelaprueba.Probédoscasos:
1.SolicitarunsoloECU(0x7E0)
parasusPIDadmitidos
2.Usandounasolicituddedifusión(0x7DF)
Enelcaso1
Larespuestaquerecibí:
Nopuedoentenderloquerepresentacadaunodelosbytes.
Enelcaso2
Aquí los datos recibidos parecen correctos, excepto el hecho de que se repiten data[0]
y data[1
]. Pero el resto es correcto, verifiqué los PID compatibles con un escáner que compré.
Mis preguntas
1. ¿Se supone que solo solicito un PID disponible con un ID de solicitud de transmisión?
2. ¿Por qué la respuesta de ECU 1 no es estándar a otras tramas ODB2?
3. Si tiene experiencia o sabe de algún proyecto en el que se diseñó un escáner OBD, ¿podría compartir el enlace?
EDITAR / PROGRESO
La prueba anterior fue hecha para Maruti Suzuki Swift. Hace un tiempo probé el mismo código en un Hyundai Accent y recibí la misma respuesta que se ve en el "caso 2", es decir, probé la transmisión y probé la comunicación directamente a la ECU, lo que resultó en un cuadro similar al visto en el caso 2 imágenes.
Pero aún así, estoy recibiendo dos bytes con datos 16 en lugar de un solo byte con datos 6. ¿Alguna idea de por qué podría haber un byte extra?
No estoy seguro de si estoy haciendo las preguntas correctas.