POSITION_TOLERANCE = 50 def is_manual_mode(): """ return if operating in local mode. TODO: should be based on IO, not on robot flag. """ return robot.working_mode == "manual" def release_safety(): """ Release sefety signals acording to working mode """ if air_pressure_ok.take() != True: raise Exception("Cannot release safety: air preassure not ok") if n2_pressure_ok.take() != True: raise Exception("Cannot release safety: n2 pressure not ok") auto = not is_manual_mode() if auto: if feedback_psys_safety.read() == False: release_psys() time.sleep(0.5) if feedback_psys_safety.read() == False: raise Exception("Cannot enable power: check doors") if feedback_local_safety.read() == False: release_local() time.sleep(0.5) if feedback_local_safety.read() == False: raise Exception("Cannot enable power: check sample changer emergency stop button") def enable_motion(): """ Check safety and enable arm power if in remote mode """ release_safety() system_check(robot_move=True) auto = not is_manual_mode() if auto: if not robot.state.isNormal(): raise Exception("Cannot enable power: robot state is " + str(robot.state)) robot.enable() def wait_end_of_move(): robot.update() while (not robot.settled) or (not robot.empty) or (not robot.isReady()) : time.sleep(0.01) def move_to_home(): #robot.reset_motion("jHome") robot.movej("pHome", robot.tool , DESC_SCAN) wait_end_of_move() def move_to_laser(from_point = "pHome"): robot.reset_motion() tool = robot.tool d = robot.get_distance_to_pnt("pLaser") if d<0: raise Exception ("Error calculating distance to laser: " + str(d)) if d6): raise Exception ("Invalid segment: " + str(segment)) if (puck<=0) or (puck >5): raise Exception ("Invalid puck: " + str(puck)) if (sample<=0) or (sample >16): raise Exception ("Invalid sample: " + str(sample)) if get_puck_dev(segment, puck).isDisabled(): raise Exception ("Puck is disabled") def assert_valid_sample(sample): if (sample<=0) or (sample >16): raise Exception ("Invalid sample: " + str(sample)) def get_puck_name(segment, puck): try: assert_valid_address(segment, puck, 1) if type(segment) is int: segment = chr( ord('A') + (segment-1)) elif is_string(segment): segment = segment.upper() else: return None return segment + str(puck) except: return None def get_sample_name(segment, puck, sample): puck_name = get_puck_name(segment, puck) return None if (puck_name is None) else puck_name + str(sample) def is_pin_detected_in_scanner(): samples = [] for i in range(10): samples.append(laser_distance.read()) time.sleep(0.05) av = mean(samples) for s in samples: if s<=1: return False if abs(s-av) > 0.1: return False return True