From c108bb12344aff50dcafaff9b8eb26c36711b605 Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 00:49:01 -0700 Subject: [PATCH 1/6] add in wait_axis command --- galvo/controller.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/galvo/controller.py b/galvo/controller.py index b01c728..a8655ab 100644 --- a/galvo/controller.py +++ b/galvo/controller.py @@ -17,6 +17,7 @@ BUSY = 0x04 READY = 0x20 +AXIS = 0x40 nop = [0x02, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] empty = bytearray(nop * 0x100) @@ -655,6 +656,10 @@ def is_ready(self): status = self.status() return bool(status & READY) + def is_axis(self): + status = self.status() + return bool(status & AXIS) + def is_ready_and_not_busy(self): status = self.status() return bool(status & READY) and not bool(status & BUSY) @@ -665,6 +670,12 @@ def wait_finished(self): if not self._sending: return + def wait_axis(self): + while self.is_axis(): + time.sleep(0.01) + if not self._sending: + return + def wait_ready(self): while not self.is_ready(): time.sleep(0.01) From d02159728b1484af00ffee44af9f4aeca1c84e85 Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 00:49:55 -0700 Subject: [PATCH 2/6] docstring fix --- galvo/controller.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/galvo/controller.py b/galvo/controller.py index a8655ab..7d4a45e 100644 --- a/galvo/controller.py +++ b/galvo/controller.py @@ -2,7 +2,7 @@ Galvo Controller The balor controller takes low level lmc galvo commands and converts them into lists and shorts commands to send -to the hardware controller. +to the hardware controller as both spooled and realtime commands. """ import struct @@ -30,7 +30,7 @@ class GalvoController: This should serve as a next generation command sequencer written from scratch for galvo lasers. The goal is to provide all the given commands in a coherent queue structure which provides correct sequences between list and - single commands. + single commands. As well as some higher level helper commands tasked with simplifying scripts and workflows. """ def __init__( From ba1dfc578e15c468bf2875972a9b3df0707a6912 Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 00:51:40 -0700 Subject: [PATCH 3/6] Fix parameters for axis values --- galvo/controller.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/galvo/controller.py b/galvo/controller.py index 7d4a45e..c504414 100644 --- a/galvo/controller.py +++ b/galvo/controller.py @@ -1451,17 +1451,17 @@ def write_analog_port_x(self, port): def read_port(self): return self._command(ReadPort) - def set_axis_motion_param(self, param): - return self._command(SetAxisMotionParam, param) + def set_axis_motion_param(self, p0, p1, p2, p3): + return self._command(SetAxisMotionParam, p0, p1, p2, p3) - def set_axis_origin_param(self, param): - return self._command(SetAxisOriginParam, param) + def set_axis_origin_param(self, p0, p1, p2, p3): + return self._command(SetAxisOriginParam, p0, p1, p2, p3) - def axis_go_origin(self): - return self._command(AxisGoOrigin) + def axis_go_origin(self, p0, p1): + return self._command(AxisGoOrigin, p0, p1) - def move_axis_to(self, a): - return self._command(MoveAxisTo) + def move_axis_to(self, p0, p1, p2, p3): + return self._command(MoveAxisTo, p0, p1, p2, p3) def get_axis_pos(self): return self._command(GetAxisPos) From 18cf9856c1c2edb711c18d2717887cf42259bf29 Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 01:00:00 -0700 Subject: [PATCH 4/6] Fix parameters for axis values (optional) --- galvo/controller.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/galvo/controller.py b/galvo/controller.py index c504414..7f7af36 100644 --- a/galvo/controller.py +++ b/galvo/controller.py @@ -1451,16 +1451,16 @@ def write_analog_port_x(self, port): def read_port(self): return self._command(ReadPort) - def set_axis_motion_param(self, p0, p1, p2, p3): + def set_axis_motion_param(self, p0=0, p1=0, p2=0, p3=0): return self._command(SetAxisMotionParam, p0, p1, p2, p3) - def set_axis_origin_param(self, p0, p1, p2, p3): + def set_axis_origin_param(self, p0=0, p1=0, p2=0, p3=0): return self._command(SetAxisOriginParam, p0, p1, p2, p3) - def axis_go_origin(self, p0, p1): + def axis_go_origin(self, p0=0, p1=0): return self._command(AxisGoOrigin, p0, p1) - def move_axis_to(self, p0, p1, p2, p3): + def move_axis_to(self, p0, p1=0, p2=0, p3=0): return self._command(MoveAxisTo, p0, p1, p2, p3) def get_axis_pos(self): From 8f2e2bb8ed3bef94033a60f52c7a8b1d5bbaa3ac Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 01:00:52 -0700 Subject: [PATCH 5/6] Add default rotary command --- galvo/controller.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/galvo/controller.py b/galvo/controller.py index 7f7af36..b2ada81 100644 --- a/galvo/controller.py +++ b/galvo/controller.py @@ -641,6 +641,12 @@ def light_off(self, override_list=None): else: self.write_port() + def rotary(self, position, min_speed=100, max_speed=5000, origin_param=100, **kwgs): + self.set_axis_motion_param(min_speed & 0xFFFF, max_speed & 0xFFFF) + self.set_axis_origin_param(origin_param) + self.move_axis_to(position & 0xFFFF) + self.wait_axis() + def get_last_xy(self): return self._last_x, self._last_y From 4540550227ba154edb198c33aefa97c6b7558b5e Mon Sep 17 00:00:00 2001 From: Tatarize Date: Thu, 13 Jul 2023 01:04:38 -0700 Subject: [PATCH 6/6] Version bump 0.1.1 --- README.md | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fc2c679..17480ae 100644 --- a/README.md +++ b/README.md @@ -154,5 +154,5 @@ See https://github.com/meerk40t/galvoplotter/tree/main/examples for example scri # Thanks * Bryce Schroeder - Did the initial work for reverse engineering the format for the laser. * See: https://gitlab.com/bryce15/balor for his project. -* inpain / tiger12506 - Did considerable with galvo lasers to faciliate the reverse engineering. +* inpain / tiger12506 - Did considerable debugging with galvo lasers to facilitate the reverse engineering. * Sandor Konya - Introductions, advice and support \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 810551d..a23d796 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = galvoplotter -version = 0.1.0 +version = 0.1.1 description = Galvo Plotter long_description_content_type=text/markdown long_description = file: README.md