X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/849106f7246e47bc077d7f3b8228cec717a8e63d..26f0533782d8c57fb95b8df4f55057edcbf17703:/unitproc/bktemp-updateLoopPI diff --git a/unitproc/bktemp-updateLoopPI b/unitproc/bktemp-updateLoopPI deleted file mode 100644 index 9054b90..0000000 --- a/unitproc/bktemp-updateLoopPI +++ /dev/null @@ -1,160 +0,0 @@ -#!/bin/bash - -#==BEGIN function definition== -yell() { echo "$0: $*" >&2; } # print script path and all args to stderr -die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status -try() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails -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 arg6 - # Version: 0.1.3 - # 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() - local var_sp var_pv var_cv; - local tune_p tune_i; - local term_p term_i; - local error sum sum_cand; - local path_sum path_var_sp path_var_pv path_tune_p path_tune_i; - - path_loop_name="$1"; - - path_var_pv="$path_loop_name".pv - var_pv="$2"; # read provided process variable - - path_var_sp="$path_loop_name".sp - if [[ -f "$path_var_sp" ]]; then - var_sp="$(cat "$path_var_sp" | head -n1)"; - else - var_sp="$3"; - fi; - - path_tune_p="$path_loop_name".tune_p - if [[ -f "$path_tune_p" ]]; then - tune_p="$(cat "$path_tune_p" | head -n1)"; - else - tune_p="$4"; - fi; - - path_tune_i="$path_loop_name".tune_i - if [[ -f "$path_tune_i" ]]; then - tune_i="$(cat "$path_tune_i" | head -n1)"; - else - tune_i="$5"; - fi; - - path_var_cv="$path_loop_name".cv - - path_var_cv_bias="$path_loop_name".cv_bias - var_cv_bias="$6"; - - path_sum="$path_loop_name".sum - if [[ -f "$path_sum" ]]; then - sum="$(cat "$path_sum" | head -n1)"; - else - sum=0; - fi; - - #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:var_cv_bias:$var_cv_bias"; - #yell "DEBUG:tune_p:$tune_p"; - #yell "DEBUG:tune_i:$tune_i"; - - error="$(try echo "$var_sp - $var_pv" | bc -l)"; - #yell "DEBUG:error:$error"; - sum_cand="$(try echo "$sum + $error" | bc -l)"; - #yell "DEBUG:sum:$sum"; - if [[ "$(try echo "$sum_cand > 2 * $sum " | bc -l)" -eq 1 ]]; then - sum="$(try echo "$sum + l($error + 1)" | 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)"; - #yell "DEBUG:term_i:$term_i"; - var_cv="$(try echo "$term_p + $term_i + $var_cv_bias" | bc -l)"; - #yell "DEBUG:var_cv:$var_cv"; - - # Write variables to memory - echo "$sum" > "$path_sum"; - echo "$var_sp" > "$path_var_sp"; - echo "$var_pv" > "$path_var_pv"; - echo "$tune_p" > "$path_tune_p"; - echo "$tune_i" > "$path_tune_i"; - echo "$var_cv" > "$path_var_cv"; - echo "$var_cv_bias" > "$path_var_cv_bias"; - - # Output control variable to stdout - echo "$var_cv"; - - #yell "DEBUG:=============END_ROUND==============="; -} # update specified PI loop -#==END function definition== - -#==BEGIN Example code== -path_loop_name="/tmp/DC1.AC"; -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" "$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" "$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" "$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" "$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" "$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" "$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" "$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" "$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" "$var_cv_init" | tail -n1)"; -yell "DEBUG:sum:$(cat "$path_loop_name".sum | head -n1)"; -yell "DEBUG:output:$output"; -#==END Example code== - -# Author: Steven Baltakatei Sandoval -# License: GPLv3+