加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ABBAC900F学习笔记332:自定义功能块求日均值

(2024-11-22 09:01:02)
标签:

abb

freelance

st编程

计算日均值

分类: ABBDCS
这一篇学习笔记我在博客园发表过,这里再记录一次。
最近现场需要在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成员之和。
在前面项目基础上,新建一个用户自定义类
ABBAC900F学习笔记332:自定义功能块求日均值



整个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
我没有具体测试,应该是没有问题的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有