S7-SCL 水厂进水阀门模糊控制

2023-10-24 14:49:34 浏览数 (2)

系统稳定运行3年多。不时还有朋友咨询。就朋友们问的问题做个总结。

  1. 为什么程序里阀门开度是5%?答:这是厂家阀门的特征决定的。他们的阀门5%开度以下没法控制,并且时间观察下来,最新开度设到8%左右更加合理。
  1. 快调和慢调范围怎么确定?其实这个要根据实际情况来,这个跟进水和出水都有关联,系统运行1个月左右,就可以得出经验值了。主要目的是为了不对水管造成冲击,不仅仅是为了实际水位很准确。
  1. 数据采集是自己写的。网关应用之加压站监控

网关应用之 多协议转MQTT 以下是以前内容: S7-SCL 模糊阀门控制

用于水厂进水阀门控制

代码语言:javascript复制
//1分钟脉冲
#T1(IN := #T2.Q,
    PT := T#30s,
    Q => #T1_state,
    ET => #T1_TIME);
#T2(IN :=NOT #T1.Q,
    PT := T#30S,
    Q => #T2_STATE,
    ET => #T2_Time);
#MinTrig(CLK:=#T1.Q,Q=>#"1minP"
);
//调节范围计算
#DownFast := #水位设定值 * (1.0   REAL#0.03);     //相当于HiHi;现在用不着
#DownSlow := #水位设定值 * (1.0   REAL#0.02);     //相当于Hi;到达就关阀
//#水位设定值
IF #水位设定值 * #微调范围 < 0.05 THEN            //主要是避免死区太小,阀门频繁开闭
    #UpSlow := #水位设定值 - 0.05;                //相当于设定值是2米以下
ELSE
    #UpSlow := #水位设定值 * (1.0 - #微调范围);  //初始值是0.05
END_IF;

IF #水位设定值 * #快调范围 < 0.1 THEN            //主要是避免调节区范围太小,阀门频繁开闭
    #UpFast := #水位设定值 - 0.1;                // 
ELSE
    #UpFast := #水位设定值 * (1.0 - #快调范围);        //初始值是0.15
END_IF;
//模拟调试
IF #ModSim THEN
    #水位值 := #水位模拟值;
ELSE
    #水位值 := #水位实际值;
END_IF;
//清水阀 --- 自动开度  现场使用的比例阀,0--5%之间无法调节
REGION 阀门正常调节
    IF #"1minP" AND #ManAutoModel THEN
        IF #水位值 < #UpFast THEN  //此区间阀门快速打开
            IF #Q调节阀给定<0.7*#调节阀自动开度极限 THEN
                #Q调节阀给定 := 0.7*#调节阀自动开度极限;
            ELSE
                #Q调节阀给定 := #Q调节阀给定   #快调值;
            END_IF;       
                
          
            ELSIF #水位值 >= #UpFast AND #水位值 < #UpSlow THEN //慢速调整阀门开度
                IF #Q调节阀给定 > 5 THEN                         //如果阀门本来就是打开就慢慢关闭到5%
                    #Q调节阀给定 := #Q调节阀给定-#慢调值;
                ELSE                                            //如果阀门本来是关闭就直接打开到5%<主要是从高水位降到低水位时>
                    #Q调节阀给定 := 5;
                END_IF;

            ELSIF #水位值 >= #UpSlow AND #水位值 <= #DownSlow THEN //此区间相当于死区;尽量保证阀门不动作;阀门开度为5%或者0
                IF  #Q调节阀给定 > 5 THEN
                    #Q调节阀给定 := 5;                               //2021优化,到达死区.如果阀门本来是打开状态就调整到阀门最小开度5%
                END_IF;
            ELSIF #水位值 > #DownSlow THEN
                #Q调节阀给定 := 0.0;//2021年优化;超过就DownSlow就直接关阀<现场阀门关不死,打开全关之后水位一个小时还是会上升0.4米左右>
                //并且现场的水位计超过3M,性能也不是很稳定
        END_IF;
    END_IF;
    
END_REGION
REGION 极端情况--自动状态下
    IF #Q调节阀给定 < 5.0 AND #Q调节阀给定 > 0.0 THEN //需要打开阀门时,开度最小是5%
        #Q调节阀给定 := 5.0; //开阀门时最少为5%,否则阀门会打不开,阀门会报警锁定.
    END_IF;
    IF #Q调节阀给定> #调节阀自动开度极限 OR #水位值<=#LOLO THEN  //保证最大开度在范围内;保证LOLO时,快速打开阀门
        #Q调节阀给定 := #调节阀自动开度极限;
    END_IF;
END_REGION
//清水阀手动设定开度 把手动调整到自动之后.
IF NOT #ManAutoModel  THEN
    #Q调节阀给定 := #ManulOpenDegree;
END_IF;

//水位过高,直接关阀;避免满池子.
    IF #水位值 >= #HIHI OR #Q调节阀给定 <= 0.0 THEN
        #Q调节阀给定 := 0.0;
        
    END_IF;

上面是WinFrm版本。下面是B/S版本

0 人点赞