From 962f94eee5e5c6e4410aef8b2cea762736c2cd2f Mon Sep 17 00:00:00 2001 From: Shreya Sutariya Date: Wed, 10 Dec 2025 14:44:01 +0000 Subject: [PATCH 1/3] added forward/reverse limit switch query tasks --- socs/agents/galil_axis/agent.py | 42 +++++++++++++++++++++++++++++++ socs/agents/galil_axis/drivers.py | 32 +++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/socs/agents/galil_axis/agent.py b/socs/agents/galil_axis/agent.py index 1b146dd43..6aea95d6e 100644 --- a/socs/agents/galil_axis/agent.py +++ b/socs/agents/galil_axis/agent.py @@ -1085,6 +1085,46 @@ def get_limitswitch_polarity(self, session, params): return True, f'Limit switch polarity is {status}' + @ocs_agent.param('axis', type=str) + def get_forward_limitswitch(self, session, params): + """get_forward_limitswitch(axis) + + **Task** - Returns forward limit switch state for a given axis. 1 means not triggered, 0 means triggered. + + Parameters: + axis (str): Axis to query (e.g. 'A') + """ + axis = params['axis'] + + with self.lock.acquire_timeout(timeout=5, job='get_forward_limitswitch') as acquired: + if not acquired: + self.log.warn(f"Could not start Task because {self.lock.job} is already running.") + return False, "Could not acquire lock." + + state, human_state = self.stage.get_forward_limitswitch(axis) + + return True, f"Axis {axis} forward limit: {human_state} (raw={state})" + + @ocs_agent.param('axis', type=str) + def get_reverse_limitswitch(self, sesion, params): + """get_reverse_limitswitch(axis) + + **Task** - Returns reverse limit switch state for a given axis. 1 means not triggered, 0 means triggered. + + Parameters: + axis (str): Axis to query (e.g. 'A') + """ + axis = params['axis'] + + with self.lock.acquire_timeout(timeout=5, job='get_reverse_limitswitch') as acquired: + if not acquired: + self.log.warn(f"Could not start Task because {self.lock.job} is already running.") + return False, "Could not acquire lock." + + state, human_state = self.stage.get_reverse_limitswitch(axis) + + return True, f"Axis {axis} reverse limit: {human_state} (raw={state})" + @ocs_agent.param('axis', type=str) def stop_axis_motion(self, session, params): """stop_axis_motion(axis) @@ -1374,6 +1414,8 @@ def main(args=None): agent.register_task('get_limitswitch_mode', galilaxis_agent.get_limitswitch_mode) agent.register_task('set_limitswitch_polarity', galilaxis_agent.set_limitswitch_polarity) agent.register_task('get_limitswitch_polarity', galilaxis_agent.get_limitswitch_polarity) + agent.register_task('get_forward_limitswitch', galilaxis_agent.get_forward_limitswitch) + agent.register_task('get_reverse_limitswitch', galilaxis_agent.get_reverse_limitswitch) agent.register_task('set_gearing', galilaxis_agent.set_gearing) agent.register_task('set_gearing_ratio', galilaxis_agent.set_gearing_ratio) agent.register_task('get_gearing_ratio', galilaxis_agent.get_gearing_ratio) diff --git a/socs/agents/galil_axis/drivers.py b/socs/agents/galil_axis/drivers.py index 49ac7260d..5f6bed1ba 100644 --- a/socs/agents/galil_axis/drivers.py +++ b/socs/agents/galil_axis/drivers.py @@ -475,6 +475,38 @@ def get_limitswitch_polarity(self): return state, status + def get_forward_limitswitch(self, axis): + """ + Return forward limit switch state for a given axis. 1 means not triggered, 0 means triggered (no motion allowed). + """ + resp = self.galil_command("MG _LF", axis=axis, expect_response=True) + try: + state = int(float(resp)) + except Exception: + print(f"Unexpected response from MG _LF{axis}: {resp}") + return None, "unknown" + + # --- Interpret raw + human_state = "not triggered" if state == 1 else "triggered" if state == 0 else f"unknown ({state})" + + return state, human_state + + def get_reverse_limitswitch(self, axis): + """ + Return reverse limit switch state for a given axis. 1 means not triggered, 0 means triggered. + """ + resp = self.galil_command("MG _LR", axis=axis, expect_response=True) + try: + state = int(float(resp)) + except Exception: + print(f"Unexpected response from MG _LR{axis}: {resp}") + return None, "unknown" + + # --- Interpret raw + human_state = "not triggered" if state == 1 else "triggered" if state == 0 else f"unknown ({state})" + + return state, human_state + def stop_motion(self, axis): """ Stop motion. From 5ab160c3460a18b479c169df3df15e4aa70a7e42 Mon Sep 17 00:00:00 2001 From: Shreya Sutariya Date: Mon, 15 Dec 2025 17:29:55 +0000 Subject: [PATCH 2/3] added query limit switches task --- socs/agents/galil_axis/agent.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/socs/agents/galil_axis/agent.py b/socs/agents/galil_axis/agent.py index 6aea95d6e..84b65f058 100644 --- a/socs/agents/galil_axis/agent.py +++ b/socs/agents/galil_axis/agent.py @@ -1102,7 +1102,15 @@ def get_forward_limitswitch(self, session, params): return False, "Could not acquire lock." state, human_state = self.stage.get_forward_limitswitch(axis) - + + # store data + session.data = { + 'axis': axis, + 'raw_state': state, + 'human_state': human_state, + 'timestamp': time.time(), + } + return True, f"Axis {axis} forward limit: {human_state} (raw={state})" @ocs_agent.param('axis', type=str) @@ -1123,6 +1131,14 @@ def get_reverse_limitswitch(self, sesion, params): state, human_state = self.stage.get_reverse_limitswitch(axis) + # store data + session.data = { + 'axis': axis, + 'raw_state': state, + 'human_state': human_state, + 'timestamp': time.time(), + } + return True, f"Axis {axis} reverse limit: {human_state} (raw={state})" @ocs_agent.param('axis', type=str) From 9490ab90e10a6e2b79f0935c7fdeceeeeeacfaf8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 17:35:48 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- socs/agents/galil_axis/agent.py | 24 ++++++++++++------------ socs/agents/galil_axis/drivers.py | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/socs/agents/galil_axis/agent.py b/socs/agents/galil_axis/agent.py index 84b65f058..2cd4ef10c 100644 --- a/socs/agents/galil_axis/agent.py +++ b/socs/agents/galil_axis/agent.py @@ -1102,15 +1102,15 @@ def get_forward_limitswitch(self, session, params): return False, "Could not acquire lock." state, human_state = self.stage.get_forward_limitswitch(axis) - + # store data session.data = { - 'axis': axis, - 'raw_state': state, - 'human_state': human_state, - 'timestamp': time.time(), + 'axis': axis, + 'raw_state': state, + 'human_state': human_state, + 'timestamp': time.time(), } - + return True, f"Axis {axis} forward limit: {human_state} (raw={state})" @ocs_agent.param('axis', type=str) @@ -1118,7 +1118,7 @@ def get_reverse_limitswitch(self, sesion, params): """get_reverse_limitswitch(axis) **Task** - Returns reverse limit switch state for a given axis. 1 means not triggered, 0 means triggered. - + Parameters: axis (str): Axis to query (e.g. 'A') """ @@ -1133,14 +1133,14 @@ def get_reverse_limitswitch(self, sesion, params): # store data session.data = { - 'axis': axis, - 'raw_state': state, - 'human_state': human_state, - 'timestamp': time.time(), + 'axis': axis, + 'raw_state': state, + 'human_state': human_state, + 'timestamp': time.time(), } return True, f"Axis {axis} reverse limit: {human_state} (raw={state})" - + @ocs_agent.param('axis', type=str) def stop_axis_motion(self, session, params): """stop_axis_motion(axis) diff --git a/socs/agents/galil_axis/drivers.py b/socs/agents/galil_axis/drivers.py index 5f6bed1ba..c3c26b3d0 100644 --- a/socs/agents/galil_axis/drivers.py +++ b/socs/agents/galil_axis/drivers.py @@ -488,7 +488,7 @@ def get_forward_limitswitch(self, axis): # --- Interpret raw human_state = "not triggered" if state == 1 else "triggered" if state == 0 else f"unknown ({state})" - + return state, human_state def get_reverse_limitswitch(self, axis):