zxsxy8
级别: 正式会员
精华主题: 0
发帖数量: 16 个
工控威望: 90 点
下载积分: 1278 分
在线时间: 9(小时)
注册时间: 2022-11-19
最后登录: 2024-01-13
查看zxsxy8的 主题 / 回贴
楼主  发表于: 2023-06-10 16:20
自己用SCL编写了一个流量累计块,实现功能如下:
毫秒流量累积值计数达到Hz 时(比如循环中断为100ms,Hz=10时,把毫秒流量累积值传送给秒累计值,同时清零),秒流量累计值到达60时,传送给分钟流量累计值,以此类推计算最终的流量累积输出。程序如下,执行时总是不能正确输出,请大侠们指教!
    
Input                                
     AIW_IN    Int        流量计瞬时流量模拟值
     Reset           Bool            为1时,累积值清零
     Hz            Int            每秒采样次数
     Unit_V    Real       流量计最大流量值
Output                                
     Accu_Valu  Real             流量累积输出
     Unit_C    Real        瞬时流量值工程量
InOut                                
     ms_V          Real        毫秒累积流量
     s_V          Real        秒累积流量
     min_V       Real        分钟累积流量
     h_V          Real        小时累积流量
     d_V          Real        天累积流量
Static                                
   ms      Int        毫秒计数
      s      Int        秒计数
   min      Int        分钟计数
      h      Int        小时计数
      d      Int        天计数
Unit_C_S  Real        采样时间流量值


//瞬时模拟量值转换为瞬时工程量值
#Unit_C:=SCALE_X(MIN:=0.0, VALUE:=NORM_X(MIN := 0, VALUE := #AIW_IN, MAX := 27648), MAX:=#Unit_V);

//瞬时工程量值转为采样时间流量值
#Unit_C_S := #Unit_C / 36000.0;

//毫秒流量累积
#ms_V := #ms_V+#Unit_C_S;
#ms += 1;
IF #ms =#Hz
THEN
    #s += 1;
    #s_V := #ms_V;
    #ms := 0;
    #ms_V := 0.0;
END_IF;

//秒流量累积
#s_V := #s_V+ #ms_V;
IF  #s = 60
THEN
    #min += 1;
    #min_V := #s_V;
    #s := 0;
    #s_V := 0.0;
END_IF;

//分钟流量累积
#min_V := #min_V +#s_V;
IF #min = 60
THEN
    #h += 1;
    #h_V := #min_V;
    #min := 0;
    #min_V := 0.0;
END_IF;

//小时流量累积
#h_V := #h_V+#min_V;
IF #h = 24
THEN
    #d += 1;
    #d_V := #h_V;
    #h := 0;
    #h_V := 0.0;
END_IF;
#d_V += #h_V;

//清零
IF #Reset = 1
THEN
    #ms := 0;
    #ms_V := 0.0;
    #s := 0;
    #s_V := 0.0;
    #min := 0;
    #min_V := 0.0;
    #h := 0;
    #h_V := 0.0;
    #d_V := 0.0;
    #Accu_Value := 0.0;
END_IF;
//流量累积输出
#Accu_Value := (#ms_V + #s_V + #min_V + #h_V+ #d_V);
[ 此帖被zxsxy8在2023-06-10 16:45重新编辑 ]