对于做通风或者废气处理行业的人来说,恒压控制可以说是比较基础的一个要求,通过控制调节风机变频器的频率,使得某一点的风压稳定在设定压力值附近。一般可以通过PLC的PID模块、带PID调节功能的智能数显仪、抑或是直接通过变频器的PID功能来实现。
对于带HMI的系统,我建议通过PLC来实现恒压控制,毕竟当工况有大的改变时,在触摸屏上更改参数什么的会比较方便。
这里我准备通过两篇文章,分别用PID控制和非PID控制两种方式来实现恒压控制。这期我们就用非PID的调节方式。
1. 风压的特性
首先我们要了解,如果以Pa为单位,风压的波动一般是比温度波动“刺激“得多的。给大家看看项目现场的记录。
可以看到,在风机频率固定的情况下,压力变送器测得的风压始终有一定幅度的波动。波动的幅度会受风速、管道直径、取样点是否在长直管段中间这些因素的影响。一般来说,波动幅度在±20Pa~±50Pa之间。该项目中黑线对应的测压点风管管径大,风速低,红线对应的测压点管径小,风速高。
2. 解决思路
风压的不稳定性会导致一个问题,如果以一个固定的压力作为调节目标,那变频器的输出频率在每个采样周期都会改变,这样显然是不符合实际使用需求的,这种情况下我们可以采取以下方法:
1、将风压取值由时间点的数值换为时间段的平均值,你第1s,6s,11s,16s,21s……时间点的风压值曲线跟1-5s均值、6-10s均值、11-15s均值、16-20s均值……时间段均值的风压曲线,明显是后者更加平稳。
2、允许风压在设定值附近小范围波动,此时无需改变变频器频率。
我们的调节逻辑如下:
当风压在设定值允许波动范围内时,风机频率不变;在范围外但差值不大时,每个周期频率略微增减;当风压离设定值差距比较大时,每个周期频率增减数值大一些。我这里就简单分了3段,当然,如果对时效性要求比较高,可以多分几段。
3. 编程
有了以上思路,那编程其实是非常简单的,我用SCL编程如下。
REGION 计算n秒风压均值
"R_TRIG_1s"(CLK := "Clock_1Hz"); //系统时钟,1Hz
IF "R_TRIG_1s".Q THEN
"PE101_Sum" := "PE101_Sum" + "AIAO_Num".PE101;
IF "Count" >= "Parameter".n THEN
"Count" := 1;
"PE101_Avg" := "PE101_Sum" / "Parameter".n;
"PE101_Sum" := 0;
"Change_M101_FREQ" := TRUE;
ELSE
"Count" := "Count" + 1;
END_IF;
END_IF;
END_REGION
REGION 根据风压改变风机频率
"PE101_Deviation" := "PE101_Avg" - "Parameter".PE101_Set;
IF "Change_M101_FREQ" THEN
IF "PE101_Deviation" < -200 THEN
"AIAO_Num".M101_FREQ := "AIAO_Num".M101_FREQ - 3;
ELSIF "PE101_Deviation" > 200 THEN
"AIAO_Num".M101_FREQ := "AIAO_Num".M101_FREQ + 3;
ELSIF "PE101_Deviation" < -30 THEN
"AIAO_Num".M101_FREQ := "AIAO_Num".M101_FREQ - 0.5;
ELSIF "PE101_Deviation" > 30 THEN
"AIAO_Num".M101_FREQ := "AIAO_Num".M101_FREQ + 0.5;
END_IF;
//设置频率上下限
IF "AIAO_Num".M101_FREQ < "Parameter".M101_FREQ_Min THEN
"AIAO_Num".M101_FREQ := "Parameter".M101_FREQ_Min;
ELSIF "AIAO_Num".M101_FREQ > "Parameter".M101_FREQ_Max THEN
"AIAO_Num".M101_FREQ := "Parameter".M101_FREQ_Max;
END_IF;
"Change_M101_FREQ" := FALSE;
END_IF;
END_REGION
当然,如果经常会用到的话,把他做成一个程序块也是很方便的。
今天抽空做了个块,发现杂七杂八的接口变量还真不少。
接口和程序如下:
REGION 计算n秒风压均值
#R_TRIG_1s(CLK := "Clock_1Hz"); //系统时钟,1Hz
IF #R_TRIG_1s.Q THEN
#PE_Sum := #PE_Sum + #PE;
IF #Count_Num >= #N_s - 1 THEN
#Count_Num := 0;
#PE_Avg := #PE_Sum / #N_s;
#PE_Sum := 0;
#Change_FREQ := TRUE;
ELSE
#Count_Num := #Count_Num + 1;
END_IF;
END_IF;
END_REGION
REGION 根据风压改变风机频率
IF #Change_FREQ THEN
#PE_Deviation := #PE_Avg - #PE_Set;
IF #Positive THEN //取压点在风机后端,风机频率增加,压力值增大
IF #PE_Deviation < - #Deviation_Value2 THEN
#FAN_FREQ := #FAN_FREQ + #FREQ_Change_Value2;
ELSIF #PE_Deviation > #Deviation_Value2 THEN
#FAN_FREQ := #FAN_FREQ - #FREQ_Change_Value2;
ELSIF #PE_Deviation < - #Deviation_Value1 THEN
#FAN_FREQ := #FAN_FREQ + #FREQ_Change_Value1;
ELSIF #PE_Deviation > #Deviation_Value1 THEN
#FAN_FREQ := #FAN_FREQ - #FREQ_Change_Value1;
END_IF;
ELSE //取压点在风机前端,风机频率增加,压力值减小
IF #PE_Deviation < - #Deviation_Value2 THEN
#FAN_FREQ := #FAN_FREQ - #FREQ_Change_Value2;
ELSIF #PE_Deviation > #Deviation_Value2 THEN
#FAN_FREQ := #FAN_FREQ + #FREQ_Change_Value2;
ELSIF #PE_Deviation < - #Deviation_Value1 THEN
#FAN_FREQ := #FAN_FREQ - #FREQ_Change_Value1;
ELSIF #PE_Deviation > #Deviation_Value1 THEN
#FAN_FREQ := #FAN_FREQ + #FREQ_Change_Value1;
END_IF;
END_IF;
//设置风机频率上下限
IF #FAN_FREQ < #FREQ_Min THEN
#FAN_FREQ := #FREQ_Min;
ELSIF #FAN_FREQ > #FREQ_Max THEN
#FAN_FREQ := #FREQ_Max;
END_IF;
#Change_FREQ := FALSE;
END_IF;
END_REGION
调用之,设定工况为:取压点在离心风机后端,测得压力为正压,需要通过调整风机频率将测压点压力稳定在800Pa,为了加速显示效果,设为每3s调整一次风机频率。风压在770830Pa频率不变,在600770Pa / 830~1000Pa,每次+/- 0.5Hz,在<600Pa / >800Pa,每次+/- 2Hz。风机频率在15~45Hz之间。
运行效果如下: