跟思兼学Klipper(41):优化 KAMP 的自适应划线
前言
原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正交流。
文章如有更新请访问 DFRobot 社区及 cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。
笔者之前一直使用 KAMP 的自适应划线擦嘴,但是存在一些小问题等待修复,最近互联网冲浪的时候看到 Teaching Tech 大佬的视频 Adaptive purge for every 3D printer: A simple slicer tweak ,有了此文。
注意,Purge 本文翻译为清洗,除了 Line Purge (线形图案) 外,还有其他很多清洗图案可供选择,如 VORON、BAMBU LOGO。
另外还有一点,Q2 单机没有更换剪料模块时是左右剪掉废料团,使用多色 BOX 后是前后碰掉废料团。
一. 什么是自适应清洗 (Adaptive purge) 及其优势
在 3D 打印的实际操作中,打印前喷嘴残留的耗材,极易导致打印件出现串色、瑕疵、层间粘合不良等问题,甚至可能导致打印失败,清洗线(Purge Line)便是解决这一问题的有效手段,而 Adaptive Purge(自适应清洗) 则是传统固定清洗线的升级方案,其优势如下:
- 清洗划线位置并非固定不变,可以减少热床打印板磨损
- 清洗线不在打印板边缘,避免翘曲的热床中间和边缘高度不同,导致清洗线不着床或刮床
- 清洗划线与模型之间距离更短,减少可能的喷嘴漏料、拉丝
- 在更高的高度挤出划线,不容易损坏热床,并且划线更容易移除

【图1】传统固定划线的劣势:不着床或划床;固定位置导致打印板磨损;距离模型较远导致移动过程中拉丝、漏料
二、KAMP 当前存在的问题
KAMP(Klipper Adaptive Mesh & Purge) 是基于 Klipper 固件开发的自适应方案,其中也包含了成熟的自适应清洗功能,是目前 3D 打印圈中实现 Adaptive Purge 的主流选择之一,但该方案并非完美,笔者当前遇到的问题包括:
- 调用 Klipper 宏生成,无法在切片软件中预览。作者有意使用后处理预览,但是比较麻烦且暂时没有发布
- 根据预设的参数在模型周围生成清洗线,但是不考虑 Skirt、Brim,可能会导致重叠
- 机械地根据预设参数生成清洗图案,可能会跑到热床外面,或者进入到切刀区等不可打印区域
三、解决方案
TeachingTech 大佬提供了方案,我们更进一步参考 Adaptive A1 Purgeline Start GCode for Bambu Lab P1S 为 Qidi Q2 进行优化,提供安全打印区域检查功能,它将检查在打印区域附近挤料是否存在安全风险,针对第一层打印区域的左下角(0,0 点)检查以下条件:
- 打印件靠近切刀区
- 打印件靠近打印床左/前/右侧边缘
- 将执行备用挤料流程
我们首先结合 Q2 的切片软件,找到切刀区范围(0,0 11,16)。再在打印机上移动打印头找到 PEI 板后方凸起的磨嘴板,用于备用划线。

获得最终起始 Gcode 中的划线代码:
; https://www.printables.com/model/1317820-adaptive-a1-purgeline-start-gcode-for-bambu-lab-p1
; Modified by 思兼 2026年2月23日
; Q2 切刀区 0,0 11,16. 默认线长 50mm 左右
; PEI 磨嘴备用划线区125,283 145,283
;===== Nozzle load line startup sequence ===============================
G90 ; 使用绝对坐标模式
M83 ; 将挤出机设置为相对模式
;----------------------------------------------------------------------
{if ((first_layer_print_min[0] - 5) < 11) and ((first_layer_print_min[1] - 5) < 16) or (first_layer_print_min[0] < 6) or (first_layer_print_min[1] < 6) or (first_layer_print_min[0] > 220)}
;====================================================================
; 备用划线流程
;====================================================================
{if curr_bed_type == "Supertack Plate" or curr_bed_type == "Cool Plate" or curr_bed_type == "Textured Cool Plate"}
; ;--- Purge at top of no-go zone for Supertack or Cool Plate ---
; ;--- 针对 Supertack 板/冷打板的划线动作 ---
; G0 X15 Y{28 - 2} Z2 F30000
; G0 Z0 ; 喷嘴轻触打印床,防止漏料导致空气进入喷嘴内部
; M109 S{nozzle_temperature_initial_layer[initial_extruder]}
; G0 Z0.3 F18000
; M400
; G91
; G1 Y-20 E10 F{outer_wall_volumetric_speed / (24 / 20) * 60}
; G1 Z-0.1
; G1 X2.4 E{0.3742 * 0.48} F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
; G1 Y5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) * 60}
; G1 Y5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
; G1 Y5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) * 60}
; G1 Y5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
{else}
;--- 备用划线位置:Y283 处 (后方凸起磨嘴区) ---
MOVE_TO_TRASH
G1 X125 F15000
G1 Y283 Z2 F15000
G0 Z0 ; 喷嘴轻触打印床,防止漏料导致空气进入喷嘴内部
M109 S{nozzle_temperature_initial_layer[initial_extruder]}
G1 Z0.3
M400
G91
G1 X15 E8 F{outer_wall_volumetric_speed / (24 / 20) * 60}
G1 Z-0.1
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
{endif}
;--- 返回打印起始位置 ---
G90
G1 Z{initial_layer_print_height + 0.3}
G0 X{first_layer_print_min[0] + (first_layer_print_size[0] / 2)} Y{first_layer_print_min[1]} F18000
{else}
;====================================================================
; 可在实际打印区域附近安全划线
;====================================================================
G1 X{first_layer_print_min[0] - 5} Y{first_layer_print_min[1] - 5} Z1.5 F18000
G0 Z0
M109 S{nozzle_temperature_initial_layer[initial_extruder]}
G1 Z0.3
M400
G91
G1 X20 E10 F{outer_wall_volumetric_speed / (24 / 20) * 60}
G1 Z-0.1
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) * 60}
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) * 60}
G1 X5 E0.3742 F{outer_wall_volumetric_speed / (0.3 * 0.5) / 4 * 60}
;--- 返回打印起始位置 ---
G90
G1 Z{initial_layer_print_height + 0.3}
G0 X{first_layer_print_min[0] + (first_layer_print_size[0] / 2)} Y{first_layer_print_min[1]} F12000
{endif}
M400 ; 等待所有动作完成
注意:
- 特殊板型逻辑未实装,仅适配 Q2 官方打印板,即后方有磨嘴区域
- 对于没有后方磨嘴区的通用打印板,注意不要触发备用划线
- 右半线段可以检查 PA 值设定是否合适
四、使用方法
如下图所示打开切片软件-打印机设置-打印机起始 Gcode,删除 T[initial_tool] 以下的原有内容,将上述 Gcode 拷贝进去即可。

4.1 如果已使用 Q2 优化整合包
打开配置文件中的 PRINT_START_with_boxes.cfg 文件,并搜索注释掉 Smart_Park 和 VORON_PURGE 行。

五、使用效果

【原厂划线,位置固定可能导致磨损且贴合较紧不易取下】

【自适应划线,默认位置】

【自适应划线,备用位置】

快去试试吧!