예제 #1
0
파일: gcode.py 프로젝트: luggi/klipper
 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)
예제 #2
0
    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)
예제 #3
0
 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)
예제 #4
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)
예제 #5
0
 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)
예제 #6
0
 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))
예제 #7
0
 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))
예제 #8
0
파일: gcode.py 프로젝트: mhv-shared/klipper
 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)