20 个工程师写了 10 年的 PLC 程序,我让 Gemini 读了一遍

我以前怀疑 AI 会幻觉。但我早就让它读手册了——那为什么不让它读那堆二十年欠债的面条代码?

分享
20 个工程师写了 10 年的 PLC 程序,我让 Gemini 读了一遍

一位自动化工程师(Weiming,WZAutomation)在 11 月 7 日写了篇实测:他用 Gemini + MCP 读 TIA Portal 里的 PLC 程序,专挑那种"人能读、但读起来很痛"的写法——REF_TO 间接赋值、DB_ANY、POKE。Gemini 解释了程序、算出了结果,还把执行流程画成流程图写回工作区。

开场那句很诚实:"我以前怀疑 AI 在控制软件开发里的作用,因为我知道它会幻觉。但我早就让它帮我读文档和手册了——那为什么不让它读那堆由 20 个工程师维护了 10 年的面条代码?"

下面按原文翻译他的做法、代码与结论,最后附我们的整理。

一、MCP 是什么,以及它怎么接自动化软件

MCP(Model Context Protocol)是 Anthropic 在 2024 年 11 月提出的开源标准,用来把 AI 应用连接到外部数据源、工具与工作流。2025 年 12 月,Anthropic 把 MCP 捐给了 Agentic AI Foundation——Linux 基金会下的一个基金。

协议是 server-client 结构:MCP server 提供服务(tool call)与工作区数据;MCP client 把 server 能提供的服务以 schema 的形式发给 LLM。

用户对 LLM 写提示之后,LLM 去请求 schema,让 MCP client 执行工具,把本地工作区的数据喂回 LLM;LLM 处理完再产出结果给用户。这个请求—取数—再请求的过程可能来回多次,才拿到最终结果。

MCP server 还可以提供反向的工具:让 LLM 把结果以文本形式写回工作区,或者把文本结果转成图片之类的格式。

MCP 架构:LLM 在云端,MCP client 与 server 在本地,工作区数据不出机器

原文配图:User → MCP Client →(schema / JSON-RPC)→ 云端的 LLM;MCP Server ↔ Local Workspace。注意这张图的分界线——数据在本地,模型在云上。

二、他写的那个"故意难读"的程序

他写了一个演示用的 FB,专门用了人类程序员常用的几种"臭名昭著"的手法:指针访问 DB 数据、通过引用做间接赋值。小程序里不难懂,但在大程序里,人要顺着追踪会非常痛苦。

FUNCTION_BLOCK "FB_Calculate"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_IN_OUT
   Numbers : "numbertype";
END_VAR

VAR
   Value1 : Int;
   Value2 : Int;
   s_AddedValue : Int;
END_VAR

VAR_TEMP
   reference : REF_TO Int;
   error : Int;
   dbany : DB_ANY;
END_VAR

BEGIN
   #Value1 := #Numbers.value1;
   #Value2 := #Numbers.value2;

   #s_AddedValue := #Value1 + #Value2;

// POKE(area       := 16#84,
//      dbNumber   := #Numbers,
//      byteOffset := _dint_in_,
//      value      := _byte_in_);

   #reference := REF("DB_Strange".secretValue);

   #reference^ := #s_AddedValue;
END_FUNCTION_BLOCK

ORGANIZATION_BLOCK "Main"
TITLE = "Main Program Sweep (Cycle)"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

BEGIN
   "DB_Calculate"(Numbers := "DB_Numbers".numbers);
END_ORGANIZATION_BLOCK

他的判断是:这些写法对人很痛,但对 LLM 不算挑战——只要它知道这些编程技巧是怎么工作的。而它知道。

三、他怎么用

跑起工具、接上自己的 Gemini key,然后要求 Gemini 做三件事:算出程序在某个条件下的值、解释程序怎么工作、画一张执行流程图。

终端:FastMCP 4.1.5 起本地工作区 server,stdio 传输,连上后 Gemini 可读 ./gemini workspace

原文截图:他用的是 FastMCP 4.1.5,起了一个 LocalWorkspaceServer,stdio 传输;连上后提示 "Gemini can now access your './gemini workspace' folder."

Gemini 的回应是调用 MCP server 提供的工具去理解这个程序,然后用文字回答了问题、解释了它怎么工作。

最后它把程序执行过程画成流程图,放进工作区。

原文:这是 Gemini 生成的流程图。它相当准确,我相信任何懂西门子 PLC 编程的人都能看懂。

四、他下一步想做什么

这个想法试下来很有意思,看起来效果相当不错。

我下一步的计划是:写几个工具,让 Gemini 通过 TIA Openness 或 OPC UA 访问 PLC 的在线数据,看看它在一些在线程序的排障场景里表现如何。

注意这一步的性质变化:从"读工程文件"走到"读现场数据"。

五、我们的整理

这篇的价值不在于"AI 能读 PLC 程序"这个结论,而在于它给了一个可以复现的最小路径:一个故意难读的 FB → 一个 MCP server → 三个可验收的要求(算值、解释、画流程)。任何团队想自证"我们的 AI 辅助到底行不行",都可以照这个做一遍。

三条我认为要补的边界:

  1. 这是"读",不是"写"。 全程没有任何一步是往工程里写东西的。所以它避开了这类工具最危险的那一半——写入、编译、下装。原文最后那句"下一步接在线数据"才是风险分水岭:读工程是静态的,读现场是会动的。
  2. 云模型的边界画在图里。 那张架构图把 LLM 画在云端、工作区画在本地。这意味着工程内容会出内网(至少是它读到的那些块)。工业项目默认应该按"不出内网"设计,这一点原文没有展开,但选型时必须问。
  3. 三个要求里,只有两个是可自动验收的。 "算值"可以对比,"画流程"可以肉眼核,但"解释怎么工作"对不对,仍然要靠懂行的人判断。流程图"相当准确"是作者的判断,不是测量的结果。

对我们做博途工具的人,这篇还确认了一件事:这条链路上最贵的不是模型,是"读得到"。他之所以能跑通,是因为本地有一个能读工作区的 MCP server;换到 TIA Portal 里,等价的那一层是 TIA Openness。模型换来换去差别不大,能不能读到工程里的块、变量、交叉引用,才决定它有没有用。

六、想自己跑一遍?三步

博途这边对应的现成入口是 TiaLink(博途 MCP 网关)。它给 agent 的不是"能读到项目"这一件事,而是两层:

  • 第一层:读到原始内容。 块与接口的源码、DB 结构、标签表、硬件组态,按工程里的样子读出来,不做改写、不转述。
  • 第二层:把项目建成一张可查询的代码图谱。 它把工程的 SimaticML 导出索引成图——块与接口、调用关系、DB 与标签的读/写、悬空引用——再由 tialink_context_* 这组工具交给 agent:搜符号、走调用链、读块摘要、问"改这里会影响谁"。

这两层的差别,就是这篇文章的分水岭。 原文那位作者手上只有第一层:一堆导出的文本。所以 REF_TO 指向哪、DB_ANY 实际落在哪个数据块、这段逻辑还有谁在调用,他得让模型顺着文本自己推——能推对,但每次都从头推。

有了第二层,这个块被谁调用、这个变量在哪儿被写、改它会影响到谁 是一次查询,不是一次通读。工业项目里真正难的不是"看单个块",是"看这个块在这张网里的位置"——这正是代码图谱存在的理由。

三步:

  1. 导出 + 索引:把工程(或一份已导出的 SimaticML 目录)喂进去,建那张图。索引是只读的,工程文件不上传;不装授权时连接本身就是只读模式。
  2. 问三个问题:这个块被谁调用?这个变量在哪儿被写?改它会影响到谁?
  3. 对答案:拿你自己已经知道的三个事实去核——核对上了,再让它读你不敢读的那几个块。

第 2 步那三个问题,正好对应原文的诉求;区别是他读的是文本,TiaLink 读的是工程本体加关系图。

同一条链的下一段(写 SCL → 编译 → 仿真验证)也在 TiaLink 里:除了读工程,它的 MCP 工具还包括建块、写 SCL 与梯形图、编译检查、PLCSIM Advanced 单元仿真与整机仿真、以及写完读回核对。入口同上:TiaLink。

如果你不想自己配 agent、只想把需求说清楚让它把活干完,那是另一个产品:TIA Forge——成品智能体,关键节点由人确认。

来源

同一条链的下一段(读 → 写 SCL → 编译 → 仿真验证)都在 TiaLink 里:它的 MCP 工具除了读工程,还包括建块、写 SCL 与梯形图、编译检查、PLCSIM Advanced 单元仿真与整机仿真、以及写完读回核对。入口同上:TiaLink。

如果你不想自己配 agent、只想把需求说清楚让它把活干完,那是另一个产品:TIA Forge——成品智能体,关键节点由人确认。

相关阅读:AI 改博途程序:TIA Openness MCP 的写保护与边界——这篇讲"读",那篇讲"写",两篇合起来才是一条完整的链路。|AI × 工业 / PLC 完全指南