Analisador de datalog

Largue o CSV do log e leia o que o motor fez. Até seis canais no mesmo gráfico, cada um com a sua escala, e uma linha do tempo embaixo para recortar o trecho que interessa. O arquivo é lido dentro do navegador — não sobe para servidor nenhum.

📊
Arraste o arquivo aqui, ou clique para escolher
CSV de datalog. Entende log de ferramenta Bosch/EVC (nome, descrição e unidade em três linhas) e de VCDS (colunas em pares TIME/valor).
Nada é enviado para lugar nenhum: a leitura acontece no seu aparelho.
Como o arquivo é lido

Nada sai do aparelho sem você mandar. O arquivo é lido pelo próprio navegador, com FileReader. Para quem não está logado não existe servidor nesta página, e nenhum byte do log viaja para lugar nenhum. Log de cliente pode ficar onde está.

“Na conta” é o único caminho para o servidor, e só existe para quem está logado na Minha área. Ele leva exatamente o log em que você clicou “Salvar na conta” (ou a seta ↑ de um log salvo no aparelho), comprimido, para a sua conta — e mais nada.

“Meus logs” também é local. O que você salva vai para o IndexedDB do navegador, guardado como os bytes do arquivo original comprimidos em gzip — um CSV de números encolhe umas quatro a cinco vezes. Guardar o arquivo, e não os canais já lidos, é de propósito: o leitor continua sendo a única fonte de verdade, então melhorar a leitura melhora junto tudo o que já estava salvo.

O limite é baixo de propósito — dez arquivos, 25 MB — porque isto é atalho para o que você está acompanhando esta semana, não arquivo morto. E vale repetir o que está escrito no cartão: não é backup. Fica em um navegador de um aparelho, some se você limpar os dados do site, e o navegador pode despejar sob pressão de espaço. A página pede navigator.storage.persist() para reduzir essa chance, mas é um pedido, não uma garantia. O arquivo original continua sendo o backup.

Codificação. O arquivo é lido como UTF-8; se aparecer o caractere de substituição, é relido como windows-1252. É o que salva log com °C e Δ exportado por ferramenta antiga.

Separador e decimal. Testa ponto e vírgula, tabulação e vírgula, e fica com o que faz as linhas de dados darem mais campos numéricos, e de forma constante — partido pelo separador errado, um número com vírgula decimal vira dois pedaços que não são número. O decimal é decidido depois, campo a campo, em centenas de linhas espalhadas pelo arquivo: com ponto e vírgula no mesmo número, o último dos dois é o decimal (1.013,50). Sem pista nenhuma — log só de inteiros —, ponto e vírgula traz vírgula decimal, que é como exportador em português escreve. Campo entre aspas é lido como um campo só, mesmo com o separador dentro.

Onde começam os dados. Em vez de supor um número de linhas de cabeçalho, procura a primeira linha em que a maioria dos campos é número. As linhas acima dela que tiverem a mesma contagem de campos são o cabeçalho — é isso que faz o bloco de metadados do VCDS, que tem contagem diferente, ser descartado sozinho.

Nome, descrição e unidade. Com três linhas de cabeçalho, são nome curto, descrição e unidade, nessa ordem — o formato das ferramentas Bosch, onde a coluna se chama nmot_w e a descrição diz Engine speed. Com duas, a segunda é unidade se os campos forem curtos, senão é descrição. Com uma, são só nomes.

Colunas em pares. O VCDS escreve TIME,valor,TIME,valor…, um carimbo de tempo por canal. Quando aparecem dois ou mais campos chamados TIME ou STAMP alternando, a leitura entende o padrão: o primeiro vira o eixo do tempo e os outros são descartados, ficando só as colunas de valor.

Célula com dois valores. Ainda no VCDS, o sensor de oxigênio sai como 0,994 Lambda / -0,027 mA — duas grandezas num campo só. Quando a coluna inteira tem dois números por célula, ela é partida em dois canais, cada um com a unidade que vem escrita ao lado do seu número. É o dado que mais interessa num log de acerto; perder metade dele por causa da formatação seria bobagem.

A unidade do tempo. Vem da linha de unidades quando ela existe. Quando não vem — o TIME do VCDS não traz unidade — decide pelo passo entre amostras: passo de dezenas é milissegundo, passo abaixo de cinco é segundo. Carimbo em hora do relógio (14:02:33.250) vira segundos. O seletor no cartão do arquivo existe para o caso de ela errar, e a duração detectada fica à vista para você conferir de relance. Se a coluna de tempo não anda, o eixo vira o número da amostra, e o cartão do arquivo avisa.

Amostragem irregular. Log de ferramenta raramente tem passo constante — o mesmo arquivo alterna 46 e 64 ms entre amostras. Por isso o eixo é o tempo, não o número da amostra, e a posição de cada ponto sai do carimbo dele. Índice como eixo esticaria e encolheria trechos do log conforme a ferramenta engasgasse.

Por que canvas, e não SVG como o resto do site. Dez minutos a 50 Hz são 30 mil amostras por canal; com seis canais são 180 mil elementos no DOM, e a página trava. Em canvas o custo é o número de pixels, não o de amostras.

Decimação por mínimo e máximo. Quando há mais amostras que pixels, cada coluna de pixel desenha um traço vertical do menor ao maior valor daquele intervalo — e não a média, nem uma amostra escolhida. A diferença importa: média e amostragem somem com o pico isolado, que num datalog costuma ser exatamente o que se procura, o espeto de detonação ou a queda de pressão de meio segundo. Cada coluna ainda estica até o último valor da coluna anterior, senão sinal muito rápido apareceria picotado.