Diseño de firmware para OBD2: solicitud de PID disponibles a la ECU

5

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.

    
pregunta clmno

2 respuestas

3

@Lundin Lo siento por el comentario disfrazado de una respuesta, pero no tengo el representante para un comentario. Lo siento, pero el uso del PID por parte del OP se remonta al menos a 1996 con la estandarización de los Diagnóstico a bordo puerto (OBD-II). PID en este caso significa ID de parámetro y, como tal, es utilizado por todos los fabricantes de vehículos de EE. UU. (Desde 1996) y la mayoría Otros en el mundo (al menos 2001). Al ver que OBD-II es tanto una SAE (La Sociedad de Ingenieros Automotrices) como una norma ISO, voy a suponer que alguien entre los dos sabía cómo programar y estaba bien con el uso. Además, en cualquier momento en el que esté fuera de su área de especialización, es posible que no quiera saltar a alguien para lo que puede ser de uso común en otra área. Es obvio (ya que no entendió el uso del PID por parte del OP) que no ha pasado ningún tiempo en diagnósticos de automoción o que hubiera sabido lo que era un PID en el contexto del OBD-II, lo que el OP dejó en claro. Además, esta es la Ingeniería Eléctrica SE no una de programación, ¿por qué hacer la suposición?

EDITAR: @Lundin Parece que sabes lo que es OBD-II (o al menos el canbus), ¿por qué el comentario sobre el uso de PID?

    
respondido por el GB - AE7OO
0

pruebe con otras ID, como 0x7E2 ver ejemplos allí: enlace

    
respondido por el Raerg Hoitc

Lea otras preguntas en las etiquetas