🔗 Integração VL08 + Simulador J1939
Guia passo-a-passo para conectar, configurar e validar a comunicação CAN entre o rastreador VIRLOC VL08 e o J1939_OBD Simulator V4.3 (KingWell)
📋 Pré-requisitos
| Item | Detalhes |
|---|---|
| VIRLOC VL08 | Com firmware _CAN (ex: V1.2_CAN). J1939 básico ≥ 153B06; DTCs J1939 ≥ 158B01 |
| J1939_OBD Simulator V4.3 | KingWell — J1939 250K. Com fonte 12V DC conectada |
| Cabo OBD-II macho | Conectar o VL08 ao conector fêmea do simulador |
| Cabo MA-USB | Para configuração serial do VL08 (opcional se usar BLE) |
| Multímetro | Para verificar tensões antes de conectar |
| Fonte 12V DC | Para alimentar o simulador |
| Software | Propósito |
|---|---|
| Terminal XVM | Enviar comandos de configuração ao VL08 |
| App VL08 Tester (BLE) | Alternativa sem fio para configuração |
| Config OBD2 VIRLOC 1.4 | Ferramenta oficial para OBD2 (opcional) |
🔄 Fluxo de Integração
Firmware
Hardware
CAN 250K
PGN J1939
(QCT)
J1939
🔌 Diagrama de Fiação
O VL08 conecta-se ao simulador OBD-II via conector J1962 (16 pinos). As conexões essenciais são CAN-H (pino 6), CAN-L (pino 14) e GND (pino 4/5).
Tabela de Conexão
| Fio VL08 | Pino OBD-II | Função | Cor Sugerida |
|---|---|---|---|
| CAN H | 6 | CAN High (barramento) | Verde |
| CAN L | 14 | CAN Low (barramento) | Azul |
| GND (preto) | 4 ou 5 | Referência de terra | Preto |
| VCC (vermelho) | 16 (opcional) | +12V bateria | Vermelho |
🎛️ DIP Switch do Simulador — não utilizado
A escolha de protocolo/baudrate é feita no VL08 (comandos VS19_ENA abaixo), não no simulador. Para este simulador, o VL08 deve ficar em J1939 250 Kbps, 29-bit.
⚡ Alimentação
Fonte DC 12V — conectar pelo jack de alimentação na placa. LED POWER verde acende ao ligar.
Verificar no multímetro: pino 16 deve mostrar ~12V em relação ao pino 4/5 (GND).
Alimentar por fonte 12/24V dedicada nos fios VCC (vermelho) e GND (preto). Pode usar pino 16 do OBD como alternativa.
Aguardar boot completo (~15 segundos) antes de enviar comandos.
🔍 Passo 1 — Verificar Firmware CAN
O firmware do VL08 deve ter o sufixo _CAN para suportar telemetria CAN. Verifique com:
>QVR<
# Resposta esperada (exemplo):
>RVR_VL6_FIRM6.12_IAP6_BR58_MDM:2G_FULLCAN_F91_SEC:0000;ID=5589;#8004;*6C<
# ^^^^^^^^ ← CAN habilitado!
# Se NÃO tiver _CAN ou FULLCAN:
>RVR_VL6_FIRM6.12_IAP6_BR58_MDM:2G_F91_SEC:0000;ID=5589;#8004;*XX<
# ❌ Firmware sem suporte CAN — necessita atualização
Versões de Firmware Relevantes
| Versão | Funcionalidade |
|---|---|
| 153B06 | Primeiro suporte OBD2 (veículos leves) |
| 158B01 | Leitura de DTCs via J1939 (veículos pesados) |
| 158B25 | OBD2 no CAN2 (porta secundária) |
| 159B04 | Leitura de DTCs via OBD2 (veículos leves) |
🔧 Passo 2 — Habilitar CAN Bus (J1939 250K)
CAN1 (Porta Primária)
# Habilitar CAN1 a 250kbps em modo normal (J1939 — leitura + escrita/ACK):
>VS19_ENA0250,1<
# Modo escuta/listen (só leitura, sem ACK — ideal para 1º diagnóstico):
>VS19_ENA0250,0<
# Desabilitar a leitura CAN:
>VS19_ENA0<
>VS19_ENA0250,5< # 5 = listagem PGNs (29-bit, com ACK)
>CPG< # zera a lista
# aguarde alguns minutos com o simulador ligado
>GPG0,99< # retorna as PGNs vistas no barramento
CAN2 (Porta Secundária — apenas VL08)
# Habilitar CAN2 a 250kbps (alternativa pela 2ª porta):
>VS29_ENA0250,1<
📡 Baudrate e Modo
| Baudrate | Comando | Uso Típico |
|---|---|---|
| 50 kbps | >VS19_ENA0050,1< | Equipamentos legados |
| 125 kbps | >VS19_ENA0125,1< | Alguns veículos europeus |
| 250 kbps | >VS19_ENA0250,1< | J1939 — este simulador ✅ |
| 500 kbps | >VS19_ENA0500,1< | OBD-II ISO 15765 (veículos leves reais) |
| 1000 kbps | >VS19_ENA1000,1< | Redes high-speed |
,0) e o modo sniffer de PGNs para descobrir o baudrate/PGNs corretos.
Modo de Operação (2º parâmetro de VS19_ENA)
| Valor | Modo | Descrição |
|---|---|---|
,0 | Escuta (Silent) | Só leitura, sem ACK — monitoramento passivo |
,1 | Normal | Lê e escreve/ACK no barramento (recomendado com o simulador) |
,5 | Listagem de PGNs | Sniffer (29-bit com ACK). Também 6=29-bit sem ACK, 7=11-bit com ACK, 8=11-bit sem ACK |
🔰 Filtros CAN (VS19 / VS29)
O VL08 suporta 25 filtros CAN1 (VS1900–VS1924) e 13 filtros CAN2 (VS2900–VS2912). Cada filtro captura até 4 parâmetros do mesmo PGN.
Estrutura do Filtro
>VS19xx,PPPPP,mmm,dd,rrr,ss,ll,MMMMMMMM,mm,mm,tttt<
Onde:
19xx = Número do filtro (1900–1924 para CAN1)
PPPPP = PGN (Parameter Group Number) [0–65535]
mmm = Source Address (000 = desativa filtro de SA)
dd = Tipo CAN ID (11 = standard, 29 = extendido J1939)
rrr = Registrador CT (ou flag 200–231) para armazenar valor
ss = Byte inicial na mensagem [1–8]
ll = Comprimento em bytes [1–4]
MMMMMMMM = Máscara de bytes (filtragem de bits)
mm = Modo (0=copia valor no CT, 1=acumula no CT)
mm = Ordem de bytes (0=inverter ordem, 1=não inverter)
tttt = Multiplicador/Divisor
VS19xx captura até 4 parâmetros do mesmo PGN (blocos separados por vírgula). Para mais de 4, use o filtro seguinte com o mesmo PGN. Os campos 2=OBD-II / 3=OBD-II invertido da ordem de bytes existem apenas em outros equipamentos (VL10/VL11); no VL08 a ordem é 0/1.Exemplo (este simulador): Capturar RPM do motor — PGN 61444 (J1939 EEC1)
>VS1901,61444,000,29,01,1,1,000000FF,0,0,1000<
# Decompondo:
61444 = PGN J1939 EEC1 (Engine — contém rotação do motor)
000 = Source Address desativado (aceita qualquer origem)
29 = CAN ID 29-bit (J1939)
01 = Armazenar em CT01
1 = Byte 1
1 = 1 byte
000000FF = Máscara
0 = Modo copiar
0 = Inverter ordem dos bytes
1000 = Multiplicador/divisor
>VS19_ENA0250,5< → >CPG< → >GPG0,99<) para listar as PGNs que o simulador realmente emite e então montar um filtro por parâmetro. PGNs J1939 FMS comuns: 61444 (rotação), 65265 (velocidade), 65262 (temp. líq. arref.), 65276 (nível combustível), 61443 (acelerador/carga).Referência: captura via OBD-II (PGN 2024) — somente veículos leves reais
>VS1901,02024,012,11,01,4,2,0000FFFF,0,2,4000<
# Decompondo (NÃO se aplica ao simulador KingWell — só a veículos OBD-II reais):
02024 = PGN de resposta padrão OBD-II
012 = PID 12 (0x0C = RPM)
11 = CAN ID 11-bit (OBD-II)
01 = Armazenar em CT01
4 = Iniciar no byte 4
2 = 2 bytes
0000FFFF = Máscara
0 = Modo copiar
2 = Ordem de bytes modo OBD-II (VL10/VL11)
4000 = Divisor (fórmula RPM OBD-II)
📊 Protocolo OBD-II — referência para veículos leves reais
# Habilitar OBD-II com suporte até PID 166 (0xA6):
>VOBD_ENA1,166<
# Com suporte a DTCs:
>VOBD_ENA1,166,600,2015,2015,2016<
Parâmetros:
1 = Habilitar (0 = desabilitar)
166 = PID máximo suportado
600 = Timeout DTC (seg) — remover DTC da lista após
2015 = PGN para requisitar DTCs
2015 = PGN para limpar DTCs
2016 = PGN para flow control (multiframe)
# Habilitar transmissão OBD-II:
>VOBD_REQ1<
>VS19_ENA0500,1< → >VOBD_ENA1,166< → >VOBD_REQ1<
📋 PIDs OBD-II Comuns (veículos leves reais)
PIDs OBD-II não se aplicam ao simulador KingWell (J1939). Tabela mantida como referência do modo OBD-II do VL08.
| PID | Hex | Parâmetro | Unidade | Faixa |
|---|---|---|---|---|
| 4 | 0x04 | Carga Calculada | % | 0–100 |
| 5 | 0x05 | Temperatura do Líquido de Arref. | °C | -40 a 85 |
| 10 | 0x0A | Pressão de Combustível | kPa | 0–765 |
| 11 | 0x0B | Pressão do Coletor de Admissão | kPa | 0–255 |
| 12 | 0x0C | RPM do Motor | rpm | 0–16.383 |
| 13 | 0x0D | Velocidade | km/h | 0–255 |
| 14 | 0x0E | Avanço de Ignição | ° BTDC | -64 a 63 |
| 15 | 0x0F | Temperatura do Ar de Admissão | °C | -40 a 215 |
| 16 | 0x10 | Taxa de Fluxo de Ar (MAF) | g/s | 0–655.35 |
| 17 | 0x11 | Posição da Borboleta | % | 0–100 |
| 51 | 0x33 | Pressão Barométrica | kPa | 0–255 |
| 102 | 0x66 | Odômetro | km | 0–4.294.967.295 |
⚙️ Configurar PIDs Individuais (veículos leves reais)
# Formato: >VOBDpp,f< onde pp=PID(dec) e f=frequência
# Habilitar RPM (PID 12) com leitura a cada 100ms:
>VOBD12,1<
# Habilitar Velocidade (PID 13) com leitura a cada 1s:
>VOBD13,2<
# Habilitar Temperatura (PID 5) com leitura a cada 10s:
>VOBD05,3<
# Desabilitar um PID:
>VOBD12,0<
Frequências:
0 = Desabilitado
1 = A cada 100ms (rápido)
2 = A cada 1 segundo
3 = A cada 10 segundos
Consultar PIDs Suportados
# Solicitar ao veículo/simulador lista de PIDs suportados:
>VOBD_ASK_PID<
# Consultar mapa de PIDs habilitados:
>VOBD_PID000<
>VOBD_PID_HEX<
📡 Passo 4 — Consultar Dados (QCT)
Os dados capturados pelos filtros CAN e pelo protocolo OBD-II são armazenados em registradores CT. Use os comandos QCT para consultá-los:
# Consultar CT individual:
>QCT01<
>RCT01 2500;ID=0081;#826E;*4F< # RPM = 2500
# Consultar em hexadecimal:
>QCT01HEX<
# Consultar faixa de CTs (CT 01 a CT 10):
>QCT001010<
# Consultar faixa em hexadecimal:
>QCT001010HEX<
# Consultar status global (GPS, entradas, bateria):
>QTT<
Índices CT Comuns
| CT | Parâmetro | Unidade | Comando |
|---|---|---|---|
| 01 | RPM | rpm | >QCT01< |
| 101 | Horímetro | horas | >QCT101< |
| 102 | Odômetro | km | >QCT102< |
| 103 | RPM (alternativo) | rpm | >QCT103< |
| 109 | Velocidade | km/h | >QCT109< |
| 15 | Consumo de Combustível | litros | >QCT15< |
QCT01 retorna RCT01 0, verifique: (1) VL08 está em J1939 250K (>VS19_ENA0250,1<), (2) o filtro VS19xx aponta para a PGN certa, (3) simulador ligado e potenciômetro fora do mínimo, (4) use o modo sniffer para confirmar as PGNs no barramento.
🔴 Leitura de DTCs J1939 (SPN/FMI)
O simulador KingWell gera falhas no formato J1939 (SPN/FMI). A leitura de DTCs J1939 no VL08 requer firmware ≥ 158B01.
# Habilitar a CAN em modo normal já com leitura de DTCs J1939:
>VS19_ENA0250,1,TP1024,20,DTC060,59904,65226,65227,SA128<
# Campos específicos de DTC:
TP1024 = Buffer (bytes) p/ recebimento J1939-21 (multiframe)
20 = Timeout do pacote multiframe
DTC060 = Timeout de cada DTC [1–255 s] — remove da lista se não recebido
59904 = PGN de requerimento
65226 = PGN de recepção DM1
65227 = PGN de recepção DM2
SA128 = Source Address solicitado ao conectar
# Consultar DTC lido no índice 0 (até 32: GTC00…GTC31):
>GTC00<
>GTC00,1,030724111340.009,1,000,1,0,0,0,3,3,3,3,000110,00,001,001<
# Decompondo a resposta:
00 = Índice na tabela GTC (0–31)
1 = Status (0=vazio, 1=dado válido)
030724111340.009 = Data/hora (ddmmaaaahhmmss.sss)
1 = DM1 ou DM2
000 = Source Address da mensagem
1,0,0,0,3,3,3,3 = Estado das lâmpadas (MIL, etc.)
000110 = SPN (Suspect Parameter Number)
00 = FMI (Failure Mode Identifier)
001 = Occurrence Count (nº de ocorrências)
001 = Tempo (s) desde a recepção
Estrutura de um DTC J1939
| Campo | Bits | Descrição |
|---|---|---|
| SPN | 19 | Suspect Parameter Number — componente/subsistema com falha |
| FMI | 5 | Failure Mode Identifier — natureza da falha |
| OC | — | Occurrence Count — quantas vezes ocorreu |
TC00++…TC31++ disparam enquanto o índice GTCxx correspondente contém um DTC; TC32++ ao acrescentar um novo DTC; TC33++ ao remover por timeout.🧹 Limpeza / Referência OBD-II
No J1939 os DTCs saem da lista GTC automaticamente por timeout (parâmetro DTCxxx) quando o simulador para de enviá-los (desligue a falha pelo Fault SW). Não há um "limpar" ativo como no OBD-II.
>VOBD_ASK_DTC3</DTC7, consulta >VOBD_DTC00< (código P/C/B/U de 2 bytes) e limpa com >VOBD_CLR_DTC<. Isso não se aplica ao simulador KingWell (J1939).
💥 Simular Falhas no Simulador
O simulador possui o botão Fault SW, que injeta um código de falha J1939 (SPN/FMI) no barramento (LED Fault acende). Para falhas específicas, use os comandos seriais AT+DTC1/AT+DTC2 do simulador.
Ativar a falha
Pressione o Fault SW no simulador — o LED Fault acende e o código J1939 aparece no LCD.
Habilitar leitura de DTC no VL08
Envie >VS19_ENA0250,1,TP1024,20,DTC060,59904,65226,65227,SA128<.
Verificar DTC capturado
Consulte >GTC00< — deve retornar o SPN/FMI simulado.
Limpar e Repetir
Desative a falha (Fault SW ou AT+DTC1:0). O DTC sai da lista GTC por timeout. Repita para validar.
✅ Checklist de Integração
- Firmware VL08 com _CAN (DTC J1939 requer ≥ 158B01)
- Simulador alimentado (12V) — LED Power verde
- DIP switch do simulador: irrelevante (não utilizado)
- Conexão física: CAN-H (pino 6) e CAN-L (pino 14)
- VL08 alimentado e boot completo (~15s)
- CAN habilitada em J1939 250K:
>VS19_ENA0250,1< - PGNs confirmadas via sniffer:
>VS19_ENA0250,5<→>GPG0,99< - Filtro PGN configurado:
>VS1901,61444,...< - RPM lido:
>QCT01<acompanha o knob EngineRpm - Velocidade lida:
>QCT<acompanha FrontAxisSpeed - DTC J1939: Fault SW →
>GTC00<retorna SPN/FMI - DTC sai da lista GTC por timeout ao desligar a falha
🔧 Troubleshooting
| Sintoma | Causa Provável | Solução |
|---|---|---|
QCT01 retorna 0 |
CAN em baudrate errado ou filtro/PGN incorreto | Usar >VS19_ENA0250,1< (J1939 250K) e conferir o filtro VS19xx |
| Nenhum dado, baudrate desconhecido | Não sabe quais PGNs o simulador emite | Modo sniffer: >VS19_ENA0250,5< → >CPG< → >GPG0,99< |
QVR sem _CAN |
Firmware sem suporte CAN | Atualizar para ≥ 153B06 (_CAN); DTC J1939 requer ≥ 158B01 |
| Display do simulador apagado | Sem alimentação ou fonte incorreta | Verificar fonte 12V DC e chave liga/desliga |
| CAN-H e CAN-L invertidos | Fios trocados nos pinos 6/14 | Inverter os fios — sem risco de dano |
| DTCs J1939 não aparecem | CAN não habilitada com parâmetros de DTC, ou FW < 158B01 | Enviar >VS19_ENA0250,1,TP1024,20,DTC060,59904,65226,65227,SA128< |
GTC00 vazio após Fault SW |
Falha ainda não injetada / timeout muito curto | Confirmar LED Fault aceso; aumentar DTCxxx; aguardar alguns segundos |
Tentou VOBD_ENA e nada responde |
Caminho OBD-II não se aplica ao simulador J1939 | Usar filtros PGN J1939, não o modo OBD-II (VOBD) |
Erros na CAN (VQ19_ST) |
Baudrate incorreto ou modo normal em rede errada | Testar em modo escuta ,0; confirmar 250K |
| Valores RPM/Velocidade fixos | Potenciômetros no mínimo | Girar os potenciômetros no simulador e ler QCT novamente |
📥 Scripts e Downloads
| Script | Descrição |
|---|---|
| Config OBD2 VIRLOC 1.4 | Ferramenta oficial de configuração OBD-II |
| vl08_can_j1939.xvm | Script padrão J1939 — use este com o simulador ✅ |
| vl08_can_obd2.xvm | Script padrão OBD-II (veículos leves reais — não o simulador) |
| Arquivo | Propósito |
|---|---|
| tools/test_bluetooth.py | Teste de conectividade BLE + comandos XVM |
| tools/tcp_listener.py | Servidor TCP para teste de conexões |
| tools/test_wifi.py | Teste de configuração Wi-Fi |
| tools/test_port.py | Teste de porta serial |
| tools/connection_diagram.md | Referência de conexão física |
Sequência Rápida de Teste (J1939) — Copiar e Colar
# ── 1. Verificar firmware ──
>QVR< # Deve conter _CAN (DTC J1939: FW ≥ 158B01)
# ── 2. Descobrir PGNs (sniffer) ──
>VS19_ENA0250,5< # CAN1 @ 250K, listagem de PGNs
>CPG< # zerar lista
>GPG0,99< # (após alguns minutos) listar PGNs
# ── 3. Habilitar CAN em modo normal ──
>VS19_ENA0250,1< # CAN1 @ 250K, J1939, com ACK
# ── 4. Configurar filtro PGN (ex.: rotação — EEC1) ──
>VS1901,61444,000,29,01,1,1,000000FF,0,0,1000<
# ── 5. Ler dados ──
>QCT01< # valor capturado no CT01
>QCT001010< # CTs 01–10
# ── 6. Testar DTCs J1939 (ativar Fault SW antes) ──
>VS19_ENA0250,1,TP1024,20,DTC060,59904,65226,65227,SA128<
>GTC00< # ver DTC (SPN/FMI) no índice 0