mirror of
https://github.com/andreili/klipper.git
synced 2025-08-23 19:34:06 +02:00
toolhead: Move g-code command handlers to new ToolHeadCommandHelper() class
Move the g-code command handlers to a new class. This reduces the size of the main Toolhead() class. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
bcd4510958
commit
f8da8099d5
@ -270,13 +270,7 @@ class ToolHead:
|
|||||||
msg = "Error loading kinematics '%s'" % (kin_name,)
|
msg = "Error loading kinematics '%s'" % (kin_name,)
|
||||||
logging.exception(msg)
|
logging.exception(msg)
|
||||||
raise config.error(msg)
|
raise config.error(msg)
|
||||||
# Register commands
|
# Register handlers
|
||||||
gcode.register_command('G4', self.cmd_G4)
|
|
||||||
gcode.register_command('M400', self.cmd_M400)
|
|
||||||
gcode.register_command('SET_VELOCITY_LIMIT',
|
|
||||||
self.cmd_SET_VELOCITY_LIMIT,
|
|
||||||
desc=self.cmd_SET_VELOCITY_LIMIT_help)
|
|
||||||
gcode.register_command('M204', self.cmd_M204)
|
|
||||||
self.printer.register_event_handler("klippy:shutdown",
|
self.printer.register_event_handler("klippy:shutdown",
|
||||||
self._handle_shutdown)
|
self._handle_shutdown)
|
||||||
# Print time and flush tracking
|
# Print time and flush tracking
|
||||||
@ -657,21 +651,8 @@ class ToolHead:
|
|||||||
scv2 = self.square_corner_velocity**2
|
scv2 = self.square_corner_velocity**2
|
||||||
self.junction_deviation = scv2 * (math.sqrt(2.) - 1.) / self.max_accel
|
self.junction_deviation = scv2 * (math.sqrt(2.) - 1.) / self.max_accel
|
||||||
self.max_accel_to_decel = self.max_accel * (1. - self.min_cruise_ratio)
|
self.max_accel_to_decel = self.max_accel * (1. - self.min_cruise_ratio)
|
||||||
def cmd_G4(self, gcmd):
|
def set_max_velocities(self, max_velocity, max_accel,
|
||||||
# Dwell
|
square_corner_velocity, min_cruise_ratio):
|
||||||
delay = gcmd.get_float('P', 0., minval=0.) / 1000.
|
|
||||||
self.dwell(delay)
|
|
||||||
def cmd_M400(self, gcmd):
|
|
||||||
# Wait for current moves to finish
|
|
||||||
self.wait_moves()
|
|
||||||
cmd_SET_VELOCITY_LIMIT_help = "Set printer velocity limits"
|
|
||||||
def cmd_SET_VELOCITY_LIMIT(self, gcmd):
|
|
||||||
max_velocity = gcmd.get_float('VELOCITY', None, above=0.)
|
|
||||||
max_accel = gcmd.get_float('ACCEL', None, above=0.)
|
|
||||||
square_corner_velocity = gcmd.get_float(
|
|
||||||
'SQUARE_CORNER_VELOCITY', None, minval=0.)
|
|
||||||
min_cruise_ratio = gcmd.get_float(
|
|
||||||
'MINIMUM_CRUISE_RATIO', None, minval=0., below=1.)
|
|
||||||
if max_velocity is not None:
|
if max_velocity is not None:
|
||||||
self.max_velocity = max_velocity
|
self.max_velocity = max_velocity
|
||||||
if max_accel is not None:
|
if max_accel is not None:
|
||||||
@ -681,12 +662,43 @@ class ToolHead:
|
|||||||
if min_cruise_ratio is not None:
|
if min_cruise_ratio is not None:
|
||||||
self.min_cruise_ratio = min_cruise_ratio
|
self.min_cruise_ratio = min_cruise_ratio
|
||||||
self._calc_junction_deviation()
|
self._calc_junction_deviation()
|
||||||
|
return (self.max_velocity, self.max_accel,
|
||||||
|
self.square_corner_velocity, self.min_cruise_ratio)
|
||||||
|
|
||||||
|
# Support common G-Code commands relative to the toolhead
|
||||||
|
class ToolHeadCommandHelper:
|
||||||
|
def __init__(self, config):
|
||||||
|
self.printer = config.get_printer()
|
||||||
|
self.toolhead = self.printer.lookup_object("toolhead")
|
||||||
|
# Register commands
|
||||||
|
gcode = self.printer.lookup_object('gcode')
|
||||||
|
gcode.register_command('G4', self.cmd_G4)
|
||||||
|
gcode.register_command('M400', self.cmd_M400)
|
||||||
|
gcode.register_command('SET_VELOCITY_LIMIT',
|
||||||
|
self.cmd_SET_VELOCITY_LIMIT,
|
||||||
|
desc=self.cmd_SET_VELOCITY_LIMIT_help)
|
||||||
|
gcode.register_command('M204', self.cmd_M204)
|
||||||
|
def cmd_G4(self, gcmd):
|
||||||
|
# Dwell
|
||||||
|
delay = gcmd.get_float('P', 0., minval=0.) / 1000.
|
||||||
|
self.toolhead.dwell(delay)
|
||||||
|
def cmd_M400(self, gcmd):
|
||||||
|
# Wait for current moves to finish
|
||||||
|
self.toolhead.wait_moves()
|
||||||
|
cmd_SET_VELOCITY_LIMIT_help = "Set printer velocity limits"
|
||||||
|
def cmd_SET_VELOCITY_LIMIT(self, gcmd):
|
||||||
|
max_velocity = gcmd.get_float('VELOCITY', None, above=0.)
|
||||||
|
max_accel = gcmd.get_float('ACCEL', None, above=0.)
|
||||||
|
square_corner_velocity = gcmd.get_float(
|
||||||
|
'SQUARE_CORNER_VELOCITY', None, minval=0.)
|
||||||
|
min_cruise_ratio = gcmd.get_float(
|
||||||
|
'MINIMUM_CRUISE_RATIO', None, minval=0., below=1.)
|
||||||
|
mv, ma, scv, mcr = self.toolhead.set_max_velocities(
|
||||||
|
max_velocity, max_accel, square_corner_velocity, min_cruise_ratio)
|
||||||
msg = ("max_velocity: %.6f\n"
|
msg = ("max_velocity: %.6f\n"
|
||||||
"max_accel: %.6f\n"
|
"max_accel: %.6f\n"
|
||||||
"minimum_cruise_ratio: %.6f\n"
|
"minimum_cruise_ratio: %.6f\n"
|
||||||
"square_corner_velocity: %.6f" % (
|
"square_corner_velocity: %.6f" % (mv, ma, scv, mcr))
|
||||||
self.max_velocity, self.max_accel,
|
|
||||||
self.min_cruise_ratio, self.square_corner_velocity))
|
|
||||||
self.printer.set_rollover_info("toolhead", "toolhead: %s" % (msg,))
|
self.printer.set_rollover_info("toolhead", "toolhead: %s" % (msg,))
|
||||||
if (max_velocity is None and max_accel is None
|
if (max_velocity is None and max_accel is None
|
||||||
and square_corner_velocity is None and min_cruise_ratio is None):
|
and square_corner_velocity is None and min_cruise_ratio is None):
|
||||||
@ -703,12 +715,13 @@ class ToolHead:
|
|||||||
% (gcmd.get_commandline(),))
|
% (gcmd.get_commandline(),))
|
||||||
return
|
return
|
||||||
accel = min(p, t)
|
accel = min(p, t)
|
||||||
self.max_accel = accel
|
self.toolhead.set_max_velocities(None, accel, None, None)
|
||||||
self._calc_junction_deviation()
|
|
||||||
|
|
||||||
def add_printer_objects(config):
|
def add_printer_objects(config):
|
||||||
printer = config.get_printer()
|
printer = config.get_printer()
|
||||||
printer.add_object('toolhead', ToolHead(config))
|
printer.add_object('toolhead', ToolHead(config))
|
||||||
|
ToolHeadCommandHelper(config)
|
||||||
|
# Load default extruder objects
|
||||||
kinematics.extruder.add_printer_objects(config)
|
kinematics.extruder.add_printer_objects(config)
|
||||||
# Load some default modules
|
# Load some default modules
|
||||||
modules = ["gcode_move", "homing", "idle_timeout", "statistics",
|
modules = ["gcode_move", "homing", "idle_timeout", "statistics",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user