AI写三菱FX3U PLC程序实测:梯形图与ST代码的验证优化指南

📅 2026/8/27 19:49:43
AI写三菱FX3U PLC程序实测:梯形图与ST代码的验证优化指南
把同一个 PLC 控制需求分别丢给几个主流 AI 模型让它们写三菱 FX3U 的梯形图或 ST 程序再把结果拿进 GX Works2 / GX Works3 里编译得到的结论很直接AI 写 PLC 程序不是不能用但“能写出代码”和“能直接下载到设备里稳定跑”之间隔着一大段距离。这段时间我断断续续测了多个模型也试过把生成结果用在仿真实训台和实际小项目里。下面不聊抽象概念按实际使用顺序拆品牌支持性怎么比、验证流程怎么走、主要坑在哪、提示词怎么改才能提高可用率。如果你准备把 AI 当成 PLC 编程的辅助工具这篇会帮你把预期调到一个比较准确的位置。1. 先判断值不值得测AI 写 PLC 程序到底解决什么问题1.1 它更像是“快速出草稿”不是“替代工程师”AI 解决的核心问题是让有 PLC 基础的人更快拿到一个可讨论、可修改、可逐条核对的程序草稿。比如你现在要写一个三菱 FX3U 的程序模糊记得有几条通信指令但记不住参数直接翻手册也可以但让 AI 先写一遍再对照手册修正效率会高一些。但有一个前提你必须懂 PLC。如果完全不会看到 AI 生成的一堆 ST 代码和梯形图说明很容易误以为已经完成。等下载试机时才发现输出点对不上、急停没有、互锁没有风险很大。所以对零基础的人我反而建议先掌握基本指令和硬件接线再把 AI 当老师不要把它当免费工程师。我实际用下来的体感是AI 更适合做“从 0 到 60 分”的工作。它能帮你把一台设备的控制逻辑快速变成可读代码但后面“从 60 分到 100 分”的工作仍然需要你对照硬件、调试、仿真、改时序。把这段预期先放好后面测试才不会失望。1.2 和用 AI 写 Python 相比PLC 多了三层约束很多人觉得 AI 能写 Python写 PLC 程序应该也差不多。这个想法最容易踩坑。PLC 编程不是普通软件编程它额外多了三层约束。第一层是硬件型号约束。三菱 FX3U、西门子 S7-1200、汇川 H5U 各有各的指令集、地址区、特殊寄存器。不同品牌不能互换同一个品牌的不同系列也不能直接通用。AI 一旦跨品牌混着写编译时就死了。第二层是编程软件约束。AI 输出的是文本但 PLC 要进入 GX Works、TIA Portal、Codesys 等软件里编译。它不知道你的工程名、变量表、组态和版本输出结果必须人工核对。更麻烦的是梯形图有图形化格式AI 很难直接生成一个能导入编程软件的工程文件它给的多半是文本逻辑或示意图。第三层是运行环境约束。PLC 程序按扫描周期执行有 I/O 刷新、通信时序、中断、保持区。Python 脚本可以跑完才结束PLC 不行一个地址写错可能引起执行结果突变。比如你把断电保持区和非保持区搞混设备重启后数据可能全部清零这个故障在现场很难查。所以评价 AI 写 PLC不能只看“这段代码写得像不像”要看“这个程序在一个真实工程里能不能编译、能不能仿真、能不能安全运行”。1.3 用什么标准衡量“AI 写得好不好”在我测试过程中主要看四个维度。质量维度怎么检查常见结果可编译性导入对应软件编译有时候一次过更多时候有类型、指令或地址错误逻辑正确性仿真观察时序和输出主流程一般对边界和异常经常缺硬件匹配度对照 IO 表、模块地址、通信参数地址分配容易冲突可维护性注释、拆分、变量命名大模型程序经常“头重脚轻”不要只看能不能编译。编译通过只代表语法没问题不代表逻辑正确更不代表硬件匹配。我在测试中见过不少程序编译全过但 Y0 输出点和实际继电器不对应D0 地址被两组功能重复占用。这种问题比编译报错更隐蔽。2. 品牌支持性怎么比从哪几个维度看 AI 的 PLC 能力2.1 我实际用哪些模型测横向参考我主要对比了 ChatGPT、Claude、Gemini、DeepSeek、通义千问、Kimi 这类常见模型也用过一些 IDE 内置编程助手。这里不说某个具体版本因为模型更新太快同一品牌隔一个月结果就可能不一样。你看到这篇文章时模型能力大概率已经又变了。我测下来最明显的感觉是没有谁能稳定覆盖所有 PLC 品牌。不同模型在某一题里表现好换一道题可能就变差随机性很大。有的模型对三菱 FX 系列中文资料比较敏感有的模型对西门子 SCL 语法更熟练但都不稳定。如果按“整体可用度”分档我更愿意说市面上的主流模型都能写出看起来像 PLC 程序的文本但距离“可靠生成完整工程代码”都还有距离。差距不是谁更懂 PLC而是谁在某个具体题型上恰好被训练到了。2.2 四个评测维度品牌支持性要从四个维度看不能凭一次提问下结论。第一个维度指令是否真实存在。模型有时候会编造指令或者把某个品牌不存在的指令写进去。比如让模型写三菱 FX3U它却使用了其他系列才有的指令。这类问题编译阶段就会被拦下来但会浪费不少时间。第二个维度是否区分具体型号和软件版本。不同 PLC 的指令集、数据区、编程软件都不一样AI 容易把 S7-200 SMART 和 S7-1200 搞混或者把三菱 Q 系列和 FX 系列混在一起。如果你不给出精确型号它就会自由发挥。第三个维度地址和数据类型管理。模型是否理解软元件地址不能重复是否理解保持区和非保持区是否理解 ST 语言里 INT、DINT、REAL 之间的转换。这块是最容易出错的地方。第四个维度错误自检能力。当程序编译失败模型是能真正定位问题还是重新生成一遍同样的错误代码。我测试时经常遇到模型把报错信息吞进去然后自信地给你输出一个和之前几乎一样的结果这需要特别注意。2.3 几个实际案例的对比感受先说三菱 FX3U 通过 RS485 读取和写入变频器频率的场景。这个需求在工控现场很常见也是 AI 测试里的高频题。模型能写出基本框架但容易出现通信格式设定遗漏从站号、波特率、数据位、校验位不对收发控制标志缺失CRC 校验不完整或字节序反了。给足上下文之后几十行的小程序编译通过率会高一些如果上下文不够模型很容易把串口通信的 Python 写法带进来先 open 串口再 write 再 read这在 PLC 扫描周期里根本不合理。再说西门子 S7-1200 SCL 气缸顺序控制。如果 prompt 里不给 IO 表模型会自己编一个地址表然后你发现和现场完全不一样。给了 IO 表和气缸动作顺序之后它写出可读的 ST 程序可能性高很多。但我也见过模型把 S7-300 时代的轴控指令直接写到 S7-1200 里编译直接报错。这说明它知道 S7-1200 存在但对当前指令集不够熟。最后说汇川 PLC 正弦运动。汇川这类国产新平台训练数据明显更少模型生成的内容更像概念验证。它能给你思路比如用模拟量输出或总线轴控去实现正弦轨迹但不能直接抄。如果你实际项目用的是国产 PLC 新平台对 AI 生成结果的验证要更严格。3. 完整实测流程从需求输入到仿真验证3.1 准备一组可复现的测试用例要对比不同 AI 的 PLC 能力不能随手问一句就下结论。我建议准备一组可复现的测试用例每个用例都固定 prompt 模板再统一验证。编号任务考察点编程软件T1FX3U 电机启停定时器控制基本指令、定时器使用GX Works2T2FX3U RS485 读写变频器频率通信格式、站号、收发流程、校验GX Works2T3S7-1200 SCL 气缸顺序控制ST/SCL 语法、IO 分配、状态机TIA PortalT4汇川 PLC 伺服正弦运动轴控指令、国产新平台支持度AutoShop / CodesysT5Modbus RTU 主站或从站协议帧、地址映射、数据转换按品牌选如果只是做评测不需要一次测五个选一个你最常用的场景更实际。重点不是测出谁第一而是摸清每个模型的薄弱环节。3.2 第一次测试不要直接下载到实物为什么不用实物第一AI 生成的程序很可能是错的下到设备可能会让气缸突然动作、变频器突然启动。第二实物环境不能反复试错改一次程序可能就要断电、接线、恢复现场。第三仿真环境能看清楚每个变量变化强制输入输出都很方便。建议先用编程软件自带的仿真模式。GX Works2 自带仿真TIA Portal 有 PLCSIMCodesys 也有仿真模式。先跑起来看输出时序是否符合预期。等仿真稳定了再考虑下载到带有负载保护的实验台。先记住一个原则AI 写完的程序默认是“不能直接用的草稿”。你验证通过以后才能把它当可用代码。3.3 给 AI 的高质量需求模板要让 AI 输出可用程序prompt 必须包含硬件和需求上下文。下面是一个可以直接套用的模板。你是一名熟悉三菱 FX3U PLC 的程序员。 请生成一段结构化文本 ST 程序供 GX Works3 使用。 1. PLC 型号三菱 FX3U-32MT 2. 编程软件GX Works3ST 语言 3. 输入输出 X0启动按钮常开 X1停止按钮常闭 Y0电机接触器 Y1运行指示灯 4. 功能要求 按下 X0 后 Y0 保持通电电机启动 按下 X1 后 Y0 断电电机停止 运行期间 Y1 常亮 停止后 Y1 熄灭。 5. 安全要求 程序应有急停处理急停输入 X2 按下时 Y0 立即断开 必须保留互锁逻辑避免 Y0 和 Y1 同时输出。 6. 请给出完整变量声明和程序。每个字段都有实际作用。型号决定指令集软件决定语言格式IO 表决定地址分配功能要求决定主流程安全要求决定急停和互锁逻辑有没有被写进去。如果你自己没办法把这些写清楚说明需求还没想清楚AI 再强也没用。3.4 生成后的验证顺序不管模型答得多完整我一般按下面顺序走一遍。静态检查指令是否存在、地址是否和现场一致、有没有重复软元件。编译进入对应编程软件编译看第一轮报错。仿真强制输入观察输出状态和内部变量。查通信如果是 T2 这类通信任务先看通信参数再看数据内容。安全复核拉住急停、断开互锁看程序怎么反应。如果编译报错很多不要急着让模型重新生成。先把报错信息贴在 prompt 里