S7-200 PLC程序组态王组态画面PID水位控制系统设计液位
水箱水位控制简直是工业自动化入门的“Hello World”,但真要做稳定好用,还是得靠PLC+组态王的组合,尤其是用PID闭环控制,手动拧阀门的日子一去不复返了。先扯硬件:S7-200 CPU224XP自带AI/AO口,刚好用上——液位传感器(4-20mA)接AIW0,输出接AQW0到变频器,变频器带水泵,水箱水位高低由传感器反馈给PLC,PLC通过PID输出控制水泵转速,完美闭环。传感器的4m
No.379 S7-200PLC程序组态王组态画面PID水位控制系统设计液位
水箱水位控制简直是工业自动化入门的“Hello World”,但真要做稳定好用,还是得靠PLC+组态王的组合,尤其是用PID闭环控制,手动拧阀门的日子一去不复返了。今天就唠唠用S7-200PLC加组态王做PID水位控制的路子。
先扯硬件:S7-200 CPU224XP自带AI/AO口,刚好用上——液位传感器(4-20mA)接AIW0,输出接AQW0到变频器,变频器带水泵,水箱水位高低由传感器反馈给PLC,PLC通过PID输出控制水泵转速,完美闭环。
PLC这边,别费劲自己写PID算法了,S7-200的PID香得很,要么用向导生成,要么直接调用PID指令。我习惯用定时中断来周期调用PID,毕竟PID得有固定的扫描周期才准。
先上初始化程序,用STL写更省地方:
// 开机初始化PID核心参数
MOVR 100.0, VD100 // 设定值SP:目标水位100cm,存VD100
MOVR 0.0, VD104 // 过程值PV:初始水位设0,等下读传感器反馈
MOVR 0.0, VD108 // 输出值MV:水泵转速初始0
MOVB 100, SMB34 // 100ms定时中断,PID周期选100ms刚好
ATCH INT_0, 10 // 把中断程序INT_0绑定到定时中断事件10
ENI // 开全局中断,不然中断程序跑不起来
然后是中断程序,这才是PID干活的核心:
// INT_0 100ms中断程序:周期调用PID
// 第一步:把传感器的4-20mA信号转成实际水位
ITD AIW0, AC0 // AIW0读入4-20mA对应6554-32767,先转双整数
SUBI AC0, 6554, AC0 // 减掉4mA对应的偏置6554,得到净变化量
DTR AC0, AC0 // 转成浮点数方便计算
/R 26213.0, AC0 // 20mA-4mA对应差值26213,转成0-1的比例值
*R 200.0, AC0 // 乘传感器量程200cm,得到实际水位值
MOVR AC0, VD104 // 存到VD104当过程值PV
// 第二步:调用PID闭环指令
PID VD100, VD104, VD108, VB112, 0 // 最后一个0是自动模式
// 参数解释:VD100=设定值SP,VD104=实际水位PV,VD108=输出MV,VB112是PID参数块
// 第三步:把PID输出转成4-20mA给变频器
MOVR VD108, AC1 // 取PID输出的0-1浮点数
*R 26213.0, AC1 // 转成6554-32767的区间(对应4-20mA)
+R 6554.0, AC1 // 加回4mA的偏置
ROUND AC1, AC1 // 四舍五入成整数
DTI AC1, AQW0 // 输出到AQW0,控制变频器转速
这段代码里最关键的是VB112参数块,里面存着P、I、D三个调参核心,给你唠唠大白话:
- P(比例):就像踩油门,P越大,水位靠近设定值的速度越快,但P=2.0时我直接把水箱抽满溢出,被车间主任追着骂——太大容易“过冲”,得慢慢加。
- I(积分):专门消灭“静差”的,比如P调完水位停在95cm,离设定值差5cm,加I就能慢慢把水位拉到100cm,但I太大也会振荡,每次加0.1试就行。
- D(微分):相当于提前刹车,比如水位快速靠近设定值,D会提前减小水泵转速,防止冲过设定值。但水位变化慢,一般D设0就行,省得画蛇添足。
调参数我一般用“试凑法”:先把I=0、D=0,慢慢加大P直到水位在设定值附近小幅度振荡,然后加I消静差,最后加D微调。嫌麻烦的话S7-200的PID向导能自动调参,但自动出来的参数大多得手动改改才顺手。
No.379 S7-200PLC程序组态王组态画面PID水位控制系统设计液位
接下来是组态王的画面,这是给操作员看的,得直观。先建几个变量:和PLC的VD100(设定值)、VD104(实际水位)、VD108(输出)做OPC通讯绑定。
画面里搞个水箱图形,把填充高度和“实际水位”变量绑定——水位涨填充就变高,一眼就能看明白。再整个输入框改设定值,操作员想把水位调到120cm,直接输入就行,组态王会自动把值写到PLC的VD100里。还能整个趋势曲线,实时看水位变化,调参数时盯着曲线改,比看数字直观100倍。
组态王里补个小脚本,画面打开时自动读当前设定值:
// 画面打开脚本
\\本站点\设定值 = PLC\VD100;
输入框确认时把新值写到PLC:
// 设定值输入框确认脚本
PLC\VD100 = \\本站点\设定值;
最后补个踩过的坑:模拟量校准一定要准! 传感器的4mA对应0cm,20mA对应200cm,要是校准错了,PLC读的水位都是假的,PID再牛也白搭。还有PID周期不能太长也不能太短,100ms-500ms之间刚好,S7-200的定时中断完美适配。
这套方案在工厂里用得贼多——冷却塔水位、污水处理池液位、小型供水系统全靠它,PLC稳定抗造,组态王操作简单,调参数也不用钻电控柜,工程师和操作员都省心。手动拧阀门的日子,早该翻篇了!

更多推荐
所有评论(0)