AI辅助开发实战:基于三菱PLC的水处理毕业设计系统优化与代码生成
做毕业设计时,我原本打算“纯手工”写一套三菱 PLC 的水处理程序:进水、加药、沉淀、反冲、排污五个状态来回切换,还要跟触摸屏、变频器、水质仪打 Modbus TCP。结果两周过去,梯形图越画越像“蜘蛛网”,状态机一改动,HMI 变量地址全乱,调试现场更是“改一行,全下载,等三分钟”。痛定思痛,我把整个流程拆给 AI 做了一遍,居然把编码+调试周期压到 4 天,代码量还少了 40%。下面把完整做法摊开,顺带把踩过的坑一并标出来,供同样做毕设或小型项目的同学参考。
1. 传统毕设 PLC 开发的三座大山
- 重复编码:进水阀、排污阀、加药泵都是“开-关-超时-故障”四部曲,复制 20 次后只要改一个定时器号,就满屏红色叉号。
- 状态机复杂:水处理过程是典型“步骤+条件”混合流程,用梯形图写 STL(步进指令)一旦跨页,跳转条件肉眼难追,老师审阅时直接打回“可读性不及格”。
- HMI 联调困难:Modbus 地址手动映射,GX Works2 与 GT Designer3 两边 Excel 来回贴,后期加一根电导率传感器,地址错位导致触摸屏显示“-NaN”,现场社死。
2. 三条技术路线对比:规则引擎、低代码、大模型
| 方案 | 学习成本 | 生成质量 | 对三菱生态友好度 | 备注 |
|---|---|---|---|---|
| 规则引擎(Node-RED+MQTT) | 中 | 中 | 低 | 需额外网关,毕设评委质疑“这还是 PLC 主控吗?” |
| 低代码平台(某国产云 PLC) | 低 | 低 | 无 | 硬件需整套替换,学校实验室只支持 FX 3U,PASS |
| 大模型辅助+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-4,Prompt 关键句:
“你是一位熟悉 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 M0=OFF //急停 OUT Y0 //开进水阀 OUT Y2 //启泵 LD D0> K70 OUT S1 //满足液位→跳沉淀 LD T0 //300s 超时 OUT S50 //统一报警态 RETST(结构化文本,状态机)
CASE step OF 0: //进水 IF D0<30 AND NOT M0 THEN Y0:=TRUE; Y2:=TRUE; TON(IN:=TRUE, PT:=T#300s, Q=>T0); IF D0>70 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 先写中间 M,END 前批量刷新),保证扫描周期内信号一致,现场高速计数与 PID 指令未受影响。
6. 生产环境避坑指南
- 地址映射错误:AI 给出的 Modbus 地址表务必在“PLC 软元件批量监视”里全选→强制写入一次,确认 D1000 偏移与 HMI 模板一致,再拆机去现场。
- 扫描周期冲突:当 PID 运算与通信中断同时启用,WDT 可能报警。把 AI 生成的主状态机放到固定扫描中断 I31(10 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 生成,我负责验证。”既展示工程思维,又省掉通宵改梯形图的黑眼圈,何乐而不为?