def printer_state(self, state): if state == 'shutdown': if not self.is_printer_ready: return self.is_printer_ready = False self.gcode_handlers = self.base_gcode_handlers self.dump_debug() if self.is_fileinput: self.printer.request_exit('error_exit') return if state != 'ready': return self.is_printer_ready = True self.gcode_handlers = self.ready_gcode_handlers # Lookup printer components self.toolhead = self.printer.lookup_object('toolhead') if self.move_transform is None: self.move_with_transform = self.toolhead.move self.position_with_transform = self.toolhead.get_position extruders = extruder.get_printer_extruders(self.printer) if extruders: self.extruder = extruders[0] self.toolhead.set_extruder(self.extruder) self.heaters = [e.get_heater() for e in extruders] self.heaters.append(self.printer.lookup_object('heater_bed', None)) self.fan = self.printer.lookup_object('fan', None) if self.is_fileinput and self.fd_handle is None: self.fd_handle = self.reactor.register_fd(self.fd, self.process_data)
def set_printer_ready(self, is_ready): if self.is_printer_ready == is_ready: return self.is_printer_ready = is_ready self.gcode_handlers = self.build_handlers(is_ready) if not is_ready: # Printer is shutdown (could be running in a background thread) return # Lookup printer components self.toolhead = self.printer.objects.get('toolhead') extruders = extruder.get_printer_extruders(self.printer) if extruders: self.extruder = extruders[0] self.toolhead.set_extruder(self.extruder) self.heaters = [e.get_heater() for e in extruders] self.heaters.append(self.printer.objects.get('heater_bed')) self.fan = self.printer.objects.get('fan') for i in range(99): extruder_fan_name = 'extruder_auto_fan%d' % (i, ) extruder_fan = self.printer.objects.get(extruder_fan_name) if not i and not extruder_fan: extruder_fan = self.printer.objects.get('extruder_auto_fan') if extruder_fan: extruder_fan.printer_ready = True if self.is_fileinput and self.fd_handle is None: self.fd_handle = self.reactor.register_fd(self.fd, self.process_data)
def motor_off(self): self.dwell(STALL_TIME) last_move_time = self.get_last_move_time() self.kin.motor_off(last_move_time) for ext in extruder.get_printer_extruders(self.printer): ext.motor_off(last_move_time) self.dwell(STALL_TIME) self.need_motor_off = False logging.debug('; Max time of %f', last_move_time)
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)
def connect(self): self.is_printer_ready = True self.gcode_handlers = self.ready_gcode_handlers # Lookup printer components self.toolhead = self.printer.objects.get('toolhead') extruders = extruder.get_printer_extruders(self.printer) if extruders: self.extruder = extruders[0] self.toolhead.set_extruder(self.extruder) self.heaters = [ e.get_heater() for e in extruders ] self.heaters.append(self.printer.objects.get('heater_bed')) self.fan = self.printer.objects.get('fan') if self.is_fileinput and self.fd_handle is None: self.fd_handle = self.reactor.register_fd(self.fd, self.process_data)
def cmd_Tn(self, params): # Select Tool extruders = extruder.get_printer_extruders(self.printer) index = self.get_int('T', params, minval=0, maxval=len(extruders)-1) e = extruders[index] if self.extruder is e: return self.run_script(self.extruder.get_activate_gcode(False)) try: self.toolhead.set_extruder(e) except homing.EndstopError as e: raise error(str(e)) self.extruder = e self.reset_last_position() self.run_script(self.extruder.get_activate_gcode(True))
def cmd_Tn(self, params): # Select Tool index = self.get_int('T', params) extruders = extruder.get_printer_extruders(self.printer) if self.extruder is None or index < 0 or index >= len(extruders): self.respond_error("Extruder %d not configured" % (index,)) return e = extruders[index] if self.extruder is e: return self.run_script(self.extruder.get_activate_gcode(False)) try: self.toolhead.set_extruder(e) except homing.EndstopError as e: raise error(str(e)) self.extruder = e self.reset_last_position() self.run_script(self.extruder.get_activate_gcode(True))
def cmd_Tn(self, params): # Select Tool index = self.get_int('T', params) extruders = extruder.get_printer_extruders(self.printer) if self.extruder is None or index < 0 or index >= len(extruders): self.respond_error("Extruder %d not configured" % (index, )) return e = extruders[index] if self.extruder is e: return deactivate_gcode = self.extruder.get_activate_gcode(False) self.process_commands(deactivate_gcode.split('\n'), need_ack=False) try: self.toolhead.set_extruder(e) except homing.EndstopError as e: self.respond_error(str(e)) return self.extruder = e self.last_position = self.toolhead.get_position() activate_gcode = self.extruder.get_activate_gcode(True) self.process_commands(activate_gcode.split('\n'), need_ack=False)