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

  • Actually server has a solution. Go to printer configuration and enable rescue. This will log in a file what part already got send, what current temperatures, fan, etc set are. When server restarts it sees this and offers to continue the print. Same when it looses usb connection also there will be a new feature for short usb disconnections to directly continue in next version.

    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.
  • where is that recovery file saved ?
    so I can correct the wrong extruder it tries to run everytime I do recovery it uses my empty extruder ...
    regardless if I have , "replay Extruder Switches " on or off ...
  • edited October 2020
    /var/lib/Repetier-Server/printer/Da_Vinci_20/jobs

    finally found it  00000003_90mmnetpot200deep.recover


    why does the recovery file not contain any information about extruder / temps ?
    recovery heats up the correct extruder but prints with the cold one


    can we please have a gcode editor at least for the recovery section so settings can be re-added ?


    SEND(316)
    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)



    the gcode is this , but recovery always uses wrong extruder

    ; generated by PrusaSlicer 2.2.0+linux-x64 on 2020-10-30 at 23:04:14 UTC

    ;

    ; 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 X89.541 Y105.647 E2.51679 ; infill
    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





  • Recover file contains data from the gcode printed.
    BED([115])
    sets bed temperature.
    Does the gcode contain extruder selection and setting temperature or do you normally start with selected extruder and temperature?

  • Forgot - M commands are send like
    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.
Sign In or Register to comment.