From 606050ae80091d4c05e5ece1ba78fb4d67ee96e2 Mon Sep 17 00:00:00 2001 From: gac-S_Changer Date: Wed, 30 May 2018 09:55:42 +0200 Subject: [PATCH] --- plugins/MXSC-1.9.0.jar | Bin 74216 -> 74338 bytes script/devices/RobotSC.py | 35 ++++++----- script/devices/RobotTCP.py | 87 +++++++++++++++++--------- script/local.py | 3 +- script/motion/mount.py | 2 +- script/motion/unmount.py | 4 +- script/test/TestCmdSynchronization.py | 5 ++ 7 files changed, 87 insertions(+), 49 deletions(-) create mode 100644 script/test/TestCmdSynchronization.py diff --git a/plugins/MXSC-1.9.0.jar b/plugins/MXSC-1.9.0.jar index e67d2486f465443150a4d4469f1a49ad4ef79ce4..57618ab215a23ceb233ac662447aa08e07798bc7 100644 GIT binary patch delta 16556 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: - self.current_task = task - log("Task detected: " + str(self.current_task), False) - return task - return None + return self.current_task + + def check_task(self): + if self.current_task is None: + for task in self.high_level_tasks: + if self.get_task_status(task)[0]>=0: + self.current_task = task + log("Task detected: " + str(self.current_task), False) + return self.current_task - def wait_task_finished (self): - while get_task() != None: - time.sleep(0.01) + def wait_task_finished (self, polling = None): + cur_polling = self.polling + if polling is not None: + self.polling = polling + try: + while self.get_task() != None: + time.sleep(self.polling_interval) + finally: + if polling is not None: + self.polling = cur_polling def assert_no_task(self): - task = self.get_task() + task = self.check_task() if task != None: raise Exception("Ongoing task: " + task) diff --git a/script/local.py b/script/local.py index 874d4a7..0e87ed0 100644 --- a/script/local.py +++ b/script/local.py @@ -64,8 +64,7 @@ except: print >> sys.stderr, traceback.format_exc() try: - robot.setPolling(DEFAULT_ROBOT_POLLING) - robot.high_level_tasks = ["getDewar", "putDewar", "putGonio", "getGonio", "robotRecover", "moveDewar", "movePark"] + robot.setPolling(DEFAULT_ROBOT_POLLING) robot.set_tool(TOOL_CALIBRATION) robot.set_motors_enabled(True) robot.set_joint_motors_enabled(True) diff --git a/script/motion/mount.py b/script/motion/mount.py index 6907f08..b595560 100644 --- a/script/motion/mount.py +++ b/script/motion/mount.py @@ -26,7 +26,7 @@ def mount(segment, puck, sample, force=False): location = get_current_point() print "Location: " + location - robot.move_dewar() + robot.move_dewar_wait() try: robot.get_dewar(segment, puck, sample) except: diff --git a/script/motion/unmount.py b/script/motion/unmount.py index e151134..ab9640e 100644 --- a/script/motion/unmount.py +++ b/script/motion/unmount.py @@ -32,13 +32,13 @@ def unmount(segment, puck, sample, force=False): raise try: - robot.move_dewar() + robot.move_dewar_wait() except: #TODO: recover raise try: - robot.pet_dewar(segment, puck, sample) + robot.put_dewar(segment, puck, sample) except: #robot.move_dewar() raise \ No newline at end of file diff --git a/script/test/TestCmdSynchronization.py b/script/test/TestCmdSynchronization.py new file mode 100644 index 0000000..41a51e2 --- /dev/null +++ b/script/test/TestCmdSynchronization.py @@ -0,0 +1,5 @@ +enable_motion() +while True: + + robot.move_dewar_wait() + robot.move_park()