西门子S7-1200程序案例, PID 恒温恒压供冷却水程序.SCL编程语言 触摸屏画面TP1...
组态时用了个骚操作——把阀门开度数值用颜色渐变填充,超过90%自动闪烁报警,比单纯数字直观得多。整套图纸在Eplan里把阀门的24V供电和PLC的AI通道做成跨页关联,后期查线省了不少时间。这系统既要保证80℃工艺水温正负0.5度波动,还得维持4bar供水压力稳定,实际调试下来发现几个有意思的坑点。现在这套系统已经稳定运行半年,每月能耗报表显示比老系统省了15%的电费,算是没白折腾。调试时发现个细
西门子S7-1200程序案例, PID 恒温恒压供冷却水程序.SCL编程语言 触摸屏画面TP1200组态。 霍尼韦尔电动比例阀PID控制水温,与两台西门子v20变频器模拟量PID控制水压。 包括程序和Eplan图纸
最近在厂里折腾了一套冷却水控制系统,用S7-1200 PLC搭配SCL语言搞了个双PID控制方案。这系统既要保证80℃工艺水温正负0.5度波动,还得维持4bar供水压力稳定,实际调试下来发现几个有意思的坑点。

温度控制这块用了霍尼韦尔的EPV300电动调节阀,PLC的PWM输出直接怼到阀门定位器上。核心是FB41(CONT_C)的魔改版本,这里SCL的复用功能就派上用场了。看这段阀门控制逻辑:
// 温度PID参数装载
#tempPID.DB := "PID_Temp";
#tempPID.SP := HMI.SetTemp;
#tempPID.PV := AI_WaterTemp;
#tempPID.GAIN := 1.2;
#tempPID.TI := "T#30s";
CALL "CONT_C", #tempPID;
// 输出转换为阀门开度
IF #tempPID.LMN < 0.0 THEN
ValveOpen := 0;
ELSIF #tempPID.LMN > 100.0 THEN
ValveOpen := 100;
ELSE
ValveOpen := REAL_TO_INT(#tempPID.LMN);
END_IF;
这里特意给输出加了硬限幅,之前吃过阀门全开卡死的亏。调试时发现个细节:当设定值突变超过5℃时,手动给输出加了个20秒的斜坡,防止积分饱和把阀门直接顶到上限。
压力控制更有意思,两台V20变频器用AO模块搞了个主从切换。模拟量输出0-10V对应0-50Hz,但实际只用0-40Hz范围(泵的喘振区得避开)。关键代码在压力PID处理部分:
CASE PressureMode OF
1: // 单泵模式
Pump1_Speed := PID_Pressure.LMN * 0.4; // 量程转换
Pump2_Speed := 0.0;
2: // 双泵模式
IF PID_Pressure.LMN > 50.0 THEN
Pump1_Speed := 40.0;
Pump2_Speed := (PID_Pressure.LMN - 50.0) * 0.8;
ELSE
Pump2_Speed := 0.0;
Pump1_Speed := PID_Pressure.LMN * 0.8;
END_IF;
END_CASE;
这个分段控制策略是现场试出来的——当主泵跑到80%负荷时自动启动辅泵,比传统的主备模式节能12%左右。不过要注意AO模块的响应时间,最初没加0.5秒的滤波,导致辅泵频繁启停。

触摸屏画面用了个取巧的设计:把温度压力趋势图叠加显示,操作工一眼就能看出系统状态。重点做了参数修改的权限分级,工程师账户才能改PID参数,避免误操作。组态时用了个骚操作——把阀门开度数值用颜色渐变填充,超过90%自动闪烁报警,比单纯数字直观得多。
整套图纸在Eplan里把阀门的24V供电和PLC的AI通道做成跨页关联,后期查线省了不少时间。特别提醒:模拟量信号线一定要用双绞屏蔽线,之前用普通线时压力波动能到±0.2bar,改线后直接压到±0.05bar以内。

调试阶段发现个诡异现象——每次启动水泵都会导致温度PID震荡。最后发现是AO模块和变频器共地了,加了个信号隔离器立马解决。现在这套系统已经稳定运行半年,每月能耗报表显示比老系统省了15%的电费,算是没白折腾。
更多推荐
所有评论(0)