Captura Personalizada de Datos CAN Bus con CXECU

🎓 Nivel: Avanzado - Este tutorial requiere conocimientos técnicos de sistemas CAN Bus, análisis de tramas hexadecimales y operaciones a nivel de bits.
¿Necesitas monitorear el uso del freno de mano en tu flota? ¿Querés saber cuándo los conductores activan el pedal de freno o el embrague? La herramienta CXECU de los dispositivos Rinho te permite configurar parsers dinámicos para capturar cualquier parámetro que el vehículo transmita por CAN Bus.
En este tutorial vas a aprender a capturar el estado del freno de mano del Fiat Cronos usando datos reales del bus CAN, configurar el dispositivo Rinho, y crear eventos automáticos cuando se active el freno.
🎯 Aplicación real: Usamos el freno de mano como caso de estudio con datos reales del Fiat Cronos, pero esta misma metodología se aplica a cualquier parámetro CAN: cinturones de seguridad, apertura de puertas, temperatura del aceite, presión de neumáticos, etc.
📖 Si aún no conocés los fundamentos de CAN Bus, te recomendamos leer primero ¿Qué es CANBUS y por qué es clave en la gestión de flotas?
El Problema: Monitorear el Freno de Mano
Imaginate este escenario real:
Tu flota de Fiat Cronos opera en zonas montañosas. Algunos conductores no están usando correctamente el freno de mano al estacionar en pendientes, lo que genera:
- ⚠️ Riesgo de accidentes si el vehículo se mueve
- 🔧 Desgaste prematuro de la transmisión
- 📊 Falta de visibilidad sobre este comportamiento
La solución: Configurar el dispositivo Rinho para capturar el estado del freno de mano directamente desde el bus CAN y generar alertas automáticas cuando el conductor no lo use correctamente.
💡 Requisito: Este tutorial requiere dispositivos Rinho con módulo CAN Bus integrado, como el Rinho Spider IoT o Rinho Smart IoT. Estos dispositivos incluyen hardware especializado para conectarse al bus CAN del vehículo y procesar los mensajes en tiempo real.
¿Qué es CXECU?
CXECU es el módulo de configuración de parsers CAN de los dispositivos Rinho. Permite definir exactamente cómo interpretar los mensajes CAN que transmite el vehículo para extraer valores específicos.
Conceptos Clave
| Componente | Descripción |
|---|---|
| CXECU | Parsers configurables para extraer datos de mensajes CAN |
| CXCAN | Configuración global del bus (velocidad, protocolo) |
| Parser | Regla que interpreta bits específicos de un mensaje CAN |
| Índices | 28 slots disponibles (CXECU00-CXECU27) para configuraciones |
El sistema tiene 28 índices predefinidos, y los índices 20-27 están reservados para parámetros personalizados:
20: custom.fuel_liters - Combustible en litros
21: custom.fuel_milliliters - Combustible en mililitros
22: custom.handbrake_status - Freno de mano (0/1) ⭐
23: custom.brake_pedal_status - Pedal de freno (0/1) ⭐
24: custom.accelerator_pct - Acelerador personalizado (%)
25: custom.door_driver - Puerta conductor (0/1)
26: custom.door_passenger - Puerta pasajero (0/1)
27: custom.clutch_pedal_status - Pedal de embrague (0/1) ⭐
Tutorial Paso a Paso: Fiat Cronos
Vamos a configurar la captura del freno de mano del Fiat Cronos usando datos reales extraídos del bus CAN del vehículo.
🚗 Vehículo de prueba: Los datos presentados fueron obtenidos de un Fiat Cronos 1.3 Drive. Esta configuración debería funcionar en otros modelos de la familia Cronos, pero siempre recomendamos verificar los mensajes CAN de tu vehículo específico.
🔍 Nota sobre el análisis: Los datos que vas a ver a continuación fueron obtenidos usando el modo
SCXCAN1,500K,LISTENpara capturar y analizar los mensajes del bus. Una vez identificados los parámetros, la configuración final usaSCXCAN1,500K,OBDII,29para combinar parámetros estándar OBD-II con los personalizados de CXECU.
Paso 1: Análisis del Mensaje CAN
Primero, necesitamos entender cómo el vehículo transmite la información del freno de mano.
Después de analizar el bus CAN del Fiat Cronos con herramientas de sniffing en modo LISTEN, encontramos:
📊 Freno de Mano - Mensaje ID 0x256
| Estado | Byte 0 | Bits Activos | Valor Hex |
|---|---|---|---|
| Desactivado | 00000000 |
Ninguno | 0x00 |
| Activado | 00001000 |
Bit 3 | 0x08 |
Interpretación:
- El mensaje con ID
0x256se transmite continuamente en el bus - El Byte 0 (primer byte de los 8 bytes del mensaje) contiene el estado
- El Bit 3 (máscara
0x08) indica si está activado (1) o desactivado (0)
Fórmula de extracción:
handbrake_status = (Byte_0 & 0x08) ? 1 : 0
Si aplicamos la máscara 0x08 al byte:
0x08 & 0x08 = 0x08→ Activado (bit 3 = 1)0x00 & 0x08 = 0x00→ Desactivado (bit 3 = 0)
Paso 2: Configurar el Bus CAN
Antes de configurar el parser, necesitamos habilitar el bus CAN con la velocidad y protocolo correctos.
El Fiat Cronos usa un bus CAN de 500 Kbps con protocolo OBDII y CAN extendido de 29 bits:
>SCXCAN1,500K,OBDII,29<
📚 Ver documentación completa: Comando CXCAN
Desglose del comando:
1→ Habilitar el módulo CAN500K→ Velocidad de 500 Kbps (estándar en automóviles modernos)OBDII→ Protocolo OBD-II estándar29→ CAN ID extendido de 29 bits (en lugar del estándar de 11 bits)
Verificar la configuración:
>QCXCAN<
Respuesta esperada:
>RCXCAN1,500K,OBDII,29...
Paso 3: Configurar el Parser del Freno de Mano
Ahora vamos a configurar el parser en el índice 22 (reservado para custom.handbrake_status):
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
📚 Ver documentación completa: Comando CXECU
Desglose detallado de cada parámetro:
| Parámetro | Valor | Descripción |
|---|---|---|
| Índice | 22 |
Slot para custom.handbrake_status |
| Estado | E |
Enabled (habilitado) |
| CAN ID | 256 |
ID del mensaje en hexadecimal (0x256) |
| Start Bit | 3 |
Bit 3 del Byte 0 (posición 3 en el mensaje) |
| Length | 1 |
Leer solo 1 bit |
| Factor | 1 |
Multiplicador (sin conversión) |
| Offset | 0 |
Suma (sin offset) |
| Min | 0 |
Valor mínimo válido |
| Max | 1 |
Valor máximo válido (0 o 1) |
| Endian | BE |
Big Endian (orden de bytes Motorola) |
| Signed | U |
Unsigned (sin signo) |
Fórmula de conversión:
valor_final = (bit_extraído × 1) + 0 = bit_extraído
En este caso, como extraemos un solo bit, el valor final será 0 o 1.
Verificar la configuración:
>QCXECU22<
Respuesta esperada:
>RQCXECU22E,00000256,3,1,1.000,0.0,0,1,BE,U...
Paso 4: Consultar el Valor en Tiempo Real
Una vez configurado el parser, podemos consultar el estado actual del freno de mano:
>QECU22<
Respuestas posibles:
>RECU22,0... // Freno de mano desactivado
>RECU22,1... // Freno de mano activado
Capturando Más Parámetros del Cronos
Además del freno de mano, el Fiat Cronos transmite otros parámetros útiles por CAN Bus:
Pedal de Freno - ID 0x0FA
// Pedal de freno: Byte 0, Bits 3-2 (0x0C)
// Suelto: 0x80, Pisado: 0x8C
>SCXECU23E,0FA,2,2,1,0,0,3,BE,U<
Análisis de bits:
- Byte 0 del mensaje
0x0FA - Bits 3-2 (máscara
0x0C) - Suelto:
0x80(1000 0000) → bits [3:2] =00 - Pisado:
0x8C(1000 1100) → bits [3:2] =11(3 en decimal)
Pedal de Embrague - ID 0x1F0
// Embrague: Byte 0, Bits 7-6
// Suelto: 0x00, Medio: 0x40 (bit 6), Profundo: 0x80 (bit 7)
>SCXECU27E,1F0,6,2,1,0,0,3,BE,U<
Análisis de bits:
- Byte 0 del mensaje
0x1F0 - Bits 7-6 (2 bits)
- Valores:
0(suelto),1(medio),2(profundo)
Configuración Completa para los 3 Parámetros
// Configuración CAN Bus completa para Fiat Cronos
>SCXCAN1,500K,OBDII,29<
// Freno de mano (índice 22)
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
// Pedal de freno (índice 23)
>SCXECU23E,0FA,2,2,1,0,0,3,BE,U<
// Pedal de embrague (índice 27)
>SCXECU27E,1F0,6,2,1,0,0,3,BE,U<
// Consultar valores
>QECU22< // Freno de mano: 0 o 1
>QECU23< // Pedal freno: 0 (suelto) o 3 (pisado)
>QECU27< // Embrague: 0 (suelto), 1 (medio), 2 (profundo)
Configuración de Eventos con Variables UV y Reglas RL
Los valores capturados con CXECU se pueden usar en variables universales (UV) y reglas RL del motor de eventos para crear lógica condicional y generar alertas automáticas cuando se detecten cambios en los parámetros monitoreados.
Consultar Valores ECU con QECU
Los valores de CXECU están disponibles mediante el comando QECU[idx]:
// Consultar freno de mano (índice 22)
>QECU22<
>RECU22,1... // 1 = activado
// Consultar pedal de freno (índice 23)
>QECU23<
>RECU23,3... // 3 = pisado a fondo
Usar ECU en Variables UV con Fórmulas
Las variables UV (User Variables) pueden evaluar expresiones que incluyen valores ECU. La sintaxis es:
📚 Ver documentación completa: Comando UV
>SUV[idx][tipo] comando,inicio,fin,min,max<
Tipos disponibles:
F→ Float (números con decimales)U→ Unsigned integer (enteros sin signo)S→ Signed integer (enteros con signo)
Ejemplos para el Fiat Cronos:
// UV00 = 1 cuando freno de mano está activado (QECU22 >= 1)
>SUV00FQECU22%d:30,7,0,0,1,999<
// UV01 = 1 cuando pedal de freno está pisado (QECU23 >= 3)
>SUV01FQECU23%d:30,7,0,0,3,999<
// UV02 = 1 cuando embrague está presionado (QECU27 >= 1)
>SUV02FQECU27%d:30,7,0,0,1,999<
Explicación de la sintaxis:
SUV00F→ Configurar UV00 con tipo Float (sin espacio entre F y el comando)QECU22%d:30,7→ Consultar ECU índice 22, formato decimal, timeout 30s, desde el carácter 70,0→ Posición inicio 0, longitud 0 (tomar respuesta completa)1,999→ Rango: min=1 (inclusive), max=999 (exclusivo)- UV = 1 cuando el valor está en el rango [min, max)
- UV = 0 cuando el valor está fuera del rango
Crear Reportes de Posición con Reglas RL
Una vez configuradas las UV, podés usarlas en reglas RL para generar reportes de posición automáticos:
📚 Ver documentación completa: Comando RL
// Regla: Enviar reporte de posición cuando se active el freno de mano
>SRL50E;TRG=UV00+;ACC={GCQ55H}<
Explicación:
SRL50E→ Regla 50 habilitadaTRG=UV00+→ Disparar cuando UV00 pasa de 0 a 1 (flanco ascendente)ACC={GCQ55H}→ Generar reporte de posición con código 55 y prioridad alta (H)
📚 Comando para generar reportes: GCQ - Generación de Reportes
Ejemplo Completo: Sistema de Monitoreo del Freno de Mano
Archivo: cronos_handbrake_events.txt
// ================================================
// Sistema de Monitoreo del Freno de Mano
// Usa CXECU + UV + Reglas RL
// ================================================
// 1. Configurar bus CAN
>SCXCAN1,500K,OBDII,29<
// 2. Configurar parser del freno de mano
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
// 3. Crear variable UV00 que evalúa si freno está activado
>SUV00FQECU22%d:30,7,0,0,1,999<
// 4. Regla: Evento cuando se ACTIVA el freno de mano
>SRL50E;TRG=UV00+;ACC={GCQ55H}<
// 5. Regla: Evento cuando se DESACTIVA el freno de mano
>SRL51E;TRG=UV00-;ACC={GCQ56H}<
// Verificar configuración
>QUV00< // Ver estado de UV00
>QECU22< // Ver valor del parser
Ventajas de este método:
- ✅ Mayor flexibilidad: Podés combinar múltiples condiciones
- ✅ Eventos personalizados: Envío de códigos específicos con GCQ
- ✅ Motor de reglas nativo: Usa el sistema RL del firmware
- ✅ Mejor performance: Evaluación más eficiente en el dispositivo
Cargar la Configuración
Los comandos se pueden enviar al dispositivo por SMS, plataforma web o terminal serial (USB/UART):
>SCXCAN1,500K,OBDII,29<
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
>SUV00FQECU22%d:30,7,0,0,1,999<
>SRL50E;TRG=UV00+;ACC={GCQ55H}<
>SRL51E;TRG=UV00-;ACC={GCQ56H}<
Comandos de Gestión
Consultar Configuración
>QCXCAN< // Consultar configuración del bus CAN
>QCXECU[idx]< // Consultar parser específico (ej: QCXECU22)
>QECU[idx]< // Consultar valor actual (ej: QECU22)
Respuestas posibles para QCXECU:
// Parser habilitado
>RQCXECU22E,00000256,3,1,1.000,0.0,0,1,BE,U...
// Parser deshabilitado
>RQCXECU22D,00000256,3,1,1.000,0.0,0,1,BE,U...
// No configurado
>RQCXECU22,NOTCFG,USE:SCXECU22enable,can_id,start,len,factor,offset,min,max,endian,sign...
Habilitar/Deshabilitar Rápido
>SCXECU22E< // Habilitar parser ya configurado
>SCXECU22D< // Deshabilitar parser temporalmente
Esto es ideal para:
- 🔧 Mantenimiento: Deshabilitar monitoreo temporalmente
- 🔍 Diagnóstico: Aislar parámetros problemáticos
- ⚡ Optimización: Reducir carga del procesador
Limpiar Configuraciones
>CCXECU22< // Limpiar parser específico
>CCXECU99< // Limpiar TODOS los parsers
📚 Ver documentación completa: Comando CXECU
Flujo de Trabajo Recomendado
1. Análisis Inicial (Modo LISTEN)
Si no tenés la información del bus CAN del vehículo, primero necesitás hacer un análisis en modo LISTEN para identificar los mensajes:
a) Configurar el bus CAN en modo escucha (LISTEN):
>SCXCAN1,500K,LISTEN<
b) Habilitar logging de tramas CAN (por terminal serial):
>SDB0+CAN<
📚 Ver documentación completa: Comando DB
Esto mostrará todas las tramas CAN en el terminal serial para análisis.
💡 Nota importante: El modo
LISTENes solo para análisis. Permite capturar todos los mensajes del bus CAN sin interferir con el vehículo.
c) Usar herramientas de análisis CAN (opcional):
- Hardware: Adaptador OBD-II CAN (ELM327, CANable, PCAN)
- Software: CANalyzer, Wireshark, SavvyCAN
d) Identificar mensajes:
- Activar/desactivar el freno de mano repetidamente
- Observar qué mensaje CAN cambia de valor
- Anotar el ID, byte y bit específico
e) Una vez identificados los mensajes, cambiar a OBD-II:
// Cambiar de LISTEN a OBDII para uso normal
>SCXCAN1,500K,OBDII,29<
⚠️ Importante: Después del análisis, siempre configurar con
OBDII,29para uso en producción. Esto permite:
- Capturar parámetros estándar OBD-II (RPM, velocidad, temperatura, etc.)
- Capturar parámetros personalizados con CXECU (freno de mano, pedales, etc.)
2. Configurar el Parser
Con la información del análisis, configurar el parser correspondiente:
>SCXECU22E,[ID],[bit],[length],1,0,0,1,BE,U<
3. Verificar
>QCXECU22< // Verificar configuración del parser
>QECU22< // Verificar valores en tiempo real
Activar y desactivar el freno de mano físicamente y observar los valores.
4. Configurar Eventos con UV y RL
Una vez verificado que el parser funciona correctamente, configurar variables UV y reglas RL para generar eventos automáticos (ver sección Configuración de Eventos con Variables UV y Reglas RL).
5. Ajustar si es Necesario
Si los valores no son correctos, revisar:
| Aspecto | Verificación |
|---|---|
| ✅ Baudrate | Debe coincidir con el vehículo (500K es común en autos) |
| ✅ CAN ID | ID hexadecimal correcto del mensaje |
| ✅ Start bit | Posición exacta del bit dentro del mensaje |
| ✅ Length | Cantidad de bits a leer (1 para booleanos) |
| ✅ Endianness | BE (Big Endian) es común en CAN automotriz |
| ✅ Min/Max | Rango válido para filtrar ruido |
Troubleshooting
Problemas Comunes
| Error | Causa | Solución |
|---|---|---|
RSCXECU,NOCAN |
Hardware sin CAN o deshabilitado | Verificar hardware y conexiones físicas |
RCXCAN NA |
Bus CAN no disponible | Verificar conexiones CAN-H/CAN-L en OBD-II |
| Valores no actualizan | ID o baudrate incorrecto | Verificar ID y velocidad del bus |
| Valores aleatorios | Start bit o length incorrecto | Revisar posición exacta del bit |
| Siempre 0 o siempre 1 | Bit incorrecto o mensaje no transmitido | Usar modo LISTEN y analizar tráfico |
Ejemplo Real: Debugging del Freno de Mano
Problema: El valor de QECU22 siempre devuelve 0, incluso con el freno activado.
Diagnóstico:
-
Verificar que el mensaje se transmite:
// Activar logging de CAN (si está disponible) // Buscar mensajes con ID 0x256 -
Verificar el bit correcto:
- El freno de mano usa el bit 3 (máscara 0x08)
- Start bit debe ser
3, no0
-
Verificar la configuración:
>QCXECU22< // Debe mostrar: >RQCXECU22E,00000256,3,1,... // ^ start bit debe ser 3 -
Probar manualmente:
- Activar y desactivar el freno repetidamente
- Consultar
>QECU22<después de cada cambio - Debe alternar entre 0 y 1
¿Cuándo usar CXECU?
⚠️ Importante: CXECU está diseñado para capturar mensajes CAN que se transmiten continuamente en el bus (broadcast) que no están incluidos en los protocolos estándar.
Casos de uso ideales:
| Protocolo | Uso con CXECU | Descripción |
|---|---|---|
| J1939 | ✅ Ideal | Vehículos pesados - datos continuos del motor y transmisión |
| LISTEN | ✅ Solo análisis | Modo de escucha para identificar mensajes (no para producción) |
| PLAIN | ✅ Ideal | CAN básico sin protocolo específico |
| OBD-II | ✅ Complementario ⭐ | Para mensajes propietarios que el protocolo estándar no interpreta |
El Caso del Fiat Cronos
El Fiat Cronos es un ejemplo perfecto de OBD-II + CXECU:
- OBD-II estándar captura: RPM, velocidad, temperatura del motor, nivel de combustible estándar, códigos de error (DTC), etc.
- CXECU personalizado captura: Freno de mano (ID 0x256), pedal de freno (ID 0x0FA), pedal de embrague (ID 0x1F0)
Estos últimos son mensajes propietarios de Fiat que el protocolo OBD-II no está diseñado para interpretar. Por eso la configuración es:
>SCXCAN1,500K,OBDII,29< // Base OBD-II + CXECU personalizados
De esta forma obtenés lo mejor de ambos mundos: parámetros estándar + parámetros personalizados.
Conclusión
Con CXECU pudiste aprender a:
✅ Analizar mensajes CAN reales del Fiat Cronos ✅ Configurar un parser para extraer el estado del freno de mano ✅ Crear eventos automáticos que alertan cuando se activa el freno ✅ Capturar múltiples parámetros (freno, embrague, pedales)
Esta misma metodología se puede aplicar a cualquier vehículo que transmita datos por CAN Bus. Solo necesitás:
- 🔍 Analizar el bus CAN con herramientas de sniffing
- 📊 Identificar el mensaje, byte y bit del parámetro deseado
- ⚙️ Configurar el parser con SCXECU
- 🚀 Crear eventos para automatizar acciones
¿Necesitas Ayuda con tu Flota?
Si tenés un vehículo específico y necesitás ayuda para configurar los parsers CAN, contactanos. Nuestro equipo técnico puede asistirte con:
- 📋 Configuración de parsers para tu modelo de vehículo
- 🔍 Análisis del bus CAN y extracción de parámetros
- 🛠️ Soporte técnico especializado para casos complejos
- 📚 Documentación personalizada para tu flota
Con los dispositivos Rinho Spider IoT y Rinho Smart IoT, llevá la telemetría vehicular al siguiente nivel.
📚 Para documentación técnica completa, visitá nuestra guía de comandos CANBUS en la documentación oficial.