Beispiel #1
0
 def __init__(self, printer, config):
     self.printer = printer
     self.reactor = printer.reactor
     self.extruder = printer.objects.get('extruder')
     if self.extruder is None:
         self.extruder = extruder.DummyExtruder()
     kintypes = {'cartesian': cartesian.CartKinematics,
                 'delta': delta.DeltaKinematics}
     self.kin = config.getchoice('kinematics', kintypes)(printer, config)
     self.max_speed = config.getfloat('max_velocity')
     self.max_accel = config.getfloat('max_accel')
     self.max_accel_to_decel = config.getfloat('max_accel_to_decel'
                                               , self.max_accel * 0.5)
     self.junction_deviation = config.getfloat('junction_deviation', 0.02)
     self.move_queue = MoveQueue(self.extruder.lookahead)
     self.commanded_pos = [0., 0., 0., 0.]
     # Print time tracking
     self.buffer_time_high = config.getfloat('buffer_time_high', 5.000)
     self.buffer_time_low = config.getfloat('buffer_time_low', 0.150)
     self.move_flush_time = config.getfloat('move_flush_time', 0.050)
     self.motor_off_delay = config.getfloat('motor_off_time', 60.000)
     self.print_time = 0.
     self.need_check_stall = -1.
     self.print_time_stall = 0
     self.motor_off_time = self.reactor.NEVER
     self.flush_timer = self.reactor.register_timer(self._flush_handler)
Beispiel #2
0
 def __init__(self, printer, config):
     self.printer = printer
     self.reactor = printer.reactor
     self.extruder = extruder.DummyExtruder()
     kintypes = {
         'cartesian': cartesian.CartKinematics,
         'corexy': corexy.CoreXYKinematics,
         'delta': delta.DeltaKinematics
     }
     self.kin = config.getchoice('kinematics', kintypes)(printer, config)
     self.max_speed = config.getfloat('max_velocity', above=0.)
     self.max_accel = config.getfloat('max_accel', above=0.)
     self.max_accel_to_decel = config.getfloat('max_accel_to_decel',
                                               self.max_accel * 0.5,
                                               above=0.,
                                               maxval=self.max_accel)
     self.junction_deviation = config.getfloat('junction_deviation',
                                               0.02,
                                               above=0.)
     self.move_queue = MoveQueue()
     self.move_queue.set_extruder(self.extruder)
     self.commanded_pos = [0., 0., 0., 0.]
     # Print time tracking
     self.buffer_time_low = config.getfloat('buffer_time_low',
                                            1.000,
                                            above=0.)
     self.buffer_time_high = config.getfloat('buffer_time_high',
                                             2.000,
                                             above=self.buffer_time_low)
     self.buffer_time_start = config.getfloat('buffer_time_start',
                                              0.250,
                                              above=0.)
     self.move_flush_time = config.getfloat('move_flush_time',
                                            0.050,
                                            above=0.)
     self.print_time = 0.
     self.last_print_end_time = self.reactor.monotonic()
     self.need_check_stall = -1.
     self.print_stall = 0
     self.synch_print_time = True
     self.forced_synch = False
     self.flush_timer = self.reactor.register_timer(self._flush_handler)
     self.move_queue.set_flush_time(self.buffer_time_high)
     # Motor off tracking
     self.motor_off_time = config.getfloat('motor_off_time',
                                           600.000,
                                           minval=0.)
     self.motor_off_timer = self.reactor.register_timer(
         self._motor_off_handler)
     # Determine the maximum velocity a cartesian axis could have
     # before cornering.  The 8. was determined experimentally.
     xy_halt = math.sqrt(8. * self.junction_deviation * self.max_accel)
     self.kin.set_max_jerk(xy_halt, self.max_speed, self.max_accel)
     for e in extruder.get_printer_extruders(printer):
         e.set_max_jerk(xy_halt, self.max_speed, self.max_accel)
Beispiel #3
0
 def __init__(self, printer, config):
     self.printer = printer
     self.reactor = printer.get_reactor()
     self.all_mcus = printer.lookup_module_objects('mcu')
     self.mcu = self.all_mcus[0]
     self.max_velocity = config.getfloat('max_velocity', above=0.)
     self.max_accel = config.getfloat('max_accel', above=0.)
     self.max_accel_to_decel = config.getfloat('max_accel_to_decel',
                                               self.max_accel * 0.5,
                                               above=0.,
                                               maxval=self.max_accel)
     self.junction_deviation = config.getfloat('junction_deviation',
                                               0.02,
                                               minval=0.)
     self.move_queue = MoveQueue()
     self.commanded_pos = [0., 0., 0., 0.]
     # Print time tracking
     self.buffer_time_low = config.getfloat('buffer_time_low',
                                            1.000,
                                            above=0.)
     self.buffer_time_high = config.getfloat('buffer_time_high',
                                             2.000,
                                             above=self.buffer_time_low)
     self.buffer_time_start = config.getfloat('buffer_time_start',
                                              0.250,
                                              above=0.)
     self.move_flush_time = config.getfloat('move_flush_time',
                                            0.050,
                                            above=0.)
     self.print_time = 0.
     self.last_print_start_time = 0.
     self.need_check_stall = -1.
     self.print_stall = 0
     self.sync_print_time = True
     self.idle_flush_print_time = 0.
     self.flush_timer = self.reactor.register_timer(self._flush_handler)
     self.move_queue.set_flush_time(self.buffer_time_high)
     # Motor off tracking
     self.need_motor_off = False
     self.motor_off_time = config.getfloat('motor_off_time', 600., above=0.)
     self.motor_off_timer = self.reactor.register_timer(
         self._motor_off_handler, self.reactor.NOW)
     # Create kinematics class
     self.extruder = extruder.DummyExtruder()
     self.move_queue.set_extruder(self.extruder)
     kintypes = {
         'cartesian': cartesian.CartKinematics,
         'corexy': corexy.CoreXYKinematics,
         'delta': delta.DeltaKinematics
     }
     self.kin = config.getchoice('kinematics', kintypes)(self, printer,
                                                         config)
Beispiel #4
0
 def __init__(self, config):
     self.printer = printer = config.get_printer()
     self.logger = printer.logger.getChild('toolhead')
     self.logger.info("toolhead '{}' created".format(config.section))
     self.reactor = printer.get_reactor()
     self.all_mcus = printer.lookup_module_objects('mcu')
     self.mcu = self.all_mcus[0]
     self.max_velocity = config.getfloat('max_velocity', above=0.)
     self.max_accel = config.getfloat('max_accel', above=0.)
     self.max_accel_to_decel_ratio = config.getfloat(
         'max_accel_to_decel_ratio', default=1.0, above=0.,
         maxval=1.)
     max_accel_to_decel = config.getfloat(
         'max_accel_to_decel', default=None
         , above=0., maxval=self.max_accel)
     if max_accel_to_decel is None:
         max_accel_to_decel = self.max_accel * self.max_accel_to_decel_ratio
     self.max_accel_to_decel = min(max_accel_to_decel, self.max_accel)
     self.junction_deviation = config.getfloat(
         'junction_deviation', 0.02, minval=0.)
     self.config_max_velocity = self.max_velocity
     self.config_max_accel = self.max_accel
     self.config_junction_deviation = self.junction_deviation
     self.move_queue = MoveQueue()
     self.commanded_pos = [0., 0., 0., 0.]
     # Print time tracking
     self.buffer_time_low = config.getfloat(
         'buffer_time_low', 1.000, above=0.)
     self.buffer_time_high = config.getfloat(
         'buffer_time_high', 2.000, above=self.buffer_time_low)
     self.buffer_time_start = config.getfloat(
         'buffer_time_start', 0.250, above=0.)
     self.move_flush_time = config.getfloat(
         'move_flush_time', 0.050, above=0.)
     self.print_time = 0.
     self.last_print_start_time = 0.
     self.need_check_stall = -1.
     self.print_stall = 0
     self.sync_print_time = True
     self.idle_flush_print_time = 0.
     self.flush_timer = self.reactor.register_timer(self._flush_handler)
     self.move_queue.set_flush_time(self.buffer_time_high)
     # Motor off tracking
     self.need_motor_off = False
     self.motor_off_time = config.getfloat('motor_off_time', 600., above=0.)
     self.motor_off_timer = self.reactor.register_timer(
         self._motor_off_handler, self.reactor.NOW)
     # Create kinematics class
     self.extruder = extruder.DummyExtruder()
     self.move_queue.set_extruder(self.extruder)
     self.homing_order = config.get('homing_order', 'XYZ').upper()
     self.require_home_after_motor_off = config.getboolean(
         'require_home_after_motor_off', True)
     self.sw_limit_check_enabled = config.getboolean(
         'sw_limit_check_enabled', True)
     self.allow_move_wo_homing = config.getboolean(
         'allow_move_without_home', False)
     kintypes = {'cartesian': cartesian.CartKinematics,
                 'corexy': corexy.CoreXYKinematics,
                 'coreyx': corexy.CoreYXKinematics,
                 'delta': delta.DeltaKinematics}
     self.kin = config.getchoice('kinematics', kintypes)(self, config)
     # Pause/Idle position
     self.idle_position = idle_position = config.get('idle_position', default='')
     if not idle_position:
         idle_x = config.getfloat("idle_position_x", default=.0)
         idle_y = config.getfloat("idle_position_y", default=.0)
         idle_z_lift = config.getfloat("idle_position_z_lift", default=.4)
         idle_travel_s = config.getint("idle_position_travel_speed", default=6000)
         moves = []
         if idle_z_lift:
             moves.append("G1 Z%s F%s" % (idle_z_lift, idle_travel_s))
         moves.append("G1 X%s Y%s F%s" % (idle_x, idle_y, idle_travel_s))
         self.idle_position = "\n".join(moves)
         self.logger.info("Idle position: X:%s Y:%s Zlift:%s" % (
             idle_x, idle_y, idle_z_lift))
     else:
         self.logger.info("Idle position script: '%s'" %
             self.idle_position.replace("\n", ", "))
     # SET_VELOCITY_LIMIT command
     gcode = self.printer.lookup_object('gcode')
     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, desc=self.cmd_M204_help)
     gcode.register_command('IDLE_POSITION', self.move_to_idle_pos,
                            desc="Move head to defined idle position")
     self.logger.info("Kinematic created: %s" % self.kin.name)
     self.logger.info("max_accel: %s" % (self.max_accel,))
     self.logger.info("max_accel_to_decel: %s" % (self.max_accel_to_decel,))
     self.motor_cbs = []
     self.z_hop_detect_cntr = 0
     self.z_hop_detect = None
     self.layer_change_cb = []