首页 > 编程语言 >ABB freelance下使用ST编程计算日均值

ABB freelance下使用ST编程计算日均值

时间:2024-11-22 09:29:02浏览次数:1  
标签:count ABB 59 hour .. freelance ST end sum

最近现场需要在ABB DCS上做日均值计算,从前一天上午8点到第二天上午7点59分59秒,一秒一个数据,最后求日均值。 freelance自定义功能块对数组总的元素个数有一个限制,无论是组态模拟控制器,还是组态实际控制器,我在做练习的时候遇见过,于是就减少总的数组元素数量。 基本思路是这样子: 1. 使用hour_Pv[0..59,0..59]来记录当前一个小时每一秒的检测值;整点时,把这个数组中所有成员数据清零。 2.使用hour_sum[0..23]来存放24个小时的每一个小时的累计值,每天8点整将这个数组成员全部清零。 3.使用hour_count[0..23]来存放24个小时的每一个小时不为0的数据的数量,为0的数据不参与均值计算,每天8点整将这个数组成员全部清零。 4. 计算hour_sum成员之和除以hour_count成员之和。 在前面项目基础上,新建一个用户自定义类

 

整个ST程序如下: FUNCTION_BLOCK AVG_Day_ST   VAR_INPUT     Hour : INT;     Minute : INT;     Second : INT;     PV : REAL; END_VAR   VAR_OUTPUT     Day_Avg : REAL; END_VAR   (* PARA_VIS     ClassName : TEXT;     TagName : TEXT;     ShortText : TEXT;     LongText : TEXT;     SelState : BOOL; END_VAR *)   var     hour_Pv:array[0..59,0..59] of real;     (*day_Pv2:array[8..15,0..59,0..59] of real;     day_Pv3:array[16..18,0..50,0..50] of real;     day_Pv3:array[16..23,0..59,0..59] of real; *)     hour_sum:array[0..23] of real;     hour_count:array[0..23] of real;     sum,count:real;     i,j,k:int; end_var;  if Hour=8 and Minute=0 and Second=0 then     for i:=0 to 23 do         hour_sum[i]:=0.0;         hour_count[i]:=0.0;     end_for; end_if;   if Minute=0 and Second=0 then     for i:=0 to 59 do        for j:=0 to 59 do            hour_Pv[i,j]:=0.0;        end_for;      end_for; end_if; hour_Pv[Minute,Second]:=PV; hour_sum[Hour]:=0.0; hour_count[Hour]:=0.0; for i:=0 to 59 do     for j:=0 to 59 do         hour_sum[Hour]:= hour_sum[Hour]+hour_Pv[i,j];         if  hour_Pv[i,j]<>0.0 then             hour_count[Hour]:= hour_count[Hour]+1.0;         end_if;     end_for; end_for; sum:=0.0; count:=0.0; for i:=0 to 23 do     sum:=sum+hour_sum[i];     count:=count+hour_count[i]; end_for;   if count<>0.0 then     Day_Avg:=sum/count; end_if;     END_FUNCTION_BLOCK 我没有具体测试,应该是没有问题的。

标签:count,ABB,59,hour,..,freelance,ST,end,sum
From: https://www.cnblogs.com/fishingsriver/p/18562050

相关文章