自己用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重新编辑 ]