fix(bktemp-updateloopPI):Add integral sum spike dampener
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Sun, 31 Oct 2021 22:16:49 +0000 (22:16 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Sun, 31 Oct 2021 22:16:49 +0000 (22:16 +0000)
unitproc/bktemp-updateLoopPI

index bda89eee695f9a3be4de8a45812f2657df51ad90..61f7e8d3e4780d4f1602f74a90b148a736d5fd50 100644 (file)
@@ -9,7 +9,7 @@ update_pi() {
     #   process variable (PV). Uses proportional integral (PI)
     #   control.
     # Usage: update_pi arg1 arg2 arg3 arg4 arg5 arg6
     #   process variable (PV). Uses proportional integral (PI)
     #   control.
     # Usage: update_pi arg1 arg2 arg3 arg4 arg5 arg6
-    # Version: 0.1.1
+    # Version: 0.1.2
     # Input: arg1: path_loop_name (control loop name path)
     #        arg2: var_pv (process variable)
     #        arg3: var_sp (set point)
     # Input: arg1: path_loop_name (control loop name path)
     #        arg2: var_pv (process variable)
     #        arg3: var_sp (set point)
@@ -28,7 +28,7 @@ update_pi() {
     local var_sp var_pv var_cv;
     local tune_p tune_i;
     local term_p term_i;
     local var_sp var_pv var_cv;
     local tune_p tune_i;
     local term_p term_i;
-    local error sum;
+    local error sum sum_cand;
     local path_sum path_var_sp path_var_pv path_tune_p path_tune_i;
 
     path_loop_name="$1";
     local path_sum path_var_sp path_var_pv path_tune_p path_tune_i;
 
     path_loop_name="$1";
@@ -79,8 +79,13 @@ update_pi() {
     
     error="$(try echo "$var_sp - $var_pv" | bc -l)";
     #yell "DEBUG:error:$error";
     
     error="$(try echo "$var_sp - $var_pv" | bc -l)";
     #yell "DEBUG:error:$error";
-    sum="$(try echo "$sum + $error" | bc -l)";
+    sum_cand="$(try echo "$sum + $error" | bc -l)";
     #yell "DEBUG:sum:$sum";
     #yell "DEBUG:sum:$sum";
+    if [[ "$(try echo "$sum_cand > 2 * $sum " | bc -l)" -eq 1 ]]; then
+       sum="$(try echo "$sum + l($error)" | bc -l)"; # dampen integral sum spikes
+    else
+       sum="$sum_cand";
+    fi;
     term_p="$(try echo "$tune_p * $error" | bc -l)";
     #yell "DEBUG:term_p:$term_p";
     term_i="$(try echo "$tune_i * $sum" | bc -l)";
     term_p="$(try echo "$tune_p * $error" | bc -l)";
     #yell "DEBUG:term_p:$term_p";
     term_i="$(try echo "$tune_i * $sum" | bc -l)";