Captura Personalizada de Dados CAN Bus com CXECU

🎓 Nível: Avançado - Este tutorial requer conhecimentos técnicos de sistemas CAN Bus, análise de tramas hexadecimais e operações a nível de bits.
Você precisa monitorar o uso do freio de mão na sua frota? Quer saber quando os condutores ativam o pedal de freio ou a embreagem? A ferramenta CXECU dos dispositivos Rinho permite configurar parsers dinâmicos para capturar qualquer parâmetro que o veículo transmita por CAN Bus.
Neste tutorial você aprenderá a capturar o estado do freio de mão do Fiat Cronos usando dados reais do bus CAN, configurar o dispositivo Rinho, e criar eventos automáticos quando o freio for ativado.
🎯 Aplicação real: Usamos o freio de mão como caso de estudo com dados reais do Fiat Cronos, mas esta mesma metodologia se aplica a qualquer parâmetro CAN: cintos de segurança, abertura de portas, temperatura do óleo, pressão dos pneus, etc.
📖 Se ainda não conhece os fundamentos do CAN Bus, recomendamos ler primeiro O que é CANBUS e por que é fundamental na gestão de frotas?
O Problema: Monitorar o Freio de Mão
Imagine este cenário real:
Sua frota de Fiat Cronos opera em áreas montanhosas. Alguns condutores não estão usando corretamente o freio de mão ao estacionar em declives, o que gera:
- ⚠️ Risco de acidentes se o veículo se mover
- 🔧 Desgaste prematuro da transmissão
- 📊 Falta de visibilidade sobre este comportamento
A solução: Configurar o dispositivo Rinho para capturar o estado do freio de mão diretamente do bus CAN e gerar alertas automáticos quando o condutor não o usar corretamente.
💡 Requisito: Este tutorial requer dispositivos Rinho com módulo CAN Bus integrado, como o Rinho Spider IoT ou Rinho Smart IoT. Estes dispositivos incluem hardware especializado para conectar-se ao bus CAN do veículo e processar as mensagens em tempo real.
O que é CXECU?
CXECU é o módulo de configuração de parsers CAN dos dispositivos Rinho. Permite definir exatamente como interpretar as mensagens CAN que o veículo transmite para extrair valores específicos.
Conceitos Principais
| Conceito | Descrição |
|---|---|
| CXECU | Parsers configuráveis para extrair dados de mensagens CAN |
| CXCAN | Configuração global do bus (velocidade, protocolo) |
| Parser | Regra que interpreta bits específicos de uma mensagem CAN |
| Índices | 28 slots disponíveis (CXECU00-CXECU27) para configurações |
O sistema tem 28 índices predefinidos, e os índices 20-27 estão reservados para parâmetros personalizados:
20: custom.fuel_liters - Combustível em litros
21: custom.fuel_milliliters - Combustível em mililitros
22: custom.handbrake_status - Freio de mão (0/1) ⭐
23: custom.brake_pedal_status - Pedal de freio (0/1) ⭐
24: custom.accelerator_pct - Acelerador personalizado (%)
25: custom.door_driver - Porta motorista (0/1)
26: custom.door_passenger - Porta passageiro (0/1)
27: custom.clutch_pedal_status - Pedal de embreagem (0/1) ⭐
Tutorial Passo a Passo: Fiat Cronos
Vamos configurar a captura do freio de mão do Fiat Cronos usando dados reais extraídos do bus CAN do veículo.
🚗 Veículo de teste: Os dados apresentados foram obtidos de um Fiat Cronos 1.3 Drive. Esta configuração deve funcionar em outros modelos da família Cronos, mas sempre recomendamos verificar as mensagens CAN do seu veículo específico.
🔍 Nota sobre a análise: Os dados que você verá a seguir foram obtidos usando o modo
SCXCAN1,500K,LISTENpara capturar e analisar as mensagens do bus. Uma vez identificados os parâmetros, a configuração final usaSCXCAN1,500K,OBDII,29para combinar parâmetros padrão OBD-II com os personalizados do CXECU.
Passo 1: Análise da Mensagem CAN
Primeiro, precisamos entender como o veículo transmite a informação do freio de mão.
Após analisar o bus CAN do Fiat Cronos com ferramentas de sniffing em modo LISTEN, encontramos:
📊 Freio de Mão - Mensagem ID 0x256
| Estado | Byte 0 | Bits Ativos | Valor Hex |
|---|---|---|---|
| Desativado | 00000000 |
Nenhum | 0x00 |
| Ativado | 00001000 |
Bit 3 | 0x08 |
Lógica de extração:
handbrake_status = (Byte_0 & 0x08) ? 1 : 0
Se aplicarmos a máscara 0x08 ao byte:
0x08 & 0x08 = 0x08→ Ativado (bit 3 = 1)0x00 & 0x08 = 0x00→ Desativado (bit 3 = 0)
Passo 2: Configurar o Bus CAN
Antes de configurar o parser, precisamos habilitar o bus CAN com a velocidade e protocolo corretos.
O Fiat Cronos usa um bus CAN de 500 Kbps com protocolo OBDII e CAN estendido de 29 bits:
>SCXCAN1,500K,OBDII,29<
📚 Ver documentação completa: Comando CXCAN
Detalhamento do comando:
1→ Habilitar o módulo CAN500K→ Velocidade de 500 Kbps (padrão em automóveis modernos)OBDII→ Protocolo OBD-II padrão29→ CAN ID estendido de 29 bits (em vez do padrão de 11 bits)
Verificar a configuração:
>QCXCAN<
Resposta esperada:
>RCXCAN1,500K,OBDII,29...
Passo 3: Configurar o Parser do Freio de Mão
Agora vamos configurar o parser no índice 22 (reservado para custom.handbrake_status):
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
📚 Ver documentação completa: Comando CXECU
Detalhamento de cada parâmetro:
| Parâmetro | Valor | Descrição |
|---|---|---|
| Índice | 22 |
Slot para custom.handbrake_status |
| Estado | E |
Enabled (habilitado) |
| CAN ID | 256 |
ID da mensagem em hexadecimal (0x256) |
| Start Bit | 3 |
Bit 3 do Byte 0 (posição 3 na mensagem) |
| Length | 1 |
1 bit de comprimento |
| Factor | 1 |
Multiplicador (valor_extraído × 1) |
| Offset | 0 |
Deslocamento (+0) |
| Min | 0 |
Valor mínimo válido |
| Max | 1 |
Valor máximo válido |
| Endian | BE |
Big Endian |
| Sign | U |
Unsigned (sem sinal) |
Fórmula de conversão:
valor_final = (bit_extraído × 1) + 0 = bit_extraído
Neste caso, como extraímos apenas um bit, o valor final será 0 ou 1.
Verificar a configuração:
>QCXECU22<
Resposta esperada:
>RQCXECU22E,00000256,3,1,1.000,0.0,0,1,BE,U...
Passo 4: Consultar o Valor em Tempo Real
Uma vez configurado o parser, podemos consultar o estado atual do freio de mão:
>QECU22<
Respostas possíveis:
>RECU22,0... // Freio de mão desativado
>RECU22,1... // Freio de mão ativado
Capturando Mais Parâmetros do Cronos
Além do freio de mão, o Fiat Cronos transmite outros parâmetros úteis por CAN Bus:
Pedal de Freio - ID 0x0FA
// Pedal de freio: Byte 0, Bits 3-2 (0x0C)
// Solto: 0x80, Pressionado: 0x8C
>SCXECU23E,0FA,2,2,1,0,0,3,BE,U<
Análise de bits:
- Byte 0 da mensagem
0x0FA - Bits 3-2 (máscara
0x0C) - Solto:
0x80(1000 0000) → bits [3:2] =00 - Pressionado:
0x8C(1000 1100) → bits [3:2] =11(3 em decimal)
Pedal de Embreagem - ID 0x1F0
// Embreagem: Byte 0, Bits 7-6
// Solto: 0x00, Meio: 0x40 (bit 6), Fundo: 0x80 (bit 7)
>SCXECU27E,1F0,6,2,1,0,0,3,BE,U<
Análise de bits:
- Byte 0 da mensagem
0x1F0 - Bits 7-6 (2 bits)
- Valores:
0(solto),1(meio),2(fundo)
Configuração Completa para os 3 Parâmetros
// Configuração CAN Bus completa para Fiat Cronos
>SCXCAN1,500K,OBDII,29<
// Freio de mão (índice 22)
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
// Pedal de freio (índice 23)
>SCXECU23E,0FA,2,2,1,0,0,3,BE,U<
// Pedal de embreagem (índice 27)
>SCXECU27E,1F0,6,2,1,0,0,3,BE,U<
// Consultar valores
>QECU22< // Freio de mão: 0 ou 1
>QECU23< // Pedal freio: 0 (solto) ou 3 (pressionado)
>QECU27< // Embreagem: 0 (solto), 1 (meio), 2 (fundo)
Configuração de Eventos com Variáveis UV e Regras RL
Os valores capturados com CXECU podem ser usados em variáveis universais (UV) e regras RL do motor de eventos para criar lógica condicional e gerar alertas automáticos quando forem detectadas mudanças nos parâmetros monitorados.
Consultar Valores ECU com QECU
Os valores do CXECU estão disponíveis através do comando QECU[idx]:
// Consultar freio de mão (índice 22)
>QECU22<
>RECU22,1... // 1 = ativado
// Consultar pedal de freio (índice 23)
>QECU23<
>RECU23,3... // 3 = pressionado a fundo
Usar ECU em Variáveis UV com Fórmulas
As variáveis UV (User Variables) podem avaliar expressões que incluem valores ECU. A sintaxe é:
📚 Ver documentação completa: Comando UV
>SUV[idx][tipo] comando,inicio,fim,min,max<
Tipos disponíveis:
F→ Float (números com decimais)U→ Unsigned integer (inteiros sem sinal)S→ Signed integer (inteiros com sinal)
Exemplos para o Fiat Cronos:
// UV00 = 1 quando freio de mão está ativado (QECU22 >= 1)
>SUV00FQECU22%d:30,7,0,0,1,999<
// UV01 = 1 quando pedal de freio está pressionado (QECU23 >= 3)
>SUV01FQECU23%d:30,7,0,0,3,999<
// UV02 = 1 quando embreagem está pressionada (QECU27 >= 1)
>SUV02FQECU27%d:30,7,0,0,1,999<
Explicação da sintaxe:
SUV00F→ Configurar UV00 com tipo Float (sem espaço entre F e o comando)QECU22%d:30,7→ Consultar ECU índice 22, formato decimal, timeout 30s, do caractere 70,0→ Posição início 0, comprimento 0 (tomar resposta completa)1,999→ Faixa: min=1 (inclusive), max=999 (exclusivo)- UV = 1 quando o valor está na faixa [min, max)
- UV = 0 quando o valor está fora da faixa
Criar Relatórios de Posição com Regras RL
Uma vez configuradas as UV, você pode usá-las em regras RL para gerar relatórios de posição automáticos:
📚 Ver documentação completa: Comando RL
// Regra: Enviar relatório de posição quando ativar o freio de mão
>SRL50E;TRG=UV00+;ACC={GCQ55H}<
Explicação:
SRL50E→ Regra 50 habilitadaTRG=UV00+→ Disparar quando UV00 passa de 0 para 1 (flanco ascendente)ACC={GCQ55H}→ Gerar relatório de posição com código 55 e prioridade alta (H)
📚 Comando para gerar relatórios: GCQ - Geração de Relatórios
Exemplo Completo: Sistema de Monitoramento do Freio de Mão
Arquivo: cronos_handbrake_events.txt
// ================================================
// Sistema de Monitoramento do Freio de Mão
// Usa CXECU + UV + Regras RL
// ================================================
// 1. Configurar bus CAN
>SCXCAN1,500K,OBDII,29<
// 2. Configurar parser do freio de mão
>SCXECU22E,256,3,1,1,0,0,1,BE,U<
// 3. Criar variável UV00 que avalia se freio está ativado
>SUV00FQECU22%d:30,7,0,0,1,999<
// 4. Regra: Evento quando ATIVA o freio de mão
>SRL50E;TRG=UV00+;ACC={GCQ55H}<
// 5. Regra: Evento quando DESATIVA o freio de mão
>SRL51E;TRG=UV00-;ACC={GCQ56H}<
// Verificar configuração
>QUV00< // Ver estado de UV00
>QECU22< // Ver valor do parser
Vantagens deste método:
- ✅ Maior flexibilidade: Você pode combinar múltiplas condições
- ✅ Eventos personalizados: Envio de códigos específicos com GCQ
- ✅ Motor de regras nativo: Usa o sistema RL do firmware
- ✅ Melhor desempenho: Avaliação mais eficiente no dispositivo
Carregar a Configuração
Os comandos podem ser enviados ao dispositivo por SMS, plataforma web ou 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 Gestão
Consultar Configuração
>QCXCAN< // Consultar configuração do bus CAN
>QCXECU[idx]< // Consultar parser específico (ex: QCXECU22)
>QECU[idx]< // Consultar valor atual (ex: QECU22)
Respostas possíveis para QCXECU:
// Parser habilitado
>RQCXECU22E,00000256,3,1,1.000,0.0,0,1,BE,U...
// Parser desabilitado
>RQCXECU22D,00000256,3,1,1.000,0.0,0,1,BE,U...
// Não configurado
>RQCXECU22,NOTCFG,USE:SCXECU22enable,can_id,start,len,factor,offset,min,max,endian,sign...
Habilitar/Desabilitar Rápido
>SCXECU22E< // Habilitar parser já configurado
>SCXECU22D< // Desabilitar parser temporariamente
Isto é ideal para:
- 🔧 Manutenção: Desabilitar monitoramento temporariamente
- 🔍 Diagnóstico: Isolar parâmetros problemáticos
- ⚡ Otimização: Reduzir carga do processador
Limpar Configurações
>CCXECU22< // Limpar parser específico
>CCXECU99< // Limpar TODOS os parsers
📚 Ver documentação completa: Comando CXECU
Fluxo de Trabalho Recomendado
1. Análise Inicial (Modo LISTEN)
Se você não tem a informação do bus CAN do veículo, primeiro precisa fazer uma análise em modo LISTEN para identificar as mensagens:
a) Configurar o bus CAN em modo escuta (LISTEN):
>SCXCAN1,500K,LISTEN<
b) Habilitar logging de tramas CAN (por terminal serial):
>SDB0+CAN<
📚 Ver documentação completa: Comando DB
Isto mostrará todas as tramas CAN no terminal serial para análise.
💡 Nota importante: O modo
LISTENé apenas para análise. Permite capturar todas as mensagens do bus CAN sem interferir com o veículo.
c) Usar ferramentas de análise CAN (opcional):
- Hardware: Adaptador OBD-II CAN (ELM327, CANable, PCAN)
- Software: CANalyzer, Wireshark, SavvyCAN
d) Identificar mensagens:
- Ativar/desativar o freio de mão repetidamente
- Observar qual mensagem CAN muda de valor
- Anotar o ID, byte e bit específico
e) Uma vez identificadas as mensagens, mudar para OBD-II:
// Mudar de LISTEN para OBDII para uso normal
>SCXCAN1,500K,OBDII,29<
⚠️ Importante: Depois da análise, sempre configurar com
OBDII,29para uso em produção. Isto permite:
- Capturar parâmetros padrão OBD-II (RPM, velocidade, temperatura, etc.)
- Capturar parâmetros personalizados com CXECU (freio de mão, pedais, etc.)
2. Configurar o Parser
Com a informação da análise, configurar o parser correspondente:
>SCXECU22E,[ID],[bit],[length],1,0,0,1,BE,U<
3. Verificar
>QCXECU22< // Verificar configuração do parser
>QECU22< // Verificar valores em tempo real
Ativar e desativar o freio de mão fisicamente e observar os valores.
4. Configurar Eventos com UV e RL
Uma vez verificado que o parser funciona corretamente, configurar variáveis UV e regras RL para gerar eventos automáticos (ver seção Configuração de Eventos com Variáveis UV e Regras RL).
5. Ajustar se Necessário
Se os valores não estão corretos, revisar:
| Aspecto | Verificação |
|---|---|
| ✅ Baudrate | Deve coincidir com o veículo (500K é comum em carros) |
| ✅ Bit inicial | Contar desde 0 dentro do byte correspondente |
| ✅ Comprimento | Número de bits a extrair (1-32) |
| ✅ Endianness | Big Endian (BE) vs Little Endian (LE) |
| ✅ CAN ID | Verificar em hexadecimal (ex: 256 = 0x256) |
Resolução de Problemas
Problema Comum: Parser não Captura Valores
Sintomas:
QECU22sempre retorna0ou valores incorretos- A configuração parece correta mas não funciona
Checklist de diagnóstico:
| Verificação | Como Verificar | Solução |
|---|---|---|
| Bus CAN habilitado | >QCXCAN< deve retornar configuração ativa |
Executar >SCXCAN1,500K,OBDII,29< |
| Parser habilitado | >QCXECU22< deve mostrar E no início |
Executar >SCXECU22E< |
| Mensagem transmitida | Usar modo LISTEN ou debug CAN | Verificar se ID aparece no bus |
| Bit correto | Comparar máscara com valor real | Ajustar start_bit e length |
| Fator/Offset | Verificar fórmula de conversão | Ajustar multiplicador e deslocamento |
Exemplo Real: Debugging do Freio de Mão
Problema: O valor de QECU22 sempre retorna 0, mesmo com o freio ativado.
Diagnóstico:
-
Verificar que a mensagem é transmitida:
// Ativar logging de CAN (se disponível) // Procurar mensagens com ID 0x256 -
Verificar o bit correto:
- O freio de mão usa o bit 3 (máscara 0x08)
- Start bit deve ser
3, não0
-
Verificar a configuração:
>QCXECU22< // Deve mostrar: >RQCXECU22E,00000256,3,1,... // ^ start bit deve ser 3 -
Testar manualmente:
- Ativar e desativar o freio repetidamente
- Consultar
>QECU22<depois de cada mudança - Deve alternar entre 0 e 1
Quando usar CXECU?
⚠️ Importante: CXECU está projetado para capturar mensagens CAN que são transmitidas continuamente no bus (broadcast) que não estão incluídas nos protocolos padrão.
Casos de uso ideais:
| Protocolo | Uso com CXECU | Descrição |
|---|---|---|
| J1939 | ✅ Ideal | Veículos pesados - dados contínuos do motor e transmissão |
| LISTEN | ✅ Apenas análise | Modo de escuta para identificar mensagens (não para produção) |
| PLAIN | ✅ Ideal | CAN básico sem protocolo específico |
| OBD-II | ✅ Complementar ⭐ | Para mensagens proprietárias que o protocolo padrão não interpreta |
O Caso do Fiat Cronos
O Fiat Cronos é um exemplo perfeito de OBD-II + CXECU:
- OBD-II padrão captura: RPM, velocidade, temperatura do motor, nível de combustível padrão, códigos de erro (DTC), etc.
- CXECU personalizado captura: Freio de mão (ID 0x256), pedal de freio (ID 0x0FA), pedal de embreagem (ID 0x1F0)
Estes últimos são mensagens proprietárias da Fiat que o protocolo OBD-II não está projetado para interpretar. Por isso a configuração é:
>SCXCAN1,500K,OBDII,29< // Base OBD-II + CXECU personalizados
Desta forma você obtém o melhor de ambos os mundos: parâmetros padrão + parâmetros personalizados.
Conclusão
Com CXECU você aprendeu a:
✅ Analisar mensagens CAN reais do Fiat Cronos ✅ Configurar um parser para extrair o estado do freio de mão ✅ Criar eventos automáticos que alertam quando o freio é ativado ✅ Capturar múltiplos parâmetros (freio, embreagem, pedais)
Esta mesma metodologia pode ser aplicada a qualquer veículo que transmita dados por CAN Bus. Você só precisa:
- 🔍 Analisar o bus CAN com ferramentas de sniffing
- 📊 Identificar a mensagem, byte e bit do parâmetro desejado
- ⚙️ Configurar o parser CXECU com os dados obtidos
- 📡 Criar eventos automáticos com variáveis UV e regras RL
Precisa de ajuda? A equipe técnica da Rinho oferece:
- 📋 Configuração de parsers para o seu modelo de veículo
- 🔍 Análise do bus CAN e extração de parâmetros
- 🛠️ Suporte técnico especializado para casos complexos
- 📚 Documentação personalizada para a sua frota
Com os dispositivos Rinho Spider IoT e Rinho Smart IoT, leve a telemetria veicular para o próximo nível.
📚 Para documentação técnica completa, visite nosso guia de comandos CANBUS na documentação oficial.