← 最新论文
⚡ electrical engineering

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

本文介绍了 ESBMC-Arduino,这是一个硬件忠实(hardware-faithful)的验证框架,它通过集成声明式硬件抽象层和可靠的输入范围建模,为开源硬件 PLC 弥合了部署差距,旨在消除由理想化整数假设引起的虚假报警,同时检测在运行于资源受限微控制器上的 IEC 61131-3 程序中存在的真实宽度相关缺陷。

原作者: Pierre Dantas, Lucas Cordeiro, Waldir Junior

发布于 2026-07-10
📖 1 分钟阅读☕ 轻松阅读

原作者: Pierre Dantas, Lucas Cordeiro, Waldir Junior

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正在建造一个管理水箱的机器人。你使用一种叫做 IEC 61131-3 的特殊语言来编写指令,这就像是工业机器的通用食谱。多年来,工程师们一直使用“超级机器人”模拟器来检查这些食谱是否安全。这些模拟器就像是拥有无限数字思维的巫师;它们假设机器人可以脑中持有任何数字,从负无穷到正无穷,并且传感器可以报告任何可以想象到的数值。

但这里有一个转折:你实际建造的机器人并不是巫师。它是一个微小的、廉价的微控制器(比如 Arduino),它生活在现实世界中。这个小芯片有一个非常具体且有限的大脑。它只能持有最高为 32,767 的数字。如果计算结果超过这个值,数字并不会仅仅是变大,而是会崩溃、折回底部,变成一个负数。这就像汽车的里程表,从 999,999 滚回到 000,000。

巨大的脱节
论文称之为“部署差距”(deployment gap)。这是“巫师的梦想世界”与“机器人局促的现实”之间的差异。

作者发现,当工程师使用旧有的“巫师”模拟器来检查他们的代码是否安全时,他们得到了大量的虚假警报。在他们测试的 123 个真实程序中,旧的模拟器尖叫着“危险!”达 54 次(虚假报警率为 44%)。但当他们仔细观察时,意识到这些“危险”是不可能发生的。模拟器想象出的传感器读数像是 -32,764。在现实世界中,连接到这个机器人的传感器只能读取 01,023 之间的数字(因为这是一个 10 位传感器)。-32,764 这个值就像温度计读数为“零下 32,764 度”一样——这根本不可能发生。

论文指出,依赖这些旧的模拟器就像是一个保安因为看到了幽灵而大喊“入侵者!”。保安在技术上关于幽灵的描述是“正确”的,但由于幽灵并不存在,这种正确是毫无用处的。作者明确排除了这样一种观点,即你可以只检查数学错误而不同时检查传感器实际能看到什么。他们表明,这样做会使验证在实践中变得“不健全”(unsound,即不可靠)。

神奇的修复方法:HAL 描述符
为了解决这个问题,作者构建了一个名为 ESBMC-Arduino 的新工具。把这个工具想象成一个“现实检查”过滤器。

在巫师模拟器查看代码之前,这个新工具会在每个传感器上附带一个微小的、自动生成的便签。它会说:“嘿,记住,这个传感器只能给出 01,023 之间的数字。”它还会提醒模拟器:“并且记住,机器人的大脑只能持有最高为 32,767 的数字。”

当模拟器带着这些规则运行时,奇迹发生了:

  1. 54 个虚假警报瞬间消失了。-32,764 这个幽灵消失了,因为模拟器现在知道这个数字是不可能的。
  2. 32 个已经被证明安全的程序依然保持安全。
  3. 最重要的是,该工具并没有漏掉任何真正的漏洞。它发现旧的模拟器隐藏了一种特定的真实危险:当一个传感器读数被乘以一个大数字(例如将原始传感器值转换为百分比)时,数学计算可能会导致这个微小机器人大脑的溢出。

真实的危险(以及它有多罕见)
论文发现,虽然“幽灵警报”很常见,但由于这种差距导致的真实漏洞在他们测试的公开代码中其实相当罕见。他们只在特定的场景中发现了真正的缺陷,即在 16 位板卡上,当传感器读数被乘以一个大的常数(如 100)时。

例如,如果传感器读取 898(这是一个正常的、真实的数值),而代码将其乘以 100,结果是 89,800。这对于 16 位机器人大脑(最大值为 32,767)来说太大了。数字发生了回绕,变成了一个负数,导致机器人误以为水箱是空的,而实际上水箱正在溢出。新工具捕捉到了这个精确的情景,并向工程师提供了导致崩溃的传感器读数的真实物理示例。

论文并未声称的内容
作者非常诚实地说明了他们没有做的事情。他们并没有证明现在所有的程序都是安全的。在 123 个程序中,有 91 个最终得到了“未知”的判定。这并不是因为工具坏了,而是因为要证明这些特定程序安全的数学逻辑对目前的引擎来说太难了,无法完成。该工具成功地消除了噪声(虚假警报)并保留了信号(真实的证明),但它还无法解决最难的谜题。

此外,他们也没有在浮点数(如 3.14 之类的十进制数)或复杂的物理模拟上进行测试。他们专注于整数(integers)和布尔逻辑(Boolean logic,即开/关开关)。

底线
这篇论文证明了,要验证开源硬件 PLC(如学校和小型工厂中使用的 PLC),你不能仅仅检查数学,你必须检查硬件的极限。通过自动添加一个告诉模拟器传感器实际能力的“现实检查”,他们将一个嘈杂、不可靠的工具变成了一个值得信赖的工具。他们并没有发现一百万个新漏洞,但他们阻止了工具“狼来了”式的乱叫,使得工程师能够重新信任安全检查。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →