Print recovery on server service reboot or fail
Hi,
i have had this question a long time in my head. Now i want to question it. A lot people care about the situation to recover failed prints in case the printer lost power or failed on another way.
But i did not find anyone who asked the question about how to recover a print in the case Repetier Server itself fails. This may happen due system upgrade or power loss too. Or if you are dumb as me you just type reboot on console while printer was printing. After rebooting ther server Repetier does not remember the state where it's configured printers in the list have had their gcode positions and so on.
is there any way or idea how to recover a failed repetier server process? This would be really useful. And i guess its hard to do in code maybe.
Comments
The main problem is what your printer does in the meantime. It will likely burn a hole where the nozzle is if you are not using repetier-firmware with rescue system compiled in. In that case firmware would move to the side and memory last printed position to help server to continue. Other firmwares do not have that capability as far as I know, so best you can do is make them home xy on connect in that case to improve situation when server comes back.
Then question is what Z do you have and can printer print and raise Z if you just e.g. set Z by using G92 Zlast_z_pos or not. If you can home to z max also fine making it easy to continue.
You should test this with a simple test print with just removing usb for a while and then inserting it back. As said you need to adjust it to your printer a bit. But then the rescue function shows last positions it knows and you choose from where to start and print will continue from there.
BED([115])
SEND(335)
ACK(316)
ACK(335)
SEND(397)
SEND(428)
MOVE(448,0,0,5)
SEND(475)
SEND(536)
SEND(567)
SEND(598)
SEND(641)
SEND(675)
SEND(696)
ACK(397)
ACK(428)
ACK(448)
ACK(475)
ACK(536)
ACK(567)
ACK(598)
ACK(641)
ACK(675)
ACK(696)
MOVE(747,0,0,0.35)
MOVE(792,0,0,0.35)
;
; external perimeters extrusion width = 0.45mm
; perimeters extrusion width = 0.45mm
; infill extrusion width = 0.45mm
; solid infill extrusion width = 0.45mm
; top infill extrusion width = 0.40mm
; first layer extrusion width = 0.70mm
M107 ; disable fan
M190 S115 ; set bed temperature and wait for it to be reached
M104 S240 T1 ; set temperature
G28 ; home all axes
G1 Z5 F5000 ; lift nozzle
M109 S240 T1 ; set temperature and wait for it to be reached
G21 ; set units to millimeters
G90 ; use absolute coordinates
M82 ; use absolute distances for extrusion
G92 E0 ; reset extrusion distance
T1 ; change extruder
G92 E0 ; reset extrusion distance
; Filament gcode
G1 Z0.350 F3000.000 ; move to next layer (0)
G1 E-2.00000 F2400.00000 ; retract
G92 E0 ; reset extrusion distance
G1 X63.981 Y65.484 F3000.000 ; move to first skirt point
G1 E2.00000 F2400.00000 ; unretract
G1 F1200.000
G1 X65.233 Y64.261 E2.13528 ; skirt
G1 E0.51679 F2400.00000 ; retract
G92 E0 ; reset extrusion distance
M107 ; disable fan
; Filament-specific end gcode
;END gcode for filament
; Filament-specific end gcode
;END gcode for filament
M104 S0 ; turn off bed heater
G1 Z200 ; lower bed
M100 ; Cleaning
M117 ; Cleaning / Remove Print
G28 X0 Y0; home X/Y axis
M84 ; disable motors
; filament used [mm] = 0, 24088.0
; filament used [cm3] = 0, 57.9
; filament used [g] = 0, 60.8
; filament cost = 0, 1.2
; total filament used [g] = 60.8
; total filament cost = 1.2
; estimated printing time (normal mode) = 9h 35m 31s
; avoid_crossing_perimeters = 1
; bed_custom_model =
; bed_custom_texture =
; bed_shape = 0x0,198x0,198x204,0x204
; bed_temperature = 120
; before_layer_gcode =
; between_objects_gcode =
; bottom_fill_pattern = rectilinear
; bottom_solid_layers = 5
; bottom_solid_min_thickness = 0.5
; bridge_acceleration = 0
; bridge_angle = 45
; bridge_fan_speed = 100
; bridge_flow_ratio = 1
; bridge_speed = 60
; brim_width = 5
; clip_multipart_objects = 1
; compatible_printers_condition =
; compatible_prints_condition =
; complete_objects = 0
; cooling = 1
; cooling_tube_length = 5
; cooling_tube_retraction = 91.5
; default_acceleration = 0
; default_filament_profile = ""
; default_print_profile =
; deretract_speed = 0,0
; disable_fan_first_layers = 5
; dont_support_bridges = 1
; draft_shield = 0
; duplicate_distance = 6
; elefant_foot_compensation = 0.3
; end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n";"; Filament-specific end gcode \n;END gcode for filament\n"
; end_gcode = \nM104 S0 ; turn off bed heater\nG1 Z200 ; lower bed\nM100 ; Cleaning\nM117 ; Cleaning / Remove Print\nG28 X0 Y0; home X/Y axis\nM84 ; disable motors\n
; ensure_vertical_shell_thickness = 1
; external_perimeter_extrusion_width = 0
; external_perimeter_speed = 50%
; external_perimeters_first = 0
; extra_loading_move = -2
; extra_perimeters = 1
; extruder_clearance_height = 20
; extruder_clearance_radius = 20
; extruder_colour = #FFFFFF;
; extruder_offset = 0x0,0x0
; extrusion_axis = E
; extrusion_multiplier = 0.85,0.85
; extrusion_width = 0
; fan_always_on = 1
; fan_below_layer_time = 60
; filament_colour = #000000
; filament_cooling_final_speed = 3.4
; filament_cooling_initial_speed = 2.2
; filament_cooling_moves = 4
; filament_cost = 20,20
; filament_density = 1.05
; filament_diameter = 1.75,1.75
; filament_load_time = 0
; filament_loading_speed = 28
; filament_loading_speed_start = 3
; filament_max_volumetric_speed = 0
; filament_minimal_purge_on_wipe_tower = 15
; filament_notes = ;
; filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
; filament_settings_id = ""
; filament_soluble = 0
; filament_toolchange_delay = 0
; filament_type = ABS
; filament_unload_time = 0
; filament_unloading_speed = 90
; filament_unloading_speed_start = 100
; filament_vendor = (Unknown)
; fill_angle = 45
; fill_density = 20%
; fill_pattern = gyroid
; first_layer_acceleration = 0
; first_layer_bed_temperature = 115
; first_layer_extrusion_width = 200%
; first_layer_height = 0.35
; first_layer_speed = 20
; first_layer_temperature = 240,240
; gap_fill_speed = 20
; gcode_comments = 1
; gcode_flavor = repetier
; gcode_label_objects = 0
; high_current_on_filament_swap = 0
; host_type = octoprint
; infill_acceleration = 0
; infill_every_layers = 1
; infill_extruder = 2
; infill_extrusion_width = 0
; infill_first = 0
; infill_only_where_needed = 0
; infill_overlap = 25%
; infill_speed = 70
; inherits =
; interface_shells = 0
; layer_gcode =
; layer_height = 0.3
; machine_max_acceleration_e = 10000,5000
; machine_max_acceleration_extruding = 1500,1250
; machine_max_acceleration_retracting = 1500,1250
; machine_max_acceleration_x = 9000,1000
; machine_max_acceleration_y = 9000,1000
; machine_max_acceleration_z = 500,200
; machine_max_feedrate_e = 120,120
; machine_max_feedrate_x = 500,200
; machine_max_feedrate_y = 500,200
; machine_max_feedrate_z = 12,12
; machine_max_jerk_e = 2.5,2.5
; machine_max_jerk_x = 10,10
; machine_max_jerk_y = 10,10
; machine_max_jerk_z = 0.2,0.4
; machine_min_extruding_rate = 0,0
; machine_min_travel_rate = 0,0
; max_fan_speed = 100
; max_layer_height = 0,0
; max_print_height = 200
; max_print_speed = 50
; max_volumetric_speed = 0
; min_fan_speed = 35
; min_layer_height = 0.07,0.07
; min_print_speed = 10
; min_skirt_length = 2
; notes =
; nozzle_diameter = 0.4,0.4
; only_retract_when_crossing_perimeters = 0
; ooze_prevention = 0
; output_filename_format = [input_filename_base].gcode
; overhangs = 1
; parking_pos_retraction = 92
; perimeter_acceleration = 0
; perimeter_extruder = 2
; perimeter_extrusion_width = 0
; perimeter_speed = 60
; perimeters = 5
; post_process =
; print_settings_id =
; printer_model =
; printer_notes =
; printer_settings_id =
; printer_technology = FFF
; printer_variant =
; printer_vendor =
; raft_layers = 0
; remaining_times = 0
; resolution = 0
; retract_before_travel = 2,2
; retract_before_wipe = 0%,0%
; retract_layer_change = 0,0
; retract_length = 2,2
; retract_length_toolchange = 10,10
; retract_lift = 0,0
; retract_lift_above = 0,0
; retract_lift_below = 0,0
; retract_restart_extra = 0,0
; retract_restart_extra_toolchange = 0,0
; retract_speed = 40,40
; seam_position = random
; serial_port =
; serial_speed = 250000
; silent_mode = 1
; single_extruder_multi_material = 0
; single_extruder_multi_material_priming = 1
; skirt_distance = 0
; skirt_height = 1
; skirts = 1
; slice_closing_radius = 0.049
; slowdown_below_layer_time = 5
; small_perimeter_speed = 15
; solid_infill_below_area = 70
; solid_infill_every_layers = 0
; solid_infill_extruder = 2
; solid_infill_extrusion_width = 0
; solid_infill_speed = 20
; spiral_vase = 0
; standby_temperature_delta = -5
; start_filament_gcode = "; Filament gcode\n";"; Filament gcode\n"
; start_gcode = G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n\n
; support_material = 0
; support_material_angle = 0
; support_material_auto = 1
; support_material_buildplate_only = 0
; support_material_contact_distance = 0.4
; support_material_enforce_layers = 0
; support_material_extruder = 2
; support_material_extrusion_width = 0
; support_material_interface_contact_loops = 0
; support_material_interface_extruder = 2
; support_material_interface_layers = 3
; support_material_interface_spacing = 0
; support_material_interface_speed = 100%
; support_material_pattern = honeycomb
; support_material_spacing = 2.5
; support_material_speed = 60
; support_material_synchronize_layers = 0
; support_material_threshold = 0
; support_material_with_sheath = 0
; support_material_xy_spacing = 50%
; temperature = 235,235
; thin_walls = 1
; threads = 24
; thumbnails =
; toolchange_gcode =
; top_fill_pattern = rectilinear
; top_infill_extrusion_width = 0
; top_solid_infill_speed = 15
; top_solid_layers = 5
; top_solid_min_thickness = 0.5
; travel_speed = 50
; use_firmware_retraction = 0
; use_relative_e_distances = 0
; use_volumetric_e = 0
; variable_layer_height = 1
; wipe = 0,0
; wipe_into_infill = 0
; wipe_into_objects = 0
; wipe_tower = 0
; wipe_tower_bridging = 10
; wipe_tower_no_sparse_layers = 0
; wipe_tower_rotation_angle = 0
; wipe_tower_width = 60
; wipe_tower_x = 180
; wipe_tower_y = 140
; wiping_volumes_extruders = 70,70,70,70,70,70,70,70,70,70
; wiping_volumes_matrix = 0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0,140,140,140,140,140,0
; xy_size_compensation = 0
; z_offset = 0
M104 S0 T0
M104 S0 T1
M140 S0
G90
G1 X0 Y0 F4800
M84
BED([115])
sets bed temperature.
Does the gcode contain extruder selection and setting temperature or do you normally start with selected extruder and temperature?
SEND(316)
so any of the send commands could be the temperature setting command.
But if you have no Tx because it was for single extruder print it won't include extruder selection.
Might be a good idea to log starting extruder as well.