Enable stage coordinate zeroing

This commit is contained in:
Joel Collins 2019-11-29 14:09:23 +00:00
parent 2f4959885c
commit 3db99fee2f
6 changed files with 43 additions and 1 deletions

View file

@ -37,6 +37,11 @@ _actions = {
"view_class": stage.MoveStageAPI,
"conditions": True,
},
"zeroStage": {
"rule": "/stage/zero/",
"view_class": stage.ZeroStageAPI,
"conditions": True,
},
"shutdown": {
"rule": "/system/shutdown/",
"view_class": system.ShutdownAPI,

View file

@ -56,3 +56,22 @@ class MoveStageAPI(MicroscopeView):
logging.warning("Unable to move. No stage found.")
return jsonify(self.microscope.status["stage"]["position"])
class ZeroStageAPI(MicroscopeView):
"""
Zero stage coordinates
"""
def post(self):
"""
Set the current position to zero
.. :quickref: Actions; Zero stage
:reqheader Accept: application/json
"""
self.microscope.stage.zero_position()
return jsonify(self.microscope.status["stage"])

View file

@ -74,6 +74,11 @@ class BaseStage(metaclass=ABCMeta):
"""Make an absolute move to a position"""
pass
@abstractmethod
def zero_position(self):
"""Set the current position to zero"""
pass
@abstractmethod
def close(self):
"""Cleanly close communication with the stage"""

View file

@ -96,5 +96,9 @@ class MockStage(BaseStage):
self._position = list(final)
logging.debug(f"New position: {self._position}")
def zero_position(self):
"""Set the current position to zero"""
self._position = [0, 0, 0]
def close(self):
pass

View file

@ -147,6 +147,11 @@ class SangaStage(BaseStage):
with self.lock:
self.board.move_abs(final, **kwargs)
def zero_position(self):
"""Set the current position to zero"""
with self.lock:
self.board.zero_position()
def close(self):
"""Cleanly close communication with the stage"""
if hasattr(self, "board"):

View file

@ -52,7 +52,7 @@ class Sangaboard(ExtensibleSerialInstrument):
# These are the settings for the sangaboards serial port, and can usually be left as default.
port_settings = {
"baudrate": 115200,
"baudrate": 115_200,
"bytesize": EIGHTBITS,
"parity": PARITY_NONE,
"stopbits": STOPBITS_ONE,
@ -215,6 +215,10 @@ class Sangaboard(ExtensibleSerialInstrument):
"""De-energise the stepper motor coils"""
self.query("release")
def zero_position(self):
"""Set the current position to zero"""
self.query("zero")
def move_abs(self, final, **kwargs):
"""Make an absolute move to a position