aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/tuning_tower.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/extras/tuning_tower.py')
-rw-r--r--klippy/extras/tuning_tower.py63
1 files changed, 36 insertions, 27 deletions
diff --git a/klippy/extras/tuning_tower.py b/klippy/extras/tuning_tower.py
index 4fec5b1b..7d54cbb5 100644
--- a/klippy/extras/tuning_tower.py
+++ b/klippy/extras/tuning_tower.py
@@ -5,38 +5,41 @@
# This file may be distributed under the terms of the GNU GPLv3 license.
import math, logging
-CANCEL_Z_DELTA=2.0
+CANCEL_Z_DELTA = 2.0
+
class TuningTower:
def __init__(self, config):
self.printer = config.get_printer()
self.normal_transform = None
- self.last_position = [0., 0., 0., 0.]
- self.last_z = self.start = self.factor = self.band = 0.
+ self.last_position = [0.0, 0.0, 0.0, 0.0]
+ self.last_z = self.start = self.factor = self.band = 0.0
self.last_command_value = None
self.command_fmt = ""
self.gcode_move = self.printer.load_object(config, "gcode_move")
# Register command
self.gcode = self.printer.lookup_object("gcode")
- self.gcode.register_command("TUNING_TOWER", self.cmd_TUNING_TOWER,
- desc=self.cmd_TUNING_TOWER_help)
+ self.gcode.register_command(
+ "TUNING_TOWER", self.cmd_TUNING_TOWER, desc=self.cmd_TUNING_TOWER_help
+ )
+
cmd_TUNING_TOWER_help = "Tool to adjust a parameter at each Z height"
+
def cmd_TUNING_TOWER(self, gcmd):
if self.normal_transform is not None:
self.end_test()
# Get parameters
- command = gcmd.get('COMMAND')
- parameter = gcmd.get('PARAMETER')
- self.start = gcmd.get_float('START', 0.)
- self.factor = gcmd.get_float('FACTOR', 0.)
- self.band = gcmd.get_float('BAND', 0., minval=0.)
- self.step_delta = gcmd.get_float('STEP_DELTA', 0.)
- self.step_height = gcmd.get_float('STEP_HEIGHT', 0., minval=0.)
- self.skip = gcmd.get_float('SKIP', 0., minval=0.)
+ command = gcmd.get("COMMAND")
+ parameter = gcmd.get("PARAMETER")
+ self.start = gcmd.get_float("START", 0.0)
+ self.factor = gcmd.get_float("FACTOR", 0.0)
+ self.band = gcmd.get_float("BAND", 0.0, minval=0.0)
+ self.step_delta = gcmd.get_float("STEP_DELTA", 0.0)
+ self.step_height = gcmd.get_float("STEP_HEIGHT", 0.0, minval=0.0)
+ self.skip = gcmd.get_float("SKIP", 0.0, minval=0.0)
if self.factor and (self.step_height or self.step_delta):
- raise gcmd.error(
- "Cannot specify both FACTOR and STEP_DELTA/STEP_HEIGHT")
- if (self.step_delta != 0.) != (self.step_height != 0.):
+ raise gcmd.error("Cannot specify both FACTOR and STEP_DELTA/STEP_HEIGHT")
+ if (self.step_delta != 0.0) != (self.step_height != 0.0):
raise gcmd.error("Must specify both STEP_DELTA and STEP_HEIGHT")
# Enable test mode
if self.gcode.is_traditional_gcode(command):
@@ -59,25 +62,29 @@ class TuningTower:
message_parts.append("step_height=%.6f" % (self.step_height,))
if self.skip:
message_parts.append("skip=%.6f" % (self.skip,))
- gcmd.respond_info(
- "Starting tuning test (" + " ".join(message_parts) + ")")
+ gcmd.respond_info("Starting tuning test (" + " ".join(message_parts) + ")")
+
def get_position(self):
pos = self.normal_transform.get_position()
self.last_position = list(pos)
return pos
+
def calc_value(self, z):
if self.skip:
- z = max(0., z - self.skip)
+ z = max(0.0, z - self.skip)
if self.step_height:
- return self.start + \
- self.step_delta * math.floor(z / self.step_height)
+ return self.start + self.step_delta * math.floor(z / self.step_height)
if self.band:
- z = (math.floor(z / self.band) + .5) * self.band
+ z = (math.floor(z / self.band) + 0.5) * self.band
return self.start + z * self.factor
+
def move(self, newpos, speed):
normal_transform = self.normal_transform
- if (newpos[3] > self.last_position[3] and newpos[2] != self.last_z
- and newpos[:3] != self.last_position[:3]):
+ if (
+ newpos[3] > self.last_position[3]
+ and newpos[2] != self.last_z
+ and newpos[:3] != self.last_position[:3]
+ ):
# Extrusion move at new z height
z = newpos[2]
if z < self.last_z - CANCEL_Z_DELTA:
@@ -85,22 +92,24 @@ class TuningTower:
self.end_test()
else:
# Process update
- gcode_z = self.gcode_move.get_status()['gcode_position'].z
+ gcode_z = self.gcode_move.get_status()["gcode_position"].z
newval = self.calc_value(gcode_z)
self.last_z = z
if newval != self.last_command_value:
self.last_command_value = newval
- self.gcode.run_script_from_command(self.command_fmt
- % (newval,))
+ self.gcode.run_script_from_command(self.command_fmt % (newval,))
# Forward move to actual handler
self.last_position[:] = newpos
normal_transform.move(newpos, speed)
+
def end_test(self):
self.gcode.respond_info("Ending tuning test mode")
self.gcode_move.set_move_transform(self.normal_transform, force=True)
self.normal_transform = None
+
def is_active(self):
return self.normal_transform is not None
+
def load_config(config):
return TuningTower(config)