打印机启动的最后一步,执行打印前的准备事件 依次执行该事件上注册的函数,为后续的打印操作做好准备工作 0,1:加载gcode对象时注册 2:加载 [filament_switch_sensor filament_sensor] 断料检测对象时注册 3:加载 [filament_motion_sensor my_sensor] 堵料检测对象时注册 4:加载 [filament_motion_sensor my_sensor] 堵料检测对象时注册 5:加载 [delayed_gcode PAUSE_AT_D] 对象时注册 6:加载 [filament_switch_sensor power_loss] 对象时注册 7:加载 [delayed_gcode power_loss_macro] 对象时注册 8:加载 [delayed_gcode heatsink] 对象时注册 9:加载 [heater_fan motherboard_fan] 对象时注册 10:加载 [heater_fan motherboard_fan] 对象时注册 11:加载 [heater_fan heat_sink_fan] 对象时注册 12:加载 [probe] 对象时注册 13:加载 [delayed_gcode LOAD_GCODE_OFFSETS] 对象时注册 14:加载 [idle_timeout] 对象时注册 15:toolhead 初始化时加载 statistics 对象时注册
回调入口
try :
self. _set_state( message_ready)
for cb in self. event_handlers. get( "klippy:ready" , [ ] ) :
if self. state_message is not message_ready:
return
cb( )
except Exception as e:
logging. exception( "Unhandled exception during ready callback" )
self. invoke_shutdown( "Internal error during ready callback: %s"
% ( str ( e) , ) )
gcode ready
def _handle_ready ( self) :
self. is_printer_ready = True
self. gcode_handlers = self. ready_gcode_handlers
self. _respond_state( "Ready" )
GCodeDispatch 对象 返回打印机的状态处于Ready
def _handle_ready ( self) :
self. is_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)
GCodeIO 对象 检查gcode命令是否通过文件参数输入,如果是,并且文件描述符没有,则通过reactor注册文件描述符的回调函数
耗材传感器
def _handle_ready ( self) :
self. min_event_systime = self. reactor. monotonic( ) + 2 .
耗材移动传感器
def _handle_ready ( self) :
self. extruder = self. printer. lookup_object( self. extruder_name)
self. estimated_print_time = (
self. printer. lookup_object( 'mcu' ) . estimated_print_time)
self. _update_filament_runout_pos( )
self. _extruder_pos_update_timer = self. reactor. register_timer(
self. _extruder_pos_update_event)
self.estimated_print_time:从mcu 获取预估打印时间 self._update_filament_runout_pos():更新耗材状态的位置 self._extruder_pos_update_timer: 注册挤出机位置更新的定时器
延迟gcode
def _handle_ready ( self) :
waketime = self. reactor. NEVER
if self. duration:
waketime = self. reactor. monotonic( ) + self. duration
self. timer_handler = self. reactor. register_timer(
self. _gcode_timer_event, waketime)
注册一个延迟执行gcode的定时器 定时器根据是否存在self.duration,设置定时器的执行时间
heaters 加热器
def _handle_ready ( self) :
self. has_started = True
加热器冷却风扇
def handle_ready ( self) :
pheaters = self. printer. lookup_object( 'heaters' )
self. heaters = [ pheaters. lookup_heater( n) for n in self. heater_names]
reactor = self. printer. get_reactor( )
reactor. register_timer( self. callback, reactor. monotonic( ) + PIN_MIN_TIME)
gcode move
def _handle_ready ( self) :
self. is_printer_ready = True
if self. move_transform is None :
toolhead = self. printer. lookup_object( 'toolhead' )
self. move_with_transform = toolhead. move
self. position_with_transform = toolhead. get_position
self. reset_last_position( )
空闲超时
def handle_ready ( self) :
self. toolhead = self. printer. lookup_object( 'toolhead' )
self. timeout_timer = self. reactor. register_timer( self. timeout_handler)
self. printer. register_event_handler( "toolhead:sync_print_time" ,
self. handle_sync_print_time)
注册一个超时处理的定时器。 注册“toolhead:sync_print_time”事件,回调函数self.handle_sync_print_time,同步打印时间。 toolhead 计算打印时间时会回调该函数self.handle_sync_print_time。
def _calc_print_time ( self) :
curtime = self. reactor. monotonic( )
est_print_time = self. mcu. estimated_print_time( curtime)
kin_time = max ( est_print_time + MIN_KIN_TIME, self. last_kin_flush_time)
kin_time += self. kin_flush_delay
min_print_time = max ( est_print_time + self. buffer_time_start, kin_time)
if min_print_time > self. print_time:
self. print_time = min_print_time
self. printer. send_event( "toolhead:sync_print_time" ,
curtime, est_print_time, self. print_time)
状态统计
def handle_ready ( self) :
self. stats_cb = [ o. stats for n, o in self. printer. lookup_objects( )
if hasattr ( o, 'stats' ) ]
if self. printer. get_start_args( ) . get( 'debugoutput' ) is None :
reactor = self. printer. get_reactor( )
reactor. update_timer( self. stats_timer, reactor. NOW)
获取含有stats属性的打印对象 更新状态定时器,立即执行 状态检查定时器执行间隔1s左右