zxsxy8
級別: 正式會員
|
自己用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重新編輯 ] |
---|---|
|