Al crear la aplicación del lector OBD2, enfrentamos muchas preguntas, problemas, etc., por lo que intentaremos familiarizarlo con ellos en este artículo. Al final resultó que, puede realizar un diálogo con el automóvil, y bastante productivo. Sin embargo, para comenzar a comunicarse con el automóvil, es necesario "establecer contacto", "hacer la pregunta correcta" y comprender correctamente la "respuesta" recibida del automóvil. En consecuencia, el artículo tendrá como objetivo explicar claramente la organización del diálogo, así como decirle qué errores puede encontrar en el camino y cómo tratarlos.
Inicialmente, es necesario aclarar que se utilizará un adaptador ELM327 para conectarse al automóvil. ELM327 es un microcircuito que permite convertir los protocolos que se utilizan en los diagnósticos de los neumáticos de los coches al protocolo RS232, que utilizaremos para la transmisión de datos. Debido a que la transmisión de datos a través del protocolo RS232 se realiza de forma secuencial, surge el problema de la baja tasa de transferencia de datos, que intentaremos sortear en uno de los siguientes apartados.
Hay varias variaciones del adaptador ELM327, que se clasifican según el método de transferencia de datos: Bluetooth, WIFI, USB. Basado en el hecho de que el objetivo de desarrollo es un dispositivo móvil con el sistema operativo Android, puede elegir las dos versiones más adecuadas de ELM327, como Bluetooth y WIFI. Dado que solo hay un método para recibir y procesar datos, y solo difieren en las opciones para conectarse al adaptador, puede elegir solo uno, organizar un diálogo con él y luego agregar el resto de las opciones de conexión.
Una de las primeras tareas a las que te puedes enfrentar es el problema de elegir el propio adaptador, en nuestro caso con soporte Bluetooth. Resulta que si desea admitir todos (al menos la mayoría) de los automóviles, debe elegir la versión v1.5 en lugar de la v2.1. De hecho, debe aclarar esto varias veces al comprar un adaptador, porque algunos vendedores cometen errores en la descripción de la versión, porque las versiones no son muy diferentes. De hecho, v2.1 carece de soporte para los protocolos J1850 PWM y J1850 VPW, lo que significa que no podrá conectarse a automóviles que usen estos protocolos.
La conexión al adaptador se realiza en varias etapas:
Con la organización de la conexión en general, todo está claro. El principio de funcionamiento es el mismo que para cualquier chat Bluetooth/WIFI. Para comprender cómo enviar una cadena de inicialización, debe estudiar qué comandos existen, así como qué funciones realizan.
AT Z [restablecer todo]
Restablecer la configuración del adaptador al estado de fábrica
EN L1-0
Habilitar / deshabilitar caracteres de avance de línea
EN E1-0
Eco encendido – apagado
EN H1-0
Cabeceras activadas – desactivadas
EN AT0-1-2
Temporización adaptativa desactivada — Temporización adaptativa Auto1 — Temporización adaptativa Auto2
EN ST FF
Establezca el tiempo de espera en el valor máximo.
AT D [establecer todo a Predeterminado]
Restablezca la configuración al estado original configurado por el usuario.
AT DP [Describa el Protocolo actual]
El escáner puede determinar de forma independiente el protocolo del vehículo al que está conectado.
AT IB10 [fije la tasa de baudios ISO a 10400]
El comando establece la velocidad en baudios para ISO 9141-2 y
ISO 14230-4 10400
AT IB96 [ establezca la velocidad de transmisión ISO en 9600]
El comando establece la velocidad en baudios para ISO 9141-2 y
ISO 14230-4 9600 para protocolos 3,4,5.
AT SP h [ Establecer protocolo h]
Comando de selección de protocolo h, donde h es:
0 – Automático;
1 — SAE J1850 PWM (41,6 kbaudios);
2 — SAE J1850 VPW (10,4 kbaudios);
3 — ISO 9141-2 (inicial de 5 baudios, 10,4 kbaudios);
4 — ISO 14230-4 KWP (inicial de 5 baudios, 10,4 Kbaudios);
5 — ISO 14230-4 KWP (inicio rápido, 10,4 Kbaudios);
6 — ISO 15765-4 CAN (ID de 11 bits, 500 Kbaudios);
7 — ISO 15765-4 CAN (ID de 29 bits, 500 Kbaudios);
8 — ISO 15765-4 CAN (ID de 11 bits, 250 Kbaudios);
9 — ISO 15765-4 CAN (ID de 29 bits, 250 Kbaudios);
AT SP Ah [Establecer protocolo h con Auto]
El comando establece el protocolo h de forma predeterminada, si falla la conexión h, el adaptador inicia la selección automática del protocolo.
Según los comandos descritos anteriormente, formamos una cadena de inicialización.
Es deseable permitir que el usuario cambie los comandos de inicialización porque, para encontrar la "clave" para algunos automóviles, es necesario elegir configuraciones de adaptador más específicas. En nuestro caso, se utilizan los ajustes adecuados para la mayoría de los protocolos estándar.
También es conveniente prestar atención al comando APSP0, por lo que configuramos la selección automática del protocolo de forma predeterminada, y esto puede llevar algún tiempo.
En consecuencia, si el usuario sabe qué protocolo tiene su automóvil, puede cambiar 0 a su número de protocolo usando la capacidad de cambiar el protocolo de conexión.
Para leer datos de diagnóstico, se utilizan comandos especiales de PID.
PID (ID de parámetros de diagnóstico a bordo): códigos que se utilizan para consultar los valores de los indicadores de ciertos sensores del vehículo.
Los pid básicos se pueden encontrar en Wikipedia, que contiene un conjunto completo de comandos básicos que todos los automóviles deberían admitir. También hay conjuntos de comandos para ciertas marcas y tipos de automóviles, estos conjuntos están disponibles por una tarifa. En nuestro caso, la aplicación se centra en el diagnóstico básico del automóvil, por lo que utilizamos un conjunto básico de comandos.
También es posible recibir los datos actuales del coche, mientras que el comando para recibir datos del coche tendrá inicialmente 01, indicando que queremos recibir datos reales. Si queremos obtener los datos guardados del automóvil, al comienzo del comando es necesario especificar 02. Por ejemplo, el comando para obtener la velocidad actual del automóvil es 010D y para obtener la velocidad almacenada - 020D .
Si observa detenidamente la cantidad de comandos que proporcionan los recursos abiertos, puede notar el problema sobre el que escribí al principio, es decir, el problema de la baja velocidad de respuesta del adaptador. Dado que el envío y la recepción de comandos se realizan de forma secuencial, para recibir las lecturas del sensor en un momento determinado, debe esperar una respuesta a todos los comandos anteriores.
En consecuencia, si solicita recibir todos los comandos, existe una alta probabilidad de que la actualización de los datos reales sea muy lenta. Pero incluso este problema se puede resolver mostrando solo los comandos que existen en el automóvil.
Por ejemplo:
0100 – PIDs supported [01 — 20]
0120 – PIDs supported [21 — 40]
0140 – PIDs supported [41 — 60]
0160 – PIDs supported [61 — 80]
0180 – PIDs supported [81 – A0]
01A0 – PIDs supported [A1 — C0]
Demostraré cómo determinar qué sensores están presentes en el automóvil utilizando uno de los pid. Por ejemplo:
0100 \\ requestBB1E3211 \\ respuesta del coche
Traducimos la respuesta del auto a un sistema numérico binario
traducir a un sistema numérico binario
Usando la siguiente tabla, podemos determinar qué pids son compatibles con nuestro automóvil, comenzando desde 01 hasta 20:
Según los datos resultantes, podemos determinar que nuestro automóvil admite los siguientes pid:
Ahora, en lugar de enviar los 32 comandos y esperar una respuesta, a pesar de que pueden faltar algunos, usaremos solo 15 comandos. Sin embargo, este no es el final de la llamada optimización. Para que los datos se actualicen aún más rápido, le aconsejo que solicite solo datos sobre aquellos sensores que se muestran en la pantalla. Aunque esto limita algunas de las funcionalidades de la aplicación. Por ejemplo, la grabación de la historia.
Los errores de los vehículos también pueden ser diferentes y existen comandos específicos para ellos. Por ejemplo:
03 – Para mostrar códigos de error almacenados 0A – Para mostrar códigos de error permanentes.
Al igual que con otros comandos, los errores del vehículo vienen en forma codificada, respectivamente, como en otros comandos, deben decodificarse para obtener la información necesaria. Daré un ejemplo de cómo funciona la decodificación de errores. El código:
Y ahora una explicación.
Según la respuesta recibida, podemos obtener un código de error. Para ello, decodificamos el mensaje recibido utilizando las siguientes tablas.
primer personaje:
Segundo carácter:
Se forman 3, 4, 5 caracteres según esta tabla:
En base a esto, podemos intentar analizar la siguiente respuesta:
0001000000111110
Código de error: P103E
En esta etapa, descubrimos cómo organizar un diálogo con el adaptador, enviarle comandos, recibir y descifrar sus respuestas. Esta es la mayor parte del trabajo, teniendo en cuenta el tiempo que lleva estudiar la documentación, pero al mismo tiempo es bastante interesante. Fuera de la discusión de este artículo, hay muchos problemas asociados con la interfaz visual, así como muchas funciones adicionales, como agregar nuevos pids desde un archivo, una forma estándar y avanzada de conectarse al adaptador y trazar gráficos.
Publicado anteriormente en SDD Technology