1. 从手写到“口述”:一个PLC老手的AI编程转折点
干了十年PLC编程,我对手写梯形图这件事的感情很复杂。刚入行那会儿,能在三菱FX系列上把一段星三角降压启动的梯形图写得干净利落,是件很有面子的事。后来项目越接越大,从西门子S7-200 SMART到汇川、信捷,再到CODESYS平台上的运动控制,程序规模从几十步涨到几千步,我开始意识到一个问题:真正消耗精力的不是“会不会写”,而是“重复写”。
一条Modbus RTU通讯、一个IO映射、一段正反转互锁,这些东西的逻辑骨架十年没变过,但每次换项目都要重新敲一遍。更麻烦的是,不同品牌的指令体系还不一样——三菱用ADPRW做Modbus通讯,西门子用MBUS_MSG,汇川又有自己的一套。每次切换平台,脑子里的“肌肉记忆”就得重新校准一次。
大概从去年开始,我尝试把AI拉进这个流程。不是让它替我“设计系统”,而是让它替我干那些有明确规则、有成熟范式、但极其耗时的编码活。用了一段时间下来,我的结论很直接:AI写PLC程序,在特定场景下确实能省掉大量机械劳动,但它绝对不是“你说一句它给你一个能跑的项目”。你得知道它的边界在哪、怎么给它下指令、怎么验证它吐出来的东西。
这篇内容,我想把这套“人机配合”的实操经验完整拆开讲。适合两类人看:一是已经有一定PLC基础、想提升效率的同行;二是刚入门、想了解AI在工业编程里到底能干什么的新人。我不会讲空泛的“AI赋能工业”,只讲我实际用过的流程、踩过的坑、以及那些让我愿意继续用下去的具体场景。
2. AI在PLC编程里真正能接手的四类活
2.1 标准功能块的快速生成:从“敲半小时”到“改五分钟”
PLC编程里有大量“套路化”的功能块。比如一个带延时确认的启保停、一个带故障复位的电机控制、一个标准的PID回路。这些逻辑我闭着眼睛都能写,但敲键盘、检查触点、对齐网络注释,一套下来少说二十分钟。
我现在的方式是:把需求用自然语言描述清楚,让AI生成梯形图或SCL代码的文本描述,然后我导入或手动录入到编程软件里。举个例子,我需要一个“三台电机顺序启动、逆序停止、带过载保护”的控制逻辑。我会这样给AI下指令:
用三菱FX系列梯形图逻辑描述:三台电机M1、M2、M3,启动按钮X0,停止按钮X1,过载信号X2、X3、X4分别对应三台电机。要求:按下启动后M1先启动,延时3秒M2启动,再延时3秒M3启动;按下停止后M3先停,延时2秒M2停,再延时2秒M1停。任何一台过载,全部立即停止并报警。
AI会给我一个网络结构的文字描述,包括每个网络的输入输出、定时器编号、中间继电器分配。我拿到之后,重点检查三件事:互锁逻辑是否完整、定时器编号是否冲突、停止优先级是否高于启动。这三项没问题,剩下的就是录入和仿真。
实测下来,这种标准逻辑的生成准确率很高,因为它的规则是封闭的、确定的。AI不会“发明”一个新的定时器用法,它只是把我脑子里的逻辑用标准指令重新排列了一遍。
2.2 跨品牌指令翻译:三菱转西门子的“语法桥”
这是我用得最多的场景,也是我觉得AI在PLC领域最有价值的地方。不同品牌的PLC指令差异很大,但底层逻辑是相通的。以前我要把一段三菱的Modbus RTU程序移植到西门子S7-200 SMART上,得对着两个品牌的手册逐条对照,费时费力还容易漏。
现在我的做法是:把三菱的梯形图逻辑用文字描述出来,让AI翻译成西门子的指令体系。比如三菱的ADPRW指令,在西门子200 SMART里对应的是MBUS_MSG,但参数结构完全不同。ADPRW是“从站地址+功能码+起始地址+数据长度”一次性写在指令里,而MBUS_MSG需要配合轮询逻辑,用完成位触发下一条。
我会这样给AI指令:
把以下三菱FX3U的ADPRW通讯逻辑翻译成西门子S7-200 SMART的MBUS_MSG实现:从站地址1,功能码03,读取保持寄存器D100开始的4个寄存器,结果存入D200-D203。三菱程序里用M100触发,M101作为完成标志。
AI会给出一个基于MBUS_MSG的轮询框架,包括First管脚的处理、Done位的使用、Error代码的判断。我拿到之后,重点核对寄存器地址映射关系和数据格式——三菱的D寄存器是16位,西门子的VW也是16位,但字节序可能不同,这个必须实测确认。
注意:AI翻译出来的指令框架,参数地址一定要对着目标品牌的手册逐项核对。我踩过一次坑,AI把三菱的D100直接映射成了西门子的VW100,但实际项目中VW100已经被占用了,导致数据覆盖。后来我养成了一个习惯:翻译完成后,先做一张IO和寄存器分配表,确认无冲突再录入。
2.3 注释与文档的批量生成:把“天书”变成“说明书”
PLC程序的可读性,很大程度上取决于注释。但说实话,项目赶的时候,谁有功夫给每个网络写详细注释?结果就是三个月后自己回头看,都得愣半天。
我现在会在程序框架搭完之后,把网络结构描述给AI,让它生成一套标准化的注释文本。比如一个包含手动/自动切换、报警处理、通讯轮询的主程序,我会让AI按“网络编号+功能说明+输入输出+注意事项”的格式输出注释。然后我批量粘贴到编程软件的注释栏里。
这个活看起来小,但实际节省的时间很可观。一个中等规模的项目,手动写注释可能要一两个小时,AI生成加我校对,二十分钟搞定。而且AI写的注释有个好处:用词统一。它不会一会儿写“启动”一会儿写“开启”,对于团队协作来说,这种一致性很有价值。
2.4 异常代码与故障排查的“第一轮筛选”
PLC调试中最烦的就是遇到Error代码。不同品牌的错误代码体系不一样,三菱的D8065、西门子的SM0.0相关状态位、汇川的故障码,查手册要翻半天。
我现在遇到不熟悉的错误代码,会先把代码和上下文描述给AI,让它给出可能的原因列表和排查方向。比如“西门子200 SMART的MBUS_MSG指令Error管脚返回6”,AI会告诉我这通常意味着“从站无响应”,然后列出几个排查点:从站地址是否正确、波特率是否匹配、接线A/B是否反接、从站是否上电。
这不能替代手册,但它能帮我快速缩小排查范围。以前我要翻手册、搜论坛、问同行,现在第一轮筛选交给AI,我直接去验证最可能的那几个点。实测下来,对于常见错误代码,AI给出的方向准确率能到七八成。
3. 给AI下指令的“工程化”方法:别把它当人,把它当编译器
3.1 指令结构:为什么“说清楚”比“说得多”重要
很多人用AI写代码效果不好,根本原因是指令太模糊。你说“帮我写一个电机控制程序”,AI只能给你一个最通用的框架,因为你的需求本身就是通用的。但如果你说“帮我写一个三菱FX3U的电机控制程序,要求星三角降压启动,启动延时6秒,切换延时0.5秒,带过载和缺相保护”,AI的输出质量会完全不同。
我的经验是,给AI下PLC编程指令,要像写功能需求说明书一样,包含五个要素:
- 目标平台:三菱FX3U、西门子200 SMART、汇川H5U、CODESYS等,不同平台的指令体系差异巨大,必须明确。
- 输入输出定义:每个按钮、传感器、接触器对应哪个X/Y/M点,越具体越好。
- 逻辑时序:先做什么、后做什么、延时多少、互锁条件是什么。
- 异常处理:过载、急停、通讯中断时怎么处理。
- 输出格式:是要梯形图的文字描述、SCL代码、还是指令列表。
这五个要素给全了,AI的输出基本能直接进入“校对”环节,而不是“重写”环节。
3.2 迭代式对话:第一版永远不是最终版
我从来不会指望AI一次给出完美答案。我的流程是:第一轮让AI出框架,第二轮针对具体网络让它细化,第三轮让它检查互锁和边界条件。
比如做一段Modbus RTU通讯,第一轮我让AI给出轮询框架,第二轮我让它把每个功能码的请求帧和响应帧格式列出来,第三轮我让它检查“通讯超时后是否会自动重试、重试次数是否可配置”。这种迭代方式,比一次性给一个复杂需求要靠谱得多。
实操心得:AI在PLC编程上最容易出错的地方是定时器和计数器的编号分配。它可能会在不同网络里重复使用同一个T编号,或者把T和C混用。所以每轮迭代后,我都会专门检查一遍定时器/计数器/中间继电器的分配表。
3.3 提示词模板:我常用的三种“套路”
经过大量实践,我整理了几个常用的提示词模板,直接套用效果很稳:
模板一:标准逻辑生成
平台:[品牌+型号]。输入:[X点定义]。输出:[Y点定义]。逻辑要求:[按步骤描述时序]。异常处理:[列出异常条件及动作]。请用梯形图网络描述输出,每个网络标注功能说明。
模板二:跨品牌翻译
源平台:[品牌A+型号],目标平台:[品牌B+型号]。源逻辑:[描述或粘贴源程序逻辑]。请翻译为目标平台的指令实现,重点说明参数映射关系和需要注意的差异点。
模板三:故障排查
平台:[品牌+型号]。错误现象:[描述现象或错误代码]。相关上下文:[通讯参数、接线方式、程序片段]。请列出可能的原因和排查步骤,按可能性从高到低排序。
这三个模板覆盖了我日常80%的使用场景。关键是平台信息必须准确,你给AI一个模糊的“三菱PLC”,它可能按FX系列给你写,但你的项目是Q系列,指令体系完全不同。
4. 那些AI搞不定的事:PLC编程中不能交给它的部分
4.1 硬件选型与IO分配:需要现场感的决策
AI可以帮你写程序,但它没法替你决定用哪个型号的PLC、怎么分配IO点、要不要加扩展模块。这些决策依赖的是现场经验:柜子多大、走线怎么走、干扰源在哪、未来有没有扩展需求。
我见过有人让AI推荐PLC型号,AI给了一个“性价比高”的方案,但实际项目中那个型号的通讯口数量不够,导致后期加模块。硬件选型这件事,AI只能提供参数对比,最终拍板必须靠人。
4.2 安全逻辑:急停、安全门、光幕,这些不能试错
安全相关的逻辑,我从来不交给AI生成。急停回路、安全门监控、光幕保护,这些涉及人身安全的逻辑,必须按照安全标准手动设计,并且经过严格验证。AI生成的逻辑可能“看起来对”,但它不理解安全等级、冗余要求、故障导向安全这些概念。
我的做法是:安全逻辑单独手写,AI只用来做注释和文档整理。而且安全逻辑的验证必须用强制手段——短接、断开、模拟故障,逐项确认。
4.3 工艺参数与配方:需要行业知识的积累
注塑机的温度曲线、包装机的追剪参数、起重机的变频器加速时间,这些工艺参数是行业经验的结晶,AI没有这些数据。它可以给你一个“通用推荐值”,但实际项目中,这个值可能需要根据材料、环境温度、机械磨损程度反复调整。
我通常会让AI生成参数框架,比如“列出注塑机温度控制的五个区间和对应的PID参数范围”,然后我根据实际工艺要求填入具体数值。框架可以复用,数值必须现场调。
4.4 现场调试与信号验证:AI到不了现场
这是最根本的边界。AI可以生成程序,但它没法帮你确认接近开关的NPN/PNP类型、没法判断编码器A/B相的接线顺序、没法测试通讯线缆的终端电阻。这些必须人到现场,用万用表、示波器、编程软件的监控功能逐项验证。
我的流程是:AI生成程序框架→仿真软件验证逻辑→现场下载→逐点强制测试→联调。AI只负责第一步,后面的每一步都省不了。
5. 一个完整案例:用AI辅助完成一段Modbus RTU通讯程序
5.1 需求拆解:从“要通讯”到“可执行的指令”
前段时间做一个温控项目,需要三菱FX3U通过485BD板读取三台E5CC温控器的当前温度。E5CC支持Modbus RTU,从站地址分别设为1、2、3,波特率9600,8位数据位,1位停止位,无校验。读取的寄存器地址是0x0000(当前温度值),数据类型是16位有符号整数,单位0.1度。
这个需求在PLC编程里很典型,但手动写轮询逻辑至少要半天。我决定用AI辅助。
5.2 第一轮:让AI生成轮询框架
我给AI的指令是:
三菱FX3U,通过485BD扩展板做Modbus RTU主站。三台E5CC从站,地址1/2/3,波特率9600,8N1。读取每个从站的保持寄存器0x0000,长度1个字。要求:轮询读取,每台间隔200ms,通讯超时1秒,超时后跳过当前从站继续下一台,所有从站轮询完一轮后重新开始。用ADPRW指令实现,请给出梯形图网络描述和寄存器分配。
AI返回了一个基于M100-M102三状态轮询的框架,用T10做200ms间隔定时,T11做1秒超时定时,D100-D102存放三台从站的温度值,M110-M112作为通讯完成标志。
我检查了框架,发现一个需要调整的地方:AI把超时定时器T11的复位放在了轮询切换之后,这会导致超时后定时器没有及时复位,影响下一轮计时。我手动调整了复位顺序。
5.3 第二轮:细化ADPRW指令参数
框架确认后,我让AI把每个ADPRW指令的完整参数列出来。ADPRW的指令格式是:ADPRW 从站地址 功能码 起始地址 数据长度 数据存储地址。对于第一台从站:
- 从站地址:H01
- 功能码:H03(读保持寄存器)
- 起始地址:H0000
- 数据长度:H0001
- 数据存储地址:D100
AI还提醒我:ADPRW指令的完成标志M8029需要在每个轮询步骤中正确使用,否则会出现“指令还没执行完就切换”的问题。这个提醒很关键,我差点漏掉。
5.4 第三轮:异常处理与边界检查
最后一轮,我让AI检查整个逻辑的异常处理。AI指出了几个点:
- 如果某台从站连续三次超时,应该置位一个报警标志,而不是无限重试。
- 温度值的符号处理:E5CC返回的是16位有符号整数,如果温度为负,D寄存器的高字节需要做符号扩展。
- 轮询间隔200ms是否足够:如果从站响应慢,可能需要加大间隔。
我根据这些建议,增加了超时计数器和报警逻辑,并在程序里加了一段符号扩展的处理。最终这段程序在仿真软件里跑通,现场下载后一次调试成功。
这个案例让我最满意的地方不是“AI写了程序”,而是它帮我发现了几个我可能忽略的边界条件。符号扩展那个点,如果不是AI提醒,我可能在现场调试时才发现负温度显示异常。
6. 效率对比与真实收益:数据不说谎
6.1 时间账:哪些环节省了,哪些没省
我拿最近三个项目做了粗略统计,对比“纯手写”和“AI辅助”的时间消耗:
| 环节 | 纯手写耗时 | AI辅助耗时 | 节省比例 |
|---|---|---|---|
| 标准逻辑编写 | 2小时 | 40分钟 | 67% |
| 跨品牌移植 | 4小时 | 1.5小时 | 62% |
| 注释与文档 | 1.5小时 | 30分钟 | 67% |
| 故障排查第一轮 | 1小时 | 20分钟 | 67% |
| 安全逻辑 | 2小时 | 2小时 | 0% |
| 现场调试 | 8小时 | 8小时 | 0% |
结论很清晰:AI省的是“案头工作”的时间,省不了“现场工作”的时间。但案头工作往往占了项目前期的大量精力,这部分效率提升,对整个项目周期的压缩是实实在在的。
6.2 质量账:错误率的变化
有人担心AI生成的代码质量不行。我的实测数据是:在标准逻辑和跨品牌翻译场景下,AI生成的代码经过我校对后,逻辑错误率比纯手写低。原因很简单:手写会疲劳、会走神、会漏掉互锁;AI不会疲劳,它只是可能“理解错需求”。
所以关键变成了:需求描述要准确,校对要严格。这两件事做到位,AI的输出质量是稳定的。
6.3 学习账:新手怎么用AI加速入门
对于刚入行的朋友,我觉得AI最大的价值不是“替你写”,而是“给你看”。你描述一个需求,AI给你一个实现方案,你可以对照着手册理解每条指令的作用。这比单纯看书要直观得多。
但有个前提:你得能判断AI给的对不对。如果你完全不懂PLC,AI给你一个错误逻辑你也看不出来,那就危险了。所以我的建议是:先用AI辅助学习,但每一条指令都要对着手册确认,每一个逻辑都要在仿真软件里跑一遍。
7. 我踩过的坑与总结出的五条铁律
7.1 坑一:AI把“三菱”和“西门子”的定时器搞混
有一次我让AI写一段西门子200 SMART的延时程序,它用了T37,但200 SMART的T37是100ms精度,而我需要的是10ms精度。AI没有主动说明这个差异,我差点直接用了。后来我养成了一个习惯:AI生成的程序里,每一个定时器、计数器、特殊寄存器,我都要对着手册确认一遍。
7.2 坑二:通讯协议参数被“默认值”坑了
AI在生成Modbus通讯程序时,如果没有明确指定校验方式,它可能会默认“无校验”。但实际项目中,很多设备默认是偶校验。这个差异会导致通讯完全不通。我现在给AI下指令时,通讯参数一定写全:波特率、数据位、停止位、校验方式,一个不落。
7.3 坑三:AI生成的注释里出现“想当然”的描述
AI有时候会在注释里写“此网络实现过载保护”,但实际上它生成的逻辑只是“过载信号触发停止”,没有自锁和复位。这种“注释比逻辑更美好”的情况,需要逐条核对。我的做法是:注释和逻辑分开校对,先看逻辑对不对,再看注释准不准。
7.4 五条铁律
用了这么久,我总结了五条铁律,每次用AI辅助编程都会过一遍:
- 平台信息必须精确到型号,不能只说品牌。
- IO和寄存器分配表必须先做,AI生成后逐项核对冲突。
- 安全逻辑永远手写,AI只做辅助文档。
- 通讯参数必须写全,不能依赖AI的默认值。
- 仿真验证不能省,AI生成的程序必须先仿真再下载。
7.5 最后分享一个提高效率的小技巧
如果你经常做跨品牌移植,可以建一个自己的“指令映射表”。比如三菱的ADPRW对应西门子的MBUS_MSG,三菱的MOV对应西门子的MOVE,三菱的ALT对应西门子的上升沿触点。把这个表整理好,每次让AI翻译时,把表一起给它,输出的准确率会明显提高。
这个表我是在Excel里维护的,左边是三菱指令,右边是西门子指令,中间是注意事项。用AI翻译前,先把相关行复制到提示词里。实测下来,有了这个表,AI翻译的首次准确率能从六成提到八成以上。
说到底,AI在PLC编程里的角色,更像是一个不知疲倦的助理工程师。它能把你的想法快速变成代码框架,能帮你查手册、做翻译、写注释,但它不能替你做决策、不能替你去现场、不能替你承担安全责任。用得好不好,取决于你给它多少“工程化”的输入,以及你在它输出之后做了多少“工程化”的验证。这十年我最大的体会是:工具在变,但把逻辑理清楚、把边界划明白、把验证做到位,这些基本功永远不会过时。