AI写的PLC代码你敢直接上产线吗?——我拿3个大模型实测了3个月,总结了一份避坑实录

AI和PLC编程

一个讲了10年梯形图的老工程师,用AI写代码踩了3个月的坑

先交代一下背景。我干PLC这行十年了,从三菱FX1N干到西门子S7-1500,梯形图写得比自家地址还熟。去年年底同行群里都在聊AI写代码,说大模型随便一输就能生成PLC程序,我当时嗤之以鼻——行了吧,这玩意儿能看懂我们工控圈的那点破事?

结果打脸来得很快。一个关系不错的兄弟给我发了段他让AI写的S7-1200程序,大概是个皮带输送机的启停逻辑。我扫了一遍,语法没错,逻辑也没大毛病……等等,他那个急停信号怎么只接到了输入映射,程序里压根没引用?

就是这行代码,让我决定用三个月时间,把市场上主流的三个大模型(ChatGPT、Claude、DeepSeek)在PLC编程这件事上轮番测了一遍。今天这篇,就是把这三个月的血泪教训掰开了说。

第一个测试:让AI写一个简单的电机正反转

先从小菜开始。我把电机正反转的控制要求给三个模型,看看它们的梯形图水平怎么样。

正反转这东西,干过电气的人都知道——最关键的是互锁。机械互锁和电气互锁缺一不可,不然正反转接触器同时吸合就短路了。

先说结果:三个模型的梯形图都画出来了,看着像模像样。但有一个共同问题——它们在文本描述里提到了互锁,实际输出到梯形图里的时候,多半只做了程序互锁,没考虑硬件互锁的提醒。这就好比跟你说”注意安全”,但没告诉你具体怎么注意。

更离谱的是有一次,我描述控制要求时没说清楚”必须先停止才能反向”,DeepSeek给的程序里直接就是正转接通、反转断开,正反转之间零延时。真要是哪个新手照着这个下载到PLC里,调试的时候一按反转按钮,两个接触器同时吸合,我不说你也知道什么后果。

所以第一个结论:AI写简单逻辑能看,但安全冗余部分基本靠不住。

第二个测试:让AI写一段ST语言(结构化文本)

梯形图AI写着费劲,那ST语言呢?这玩意儿本身就是文本形式,跟C语言类似,理论上大模型应该更擅长。

我让它写一个用SCL实现数组排序的程序,用来给某个检测工位做数据整理。ChatGPT和Claude写出来的代码风格非常接近——变量命名规范,注释齐全,甚至加了错误处理。我把代码导入TIA Portal,编译通过,仿真也没问题。

但是!注意这个但是——当我把同样的功能需求改成PLC实际项目场景,比如”有10个温度传感器数据,每100ms采集一次,剔除最大值最小值后取平均值,如果平均值超过80度就报警并记录是哪几个传感器超了”,情况就变了。

三个模型给出的程序在语法层面全对,但有两个问题:

第一,扫描周期没考虑。AI写出来的程序默认把PLC当PC用,数组循环里面套循环,数据量大一点,一个扫描周期跑不完。我仿真时没开循环时间监控,真到现场才发现。

第二,变量类型乱用。有个模型把温度值定义成了INT,但我在要求里明明说了温度传感器精度是0.1度。INT哪来的小数?结果它用了个绕弯子的方式,把10.5度存成105——可以是可以,但后续程序要自己记得除以10,而它忘了写这步注释。后来接手的人铁定骂娘。

第三个测试:让AI帮改已有程序

这是我觉得最实用的场景——不是从零写,而是改现有的程序。我把一个三菱FX3U的旧程序发给AI,说”帮我把这个手动模式改成自动模式,加一个计数功能”。

结果呢?三个模型都读懂了原来的程序结构,但做改动的时候五花八门:

ChatGPT在原有程序末位追加了一段新逻辑,没有改动原有梯形图的步序编号,这点好评。但它加的计数器复位逻辑放在了一个没人会触发的条件里。

Claude改得最聪明,直接用M变量做了个状态切换,代码量最小。但它给的新变量地址跟原有程序里已有的地址冲突了——它看不见原程序里M100已经被占用了。

DeepSeek直接给我把部分梯形图重新生成了一遍,改完之后我觉得逻辑没问题,但跟原来的风格完全不搭,后续维护的人估计得对着屏幕骂我半小时。

核心问题:AI没有”全局视野”。它看到了你给它的代码片段,但它不知道这台PLC上还跑了别的什么逻辑,也不知道接线图上是哪个输入点接了哪个传感器。

我最担心的一件事

测试到第二个月的时候,我在想一个问题:如果哪天一个入行一两年的新手,完全依赖AI写程序,他能不能分辨出AI给的东西对不对?

我的答案是:大概率不行。因为要判断AI生成的PLC代码有没有问题,你自己首先得懂。而你一旦懂了,AI对你的价值就不是替你写,而是替你省时间——”填空”和”审查”的本质区别。

更让我后背发凉的是另一个测试。我故意给AI一段有隐患的代码,问它”这段有什么问题吗”。三个当中有一个没看出来,说”代码逻辑正确”。这个比例,放在写个网页或者脚本上问题不大,放在PLC上——那可是控制设备的,错了设备就停了,严重点人就出事了。

最后给点实在的建议

三个月测下来,我并不是说AI不能用。恰恰相反,我觉得AI在工控领域很有价值,但得用对地方:

1. AI适合当”快译”,别当”作者”。比如你想把梯形图逻辑改成ST语言,或者把三菱的程序改成西门子的语法,AI做这种翻译工作很靠谱,因为它不需要理解控制对象,只管语法转换。

2. AI适合写测试数据,不适合写控制逻辑。我后来让AI帮我生成一些模拟数据,用来测试上位机的显示效果,干得飞快。但涉及具体设备的起停、保护、联锁,还得自己来。

3. 让AI当你的”第二双眼睛”。写完程序后让AI帮你审一遍,经常能找到一些你没注意到的边界情况——前提是你不能盲信它的结论,得二次复核。

4. 一定要仿真验证。这个不用我多说吧?不管是不是AI写的,程序不下仿真直接上设备,那叫赌命。

聊到最后

三个月前我打算用这篇文章打AI的脸,写到这儿发现它其实没那么不堪,也没那么神。就是个工具,跟万用表、示波器一样,用得对省大事,用得不对出事。

说句掏心窝的话:如果真的有一天AI能100%放心地写PLC程序了,那我们这帮老工程师可能就真得改行了。但至少现在,还不是。

你们用过AI写PLC代码吗?踩过什么坑?评论区说来听听,我也长长见识。

工业自动化和人工智能

上一篇 给中药饮片厂做烘干房温控系统——热风循环PID调了三夜
下一篇 触摸屏动画搞崩了PLC?——一个HMI画面优化让扫描周期从48ms降到12ms的真实案例