From 74f8a2da6ef6c1fb62d457d46dd4e8307b517d84 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 29 Apr 2025 10:18:13 +0200 Subject: [PATCH 1/3] Basically working X1 profile CURA-12101 --- resources/definitions/bambulab_x1.def.json | 279 +----------------- .../extruders/bambulab_x1_extruder_0.def.json | 4 +- .../extruders/bambulab_x1_extruder_1.def.json | 4 +- .../extruders/bambulab_x1_extruder_2.def.json | 4 +- .../extruders/bambulab_x1_extruder_3.def.json | 4 +- 5 files changed, 13 insertions(+), 282 deletions(-) diff --git a/resources/definitions/bambulab_x1.def.json b/resources/definitions/bambulab_x1.def.json index 4d0960ff92..3a77b145f8 100644 --- a/resources/definitions/bambulab_x1.def.json +++ b/resources/definitions/bambulab_x1.def.json @@ -1,13 +1,10 @@ { "version": 2, "name": "BambuLab X1", - "inherits": "fdmprinter", + "inherits": "bambulab_base", "metadata": { "visible": true, - "author": "UltiMaker", - "manufacturer": "BambuLab", - "file_formats": "text/x-gcode", "platform": "bambulab_x1.obj", "has_machine_quality": true, "has_material": true, @@ -32,287 +29,21 @@ }, "overrides": { - "acceleration_infill": { "value": "acceleration_print" }, - "acceleration_layer_0": { "value": 2000 }, - "acceleration_prime_tower": { "value": "acceleration_print" }, - "acceleration_print": { "value": 20000 }, - "acceleration_print_layer_0": { "value": "acceleration_layer_0" }, - "acceleration_roofing": { "value": "acceleration_wall_0" }, - "acceleration_skirt_brim": { "value": "acceleration_layer_0" }, - "acceleration_support": { "value": "acceleration_print" }, - "acceleration_support_bottom": { "value": "acceleration_support_interface" }, - "acceleration_support_infill": { "value": "acceleration_support" }, - "acceleration_support_interface": { "value": "acceleration_support" }, - "acceleration_support_roof": { "value": "acceleration_support_interface" }, - "acceleration_topbottom": { "value": "acceleration_print" }, - "acceleration_travel": { "value": 20000 }, - "acceleration_travel_enabled": { "value": true }, - "acceleration_travel_layer_0": { "value": "acceleration_layer_0" }, - "acceleration_wall": { "value": "acceleration_print/8" }, - "acceleration_wall_0": { "value": "acceleration_wall" }, - "acceleration_wall_0_roofing": { "value": "acceleration_wall_0" }, - "acceleration_wall_x": { "value": "acceleration_print" }, - "acceleration_wall_x_roofing": { "value": "acceleration_wall" }, - "adhesion_type": { "value": "'skirt'" }, - "bottom_thickness": { "value": 0.6 }, - "bridge_skin_speed": - { - "unit": "mm/s", - "value": "bridge_wall_speed" - }, - "bridge_sparse_infill_max_density": { "value": 50 }, - "bridge_wall_min_length": { "value": 10 }, - "bridge_wall_speed": - { - "unit": "mm/s", - "value": 50 - }, - "cool_min_layer_time": { "value": 6 }, - "cool_min_speed": { "value": 6 }, - "cool_min_temperature": { "value": "material_print_temperature-15" }, - "default_material_print_temperature": { "maximum_value_warning": 320 }, - "extra_infill_lines_to_support_skins": { "value": "'walls_and_lines'" }, - "gradual_flow_enabled": { "value": false }, - "hole_xy_offset": { "value": 0.075 }, - "infill_overlap": { "value": 10 }, - "infill_pattern": { "value": "'zigzag' if infill_sparse_density > 80 else 'grid'" }, - "infill_sparse_density": { "value": 15 }, - "infill_wall_line_count": { "value": "1 if infill_sparse_density > 80 else 0" }, - "jerk_infill": { "value": "jerk_print" }, - "jerk_layer_0": { "value": "jerk_print/2" }, - "jerk_prime_tower": { "value": "jerk_print" }, - "jerk_print": { "value": "50" }, - "jerk_print_layer_0": { "value": "jerk_layer_0" }, - "jerk_roofing": { "value": "jerk_wall_0" }, - "jerk_skirt_brim": { "value": "jerk_layer_0" }, - "jerk_support": { "value": "jerk_print" }, - "jerk_support_bottom": { "value": "jerk_support_interface" }, - "jerk_support_infill": { "value": "jerk_support" }, - "jerk_support_interface": { "value": "jerk_support" }, - "jerk_support_roof": { "value": "jerk_support_interface" }, - "jerk_topbottom": { "value": "jerk_print" }, - "jerk_travel": { "value": 50 }, - "jerk_travel_enabled": { "value": true }, - "jerk_travel_layer_0": { "value": "jerk_travel" }, - "jerk_wall": { "value": "jerk_print/5" }, - "jerk_wall_0": { "value": "jerk_wall" }, - "jerk_wall_0_roofing": { "value": "jerk_wall_0" }, - "jerk_wall_x": { "value": "jerk_print" }, - "jerk_wall_x_roofing": { "value": "jerk_wall_0" }, - "line_width": { "value": 0.42 }, - "machine_acceleration": { "value": 10000 }, - "machine_center_is_zero": { "value": false }, "machine_depth": { "value": 256 }, - "machine_end_gcode": { "default_value": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (machine_height + 100.0) < 25}\n G1 Z{machine_height + 100.0} F600\n G1 Z{machine_height +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n" }, + "machine_end_gcode": { "default_value": ";===== date: 20240528 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of 'timelapse_record_flag'\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\nG1 Z250 F600\nG1 Z248\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n" }, "machine_extruder_count": { "value": 4 }, - "machine_heated_bed": { "value": true }, "machine_height": { "value": 251 }, - "machine_max_feedrate_e": { "value": 150 }, - "machine_max_feedrate_x": { "value": 500 }, - "machine_max_feedrate_y": { "value": 500 }, - "machine_max_feedrate_z": { "value": 15 }, - "machine_max_jerk_e": { "default_value": 100 }, - "machine_max_jerk_xy": { "default_value": 5000 }, - "machine_max_jerk_z": { "default_value": 100 }, "machine_name": { "default_value": "BambuLab Bambu X1" }, - "machine_nozzle_cool_down_speed": { "default_value": 1.3 }, - "machine_nozzle_heat_up_speed": { "default_value": 1.9 }, - "machine_nozzle_size": { "value": 0.4 }, - "machine_show_variants": { "value": true }, - "machine_start_gcode": { "default_value": ";===== machine: X1 ====================\n;===== date: 20241023 ==================\n;===== start printer sound ================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A46 B10 L100 C43 D10 M70 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A43 B10 L100 C0 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A41 B10 L100 C0 D10 M100 E41 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E44 F10 N100\nM1006 A49 B10 L100 C0 D10 M100 E49 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A48 B10 L100 C44 D10 M60 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M90 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N100\nM1006 A46 B10 L100 C43 D10 M60 E39 F10 N100\nM1006 W\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]=='PLA'}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]=='PLA'}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type=='Textured PEI Plate'}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of 'draw extrinsic para cali paint'\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n;===== purge line to wipe the nozzle ============================\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X18.0 Y2.5 Z0.8 F18000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG1 Z0.2\nG0 X239 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y12 E0.7 F{outer_wall_volumetric_speed/(0.3*0.5)/4* 60}\n" }, - "machine_use_extruder_offset_to_offset_coords": { "value": false }, + "machine_start_gcode": { "default_value": ";===== machine: X1 ====================\n;===== date: 20241023 ==================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0 ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S{material_bed_temperature_layer_0} ;set bed temp\nM190 S{material_bed_temperature_layer_0} ;wait for bed temp\n\n{if machine_scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S{initial_extruder_nr}A ; switch material if AMS exist\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T{initial_extruder_nr}\n G1 X54 F12000\n G1 Y265\n M400\nM621 S{initial_extruder_nr}A\nM620.1 E F{material_max_flowrate/2.4053*60, initial_extruder_nr} T{material_print_temperature, initial_extruder_nr}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{-machine_width/2 if machine_center_is_zero else 0} Y{-machine_depth/2 if machine_center_is_zero else 0} I{machine_width} J{machine_depth}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if machine_scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{material_print_temperature, initial_extruder_nr}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y11 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if machine_buildplate_type=='textured_pei_plate'}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if acceleration_print > 0 and acceleration_wall_0 > 0, initial_extruder_nr}\n M204 S{acceleration_wall_0, initial_extruder_nr}\n {endif}\n {if acceleration_print > 0 and acceleration_wall_0 <= 0, initial_extruder_nr}\n M204 S{acceleration_print, initial_extruder_nr}\n {endif}\n\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of 'draw extrinsic para cali paint'\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{material_print_temperature, initial_extruder_nr} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60/4, initial_extruder_nr} C5.000 D{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60, initial_extruder_nr} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{material_print_temperature, initial_extruder_nr}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*0.08, initial_extruder_nr}\n M623\n\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X185.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X190.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X195.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X200.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X205.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X210.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X215.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X220.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X225.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n;===== purge line to wipe the nozzle ============================\nG1 E{-retraction_amount, initial_extruder_nr} F1800\nG1 X18.0 Y2.5 Z0.8 F18000.0;Move to start position\nG1 E{retraction_amount, initial_extruder_nr} F1800\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nG1 Z0.2\nG0 X239 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y12 E0.7 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4* 60, initial_extruder_nr}\n" }, "machine_width": { "value": 256 }, - "material_diameter": { "value": 1.75 }, - "max_skin_angle_for_expansion": { "value": 45 }, - "meshfix_maximum_resolution": { "value": 0.4 }, - "min_infill_area": { "default_value": 10 }, - "optimize_wall_printing_order": { "value": false }, - "relative_extrusion": { "value": true }, - "retraction_amount": { "value": 0.5 }, - "retraction_combing_max_distance": { "value": 100 }, - "retraction_extra_prime_amount": { "value": 0.12 }, - "retraction_hop": { "value": 0.2 }, - "retraction_hop_after_extruder_switch_height": { "value": 2 }, - "retraction_hop_enabled": { "value": true }, - "retraction_min_travel": { "value": "5 if support_enable and support_structure=='tree' else line_width * 2" }, - "retraction_prime_speed": { "value": 15 }, - "retraction_speed": { "value": 30 }, - "skin_edge_support_thickness": { "value": 0 }, - "skin_material_flow": { "value": 95 }, - "skin_overlap": { "value": 0 }, - "skin_preshrink": { "value": 0 }, - "skirt_line_count": { "value": 5 }, - "small_skin_on_surface": { "value": false }, - "small_skin_width": { "value": 4 }, - "speed_infill": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_ironing": - { - "maximum_value_warning": 500, - "value": 20 - }, - "speed_layer_0": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_prime_tower": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_print": - { - "maximum_value_warning": 500, - "value": 300 - }, - "speed_print_layer_0": - { - "maximum_value_warning": 500, - "value": "speed_layer_0" - }, - "speed_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_skirt_brim": - { - "maximum_value_warning": 500, - "value": "speed_layer_0" - }, - "speed_support": - { - "maximum_value_warning": 500, - "value": "speed_wall_0" - }, - "speed_support_bottom": - { - "maximum_value_warning": 500, - "value": "speed_support_interface" - }, - "speed_support_infill": - { - "maximum_value_warning": 500, - "value": "speed_support" - }, - "speed_support_interface": - { - "maximum_value_warning": 500, - "value": 50 - }, - "speed_support_roof": - { - "maximum_value_warning": 500, - "value": "speed_support_interface" - }, - "speed_topbottom": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_travel": - { - "maximum_value": 500, - "value": 500 - }, - "speed_travel_layer_0": - { - "maximum_value": 500, - "value": 150 - }, - "speed_wall": - { - "maximum_value_warning": 500, - "value": "speed_print*2/3" - }, - "speed_wall_0": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_wall_0_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "speed_wall_x": - { - "maximum_value_warning": 500, - "value": "speed_print" - }, - "speed_wall_x_roofing": - { - "maximum_value_warning": 500, - "value": "speed_wall" - }, - "support_brim_line_count": { "value": 5 }, - "support_density": { "value": 15 }, - "support_infill_rate": { "value": "80 if gradual_support_infill_steps != 0 else 15" }, - "support_pattern": { "value": "'gyroid'" }, - "support_structure": { "value": "'tree'" }, - "travel_avoid_other_parts": { "value": false }, - "wall_0_acceleration": { "value": 1000 }, - "wall_0_deceleration": { "value": 1000 }, - "wall_0_end_speed_ratio": { "value": 100 }, - "wall_0_speed_split_distance": { "value": 0.2 }, - "wall_0_start_speed_ratio": { "value": 100 }, - "wall_0_wipe_dist": { "value": 0 }, - "wall_material_flow": { "value": 95 }, - "wall_overhang_angle": { "value": 45 }, - "wall_overhang_speed_factor": { "value": 50 }, - "wall_x_material_flow": { "value": 100 }, - "z_seam_corner": { "value": "'z_seam_corner_weighted'" }, - "z_seam_position": { "value": "'backright'" }, - "z_seam_type": { "value": "'sharpest_corner'" } + "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" } }, "settings": { - "material": - { - "children": - { - "material_max_flowrate": - { - "default_value": 16, - "description": "Maximum flowrate that the printer can extrude for the material", - "enabled": true, - "label": "Material Maximum Flowrate", - "maximum_value": "machine_max_feedrate_e * (material_diameter/2)**2 * math.pi", - "minimum_value": "0", - "settable_per_extruder": true, - "settable_per_mesh": false, - "type": "float", - "unit": "mm\u00b3/s", - "value": "16" - } - } - }, "platform_adhesion": { "children": { - "machine_buildplate": - { - "default_value": "textured_pei_plate", - "description": "The type of the build plate installed on the printer.", - "enabled": true, - "label": "Build Plate Type", - "options": - { - "cool_plate": "Cool Plate", - "engineering_plate": "Engineering Plate", - "high_temp_plate": "High Temp Plate", - "textured_pei_plate": "Textured PEI Plate" - }, - "settable_per_extruder": false, - "settable_per_mesh": false, - "settable_per_meshgroup": false, - "type": "enum" - }, "machine_scan_first_layer": { "default_value": true, @@ -323,7 +54,7 @@ "settable_per_mesh": false, "settable_per_meshgroup": false, "type": "bool", - "value": "machine_buildplate!='textured_pei_plate'" + "value": "machine_buildplate_type!='textured_pei_plate'" } } } diff --git a/resources/extruders/bambulab_x1_extruder_0.def.json b/resources/extruders/bambulab_x1_extruder_0.def.json index a25f79212b..3ff6e83c83 100644 --- a/resources/extruders/bambulab_x1_extruder_0.def.json +++ b/resources/extruders/bambulab_x1_extruder_0.def.json @@ -11,8 +11,8 @@ { "extruder_nr": { "default_value": 0 }, "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M620 S[next_extruder]A\nM204 S9000\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == 'PETG'}\nM109 S260\n{elsif filament_type[next_extruder] == 'PVA'}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nG91\nG0 Z-0.4 F600\nG90" }, + "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, + "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, "material_diameter": { "default_value": 1.75 } } } \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_1.def.json b/resources/extruders/bambulab_x1_extruder_1.def.json index 2377d4199c..777e735fa6 100644 --- a/resources/extruders/bambulab_x1_extruder_1.def.json +++ b/resources/extruders/bambulab_x1_extruder_1.def.json @@ -11,8 +11,8 @@ { "extruder_nr": { "default_value": 1 }, "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M620 S[next_extruder]A\nM204 S9000\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == 'PETG'}\nM109 S260\n{elsif filament_type[next_extruder] == 'PVA'}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nG91\nG0 Z-0.4 F600\nG90" }, + "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, + "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, "material_diameter": { "default_value": 1.75 } } } \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_2.def.json b/resources/extruders/bambulab_x1_extruder_2.def.json index 62c87c794e..3fad4c692d 100644 --- a/resources/extruders/bambulab_x1_extruder_2.def.json +++ b/resources/extruders/bambulab_x1_extruder_2.def.json @@ -11,8 +11,8 @@ { "extruder_nr": { "default_value": 2 }, "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M620 S[next_extruder]A\nM204 S9000\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == 'PETG'}\nM109 S260\n{elsif filament_type[next_extruder] == 'PVA'}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nG91\nG0 Z-0.4 F600\nG90" }, + "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, + "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, "material_diameter": { "default_value": 1.75 } } } \ No newline at end of file diff --git a/resources/extruders/bambulab_x1_extruder_3.def.json b/resources/extruders/bambulab_x1_extruder_3.def.json index ab7752b74f..751ec2b459 100644 --- a/resources/extruders/bambulab_x1_extruder_3.def.json +++ b/resources/extruders/bambulab_x1_extruder_3.def.json @@ -11,8 +11,8 @@ { "extruder_nr": { "default_value": 3 }, "machine_extruder_change_duration": { "default_value": 29 }, - "machine_extruder_end_code": { "default_value": "M620 S[next_extruder]A\nM204 S9000\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == 'PETG'}\nM109 S260\n{elsif filament_type[next_extruder] == 'PVA'}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" }, - "machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nG91\nG0 Z-0.4 F600\nG90" }, + "machine_extruder_end_code": { "default_value": "M204 S9000\n\nG91 ; set relative positioning\nG1 Z3.0 F1200\nG90 ; back to abolute positioning\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n\n{if material_print_temperature > 142}\nM104 S{material_print_temperature}\n{endif}\n\nM620.11 S1 I{extruder_nr} E-18 F1200\nM400\n\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\n\nM620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n" }, + "machine_extruder_start_code": { "default_value": "M620.1 E F{material_flush_purge_speed} T{material_print_temperature, extruder_nr}\n\nG92 E0\n\n; always use highest temperature to flush\n{if material_type == 'PETG'}\nM109 S260\n{elsif material_type == 'PVA'}\nM109 S210\n{else}\nM109 S{material_print_temperature}\n{endif}\n\n{if not prime_tower_enable}\n\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{material_print_temperature, extruder_nr}\nM106 P1 S60\nG1 E{material_flush_purge_length / 4.0} F{min(extruderValues('material_flush_purge_speed'))} ; do not need pulsatile flushing for start part\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{min(extruderValues('material_flush_purge_speed'))}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.23} F{material_flush_purge_speed, extruder_nr}\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\nM400\nM1002 set_filament_type:{material_type, extruder_nr}\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n\nM106 P1 S60\n; FLUSH_START\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\nG1 E{(material_flush_purge_length / 4.0) * 0.18} F{material_flush_purge_speed, extruder_nr}\nG1 E{(material_flush_purge_length / 4.0) * 0.02} F50\n; FLUSH_END\nG1 E-{retraction_amount * 2} F1800\nG1 E{retraction_amount * 2} F300\n\n; FLUSH_START\nM400\nM109 S{material_print_temperature}\nG1 E6 F{material_flush_purge_speed, extruder_nr} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\n\n{endif} ; prime_tower_enable\n\nM400\nG92 E0\n;G1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\n\nM621 S{extruder_nr}A\n" }, "material_diameter": { "default_value": 1.75 } } } \ No newline at end of file From d2e625edb37c93c17f213cd2dad0ee9ef6646dce Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 29 Apr 2025 11:28:56 +0200 Subject: [PATCH 2/3] Export project settings into BambuLab 3MF CURA-12101 The printer parses the machine_start_gcode to allow selecting the filaments mapping at start time, without it the user has to set the filaments in fixed order. This is probably a security to ensure the proper filament is loaded at start. --- cura/API/Interface/Settings.py | 36 ++++++++++++++++++---------- plugins/3MFWriter/BambuLabVariant.py | 10 +++++++- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/cura/API/Interface/Settings.py b/cura/API/Interface/Settings.py index 084023b9bd..6437de268a 100644 --- a/cura/API/Interface/Settings.py +++ b/cura/API/Interface/Settings.py @@ -3,7 +3,7 @@ from dataclasses import asdict -from typing import cast, Dict, TYPE_CHECKING +from typing import cast, Dict, TYPE_CHECKING, Any from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction @@ -54,6 +54,15 @@ class Settings: return self.application.getSidebarCustomMenuItems() + def getAllGlobalSettings(self) -> Dict[str, Any]: + global_stack = cast(GlobalStack, self.application.getGlobalContainerStack()) + + all_settings = {} + for setting in global_stack.getAllKeys(): + all_settings[setting] = self._retrieveValue(global_stack, setting) + + return all_settings + def getSliceMetadata(self) -> Dict[str, Dict[str, Dict[str, str]]]: """Get all changed settings and all settings. For each extruder and the global stack""" print_information = self.application.getPrintInformation() @@ -71,24 +80,16 @@ class Settings: "quality": asdict(machine_manager.activeQualityDisplayNameMap()), } - def _retrieveValue(container: InstanceContainer, setting_: str): - value_ = container.getProperty(setting_, "value") - for _ in range(0, 1024): # Prevent possibly endless loop by not using a limit. - if not isinstance(value_, SettingFunction): - return value_ # Success! - value_ = value_(container) - return 0 # Fallback value after breaking possibly endless loop. - global_stack = cast(GlobalStack, self.application.getGlobalContainerStack()) # Add global user or quality changes global_flattened_changes = InstanceContainer.createMergedInstanceContainer(global_stack.userChanges, global_stack.qualityChanges) for setting in global_flattened_changes.getAllKeys(): - settings["global"]["changes"][setting] = _retrieveValue(global_flattened_changes, setting) + settings["global"]["changes"][setting] = self._retrieveValue(global_flattened_changes, setting) # Get global all settings values without user or quality changes for setting in global_stack.getAllKeys(): - settings["global"]["all_settings"][setting] = _retrieveValue(global_stack, setting) + settings["global"]["all_settings"][setting] = self._retrieveValue(global_stack, setting) for i, extruder in enumerate(global_stack.extruderList): # Add extruder fields to settings dictionary @@ -100,10 +101,19 @@ class Settings: # Add extruder user or quality changes extruder_flattened_changes = InstanceContainer.createMergedInstanceContainer(extruder.userChanges, extruder.qualityChanges) for setting in extruder_flattened_changes.getAllKeys(): - settings[f"extruder_{i}"]["changes"][setting] = _retrieveValue(extruder_flattened_changes, setting) + settings[f"extruder_{i}"]["changes"][setting] = self._retrieveValue(extruder_flattened_changes, setting) # Get extruder all settings values without user or quality changes for setting in extruder.getAllKeys(): - settings[f"extruder_{i}"]["all_settings"][setting] = _retrieveValue(extruder, setting) + settings[f"extruder_{i}"]["all_settings"][setting] = self._retrieveValue(extruder, setting) return settings + + @staticmethod + def _retrieveValue(container: InstanceContainer, setting_: str): + value_ = container.getProperty(setting_, "value") + for _ in range(0, 1024): # Prevent possibly endless loop by not using a limit. + if not isinstance(value_, SettingFunction): + return value_ # Success! + value_ = value_(container) + return 0 # Fallback value after breaking possibly endless loop. \ No newline at end of file diff --git a/plugins/3MFWriter/BambuLabVariant.py b/plugins/3MFWriter/BambuLabVariant.py index 56337bbc31..69814505ad 100644 --- a/plugins/3MFWriter/BambuLabVariant.py +++ b/plugins/3MFWriter/BambuLabVariant.py @@ -31,6 +31,7 @@ GCODE_MD5_PATH = f"{GCODE_PATH}.md5" MODEL_SETTINGS_PATH = f"{METADATA_PATH}/model_settings.config" PLATE_DESC_PATH = f"{METADATA_PATH}/plate_1.json" SLICE_INFO_PATH = f"{METADATA_PATH}/slice_info.config" +PROJECT_SETTINGS_PATH = f"{METADATA_PATH}/project_settings.config" class BambuLabVariant(ThreeMFVariant): """BambuLab specific implementation of the 3MF format.""" @@ -48,7 +49,7 @@ class BambuLabVariant(ThreeMFVariant): # Add relations elements for thumbnails ET.SubElement(relations_element, "Relationship", Target="/" + THUMBNAIL_PATH_MULTIPLATE, Id="rel-2", - Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail") + pe="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail") ET.SubElement(relations_element, "Relationship", Target="/" + THUMBNAIL_PATH_MULTIPLATE, Id="rel-4", @@ -74,6 +75,7 @@ class BambuLabVariant(ThreeMFVariant): self._storeModelSettings(archive) self._storePlateDesc(archive) self._storeSliceInfo(archive) + self._storeProjectSettings(archive) def _storeGCode(self, archive: zipfile.ZipFile, metadata_relations_element: ET.Element): """Store GCode data in the archive.""" @@ -166,3 +168,9 @@ class BambuLabVariant(ThreeMFVariant): used_g=str(used_g)) self._writer._storeElementTree(archive, SLICE_INFO_PATH, config) + + def _storeProjectSettings(self, archive: zipfile.ZipFile): + api = CuraApplication.getInstance().getCuraAPI() + file = zipfile.ZipInfo(PROJECT_SETTINGS_PATH) + json_string = json.dumps(api.interface.settings.getAllGlobalSettings(), separators=(", ", ": "), indent=4) + archive.writestr(file, json_string.encode("UTF-8")) \ No newline at end of file From 6d4377e056331def155ea0a624a6c3cd16008ddd Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 29 Apr 2025 11:30:55 +0200 Subject: [PATCH 3/3] Add disallowed area and reduce printable area CURA-12101 The disallowed area is the place where the print head goes to cut the filament, so it must really be avoided. On other models this place is outside the build area. I also reduced the printable size, otherwise the head would sometimes bump into the borders and gets shifted. --- resources/definitions/bambulab_x1.def.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/resources/definitions/bambulab_x1.def.json b/resources/definitions/bambulab_x1.def.json index 3a77b145f8..78a9b38131 100644 --- a/resources/definitions/bambulab_x1.def.json +++ b/resources/definitions/bambulab_x1.def.json @@ -30,13 +30,25 @@ "overrides": { "machine_depth": { "value": 256 }, + "machine_disallowed_areas": + { + "default_value": [ + [ + [-128, 100], + [-110, 100], + [-110, 128], + [-128, 128] + ] + ] + }, "machine_end_gcode": { "default_value": ";===== date: 20240528 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{machine_height + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos\nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of 'timelapse_record_flag'\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\nG1 Z250 F600\nG1 Z248\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n" }, "machine_extruder_count": { "value": 4 }, "machine_height": { "value": 251 }, "machine_name": { "default_value": "BambuLab Bambu X1" }, "machine_start_gcode": { "default_value": ";===== machine: X1 ====================\n;===== date: 20241023 ==================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z0 ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S{material_bed_temperature_layer_0} ;set bed temp\nM190 S{material_bed_temperature_layer_0} ;wait for bed temp\n\n{if machine_scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S{initial_extruder_nr}A ; switch material if AMS exist\n M109 S{material_print_temperature_layer_0, initial_extruder_nr}\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T{initial_extruder_nr}\n G1 X54 F12000\n G1 Y265\n M400\nM621 S{initial_extruder_nr}A\nM620.1 E F{material_max_flowrate/2.4053*60, initial_extruder_nr} T{material_print_temperature, initial_extruder_nr}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S{material_print_temperature_layer_0, initial_extruder_nr}\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{material_print_temperature_layer_0-20, initial_extruder_nr}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{-machine_width/2 if machine_center_is_zero else 0} Y{-machine_depth/2 if machine_center_is_zero else 0} I{machine_width} J{machine_depth}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if material_type=='PLA' and (material_bed_temperature_layer_0>45 or material_bed_temperature>45), initial_extruder_nr}\n M106 P3 S180\n M142 P1 R35 S40\n{endif}\n{if material_type=='PLA' and (material_bed_temperature_layer_0<=45 and material_bed_temperature<=45) , initial_extruder_nr}\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{material_print_temperature_layer_0, initial_extruder_nr} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if machine_scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{material_print_temperature, initial_extruder_nr}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y11 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if machine_buildplate_type=='textured_pei_plate'}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if acceleration_print > 0 and acceleration_wall_0 > 0, initial_extruder_nr}\n M204 S{acceleration_wall_0, initial_extruder_nr}\n {endif}\n {if acceleration_print > 0 and acceleration_wall_0 <= 0, initial_extruder_nr}\n M204 S{acceleration_print, initial_extruder_nr}\n {endif}\n\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of 'draw extrinsic para cali paint'\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{material_print_temperature, initial_extruder_nr} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60/4, initial_extruder_nr} C5.000 D{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*60, initial_extruder_nr} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{material_print_temperature, initial_extruder_nr}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X70.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X75.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X80.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X85.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X90.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X95.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X100.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X105.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X110.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X115.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X120.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X125.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X130.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X135.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{speed_wall_0*wall_line_width_0*layer_height/(1.75*1.75/4*3.14)*0.08, initial_extruder_nr}\n M623\n\n G1 X140.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X145.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X150.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X155.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X160.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X165.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X170.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X175.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X180.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X185.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X190.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X195.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X200.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X205.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X210.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X215.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n G1 X220.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/ 4 * 60, initial_extruder_nr}\n G1 X225.000 E0.31181 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n;===== purge line to wipe the nozzle ============================\nG1 E{-retraction_amount, initial_extruder_nr} F1800\nG1 X18.0 Y2.5 Z0.8 F18000.0;Move to start position\nG1 E{retraction_amount, initial_extruder_nr} F1800\nM109 S{material_print_temperature_layer_0, initial_extruder_nr}\nG1 Z0.2\nG0 X239 E15 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5) * 60, initial_extruder_nr}\nG0 Y12 E0.7 F{speed_wall_0*wall_line_width_0*layer_height/(0.3*0.5)/4* 60, initial_extruder_nr}\n" }, "machine_width": { "value": 256 }, - "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" } + "prime_tower_position_x": { "value": "resolveOrValue('prime_tower_size') + (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) + max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('machine_nozzle_offset_y')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (resolveOrValue('machine_depth') / 2 if resolveOrValue('machine_center_is_zero') else 0)" }, + "travel_avoid_distance": { "value": "3" } }, "settings": {