Introducción al protocolo CAN Bus de Internet de los vehículos y procesamiento de flujo de datos en tiempo real

¿Qué es CAN Bus?

El bus CAN (Red de área de control) es un protocolo de comunicación en serie que permite una transmisión de datos confiable y eficiente entre dispositivos. Es muy utilizado en el campo de los vehículos, conectando varias unidades de control electrónico en el interior del vehículo como un sistema nervioso.

El CAN Bus fue diseñado originalmente por Bosch en la década de 1980 para aplicaciones automotrices. Es un protocolo multimaestro, multiesclavo, semidúplex, tolerante a fallos, muy adecuado a las necesidades del sector de la automoción. Es simple, de bajo costo, confiable y capaz de trabajar en ambientes hostiles. El bus CAN proporciona un punto de acceso unificado para todas las unidades de control electrónico del vehículo para facilitar la conexión y el diagnóstico.

Los datos del bus CAN pueden reflejar el rendimiento y el estado de los dispositivos conectados. Sin embargo, recopilar y procesar datos de CAN Bus puede ser un desafío debido a factores como grandes volúmenes de datos, ancho de banda limitado e inestabilidad de la red.

Para hacer frente a estos desafíos, el protocolo MQTT se puede utilizar para garantizar la transmisión oportuna de los datos del vehículo a la nube en caso de malas condiciones de la red. EMQX es un agente MQTT de código abierto que puede crear una infraestructura MQTT confiable y escalable para recopilar datos de CAN Bus.

Recopilación de datos de bus CAN

Una breve historia del desarrollo del bus CAN

El CAN Bus fue desarrollado por Bosch, un gigante de ingeniería multinacional alemán, a principios de la década de 1980 para proporcionar un sistema de comunicación eficiente para aplicaciones automotrices, con el objetivo principal de simplificar la complejidad del arnés de cableado interno del vehículo.

En 1986, Bosch lanzó el primer protocolo CAN, que rápidamente fue adoptado por los fabricantes de automóviles debido a su confiabilidad y robustez. En 1993, se convirtió en la norma internacional ISO-11898. El proceso de evolución del protocolo es más o menos como sigue:

  • 1991: Mercedes-Benz adoptó CAN Bus en su Clase S W140, convirtiéndose en uno de los primeros fabricantes de automóviles en adoptar CAN Bus.
  • 2004: Se presenta CAN FD, que ofrece velocidades de datos más altas y cargas útiles más grandes que las redes CAN convencionales.
  • 2015: uso de ISO-16845:2015 como solución de prueba para pruebas de conformidad para pruebas de conformidad de dispositivos que implementan los protocolos clásicos CAN y CAN FD.

Además del campo de la automoción, el protocolo CAN Bus se está utilizando paulatinamente en otras industrias, como los sistemas de automatización industrial (CANopen) y la electrónica marina (NMEA 2000). Su amplia aplicación se debe principalmente a su operación estable en condiciones adversas y bajo costo de implementación.

Cómo funciona el bus CAN

CAN Bus es un protocolo de comunicación distribuida. Su naturaleza distribuida lo hace ideal para aplicaciones que requieren alta confiabilidad y rendimiento en tiempo real, como los sistemas automotrices e industriales.

En la red CAN, todos los nodos están conectados por par trenzado o fibra óptica. Cada nodo tiene su propio microcontrolador y es responsable de procesar los mensajes entrantes y salientes. Los datos son transmitidos por los nodos en el bus compartido y pueden ser recibidos por todos los demás nodos. Varias etapas clave del proceso de comunicación incluyen:

  1. Arbitraje: para evitar conflictos causados ​​por múltiples nodos que envían datos al mismo tiempo, CAN adopta un proceso de arbitraje basado en la prioridad del mensaje. Cuanto menor sea el valor del identificador del mensaje, mayor será la prioridad.
  2. Detección de errores: el mecanismo de detección de errores integrado garantiza la integridad de los datos en la red CAN. Estos mecanismos incluyen la verificación de redundancia cíclica (CRC), la secuencia de verificación de tramas (FCS) y los bits de reconocimiento del nodo receptor.
  3. Confinamiento de fallas: si un nodo detecta un error o falla durante la transmisión, ingresa en un estado de "error pasivo" hasta que se resuelva el problema. Este mecanismo evita que las fallas interfieran con la funcionalidad general del sistema.

Estas funciones funcionan juntas para permitir que el bus CAN funcione de manera eficiente, lo que garantiza una comunicación confiable entre los componentes en sistemas complejos, como vehículos o equipos de automatización de fábricas.

Estructura del mensaje del protocolo CAN

En un sistema CAN Bus, la estructura del mensaje es muy importante para una comunicación eficiente entre dispositivos. El formato de la trama de datos del protocolo consta de los siguientes campos: identificador, campo de control, campo de datos y mecanismo de detección de errores.

  • Identificador (CAN ID): Este es un valor único que se utiliza para determinar la prioridad de cada mensaje en la red. El identificador estándar de 11 bits (CAN 2.0A) proporciona hasta 2048 prioridades diferentes. El identificador extendido de 29 bits (CAN 2.0B) brinda más opciones con más de 500 millones de prioridades.
  • Código de longitud de datos (DLC): Ubicado en el campo de control, se utiliza para especificar la cantidad de bytes que contiene el campo de datos y el valor varía de 0 a 8 bytes.
  • Campo de datos: contiene la información real que se transmitirá entre los nodos, en bytes.
  • Comprobación de redundancia cíclica (CRC): mecanismo integrado de detección de errores que garantiza la fiabilidad de las comunicaciones mediante la detección de errores de transmisión y la solicitud de retransmisiones si es necesario.
  • Ranura de acuse de recibo: un solo bit utilizado por el nodo receptor para enviar un acuse de recibo al nodo emisor, lo que indica que el mensaje se recibió con éxito o que se requirió una retransmisión por error.
  • Trama de error: una parte opcional de un mensaje CAN utilizada por un nodo para señalar cuando detecta un problema con un mensaje que ha enviado o recibido.

tipos de latas

CAN incluye principalmente tres tipos:

CAN de baja velocidad

CAN de baja velocidad, también conocido como CAN tolerante a fallas o ISO 11898-3, tiene una velocidad de transmisión máxima de 125 kbps. Es adecuado para sistemas menos críticos como módulos de control de carrocería, cerraduras de puertas, controles de ventanas, etc., que no requieren una alta velocidad de transmisión de datos. Su principal característica es que aunque se rompa un cable del bus, puede seguir funcionando con normalidad.

CAN de alta velocidad

CAN de alta velocidad, o ISO 11898-2, transfiere a velocidades de hasta 1 Mbps. Debido a que tiene una velocidad de transferencia de datos más rápida que una red de baja velocidad, es adecuada para aplicaciones que requieren una respuesta oportuna, como los sistemas de gestión del motor y los sistemas de frenado electrónico. Sin embargo, no tiene la tolerancia a fallos de las redes de baja velocidad.

PUEDE FD

Presentado por Bosch en 2012, CAN FD es una versión extendida de la red de alta velocidad con velocidades de transferencia de datos más altas de hasta 5 Mbps y es compatible con dispositivos de alta velocidad existentes. La ventaja clave de esta tecnología es que puede transmitir cargas más grandes de manera más eficiente que el CAN convencional, lo que la hace ideal para los sistemas electrónicos cada vez más complejos de los vehículos modernos.

Ventajas y desafíos del bus CAN

¿Cuáles son las principales ventajas de CAN Bus?

Los datos de CAN Bus pueden reflejar el rendimiento, la salud y las características de comportamiento del vehículo. La recopilación de datos de CAN Bus en la nube es una forma efectiva de utilizar el potencial de los datos del vehículo, y el valor de los datos se puede descubrir a través del análisis de big data. Al aplicar el aprendizaje automático, la inteligencia artificial u otras herramientas analíticas a la gran cantidad de datos recopilados de los vehículos, los fabricantes de vehículos pueden obtener información valiosa y utilizarla para optimizar el rendimiento del vehículo.

  • Detectar, eliminar, predecir fallas: al analizar los datos del bus CAN, se pueden identificar anomalías o señales erróneas de dispositivos y sensores. Esto ayuda a diagnosticar la causa raíz del problema y solucionarlo antes de que cause más daños o cree un problema de seguridad. Los fabricantes también pueden usar los datos recopilados para entrenar modelos de aprendizaje automático para predecir fallas.
  • Visualización de datos de vehículos: los usuarios pueden usar los datos recopilados para crear un sistema que muestre datos completos en un tablero, lo que permite filtrar, clasificar y comparar diferentes vehículos e indicadores. El tablero también proporciona alertas y recomendaciones basadas en el análisis de datos, brindando a los usuarios una visión holística del rendimiento.
  • Coordinación vehículo-carretera: al combinar los datos recopilados con los datos de infraestructura vial, se puede establecer un sistema de coordinación vehículo-carretera.

En la era de la inteligencia artificial, los datos son el activo más valioso. Al recopilar datos de vehículos en la nube y luego distribuirlos a varias infraestructuras de datos, como bases de datos y lagos de datos, los usuarios pueden utilizar los datos para implementar varios tipos de aplicaciones.

¿Cuáles son los desafíos de la recopilación de datos en tiempo real?

Aunque la recopilación de datos de CAN Bus localmente en el vehículo es bastante madura, debido a la alta velocidad de datos, el bajo ancho de banda y el entorno de red inestable, recopilar, procesar y transmitir datos de CAN Bus a la nube en tiempo real enfrenta grandes desafíos. No es práctico transmitir todos los datos de CAN Bus a la nube para su procesamiento. Por lo tanto, los datos de CAN Bus se pueden recopilar y procesar localmente en el perímetro para reducir la cantidad de datos, y luego los resultados del procesamiento se pueden transmitir a la nube en tiempo real.

Necesitamos al menos dos componentes para construir una solución de este tipo:

  1. Motor de computación perimetral: el motor de computación perimetral solo puede recopilar las señales de bus CAN requeridas, procesarlas de manera flexible y activar acciones de transmisión MQTT en tiempo real. LF Edge eKuiper es un motor informático de borde de código abierto que puede ayudarlo a procesar y analizar datos de CAN Bus en tiempo real.
  2. MQTT Broker en la nube: con MQTT Broker, los datos procesados ​​del bus CAN se pueden transmitir a la nube en tiempo real. EMQX es un agente MQTT de código abierto que puede crear una infraestructura MQTT confiable y escalable para recopilar datos de CAN Bus.

A continuación, presentaremos en detalle la solución general que combina EMQX y eKuiper.

Abordar los desafíos del procesamiento local de datos CAN Bus

eKuiper es un motor informático de borde de código abierto que puede ayudarlo a procesar y analizar datos de CAN Bus en tiempo real. eKuiper está diseñado para el procesamiento de flujo de borde, adecuado para el procesamiento en tiempo real de datos de flujo típicos generados por CAN Bus. eKuiper aborda los siguientes desafíos:

  • Poseer la capacidad de procesar eficientemente datos de gran capacidad y alta velocidad de CAN Bus en tiempo real. La capacidad de filtrar, procesar y seleccionar señales de interés de manera flexible reduce el ancho de banda necesario para transmitir datos.
  • Capacidad para analizar tramas CAN binarias en señales significativas para el procesamiento de reglas y la activación de acciones. Admite la carga dinámica de archivos DBC, lo que permite a los usuarios cambiar los archivos DBC de manera flexible y adaptarse a diferentes dispositivos CAN Bus sin reiniciar el motor. Al mismo tiempo, también garantiza la privacidad y seguridad de los archivos DBC sin exponerse al equipo de desarrollo.
  • Con la capacidad de combinar de manera flexible señales de diferentes marcos CAN, se pueden construir mensajes completos mediante reglas para que las aplicaciones los utilicen. Los usuarios también pueden modificar libremente las reglas para adaptarse a diferentes escenarios de usuarios o cambios en los requisitos, y admitir la carga en caliente.

Tutorial: Use eKuiper para realizar el procesamiento local de datos de CAN Bus

Paso 1: Conéctese al bus CAN

eKuiper utiliza un complemento de fuente CAN para conectarse al bus CAN y recibir tramas CAN. Admite dos modos de conexión de CAN Bus, como se muestra en la siguiente figura.

eKuiper admite dos modos para conectarse al bus CAN

  1. Conéctese directamente al bus CAN a través de socketCan. SocketCAN utiliza la API de socket de Berkeley, la pila de red de Linux e implementa controladores de dispositivos CAN como una interfaz de red. Una vez que el bus CAN está conectado al sistema Linux, el usuario puede obtener la interfaz de red CAN. En eKuiper, los usuarios pueden crear transmisiones CAN especificando la interfaz de red CAN y la ruta del archivo DBC . Luego, se puede aplicar cualquier regla al flujo CAN para procesar los datos del bus CAN.
  2. Utilice TCP/UDP para conectarse al bus CAN a través de la puerta de enlace. La puerta de enlace puede ser un adaptador CAN que combina varios marcos CAN en un paquete de datos y lo envía por lotes a través de TCP o UDP. Tenga en cuenta que el formato del paquete enviado por la puerta de enlace no está estandarizado, por lo que es posible que sea necesario modificar el complemento para adaptarlo. En eKuiper, los usuarios pueden crear transmisiones CAN especificando la dirección TCP/UDP y la ruta del archivo DBC . Luego, se puede aplicar cualquier regla al flujo CAN para procesar los datos del bus CAN.

Paso 2: decodificar los datos del bus CAN

Los datos del bus CAN son datos binarios y en unidades de tramas, y las tramas CAN constan de varios campos. Existen varias versiones del protocolo CAN, incluidas CAN 2.0A, CAN 2.0B y CAN FD. Las diferentes versiones del formato de cuadro CAN son ligeramente diferentes. La siguiente figura muestra el formato de trama CAN 2.0A.

Formato de cuadro CAN 2.0A

Entre ellos, dos campos son importantes para decodificar los datos del bus CAN:

  1. Campo ID: El campo ID se utiliza para identificar el marco CAN. El campo ID de CAN 2.0A es de 11 bits y el de CAN 2.0B y CANFD es de 29 bits.
  2. Campo de datos: el campo de datos es la carga útil y se utiliza para transportar los datos reales. CAN 2.0A y CAN 2.0B son 0-8 bytes, y CAN FD es 0-64 bytes.

En la carga útil, los datos consisten en una serie de señales, cada una con su propio nombre, longitud y posición. Un archivo DBC es un archivo de texto que contiene información para decodificar datos de bus CAN sin procesar en "valores físicos". Este archivo define el nombre de la señal, la longitud, la ubicación y la fórmula de conversión utilizada para convertir datos sin procesar en valores físicos.

En eKuiper, los usuarios pueden especificar la ruta del archivo DBC para usar al analizar los datos del bus CAN. La configuración de DBC en eKuiper es muy flexible y segura.

  • Múltiples archivos DBC: el usuario puede seleccionar un directorio como la ruta DBC, y los archivos DBC en el directorio se cargarán uno por uno en orden alfabético y surtirán efecto. Este enfoque permite al usuario agregar o restaurar señales de forma incremental a través de archivos DBC separados.
  • Carga dinámica de archivos DBC: los archivos DBC se cargan en tiempo de ejecución y no es necesario implementarlos en el momento del desarrollo. Esto ayuda a los usuarios a mantener sus archivos DBC privados y seguros.
  • Carga en caliente: los usuarios pueden cambiar el archivo DBC en cualquier momento para adaptarse a diferentes dispositivos CAN Bus sin reiniciar el motor.

Después de configurar la fuente CAN de eKuiper, los usuarios pueden crear un flujo para recibir y analizar los datos del bus CAN para extraer señales físicas significativas de ellos. Por ejemplo, una carga útil CAN 0x0000000000000000se puede analizar en las siguientes señales:

{
  "signal1": 0,
  "signal2": 0,
  "signal3": 0,
  "signal4": 0,
  "signal5": 0,
  "signal6": 0,
  "signal7": 0,
  "signal8": 0
}

Luego, los usuarios pueden usar las poderosas capacidades de procesamiento de flujo de eKuiper para procesar de manera flexible los datos analizados como si recibieran datos de MQTT.

Paso 3: Procesar datos de bus CAN

Después de obtener los datos analizados, podemos usar eKuiper para realizar varias operaciones en ellos. Para ahorrar ancho de banda para la transmisión de datos, podemos seleccionar solo las señales de interés. Por ejemplo, puede seleccionar solo las dos señales signal1y .signal2

{
  "signal1": 0,
  "signal2": 0
}

Esto se puede lograr fácilmente con la sentencia SQL de eKuiper:

SELECT signal1, signal2 FROM canStream

Debido al tamaño limitado de un cuadro CAN, es posible que necesitemos extraer la señal deseada de varios cuadros CAN. Por lo tanto, podemos combinar de manera flexible las señales en diferentes marcos CAN utilizando algoritmos según sea necesario para crear un mensaje completo para la aplicación. Puede conocer más detalles en el ejemplo de fusión de datos . Aquí, usamos señal1 como la condición principal para filtrar los datos.

SELECT signal1, latest(signal2) as signal2 FROM canStream WHERE isNull(signal1) = false

Otro ejemplo es recopilar datos solo cuando ocurren ciertos eventos, lo que puede reducir significativamente el consumo de ancho de banda. Por ejemplo, podemos recopilar datos solo cuando la señal1 supera los 100.

SELECT signal1, signal2 FROM canStream WHERE signal1 > 100

Además, estas reglas de procesamiento son muy flexibles y pueden modificarse en cualquier momento . Incluso si las señales requeridas no se identifican en la etapa inicial, no hay necesidad de preocuparse, puede ajustar las reglas en cualquier momento a medida que cambien sus necesidades e implementar la recarga en caliente.

Además del uso común de recopilación de datos, eKuiper también se puede aplicar a otros escenarios, como:

  1. Motor de reglas flexible y en tiempo real en el lado del vehículo: las acciones correspondientes se pueden activar de acuerdo con condiciones específicas. Por ejemplo, cierre automáticamente las ventanas cuando la velocidad supere las 70 mph.
  2. Análisis inteligente flexible: los datos y los modelos de IA (actualmente TF Lite) se pueden combinar sin codificación ni conexión a la nube. Esta función permite el análisis de datos en tiempo real, como predecir y sugerir patrones de conducción basados ​​en datos como la velocidad y la presión de los neumáticos (incluso sin conexión a la red).
  3. Edge computing: puede reducir el ancho de banda de transmisión, reducir la presión de la computación en la nube y analizar, reorganizar y convertir datos, como calcular y guardar la velocidad promedio durante un período de tiempo.
  4. Integración de datos heterogéneos: los datos de diferentes protocolos (TCP, UDP, HTTP, MQTT) y diferentes formatos (CAN, JSON, CSV, etc.) se pueden analizar y fusionar mediante reglas flexibles.
  5. Enrutamiento de mensajes: puede decidir qué datos se envían a la nube y qué datos se almacenan localmente para que los usen otras aplicaciones en el vehículo. Por ejemplo, enrutamiento basado en GDPR o alguna lista blanca.

Utilice MQTT para recopilar datos de bus CAN

El uso de MQTT Broker como EMQX para recopilar datos de CAN Bus tiene las siguientes ventajas:

  • Reduzca la sobrecarga de la red: MQTT utiliza un formato binario y un encabezado mínimo para codificar los mensajes, lo que puede ahorrar ancho de banda de la red y mejorar la eficiencia de la transmisión de datos.
  • Mejore la escalabilidad: un solo MQTT Broker puede admitir miles de conexiones simultáneas y millones de mensajes por segundo. Esto permite la recopilación de datos a gran escala desde múltiples dispositivos CAN Bus sin comprometer el rendimiento o la confiabilidad.
  • Seguridad mejorada: MQTT admite varios mecanismos de seguridad, como el cifrado TLS/SSL, la autenticación de nombre de usuario/contraseña y la lista de control de acceso (ACL) para evitar el acceso no autorizado o la manipulación de datos.
  • Interoperabilidad mejorada: MQTT se basa en estándares abiertos y es ampliamente compatible con varias plataformas y lenguajes. Esto facilita la integración de datos CAN Bus con otros sistemas o aplicaciones.

Además, EMQX proporciona muchas otras funciones y puede funcionar con eKuiper para ayudar a los usuarios a ahorrar ancho de banda, reducir las demoras y mejorar la confiabilidad al transmitir datos de CAN Bus.

ahorrar ancho de banda

Cuando transmitimos datos de CAN Bus a través de MQTT, generalmente necesitamos transmitir en un entorno de red débil con ancho de banda limitado. Por lo tanto, necesitamos minimizar el tamaño de los datos.

En eKuiper sumidero, podemos usar formatopciones para especificar el formato de los datos. El formato predeterminado es JSON. Podemos cambiar esto protobufpara serializar los datos en un formato binario para reducir significativamente el tamaño de los datos. Además, podemos usar compressopciones para comprimir datos mediante gzipu otros métodos de compresión. De esta forma, podemos hacer que el tamaño de los datos sea mucho más pequeño que los datos JSON originales. En uno de nuestros casos de prueba, el tamaño de los datos se puede reducir en más del 90 % cuando se envían datos por lotes.

Datos en tiempo real

Para las aplicaciones en la nube, algunos datos son sensibles al tiempo, como los datos utilizados para el diagnóstico de accidentes de vehículos. En este caso, reducir la latencia es muy importante. En las reglas de eKuiper, podemos usar el sumidero MQTT para enviar rápidamente datos a EMQX para satisfacer las necesidades de una transmisión de datos eficiente.

Para ahorrar ancho de banda en escenarios en tiempo real, podemos configurar el formato de serialización y el método de compresión en el sumidero eKuiper MQTT como se describe anteriormente. EMQX proporciona un motor de reglas que puede descomprimir y deserializar datos, de modo que las aplicaciones en la nube puedan procesar datos en tiempo real sin escribir código.

Guardar datos de forma masiva en un archivo

Para los datos que no se procesan con urgencia, podemos guardarlos en un archivo o una base de datos local, y luego enviarlos a la nube por lotes. Esto puede lograr una relación de compresión más alta, lo que a su vez ahorra más ancho de banda. En las reglas de eKuiper, podemos usar sumideros de archivos para almacenar y comprimir datos localmente. El receptor de archivos admite la configuración de la política de rotación de archivos, como la rotación cada 10 minutos, para que podamos guardar los datos en lotes en el archivo. EMQX está desarrollando una nueva función para transferir archivos con MQTT. Una vez completada esta función, MQTT puede transmitir el archivo guardado. Actualmente, los usuarios pueden usar otras herramientas para transferir archivos a la nube.

epílogo

Este artículo presenta cómo usar eKuiper y EMQX para recopilar, procesar y transmitir datos de CAN Bus desde vehículos a la nube. En los siguientes artículos, explicaremos cada paso con más detalle.

Declaración de derechos de autor: este artículo es original de EMQ, indique la fuente para la reimpresión.

Enlace original: https://www.emqx.com/zh/blog/can-bus-how-it-works-pros-and-cons

Supongo que te gusta

Origin blog.csdn.net/emqx_broker/article/details/131439317
Recomendado
Clasificación