AI辅助开发实战基于三菱PLC的水处理毕业设计系统优化与代码生成做毕业设计时我原本打算“纯手工”写一套三菱 PLC 的水处理程序进水、加药、沉淀、反冲、排污五个状态来回切换还要跟触摸屏、变频器、水质仪打 Modbus TCP。结果两周过去梯形图越画越像“蜘蛛网”状态机一改动HMI 变量地址全乱调试现场更是“改一行全下载等三分钟”。痛定思痛我把整个流程拆给 AI 做了一遍居然把编码调试周期压到 4 天代码量还少了 40%。下面把完整做法摊开顺带把踩过的坑一并标出来供同样做毕设或小型项目的同学参考。1. 传统毕设 PLC 开发的三座大山重复编码进水阀、排污阀、加药泵都是“开-关-超时-故障”四部曲复制 20 次后只要改一个定时器号就满屏红色叉号。状态机复杂水处理过程是典型“步骤条件”混合流程用梯形图写 STL步进指令一旦跨页跳转条件肉眼难追老师审阅时直接打回“可读性不及格”。HMI 联调困难Modbus 地址手动映射GX Works2 与 GT Designer3 两边 Excel 来回贴后期加一根电导率传感器地址错位导致触摸屏显示“-NaN”现场社死。2. 三条技术路线对比规则引擎、低代码、大模型方案学习成本生成质量对三菱生态友好度备注规则引擎Node-REDMQTT中中低需额外网关毕设评委质疑“这还是 PLC 主控吗”低代码平台某国产云 PLC低低无硬件需整套替换学校实验室只支持 FX 3UPASS大模型辅助DSL低-中高高直接输出 GX Works2 工程可离线运行最终采用结论只要能把“工艺描述”压成 AI 看得懂、人也能读的 DSL大模型路线最贴合学校现有硬件且生成代码 100% 兼容 IEC 61131-3。3. Prompt Engineering让 AI 写出“能编译”的梯形图核心思路是“结构化自然语言 → 领域专用模板 → 代码”。把水处理流程拆成 5 张“工艺卡片”每张卡片强制包含字段步骤名、进入条件、动作、离开条件、异常、超时。示例如下[STEP] 进水 进入条件: 液位30% AND 无急停 动作: 开阀Y0关排污阀Y1启动泵Y2 离开条件: 液位70% 超时: 300s 异常: 液位无变化60s → 报警M100把 5 张卡片一次性喂给 GPT-4Prompt 关键句“你是一位熟悉 GX Works2 的资深电气工程师请根据上述工艺卡片生成符合 IEC 61131-3 的梯形图逻辑LD 伪代码与 ST 状态机要求使用 MOVL 比较指令处理液位模拟量 D0所有阀泵输出点集中在 Y0-Y7方便线下实验台接线状态编号用 S0-S49步进指令用 STL/RET生成 Modbus TCP 地址映射表保持与 HMI 模板一致D1000-D1050 只读M200-M255 读写。”AI 返回结果一次通过编译仅把 Y 点号改成我们实验台实际端子即可下载。4. 生成代码片段状态机解耦 异常处理下面给出两段可直接粘贴进 GX Works2 的示例左侧为 STL 梯形图伪代码右侧为等效 ST。重点看“超时”与“液位无变化”如何被 AI 自动插桩。STL截取进水步LD M8000 STL S0 LD D0 K30 AND M0OFF //急停 OUT Y0 //开进水阀 OUT Y2 //启泵 LD D0 K70 OUT S1 //满足液位→跳沉淀 LD T0 //300s 超时 OUT S50 //统一报警态 RETST结构化文本状态机CASE step OF 0: //进水 IF D030 AND NOT M0 THEN Y0:TRUE; Y2:TRUE; TON(IN:TRUE, PT:T#300s, QT0); IF D070 THEN step:1; END_IF; IF T0 THEN step:50; END_IF; END_IF; 50: //异常 M100:TRUE; //报警 Y0:FALSE; Y2:FALSE; END_CASE;AI 把“进入-动作-离开-异常”四要素拆成独立网络后期在实验室加“温度”条件只需改卡片再生成旧状态机框架不动。5. 生成代码的可维护性与实时性评估可维护性所有状态号、定时器号、数据寄存器号按卡片名自动加偏移避免人工重号注释自带工艺描述老师看代码就像看说明书。冷启动延迟AI 模板默认把初始状态放在 S0并在第一扫描周期复位所有输出防止阀泵误动实测 FX5U-32MT 从 STOP→RUN 冷启 80 ms 内进入安全态。IO 同步安全生成代码对任何输出线圈均加入“映像区”中转Y 先写中间 MEND 前批量刷新保证扫描周期内信号一致现场高速计数与 PID 指令未受影响。6. 生产环境避坑指南地址映射错误AI 给出的 Modbus 地址表务必在“PLC 软元件批量监视”里全选→强制写入一次确认 D1000 偏移与 HMI 模板一致再拆机去现场。扫描周期冲突当 PID 运算与通信中断同时启用WDT 可能报警。把 AI 生成的主状态机放到固定扫描中断 I3110 ms其余通信放主循环可稳在 8 ms。边界条件缺失AI 不会自动考虑“停水液位传感器恰好损坏”双重故障。务必在工艺卡片里加一句“传感器断线→模拟量100 强制停机”否则实验台会干转水泵。下载覆盖GX Works2 默认不备份注释用 AI 重新生成前先“工程另存为”带时间戳防止把现场调好的 PID 参数冲掉。接地与隔离AI 生成的代码只管逻辑不管 24 V 电源。实测把模拟量模块 0 V 与变频器 0 V 共地后D0 值跳动 ±20 字现场一度怀疑代码 bug。7. 把控制逻辑变成 DSL一个小练习把你手头的“反冲洗”流程写成 1 张工艺卡片字段必须覆盖进入/离开/异常/超时。用同样 Prompt 喂给大模型要求输出 STL 与 ST 双版本。在实验台空载运行手动触发传感器看状态是否按预期跳转记录 AI 没覆盖的边界条件补充进卡片。重复 3 轮直到卡片不再变动——此时你就拥有了一份“可复用、可验证”的水处理 DSL 模板后续改工艺只改卡片代码层面 5 秒重新生成。毕业答辩时老师问“这段逻辑谁写的”你可以坦然回答“工艺卡片我设计代码 AI 生成我负责验证。”既展示工程思维又省掉通宵改梯形图的黑眼圈何乐而不为