feat(bktemp-updateLoopPI):Add argument for initial CV bias
authorSteven Baltakatei Sandoval <baltakatei@gmail.com>
Sun, 31 Oct 2021 04:08:05 +0000 (04:08 +0000)
committerSteven Baltakatei Sandoval <baltakatei@gmail.com>
Sun, 31 Oct 2021 04:08:05 +0000 (04:08 +0000)
- note: Additinoal argument helps prevent initial jerk caused by high
  initial error if set to correct value.

unitproc/bktemp-updateLoopPI

index d01e6b4b45b73fec7f9591a5accde4ee95cf0314..84adb77be28b03112923739f52deb023facfae23 100644 (file)
@@ -8,18 +8,20 @@ update_pi() {
     # Desc: Calculates control variable (CV) given setpoint (SP) and
     #   process variable (PV). Uses proportional integral (PI)
     #   control.
-    # Usage: update_pi arg1 arg2 arg3 arg4 arg5
-    # Version: 0.0.1
+    # Usage: update_pi arg1 arg2 arg3 arg4 arg5 arg6
+    # Version: 0.1.0
     # Input: arg1: path_loop_name (control loop name path)
     #        arg2: var_pv (process variable)
     #        arg3: var_sp (set point)
     #        arg4: tune_p (proportional tuning factor)
     #        arg5: tune_i (integral tuning factor)
+    #        arg6: var_cv_bias (control variable bias; prevents initial jerk)
     # Output: stdout: var_cv (control variable)
     #         file: path_var_pv
     #         file: path_var_sp
     #         file: path_tune_p
     #         file: path_tune_i
+    #         file: path_var_cv
     #         file: path_sum (saves updated sum state)
     # Example: update_pi /dev/shm/DC1.AC 1.0 3.0 2.0 3.0 
     # Depends: bc, gnu coreutils 8.30, yell(), try()
@@ -55,6 +57,10 @@ update_pi() {
        tune_i="$5";
     fi;
 
+    path_var_cv="$path_loop_name".cv
+
+    var_cv_bias="$6";
+    
     path_sum="$path_loop_name".sum
     if [[ -f "$path_sum" ]]; then
        sum="$(cat "$path_sum" | head -n1)";
@@ -65,6 +71,7 @@ update_pi() {
     #yell "DEBUG:path_loop_name:$path_loop_name";
     #yell "DEBUG:var_pv:$var_pv";
     #yell "DEBUG:var_sp:$var_sp";
+    #yell "DEBUG:var_cv:$var_cv";
     #yell "DEBUG:tune_p:$tune_p";
     #yell "DEBUG:tune_i:$tune_i";
     
@@ -76,7 +83,7 @@ update_pi() {
     #yell "DEBUG:term_p:$term_p";
     term_i="$(try echo "$tune_i * $sum" | bc -l)";
     #yell "DEBUG:term_i:$term_i";
-    var_cv="$(try echo "$term_p + $term_i" | bc -l)";
+    var_cv="$(try echo "$term_p + $term_i + $var_cv_bias" | bc -l)";
     #yell "DEBUG:var_cv:$var_cv";
     
     # Write variables to memory
@@ -85,6 +92,7 @@ update_pi() {
     echo "$var_pv" > "$path_var_pv";
     echo "$tune_p" > "$path_tune_p";
     echo "$tune_i" > "$path_tune_i";
+    echo "$var_cv" > "$path_var_cv";
 
     # Output control variable to stdout
     echo "$var_cv";
@@ -99,42 +107,43 @@ var_pv=1.0;
 var_sp=2.0;
 tune_p=1.0;
 tune_i=0.1;
+var_cv_init=1000;
 try rm "$path_loop_name"*
 
 var_pv=4.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=4.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=4.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=4.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=4.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=1.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=1.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=1.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 var_pv=1.0;
-output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" | tail -n1)";
+output="$(update_pi "$path_loop_name" "$var_pv" "$var_sp" "$tune_p" "$tune_i" "$var_cv_init" | tail -n1)";
 yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)";
 yell "DEBUG:output:$output";
 #==END Example code==