← 返回 2026-08-20

SemaPLC:面向 PLC 代码生成的项目接地、验证门控智能体框架 SemaPLC: A Project-Grounded, Verification-Gated Agent Harness for PLC Code Generation

Yanlun Tu, Huacan Wang, Ziyue Zhou, Jie Zhou, Ningyan Zhu, Ge Chen, Wangyi Chen, Tengfei Zhou, Yifan Zhou, Dasheng Yang, Xiaofeng Mou, Hui Zhang, Yi Xu 📅 2026-08-19 👍 116 2026-08-25 18:30
LLM智能体 PLC代码生成 工业自动化 运行时验证 验证门控

验证门控智能体框架:LLM 生成的 PLC 逻辑须经规范、编译与实机三重外部验证方可交付

前置知识

PLC 与 IEC 61131-3 / Structured Text

PLC(可编程逻辑控制器)是驱动工厂产线、电站、水处理设施实时控制回路的工业计算机。IEC 61131-3 是其主流编程标准,其中 Structured Text(ST)是类 Pascal 的文本语言。PLC 程序按扫描周期(scan cycle)循环执行:读输入、执行逻辑、写输出,因此定时器(TON)、边沿检测等跨周期状态构造是核心也是难点。

本文的生成对象就是 ST 语言的功能块与程序,扫描周期语义决定了规范审查清单和运行时轨迹采样的设计,不理解执行模型就看不懂验证为何分层。

POU(Program Organization Unit)

POU 是 IEC 61131-3 中代码的组织单元,包括程序(Program)、功能块(Function Block)和函数(Function)。此前 LLM 生成 PLC 代码的基准几乎都以独立 POU 为单位:给定需求文本和接口声明,生成单个可编译单元。

论文区分了功能轨道(117 个独立 POU 任务)与项目上下文轨道(65 个需嵌入真实工程的任务),这一粒度差异正是本文对现有评测的核心批评点。

形式化验证与模型检查(PLCverif / nuXmv)

模型检查把程序翻译成状态机后穷举验证时序逻辑属性是否被满足。PLCverif 是 ABB 开源的工具,把 ST 代码与需求模式翻译为 nuXmv 等模型检查器的输入。它给出强保证但有覆盖边界:不支持的构造(如 TON 定时器)、翻译失败或超时都会返回非结论性(inconclusive)结果。

功能轨道的裁判就是 PLCverif+nuXmv 管道,且论文用表 5 证明定时器程序 0% 结论性覆盖,这是引入实机运行时验证的直接动机。

黄金轨迹差分(golden-trace differential)

把候选程序与隐藏的参考实现部署到同一实时 PLC 运行时,注入相同的场景输入 T,采样双方外部可观测变量的时间轨迹并逐端口比对(布尔和数值要求精确一致),动态分 $D(P', T)$ 是各场景端口一致比例的均值。它直接度量行为正确性而非代码形态。

这是项目轨道的核心指标,也是论文最有力的发现来源:静态分相近的方法在动态分上差距可达 30 分。

验证门控与交付完整性

验证门控指智能体无权凭自我评估终止任务,只有当带工具日志的外部检查(规范审查、编译、实机运行)确认结果后才算完成;交付完整性指交付的字节与赢得全部通过的候选完全一致,且每个声称的通过都能与工具调用日志交叉核对,无日志的自报通过一律降级为未检查。

这是全文的方法论核心,区别于自我反思、self-debug 等依赖模型自评的方案,也是理解算法 1 三条不变式的前提。

MCP(Model Context Protocol)

MCP 是给 LLM 智能体挂载外部工具的标准化协议。SemaPLC 把语法检查、编译、部署、运行状态与日志、变量读取与强制(force)、轨迹采样、脚本化行为检查封装进单一 PLC MCP 服务器,同时提供等价命令行接口,使任何经过标准 chat-completion 接口的模型都能驱动同一套验证设施。

工具层的模型无关性是论文声称 harness 是可靠性层而非某个骨干模型专属调优的证据基础。

研究动机

PLC 控制着工厂产线、电站和水处理设施,程序多用 IEC 61131-3 的 Structured Text(ST)编写。LLM 已经能为 PLC 生成独立的程序组织单元(POU),LLM4PLC、AutoPLC、Agents4PLC 等系统也分别引入了编译器反馈、厂商 IDE 调试和形式化验证。但生产环境还有两个更苛刻的要求:一是项目接地(project grounding),生成逻辑必须集成进已有工程,复用其功能块、变量、类型与接口,遵守构建、复位、初始化与安全约定;二是正确的运行时行为——即使编译与静态检查通过,程序仍可能配错定时器、走错状态转移、漏掉复位、破坏互锁或输出时序错误。然而现有系统的评测几乎都停留在独立 POU 粒度,运行行为只在少量测试或个例上被“演示”(demonstrated)而非“度量”(measured),没有任何跨方法、跨模型的统一评估能回答:生成的控制逻辑到底多可靠、能多大程度落入真实工程并跑对。

本文的目标是论文同时回答“怎么做”与“怎么量”。方法上,构建一个项目接地、验证门控的智能体框架 SemaPLC:生成以任务或项目上下文为锚点;规范审查、编译、实机运行三类外部验证结果被当作一等证据;智能体不允许凭自我判断终止,只有当带日志的外部检查确认后才算完成。度量上,建立两条互补评测轨道:功能轨道沿用 Agents4PLC 的 117 个独立 POU 任务,用任何方法都不可查询的隔离裁判按 $V_f \geq 0.80$ 的严格验证通过准则打分(非结论性与空生成一律计失败);项目上下文轨道基于 Spec2Control 的 10 个工业厂区构造 65 个任务,要求生成逻辑在真实工程内编译并部署运行,分别报告集成编译 $C(P')$、静态行为 $S(P', R_p)$ 与动态行为 $D(P', T)$,使每一层的失败都保持可见。

与已有工作不同的是,作者的独特切入不是堆砌新工具,而是“完成纪律”:终止必须由带日志的外部验证结果背书,任何编辑都会作废此前全部判定,每个声称的通过都要与工具日志交叉核对——这提供了固定流水线不具备的交付完整性保证。另一独特点是把运行时验证从展示品提升为度量品:将候选与隐藏参考部署到同一实时 PLC 运行时,在最多 6 个场景下对比采样轨迹,给出黄金轨迹差分分数,并在基准规模上跨 7 个骨干模型、3 个已发表基线统一评测。由此得到一个反直觉的实证发现:静态评分被压缩到几分类似的方法(基线均值 71.7–75.7),动态行为却 sharply 分化(22.4–31.4 对 SemaPLC 52.2)——执行而非静态评分,才是控制逻辑是否真正可用的忠实检验。

核心方法

直觉上 SemaPLC 像“有外部监理的施工队”:模型可自由规划、生成和修改,但每个“通过”必须由外部检查签字,且一旦改动代码,旧签字全部作废。技术上,框架跑在通用事件驱动的工具使用核心上(不含 PLC 专用逻辑,经标准 chat-completion 接口访问),其上组织五个组件:规划/编辑/解释验证结果的智能体核心,项目与任务接地,PLC 技能库,多源验证流程,以及决定完成的验证门。所有组件通过共享的 PLC MCP 工具层操作环境,工具覆盖语法检查、编译、部署、运行日志、变量读取与强制、轨迹采样和脚本化行为检查。算法 1 形式化全流程:输入需求 $R$ 与上下文 $X$,先接地 $\Gamma \leftarrow \text{GROUND}(X)$、生成 $L \leftarrow \text{GENERATE}(R, \Gamma)$,在预算 $B$ 内对缺失判定的检查运行 RUNCHECK,$V$ 满足完成准则即交付 $(L, V)$;否则修复失败检查(重试 < $r=2$),且编辑后 $V \leftarrow \emptyset$ 作废旧判定。

核心创新是验证门控迭代(verification-gated iteration),由三条不变式治理:其一,有界重试:每项检查最多允许 $r=2$ 轮修复,防止无限循环;其二,编辑作废:任何代码修改都使此前全部判定失效、所有检查重跑,使判定精确绑定到字节级代码,杜绝“旧结论配新代码”;其三,凭据声明(earned claims):每个结果是机器可读哨兵值并与工具调用日志交叉验证,未记录在日志中的自我声称一律降级为未检查(unchecked)。三者合成交付完整性保证:交付程序与赢得全部报告通过的候选逐字节一致,且没有任何自报通过能脱离工具日志存活。这区别于 LLM4PLC 的编译器反馈循环、AutoPLC 的厂商 IDE 调试和 Agents4PLC 的固定五智能体闭环——它们的停止时机由内部流程或自派生属性决定,而 SemaPLC 把终止权交给外部证据,门要求的不是完美分数而是与交付字节匹配的日志化外部证据。

方法步骤详情

流程按算法 1 展开。第 1 步接地与生成:GROUND 在项目轨道检索项目树、定位相关模块、复用已有变量与功能块接口、避免重定义既有接口并在有界范围内编辑(函数轨道退化为解析 POU 接口 $I_f$),随后 GENERATE 产出初始实现 $L$。第 2 步多源验证:规范审查逐条核对自然语言需求(具名设备/信号/发布变量、阈值边界、互锁/互斥/优先级不变式、扫描周期状态语义);编译检查语法、类型、符号、接口与集成构建,只反馈首条诊断以保持修复局部化;实机运行验证则构建部署、初始化运行时、注入场景输入、采样外部变量,与需求派生的断言或黄金轨迹比对。第 3 步门控:带日志确认的判定写入 $V$,满足完成准则即接受。第 4 步修复循环:失败检查(重试 < 2)的首条诊断送回修复,编辑后作废全部旧判定并重跑所有检查;重试耗尽或预算 $B$ 用尽则报失败。失败阶段还指示修复目标:平直轨迹指向接线、变化但错误的轨迹指向块逻辑、迟到跳变指向定时器或边沿检测。

技术新颖性

技术新颖性有四点。一是完成纪律而非工具集合:贡献不在新工具,而在“终止需日志化外部验证 + 编辑作废旧判定 + 凭据与日志交叉核对”这一治理规则,形成固定流水线缺失的交付完整性保证。二是领域知识以文档而非代码承载:规则文件规定验证顺序、工具用法与扫描周期语义;策划的 wiki 记录 PLC 工程师从实践蒸馏的功能块签名、控制模式与编译器陷阱;程序化技能脚本化多步检查——这些产物只含通用 IEC 61131-3 与验证器语义,不含任何基准答案或任务特定属性,规避了数据污染质疑。三是统一 MCP 工具层使 harness 模型无关:bare 消融证明同一套设施让 7 个模型全部提升 8.5–33.3 个百分点,是可靠性层而非单一骨干的调优。四是评测基础设施设计:功能轨道对 Agents4PLC 有缺陷的 oracle 由 PLC 工程师审计修复了 43/117 个任务以保证公平;项目轨道的参考实现、黄金轨迹与断言 oracle 全程隐藏并做过泄漏审计(无逐字复制)。

Overview of the SEMAPLC agent harness: a model-agnostic agent core, grounded in the task or project context, acts through a shared PLC MCP tool layer, and a verification gate decides completion.
Figure 1: Overview of the SEMAPLC agent harness: a model-agnostic agent core, grounded in the task or project context, acts through a shared PLC MCP tool layer, and a verification gate decides completion.

实验结果

RQ1(功能轨道,117 任务,严格验证通过率):SemaPLC 在 7 个骨干模型上全部最佳,均值 72.6%,比最强基线 Agents4PLC 的 63.9% 高 8.8 个百分点;GPT-5.5 上 82.1% 对 79.5%;最差模型 67.5% 仍超所有基线均值。bare 消融显示 harness 让每个模型提升 8.5–33.3 个百分点,离散度从 37.6 收窄到 14.6。RQ2(项目轨道,65 任务):集成编译均值 89.4(基线 58.7–81.5),静态行为 81.6(基线 71.7–75.7),动态行为 52.2 对最强基线 AutoPLC 的 31.4——7 模型全胜且最低不低于 30,基线最差掉到 3.0。RQ3:三基线静态分仅差 4.0 而动态分差 9.0;静态到动态跌幅 SemaPLC 29.4 对基线 41.4–53.3;分层消融(DS-V4-Flash)显示动态分随规范/编译/运行层单调上升 23.1→30.3→43.7→54.1,成本 34k→129k token;含 TON 定时器的 174 条属性 100% 非结论性,凸显运行时验证不可替代。RQ4:功能轨道每任务 6.5 次请求(基线 6.3)、71 秒(基线 454 秒);项目轨道 34.1 次请求(基线 6.9),动态优势以模型交互次数为代价。

Function track: strict verified pass rate (%, denominator 117).
Table 1: Function track: strict verified pass rate (%, denominator 117).
Project-context track (0–100, best per column in bold): integrated-project compile rate, assertion-oracle static score, and live-runtime dynamic score.
Table 2: Project-context track (0–100, best per column in bold): integrated-project compile rate, assertion-oracle static score, and live-runtime dynamic score.
Project-track verification-layer ablation on DeepSeek-V4-Flash (65 tasks), adding checks cumulatively.
Table 3: Project-track verification-layer ablation on DeepSeek-V4-Flash (65 tasks), adding checks cumulatively.
Outcome shares (%) of the 3,590 golden-reference scenario–port value checks under the cumulative arms of Table 3.
Table 4: Outcome shares (%) of the 3,590 golden-reference scenario–port value checks under the cumulative arms of Table 3.
Function-track formal-verification coverage of the held-out pipeline, pooled over 1,293 delivered programs from SEMAPLC runs.
Table 5: Function-track formal-verification coverage of the held-out pipeline, pooled over 1,293 delivered programs from SEMAPLC runs.
Interaction cost per task against the strongest baseline: requests and end-to-end wall-clock seconds.
Table 6: Interaction cost per task against the strongest baseline: requests and end-to-end wall-clock seconds.
Project-track case study (coking-refinery plant, task “Section 8”).
Figure 2: Project-track case study (coking-refinery plant, task “Section 8”).
查看结构化数据
任务指标本文基线提升
功能轨道:117 个独立 POU 任务(Agents4PLC 修复版) 严格验证通过率(隔离裁判,7 模型均值,%) SemaPLC 72.6(GPT-5.5 最高 82.1) Agents4PLC 63.9(AutoPLC 62.4、LLM4PLC 30.2、bare 55.3) +8.8 个百分点,7 个模型全部第一,最差模型(67.5)仍超所有基线均值
项目轨道:65 个任务,集成编译 集成工程 RuSTy 构建成功率(%,7 模型均值) 89.4(GPT-5.5 100.0) AutoPLC 81.5(最高基线;LLM4PLC 仅 58.7) +7.9 个百分点
项目轨道:65 个任务,动态行为 黄金轨迹差分动态分 $D(P',T)$(0–100,7 模型均值) 52.2(GPT-5.5 65.4) AutoPLC 31.4(最高基线;Agents4PLC 30.3、LLM4PLC 22.4) +20.8 分,7 个模型全部第一;最差 31.3 对基线最差 3.0–4.5
项目轨道:65 个任务,静态行为 断言 oracle 静态分 $S(P',R_p)$(0–100,7 模型均值) 81.6(GLM-5.2 88.0) LLM4PLC 75.7(最高基线) +5.9 分,5/7 模型第一(GPT-5.5 上落后基线 84.1 对 88.8)
验证层消融(DS-V4-Flash,65 任务) 动态分 / 每任务 token 与请求数 满配 54.1 / 129k token / 47.8 次请求 仅生成 23.1 / 34k token / 8.9 次请求 动态 +31.0 分(编译层 +13.4、运行层 +10.4、规范层 +7.2)

局限与改进

作者承认两条:动态评分只覆盖来自隐藏参考的有界场景集(每场景最多 6 个、每任务最多 6 场景),未见条件下的行为无法度量;在最强模型 GPT-5.5 上优势收窄——动态 65.4 对 Agents4PLC 的 63.6 仅差 1.8 分,静态行为 84.1 甚至低于基线最高 88.8,说明动态增益是“在模型不足处补足的可靠性”而非恒定优势。我还注意到:分层消融只在 DeepSeek-V4-Flash 单模型上进行,跨层结论的普适性未验证;运行轨迹是采样而非每扫描周期记录,瞬态事件只能靠持久断言近似,可能漏检短脉冲故障;静态 oracle 由子串存在性、必需调用、归一化数值常量等文本断言构成,理论上可能被形式正确但语义取巧的实现满足;黄金轨迹差分隐含假设隐藏参考本身完全正确,参考中的错误会系统性惩罚正确实现;项目轨道任务全部派生自 Spec2Control 的 10 个厂区,工程多样性受单一语料限制。

独立分析的弱点

第一,交互成本失衡:项目轨道每任务平均 34.1 次模型请求是基线(6.9)的近 5 倍,弱骨干最高 60.4 次,按 token 计费的生产场景成本压力大;改进方向是为高频检查引入规则化预筛,只在高价值决策点唤醒大模型。第二,运行时验证依赖真实 PLC 资源,构建-部署-执行使运行层最昂贵(129k token/任务),可引入高保真仿真器并行摊薄。第三,评分场景由隐藏参考派生、注入场景由需求自派生,两边只通过需求间接对齐——需求有歧义时可能系统性偏向同一种误读。第四,规范审查本质是 LLM 逐条核对清单,其查全/查准率未被单独度量,误报浪费预算、漏报放走缺陷。第五,形式化管道对定时器完全失效(0/174 结论性判定),时序构造上验证门只剩运行时一条腿,部署失败即计 0 分,存在单点依赖。第六,交付完整性依赖工具日志不可伪造,若模型能诱导工具层返回假哨兵值则整套门控失效。

未来方向

作者提出的方向是把该架构扩展为端到端 PLC 开发环境:编辑、生成与部署都由同一验证门治理,并把验证延伸到过程仿真以覆盖更广工况。基于本文成果还可延伸:其一,把 TON 定时器等跨扫描周期构造纳入可判定验证,例如定时器语义展开、或将运行时断言编译进 PLCverif 管道,补齐 0% 结论性覆盖的短板;其二,研究场景自动生成与覆盖度量(如变异测试驱动的场景补全、工况覆盖率估计),把“有界场景集”变成可量化的覆盖保证,回应未测行为这一局限;其三,技能库自动化——wiki 与规则文件目前由工程师人工提炼,可改造成从项目历史与修复日志中自动蒸馏,并研究跨项目迁移;其四,成本-可靠性帕累托优化:消融显示编译层单位动态收益最高(+13.4),可做检查的自适应排序与提前剪枝,压低 34.1 次请求的均值;其五,GPT-5.5 上优势收窄提示研究 harness 与模型能力的互补边界——哪些检查应外置为基础设施、哪些应内化为训练目标(例如以运行时反馈作为强化学习信号,让模型内化扫描周期语义)。

复现评估

代码已在 GitHub 开源(https://github.com/midea-ai/SemaPLC)。评测数据可复建:功能轨道基于公开的 Agents4PLC 基准(论文给出 43/117 缺陷任务的修复版),项目轨道派生自公开的 Spec2Control 语料(10 厂区、65 任务)并做过泄漏审计;但隐藏的参考实现、黄金轨迹与断言 oracle 是否随仓库发布未在正文说明,第三方完整复现评分管线可能受限。主要工程门槛在运行时验证:需要可部署的实时 PLC 运行时,配合 RuSTy 编译器与 PLCverif/nuXmv 裁判;纯功能轨道只需 LLM API 即可基本复现(每任务约 6.5 次请求、71 秒)。模型侧需接入 7 个骨干端点(MiniMax-M2.7/M3、Qwen3.5-Plus、DeepSeek-V4-Flash/Pro、GLM-5.2、GPT-5.5),项目轨道满配每任务约 34 次请求、129k token,全量评测的 API 开销中等偏大但个人可承受。总体:中等偏易复现——核心管道开源、基准公开,不确定性集中在私有评分工件与 PLC 运行时环境搭建。