首页 / 资讯中心 / 文章详情

PLC工程师实战:用AI写ST语言程序的技巧与避坑指南

PLC工程师实战:用AI写ST语言程序的技巧与避坑指南 ★ FEATURED ARTICLE
上个月接到个小改造一条老旧产线上的三台37kW电机要改成星三角降压启动顺便把电流信号送进触摸屏。项目本身不复杂又是接线图、点位表、定时器互锁那一套。说实话类似项目我做过不下几十个机器还没动人先有点提不起劲。那天下午我顺手把工艺要求、IO点位、时序图整理成一页文字丢给电脑上那个AI助手试了试二十分钟后它给了我一份完整的三菱ST程序。我逐行看下来删掉大概三分之一改了两处互锁第二天上电实测一次通过。干PLC编程十年最近这几个月我算是正式让AI插手写程序了今天把这套打法和踩过的坑从头到尾聊一遍给还在观望的同行动个手。1. PLC编程这行到底有多少活其实是文本搬运1.1 我决定试AI不是因为图新鲜是因为烦透了重复劳动很多没下过现场的朋友以为PLC工程师就是画梯形图其实不是。真正的日常里画逻辑图只是很小一块大头全在那些不能出错但极其枯燥的事情上。同一套星三角启动逻辑三菱写一遍汇川写一遍西门子再写一遍。不同品牌之间的指令、软元件、内存区、FB定义方式都有差异程序从A平台搬到B平台从来不是复制粘贴而是要对着两本手册来回翻译。代码版本管理混乱的时候注释和实际逻辑对不上你还要当侦探。好不容易把程序灌进去开机调试阶段动不动就要翻几百行梯形图找某个中间继电器的触点到底落在哪条支路上。再遇上客户改了三个按钮的位置图纸、点位表、HMI变量、PLC程序全部要跟着动一改就是一下午。这些工作没有一个是不会做的但也没有一个是我愿意反复做的。它们本质上都是文本处理、规则迁移和格式转换而这恰恰是AI这类工具最擅长的事情。想明白这一点我就没再把它当成玩具。1.2 AI在PLC编程上真正能打的三个价值点几个月用下来我总结出AI在我这里产出最稳定的三个方向样板代码生成。特别是ST语言的功能块、状态机、通讯初始化这类结构化很强的代码。你给它清晰的输入输出定义它返回的初版往往已经很接近能用的水平我再花十几分钟修改边界条件就能上仿真。跨平台翻译。这个是目前我最常用的场景。比如把西门子环境里的某段逻辑描述给AI让它翻译成三菱GX Works3的ST风格。以前这种活至少要翻两个下午的手册现在基本上是把需求写清楚它出稿我审稿效率差出好几倍。注释、说明、排查手册生成。这份价值一开始被严重低估了。代码写完不肯写注释是行业老毛病让AI根据代码逻辑自动输出中文注释再生成一页现场调试排查手册客户体验和我们自己后期的维护体验都会好非常多。1.3 先泼盆冷水再往下聊我并不是说AI已经把活全干了。恰恰相反AI完全不知道现场长什么样。它不知道急停按钮是装在操作柱上还是触摸屏里不知道电机功率对应的是星三角还是软启动也不知道这个项目的安全回路用的是24V还是220V的中继。更关键的是客户不会因为这是AI写的程序就对事故免责签字画押的还是我们这些工程师。所以这篇文章里所有关于让AI替我写程序的说法准确含义是让AI替我把初稿打出来把脏活累活接手过去但判断、取舍和安全责任始终没撒手。后文所有实操经验都是在这个前提下展开的。2. 搞清AI的脾气梯形图它真不太行ST才是主场2.1 我试过让AI写梯形图结果不太理想最早我也试过直接让AI生成梯形图或者更准确地说让它输出三菱的助记符指令表再倒回GX Works2。试了几次之后我的结论是能用但性价比很低可读性也差。原因是梯形图本质上是一种图形化编程格式虽然它有助记符这种文本等价物但各家助记符差异大到离谱。三菱叫LD西门子也叫LD倍福的TwinCAT里又是另一套写法AI在生成的时候很容易把不同体系的助记符混在一起。而且梯形图的可视化优势一旦落到纯文本里就完全体现不出来你让AI给你生成一个复杂回路的指令表人肉去读头比看梯形图还大。另外梯形图在线圈、触点、分支上的排布规则AI并不真正理解。它生成的助记符在上载回软件后经常出现支路位置冲突、双线圈输出这类问题修起来比自己在梯形图里画还费劲。2.2 为什么ST是AI的舒适区ST语言就不一样了。它长得像Pascal、Basic这类通用编程语言语法上天然接近AI训练语料里海量的通用代码。这里放一段我最近实际在用的三菱ST代码片段你就明白为什么AI对它友好VAR xStart : BOOL; xStop : BOOL; xKm1 : BOOL; xKm2 : BOOL; xKm3 : BOOL; tSwitch : TON; END_VAR IF xStart AND NOT xStop THEN xKm1 : TRUE; xKm2 : TRUE; END_IF这段代码拿到Codesys环境里几乎不用改就能用。因为IEC 61131-3标准已经把ST语法统一了不管是三菱、西门子还是Codesys系汇川、信捷、欧姆龙这些ST的核心语法都是同一套。这意味着AI在训练时接触到的ST语料是全行业通用的生成质量自然比各家自成一派的梯形图高出一截。我现在的工作习惯是工艺逻辑尽量用ST梯形图只在安全回路、紧急停止这类最高优先级逻辑里保留。原因后文会说。2.3 AI写ST时最常见的四类翻车现场即便ST是AI的主场它还是会犯一些很有规律的错误。我踩过不少列在下面错误类型典型表现怎么发现的幻觉指令写出本公司根本不存在的指令名比如把西门子的R_TRIG误写进三菱程序编译直接报错交叉引用一查便知定时器管脚记混把TON的PT、ET、IN参数名写错甚至把TOF当TON用看帮助文档对照或查平台库定义数据类型混乱BOOL当WORD用WORD和INT直接赋值模拟量不转REAL就做运算编译警告实机模拟量数值不对实例重复调用同一个TON实例在两个互斥分支里被重复使用定时器时序互相干扰代码审查时逐个实例排查这四种里最坑的是第四种。AI的逻辑是我需要一个定时器就给你一个实例但不会主动考虑这个实例在整个扫描周期里只允许一个地方调用。这种问题编译不会报错仿真甚至都能过只有到了现场才会发现动作时序不对。所以AI代码必须经过人工审查这一点后面单独细说。3. 我日常在用的AI辅助编程工作流3.1 第一步把工艺需求翻译成AI看得懂的需求单我观察了很久发现大多数让AI写代码后觉得不好用的人问题出在输入。你跟AI说帮我写一个星三角启动程序它能给你写但写出来的一定是教科书版本的通用代码跟你实际的点位、时序、互锁要求没有一个对得上。这不怪AI怪你没给它足够的约束条件。我现在会在动手前把一页纸的需求单整理好再丢给AI。模板长这样项目平台三菱Q系列 GX Works3ST语言 功能星三角降压启动含自动/手动模式 输入点位X0自动启动按钮X1停止按钮X2热继电器常闭触点 输出点位Y0主接触器Y1星接触器Y2角接触器 时序要求启动0.5秒后闭合星接触器3秒后切换三角 星角切换间隔100ms 互锁要求星接触器与角接触器严禁同时闭合 热继动作后全部输出断开并输出报警这份东西不需要多复杂但越具体越好。点位表、时序、互锁条件、异常处理要求必须写清楚。AI不是读心术师它面对模糊的需求只能给你模糊的代码最后浪费的还是你自己的时间。3.2 第二步分块生成加人工拼装别让AI一口气写整个项目我不建议你用一个提示词让AI生成几百上千行的完整项目代码因为它根本驾驭不了那么长的上下文。更好的做法是拆成功能块一个块一个块地生成主回路控制启停、星三角、正反转手动自动切换逻辑报警采集与故障复位变频器通讯轮询Modbus RTU数据采集与HMI变量映射每块生成完我花十几分钟做一次代码审查确认点位、时序、数据类型都对得上再手动把各个功能块拼接到主程序中。拼装这个动作一定要自己做因为只有你知道各块之间的交联关系、状态变量和互锁条件。AI不掌握全局但它做单块初稿效率确实高。3.3 第三步AI在调试阶段的价值被严重低估代码写完其实才刚开始调试阶段的辅助作用才是AI真正让我省心的地方。比如某个第三方库的功能块文档写得晦涩难懂直接把代码贴给AI让它用大白话解释每个管脚的作用和调用前提它解释得比原厂文档更像人话。再比如现场报了一个通讯错误码把错误码和上下文丢给AI它能整理出完整的排查清单从站站号对不对、波特率是否一致、数据位校验位有没有配错、终端电阻有没有拨、线缆屏蔽层是否接地。这套排查思路以前靠老师傅传帮带现在AI能帮你兜底。我前阵子在社区看到有人问建立连接时需要目标PLC的AMS NetID6字节网络标识符和端口号直接问AI很快就梳理清楚了这个NetID在TwinCAT系统管理器里哪个位置查看端口号默认是多少注意事项有哪些。这类调试问题AI回答得很稳本质上它就是个大百科问答库而PLC调试的很多问题恰恰是查手册、找规律的体力活。4. 实战回放三个项目用AI跑下来的完整过程4.1 星三角降压启动最基础的逻辑最容易翻车的地方回到开头那个改造项目。我当时给AI的需求单里写得非常细X0启动、X1停止、X2热继、Y0主接触器、Y1星接触器、Y2角接触器启动后0.5秒星接触器闭合延时3秒切换角接触器切换间隔100ms星角互锁。AI第一版给的代码结构没问题启停逻辑、主接触器控制基本能用。但审查时我发现了两个致命问题第一它的星角切换只有一个定时器没有处理星接触器断开到角接触器闭合之间的间隔。星接触器触点还没完全断开就闭合角接触器这在现场就是打火冒烟的事故轻则烧触点重则机械冲击损坏齿轮。第二它的互锁逻辑只做了一处防同时输出没有在机械互锁的基础上做软件延时保护。我只留了软件互锁机械互锁还得靠接触器本身的辅助触点。改完之后的核心逻辑示意如下IF xAuto THEN xKm1 : xStart AND NOT xStop; xKm2 : xKm1 AND NOT xKm3 AND NOT tSwitch.Q; IF xKm2 THEN tSwitch(IN : xKm2, PT : T#3S); END_IF xKm3 : xKm1 AND tSwitch.Q AND NOT xKm2; END_IF第二天上电一次通过。仿真都跑通了剩下的是现场的接线核验和机械检查。4.2 抢答器控制系统和软启动器一拖三状态机的优势另一个AI给我留下深刻印象的项目是抢答器控制系统。这种项目对很多初学者来说是毕业设计但里面藏着一个典型的状态机逻辑空闲状态等待触发触发后锁定当前选手并禁止其他人抢答主持人复位后回到空闲状态。这种锁存和优先级逻辑让AI来做非常合适因为它的本质就是一串状态转换。我只需要把谁先按下谁有效复位后所有锁存清空这两条核心要求写清楚AI半小时内给的状态机结构比我手写还规整。唯一要人工盯的是抢答时刻的抖动处理现场按钮如果没做硬件消抖程序里需要有短暂延时确认这个AI不会主动想到。软启动器一拖三也类似。三台电机共用一个软启动器工艺要求每台电机依次启动启动完成后切到下一台不能两台同时用软启动器。这个轮询逻辑用AI写的好处在于它是纯数据结构和状态转换AI擅长这种事。我只要把队列关系、互锁条件、每台电机启动完成的时间判定说清楚它生成出来的CASE状态分支代码基本可以直接进仿真跑。4.3 从社区高频问题看AI在调试阶段的真实用法这期间我养成了一个习惯遇到卡壳的调试问题先问AI再翻手册最后动设备。社区里不少高频问题其实都适合这么干。比如有人问InoproShop怎么设置PLC的端口号直接把问题给AI它会告诉你大概的路径在哪双击设备树里的PLC站点找到通信设置确认本机和PLC在同一个网段。虽然具体菜单名可能因为版本不同有差异但思路清晰比自己翻了半小时手册还没头绪强。还有人问Codesys怎么读取PLC网口MAC地址这个问题稍微冷门一点。AI给出的思路是用SysInfo库里的功能块读网络接口信息或者直接在设备扫描结果里查看网口的MAC。实际去试前者需要库支持后者操作更简单但至少AI给了两条可走的路。信捷XD5固件升级无法连接的问题也很典型。AI给的方向基本靠谱先排除USB驱动是否装好再确认网络模式下IP是不是同一个网段最后看固件升级工具版本与PLC固件版本是否匹配。基本覆盖了现场可能的原因。博途PLC与模拟屏不兼容这种问题本质上是模拟屏不支持S7通信协议或缺少对应的GSDML文件。AI能帮你把可能的原因全部列出来但真正解决还是得靠你按列表一项项排查。这阶段用AI的感觉就是它把从哪下手查这个问题替你解决了剩下查完之后怎么处理还是要靠你对设备和现场的理解。但省掉的那部分时间真的非常可观。5. AI代码上机前我给自己定的安全检查清单5.1 九条硬性检查项少一条都不敢上电AI生成的代码就算仿真通过了我也从来不直接灌到现场PLC里。我有一张铁打的清单每次上机前逐条过任何一条不过都不允许下载程序。这也是我把AI工具化用了几个月后沉淀下来的最重要经验序号检查项说明1急停与安全回路必须硬接线不进AI程序安全联锁永远不能依赖程序逻辑2每个互锁条件都确认是成对出现星角互锁、正反转互锁、软启切换互锁缺一不可3上电初始状态可控程序启动后所有输出必须处于安全初始状态4定时器/计数器实例全项目唯一同一实例不得在两个扫描周期分支重复调用5BOOL、WORD、REAL类型完整核对编译零警告是基本要求不是加分项6通讯超时与错误码有复位机制Modbus轮询没复位故障后会粘住7模拟量量程换算正确采集值不是直接送HMI要做工程单位换算8首次扫描标志完成初始化默认值、初始状态、脉冲变量只初始化一次9注释与点位表逐点核一致看着都对的程序注释错了一样害人这条清单本质上跟AI无关。手写程序也一样要查但以前我靠的是经验和状态现在我会把AI生成的每段代码都放进这套流程里走一遍。AI替我提高了初稿速度没有替我降低把关标准。5.2 永远不要交给AI的三类代码用得越久越能看清边界。下面这三类内容我一个字都不会让AI碰安全回路。包括急停、安全门连锁、双手启动回路、光栅检测这类涉及人身安全的逻辑。这些部分不仅不能交给AI生成理论上连常规PLC程序都不该承载更可靠的是硬接线和安全继电器。AI可以在旁边做辅助说明但绝不能用它生成的安全逻辑直接上线。客户核心工艺Know-how段。每个厂都有自己的工艺诀窍可能是某个温度曲线、某个压力段的时序、某个配方参数组合。这部分逻辑必须由懂工艺的人亲手写AI不了解这个厂的具体工艺背景更不该有机会接触到客户的工艺核心。底层驱动和协议栈代码。涉及第三方协议、专用通信芯片、固件相关的代码AI没有能力验证真实硬件行为。它可能给你一个看起来很专业的函数块但没法替你验证硬件时序和数据包格式。这种代码靠的是硬件手册和实际仪器。5.3 遇到AI幻觉指令我的处理流程AI生成ST代码时偶尔会犯幻觉指令的毛病写一个本公司不存在的指令或函数名出来。我遇到过两次一次是把西门子的R_TRIG写进了三菱程序一次是告诉我用某个根本不存在的库函数。处理流程我已经固定下来了第一步先查官方帮助文档按F1键或者直接翻编程手册看这个指令在目标平台里到底存不存在。这一步能过滤掉大部分幻觉。第二步如果指令存在但用法陌生把指令名连同型号丢给AI反查让它给出出处和用法案例再开一个最小验证工程编译一遍确认能用才往主程序里引。第三步编译都过不了或者查不到的就直接放弃换成自己熟悉的方式重新实现那一段逻辑不要恋战。说到底AI是交初稿的人我们才是用代码干活的人。把它当成一个刚毕业来得很快的学生手速惊人但规矩不懂你负责把关它负责写快稿配合得好才是生产力。最后说点实在的几个月用下来我的工时结构确实变了。原来大量时间耗在敲代码、查手册、翻译平台差异上现在这些被压缩得很短省下来的时间主要花在两件事上一是拿着需求单和点位表去现场核对工艺细节二是把设备使用说明和故障排查手册写得比以前更清楚。结果就是项目质量反而更稳了交付后的售后问题少了不少。如果只给同行一个建议别指望AI能一口气交一份开机即跑的程序那是错误预期。把它当成一个能24小时加班、文笔还不错、但对现场一无所知的助手就好你负责懂工艺、懂现场、懂安全它负责把初稿打出来打快一点。这层关系理顺了它确实能陪你再多干十年而且不抱怨加班。
阅读完成 · 觉得有帮助?
咨询建站