← Últimos artigos
⚡ electrical engineering

ESBMC-Arduino: Closing the Deployment Gap for Formal Verification of Open-Hardware PLCs

Este artigo apresenta o ESBMC-Arduino, uma estrutura de verificação fiel ao hardware que preenche a lacavra de implantação para PLCs de hardware aberto ao integrar uma camada de abstração de hardware declarativa e modelagem sonora de intervalo de entrada para eliminar alarmes falsos causados por suposições de inteiros idealizados, enquanto detecta defeitos genuínos dependentes de largura em programas IEC 61131-3 executados em microcontroladores com recursos limitados.

Autores originais: Pierre Dantas, Lucas Cordeiro, Waldir Junior

Publicado 2026-07-10
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Pierre Dantas, Lucas Cordeiro, Waldir Junior

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você está construindo um robô para gerenciar um tanque de água. Você escreve as instruções em uma linguagem especial chamada IEC 61131-3, que é como um livro de receitas universal para máquinas industriais. Por anos, engenheiros têm usado simuladores de "super-robô" para verificar se essas receitas são seguras. Esses simuladores são como magos que conseguem pensar com números infinitos; eles assumem que o robô pode guardar qualquer número em sua cabeça, de menos infinito a mais infinito, e que os sensores podem relatar qualquer valor imaginável.

Mas aqui está a reviravolta: o robô real que você constrói não é um mago. É um microcontrolador minúsculo e barato (como um Arduino) que vive no mundo real. Esse pequeno chip tem um cérebro muito específico e limitado. Ele só consegue guardar números até 32.767. Se uma conta ultrapassar esse valor, o número não apenas cresce; ele quebra, volta para o início e se torna um número negativo. É como um odômetro de carro que volta de 999.999 para 000.000.

O Grande Desconecte
O artigo chama isso de "gap de implantação" (deployment gap). É a diferença entre o mundo dos sonhos do mago e a realidade limitada do robô.

Os autores descobriram que, quando os engenheiros usavam os antigos simuladores de "mago" para verificar seu código quanto à segurança, eles recebiam uma quantidade massiva de alarmes falsos. Dos 123 programas reais que testaram, os antigos simuladores gritaram "PERIGO!" 54 vezes (uma taxa de alarme falso de 44%). Mas quando olharam mais de perto, perceberam que esses "perigos" eram impossíveis. Os simuladores estavam imaginando leituras de sensores como -32.764. No mundo real, um sensor conectado a este robô só pode ler números entre 0 e 1.023 (porque é um sensor de 10 bits). Um valor de -32.764 é como um termômetro lendo "menos 32.764 graus" — simplesmente não pode acontecer.

O artigo argumenta que confiar nesses antigos simuladores é como um segurança gritando "Intruso!" porque viu um fantasma. O segurança está tecnicamente "correto" sobre o fantasma, mas é inútil porque fantasmas não existem. Os autores excluem explicitamente a ideia de que você possa apenas verificar erros matemáticos sem também verificar o que os sensores realmente podem ver. Eles mostram que fazer isso torna a verificação "não confiável" (unsound) na prática.

A Solução Mágica: O Descritor HAL
Para corrigir isso, os autores construíram uma nova ferramenta chamada ESBMC-Arduino. Pense nesta ferramenta como um filtro de "Checagem de Realidade".

Antes que o simulador de mago olhe para o código, esta nova ferramenta anexa uma pequena nota automática a cada sensor. Ela diz: "Ei, lembre-se, este sensor só pode dar números entre 0 e 1.023". Ela também lembra ao simulador: "E lembre-se, o cérebro do robô só pode conter números até 32.767".

Quando o simulador roda com essas regras, a mágica acontece:

  1. Os 54 alarmes falsos desaparecem instantaneamente. O fantasma de -32.764 sumiu porque o simulador agora sabe que esse número é impossível.
  2. Os 32 programas que já haviam sido provados seguros continuam seguros.
  3. Mais importante ainda, a ferramenta não perdeu nenhum erro real: ela descobriu que os antigos simuladores estavam escondendo um tipo específico de perigo real: quando uma leitura de sensor é multiplicada por um número grande (como transformar o valor bruto de um sensor em uma porcentagem), a matemática pode transbordar o cérebro minúsculo do robô.

O Perigo Real (e quão raro ele é)
O artigo descobriu que, embora os "alarmes de fantasma" fossem comuns, os erros reais causados por esse gap eram, na verdade, bastante raros no código público que testaram. Eles só encontraram defeitos genuínos em cenários específicos onde uma leitura de sensor era multiplicada por uma constante grande (como 100) em uma placa de 16 bits.

Por exemplo, se um sensor lê 898 (um valor normal e real) e o código o multiplica por 100, o resultado é 89.800. Isso é grande demais para o cérebro de 16 bits do robô (máximo de 32.767). O número dá a volta, torna-se um número negativo, e o robô pensa que o tanque de água está vazio quando, na verdade, está transbordando. A nova ferramenta detectou exatamente esse cenário e forneceu aos engenheiros um exemplo físico real da leitura do sensor que causaria a falha.

O Que o Artigo Não Alega
Os autores são muito honestos sobre o que não fizeram. Eles não provaram que todos os programas agora estão seguros. Dos 123 programas, 91 terminaram com um veredito de "desconhecido". Isso não é porque a ferramenta está quebrada; é porque a matemática para provar a segurança desses programas específicos é difícil demais para o motor atual concluir. A ferramenta removeu com sucesso o ruído (os alarmes falsos) e manteve o sinal (as provas reais), mas não conseguiu resolver os enigmas mais difíceis ainda.

Eles também não testaram isso em números de ponto flutuante (decimais como 3,14) ou simulações físicas complexas. Eles focaram estritamente em números inteiros e lógica booleana (interruptores de liga/desliga).

A Conclusão
O artigo demonstra que, para verificar PLCs de hardware aberto (como os usados em escolas e pequenas fábricas), você não pode apenas verificar a matemática; você tem que verificar os limites do hardware. Ao adicionar automaticamente uma "Checagem de Realidade" que diz ao simulador o que os sensores realmente podem fazer, eles transformaram uma ferramenta barulhenta e não confiável em uma ferramenta digna de confiança. Eles não encontraram um milhão de novos bugs, mas impediram a ferramenta de dar alarmes falsos, tornando possível para os engenheiros confiarem novamente nas verificações de segurança.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →