← Derniers articles
⚡ electrical engineering

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

Cet article présente ESBMC-Arduino, un cadre de vérification fidèle au matériel qui comble l'écart de déploiement pour les API en matériel ouvert en intégrant une couche d'abstraction matérielle déclarative et une modélisation saine des plages d'entrée afin d'éliminer les fausses alertes causées par des hypothèses d'entiers idéalisées tout en détectant les défauts réels dépendants de la largeur de mot dans les programmes IEC 61131-3 s'exécutant sur des microcontrôleurs à ressources limitées.

Auteurs originaux : Pierre Dantas, Lucas Cordeiro, Waldir Junior

Publié 2026-07-10
📖 6 min de lecture🧠 Analyse approfondie

Auteurs originaux : Pierre Dantas, Lucas Cordeiro, Waldir Junior

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez que vous construisez un robot pour gérer un réservoir d'eau. Vous écrivez les instructions dans un langage spécial appelé IEC 61131-3, qui est comme un livre de recettes universel pour les machines industrielles. Pendant des années, des ingénieurs ont utilisé des simulateurs de « super-robots » pour vérifier si ces recettes sont sûres. Ces simulateurs sont comme des sorciers capables de réfléchir avec des nombres infinis ; ils supposent que le robot peut garder n'importe quel nombre dans sa tête, de moins l'infini à plus l'infini, et que les capteurs peuvent rapporter n'importe quelle valeur imaginable.

Mais voici le rebondissement : le robot que vous construisez réellement n'est pas un sorcier. C'est un minuscule microcontrôleur bon marché (comme un Arduino) qui vit dans le monde réel. Cette petite puce a un cerveau très spécifique et limité. Elle ne peut contenir que des nombres allant jusqu'à 32 767. Si un calcul dépasse ce chiffre, le nombre ne devient pas simplement plus grand ; il se brise, revient brusquement au bas de l'échelle, et devient un nombre négatif. C'est comme un odomètre de voiture qui revient de 999 999 à 000 000.

Le Grand Décalage
L'article appelle cela le « écart de déploiement » (deployment gap). C'est la différence entre le monde des rêves du sorcier et la réalité étroite du robot.

Les auteurs ont découvert que lorsque les ingénieurs utilisaient les anciens simulateurs de « sorciers » pour vérifier leur code, ils obtenaient une quantité massive de fausses alertes. Sur les 123 programmes réels qu'ils ont testés, les anciens simulateurs ont hurlé « DANGER ! » 54 fois (un taux de fausses alarmes de 44 %). Mais en regardant de plus près, ils se sont rendu compte que ces « dangers » étaient impossibles. Les simulateurs imaginaient des lectures de capteurs comme -32 764. Dans le monde réel, un capteur connecté à ce robot ne peut lire que des nombres compris entre 0 et 1 023 (parce qu'il s'agit d'un capteur 10 bits). Une valeur de -32 764 est comme un thermomètre affichant « moins 32 764 degrés » — cela ne peut tout simplement pas arriver.

L'article soutient que de compter sur ces anciens simulateurs revient à utiliser un garde de sécurité qui crie « Intrusion ! » parce qu'il a vu un fantôme. Le garde est techniquement « correct » concernant le fantôme, mais inutile parce que les fantômes n'existent pas. Les auteurs excluent explicitement l'idée que l'on puisse simplement vérifier les erreurs mathématiques sans aussi vérifier ce que les capteurs peuvent réellement voir. Ils montrent que faire cela rend la vérification « non fiable » (unsound) en pratique.

La Solution Magique : Le Descripteur HAL
Pour correr cela, les auteurs ont construit un nouvel outil appelé ESBMC-Arduino. Considérez cet outil comme un filtre de « Vérification de la Réalité ».

Avant que le simulateur du sorcier n'examine le code, ce nouvel outil attache une petite note automatique à chaque capteur. Il dit : « Hé, souviens-toi, ce capteur ne peut donner que des nombres entre 0 et 1 023 ». Il rappelle également au simulateur : « Et souviens-toi, le cerveau du robot ne peut contenir que des nombres jusqu'à 32 767 ».

Lorsque le simulateur fonctionne avec ces règles, la magie opère :

  1. Les 54 fausses alarmes disparaissent instantanément. Le fantôme de -32 764 a disparu car le simulateur sait désormais que ce nombre est impossible.
  2. Les 32 programmes qui étaient déjà prouvés sûrs restent sûrs.
  3. Plus important encore, l'outil n'a manqué aucun vrai bug. Il a découvert que les anciens simulateurs cachaient un type spécifique de danger réel : lorsqu'une lecture de capteur est multipliée par un grand nombre (comme transformer une valeur brute de capteur en pourcentage), le calcul peut déborder le cerveau minuscule du robot.

Le Vrai Danger (et sa rareté)
L'article a révélé que, bien que les « alarmes fantômes » fussent courantes, les vrais bugs causés par ce décalage étaient en fait assez rares dans le code public testé. Ils n'ont trouvé des défauts réels que dans des scénarios spécifiques où une lecture de capteur est multipliée par une constante élevée (comme 100) sur une carte 16 bits.

Par exemple, si un capteur lit 898 (une valeur normale et réelle), et que le code le multiplie par 100, le résultat est 89 800. C'est trop grand pour le cerveau 16 bits du robot (maximum 32 767). Le nombre boucle, devient un nombre négatif, et le robot pense que le réservoir d'eau est vide alors qu'il est en train de déborder. Le nouvel outil a détecté exactement ce scénario et a fourni aux ingénieurs un exemple physique réel de la lecture de capteur qui provoquerait le crash.

Ce que l'Article Ne Prétend Pas
Les auteurs sont très honnêtes sur ce qu'ils n'ont pas fait. Ils n'ont pas prouvé que chaque programme est désormais sûr. Sur les 123 programmes, 91 se sont retrouvés avec un verdict « inconnu ». Ce n'est pas parce que l'outil est défectueux, mais parce que le calcul pour prouver la sécurité de ces programmes spécifiques est trop difficile pour le moteur actuel. L'outil a réussi à éliminer le bruit (les fausses alarmes) et à conserver le signal (les vraies preuves), mais il n'a pas encore résolu les énigmes les plus difficiles.

De plus, ils n'ont pas testé cela sur des nombres à virgule flottante (des décimales comme 3,14) ou des simulations physiques complexes. Ils se sont concentrés strictement sur les nombres entiers et la logique booléenne (interrupteurs on/off).

L'Essentiel
Cet article démontre que pour vérifier les automates programmables industriels (PLC) à matériel ouvert (comme ceux utilisés dans les écoles et les petites usines), on ne peut pas se contenter de vérifier les mathématiques ; il faut aussi vérifier les limites du matériel. En ajoutant automatiquement une « Vérification de la Réalité » qui indique au simulateur ce que les capteurs peuvent réellement faire, ils ont transformé un outil bruyant et peu fiable en un outil digne de confiance. Ils n'ont pas trouvé un million de nouveaux bugs, mais ils ont empêché l'outil de crier au loup, rendant possible pour les ingénieurs de faire à nouveau confiance aux vérifications de sécurité.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →