#!/usr/bin/env python # $Header: https://redoubt.ligo-wa.caltech.edu/svn/cds_user_apps/trunk/cds/h1/scripts/cp3_fill.py 14836 2016-12-16 20:44:48Z patrick.thomas@LIGO.ORG $ # Patrick J. Thomas, California Institute of Technology, LIGO Hanford # See ECR E1600324. import argparse from decimal import * from epics import caget, caput import time from timeit import default_timer def main(): msg = 'Starting CP3 fill. ' parser = argparse.ArgumentParser(description='CP3 fill') parser.add_argument('llcv_fill_pos', metavar='POS', help='LLCV fill position (%% open)') parser.add_argument('tc_thresh', metavar='THRESH', help='Thermocouple threshold (deg. C)') parser.add_argument('fill_timeout', metavar='TIMEOUT', help='Fill timeout (seconds)') args = parser.parse_args() llcv_fill_pos = Decimal(args.llcv_fill_pos) tc_thresh = Decimal(args.tc_thresh) fill_timeout = Decimal(args.fill_timeout) tc_a_pv_name = 'H0:VAC-MY_CP3_TE202A_DISCHARGE_TEMP_DEGC' tc_a_err_pv_name = 'H0:VAC-MY_CP3_TE202A_DISCHARGE_TEMP_DEGC_ERROR' tc_b_pv_name = 'H0:VAC-MY_CP3_TE202B_DISCHARGE_TEMP_DEGC' tc_b_err_pv_name = 'H0:VAC-MY_CP3_TE202B_DISCHARGE_TEMP_DEGC_ERROR' press_pv_name = 'H0:VAC-MY_CP3_PT201_DISCHARGE_PRESS_PSIG' press_err_pv_name = 'H0:VAC-MY_CP3_PT201_DISCHARGE_PRESS_PSIG_ERROR' llcv_enable_pv_name = 'H0:VAC-MY_CP3_XV200_LLCV_ENABLE_CTRL' llcv_ctrl_pv_name = 'H0:VAC-MY_CP3_200_LLCV_CTRL' llcv_pos_pv_name = 'H0:VAC-MY_CP3_200_LLCV_MAN_POS_PCT' # TC A tc_a_invalid = False tc_a_err = caget(tc_a_err_pv_name) tc_a = caget(tc_a_pv_name) if tc_a_err is None: tc_a_invalid = True msg += 'TC A error. ' elif tc_a_err == 1: tc_a_invalid = True msg += 'TC A error. ' elif tc_a is None: tc_a_invalid = True msg += 'TC A error. ' elif tc_a < -20 or 40 < tc_a: tc_a_invalid = True msg += 'TC A error. ' elif tc_a <= tc_thresh: tc_a_invalid = True msg += 'TC A error. ' # TC B tc_b_invalid = False tc_b_err = caget(tc_b_err_pv_name) tc_b = caget(tc_b_pv_name) if tc_b_err is None: tc_b_invalid = True msg += 'TC B error. ' elif tc_b_err == 1: tc_b_invalid = True msg += 'TC B error. ' elif tc_b is None: tc_b_invalid = True msg += 'TC B error. ' elif tc_b < -20 or 40 < tc_b: tc_b_invalid = True msg += 'TC B error. ' elif tc_b <= tc_thresh: tc_b_invalid = True msg += 'TC B error. ' if tc_a_invalid == True and tc_b_invalid == True: msg += 'Fill aborted.' return msg # Discharge pressure press_err = caget(press_err_pv_name) press = caget(press_pv_name) if press_err is None: msg += 'Pressure error. Fill aborted.' return msg if press_err == 1: msg += 'Pressure error. Fill aborted.' return msg if press is None: msg += 'Pressure error. Fill aborted.' return msg if press > 2: msg += 'Over pressure. Fill aborted.' return msg # Reads LLCV initial position llcv_init_pos = caget(llcv_pos_pv_name) if llcv_init_pos is None: msg += 'Failed reading LLCV position. Fill aborted.' return msg # Enables LLCV try: rc = caput(llcv_enable_pv_name, 1, wait=True) except Exception as e: msg += 'Failed enabling LLCV. Fill aborted.' return msg if rc is None: msg += 'Failed enabling LLCV. Fill aborted.' return msg else: msg += 'LLCV enabled. ' # Sets LLCV to manual control try: rc = caput(llcv_ctrl_pv_name, 0, wait=True) except Exception as e: msg += 'Failed setting LLCV to manual control. Fill aborted.' return msg if rc is None: msg += 'Failed setting LLCV to manual control. Fill aborted.' return msg else: msg += 'LLCV set to manual control. ' # Sets LLCV to fill position try: rc = caput(llcv_pos_pv_name, llcv_fill_pos, wait=True) except Exception as e: msg += 'Failed setting LLCV to {}% open. Fill aborted.'.format(llcv_fill_pos) return msg if rc is None: msg += 'Failed setting LLCV to {}% open. Fill aborted.'.format(llcv_fill_pos) return msg else: msg += 'LLCV set to {}% open. '.format(llcv_fill_pos) start_time = default_timer() while 1: # TC A if tc_a_invalid == False: tc_a_err = caget(tc_a_err_pv_name) tc_a = caget(tc_a_pv_name) if tc_a_err is None: tc_a_invalid = True msg += 'TC A error. ' elif tc_a_err == 1: tc_a_invalid = True msg += 'TC A error. ' elif tc_a is None: tc_a_invalid = True msg += 'TC A error. ' # TC B if tc_b_invalid == False: tc_b_err = caget(tc_b_err_pv_name) tc_b = caget(tc_b_pv_name) if tc_b_err is None: tc_b_invalid = True msg += 'TC B error. ' elif tc_b_err == 1: tc_b_invalid = True msg += 'TC B error. ' elif tc_b is None: tc_b_invalid = True msg += 'TC B error. ' if tc_a_invalid == True and tc_b_invalid == True: msg += 'Fill stopped. ' break # Discharge pressure press_err = caget(press_err_pv_name) press = caget(press_pv_name) if press_err is None: msg += 'Pressure error. Fill stopped. ' break if press_err == 1: msg += 'Pressure error. Fill stopped. ' break if press is None: msg += 'Pressure error. Fill stopped. ' break if press > 2: msg += 'Over pressure. Fill stopped. ' break # Fill completed if tc_a_invalid == False and tc_a <= tc_thresh: current_time = default_timer() elapsed_time = current_time - start_time msg += 'Fill completed in {} seconds. '.format(int(elapsed_time)) if tc_b_invalid == False and tc_b > tc_thresh: msg += 'TC B did not register fill. ' break if tc_b_invalid == False and tc_b <= tc_thresh: current_time = default_timer() elapsed_time = current_time - start_time msg += 'Fill completed in {} seconds. '.format(int(elapsed_time)) if tc_a_invalid == False and tc_a > tc_thresh: msg += 'TC A did not register fill. ' break # Timeout current_time = default_timer() elapsed_time = current_time - start_time if elapsed_time > fill_timeout: msg += 'Fill not completed after {} seconds. '.format(fill_timeout) break time.sleep(1) # Sets LLCV back to initial position try: rc = caput(llcv_pos_pv_name, llcv_init_pos, wait=True) except Exception as e: msg += 'Failed setting LLCV back to {}% open.'.format(llcv_init_pos) if rc is None: msg += 'Failed setting LLCV back to {}% open.'.format(llcv_init_pos) else: msg += 'LLCV set back to {}% open.'.format(llcv_init_pos) return msg msg = main() print msg