自己用SCL編寫了一個流量累計塊,實現(xiàn)功能如下:
毫秒流量累積值計數(shù)達(dá)到Hz 時(比如循環(huán)中斷為100ms,Hz=10時,把毫秒流量累積值傳送給秒累計值,同時清零),秒流量累計值到達(dá)60時,傳送給分鐘流量累計值,以此類推計算最終的流量累積輸出。程序如下,執(zhí)行時總是不能正確輸出,請大俠們指教!
Input
AIW_IN Int 流量計瞬時流量模擬值
Reset Bool 為1時,累積值清零
Hz Int 每秒采樣次數(shù)
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 毫秒計數(shù)
s Int 秒計數(shù)
min Int 分鐘計數(shù)
h Int 小時計數(shù)
d Int 天計數(shù)
Unit_C_S Real 采樣時間流量值
//瞬時模擬量值轉(zhuǎn)換為瞬時工程量值
#Unit_C:=SCALE_X(MIN:=0.0, VALUE:=NORM_X(MIN := 0, VALUE := #AIW_IN, MAX := 27648), MAX:=#Unit_V);
//瞬時工程量值轉(zhuǎn)為采樣時間流量值
#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重新編輯 ]