Klipper_断电续的打方案

最前面的

Klipper本身是不支持断电续打的,这些天陆续刷到了一些断电续打的视频,进行了一些思考,在这里总结一下。

参考

3D打印机Klipper固件相关分享计划 8. 断料检测、断电模型保护/续打
不回零不给移动电机?Klipper直接重新定义M84命令 强制移动!

概论

这几天陆陆续续看了一些断电续打的方案。
大概就是在断电时利用UPS供电触发一个自定义的macro,然后这个macro控制关闭热床和喷头加热,移开打印头(断电保护)。写坐标文件到硬盘。之后就是改代码上机打印了。大抵如下啊
断电 ->把喷嘴从模型上已开(断电保护模型) -> 恢复供电 -> 断点续打
但是目前搞不到UPS,也就是没法断电时瞬间写入坐标。那就只能效仿malin,每隔一定时间写一次坐标,然后在删除代码打印,比如2S?还是10S???
或者另一种方案,换层时写入,这样是不是对性能要求没那么高呢?

本来想每秒存一次位置的,但是。。。从主板那里得到消息存储芯片会出问题。那每层存一次位置呢??

24/8/1 断电续打基本完结了,实际测下来,接缝的痕迹还是很明显的,续打的效果非常差,不建议。。。

获取坐标

启用save_variables配置分段

用来将变量保存到磁盘,以便在重新启动时使用。所有存储的变量在启动时会被加载到printer.save_variables.variables dict 变量中

  1. 启用功能
    这里注意启用之后会直接创建文件
    还有就是直接输入文件名无效比如ccvariables.cfg。反正我是没找到创建的文件去哪里了。 要选择路径带文件名

    1
    2
    3
    [save_variables]
    filename:~/printer_data/config/tempVariables.cfg
    # 必须提供一个可以用来保存参数到磁盘的文件名。
  2. 将变量保存到磁盘
    SAVE_VARIABLE VARIABLE=<名称> VALUE=<值>

  3. 取数据

    1
    2
    {% set svv = printer.save_variables.variables %} 
    {svv.<名称>}

提取坐标保存到文件

1
2
3
4
5
6
7
8
9
10
[gcode_macro save_LOCATION]
description: 读取和保存坐标
gcode =
{% set x1 = printer.toolhead.position.x|float %}
{% set y1 = printer.toolhead.position.y|float %}
{% set z1 = printer.toolhead.position.z|float %}
SAVE_VARIABLE VARIABLE=x VALUE={x1}
SAVE_VARIABLE VARIABLE=y VALUE={y1}
SAVE_VARIABLE VARIABLE=z VALUE={z1}
RESPOND TYPE=error MSG="位置已保存"

切片软件处理

每层图层改变后执行一次坐标存取
image

处理打印文件

第一种方案直接强制z坐标

  1. 参考不回零移动电机的方法第二种
  2. 删除打印层之前所有代码

    先点击开头,然后滑动滚轮到末尾,按住shift在点击末尾,就可以选中多行了。

  3. 增加打印头
    1
    2
    3
    4
    5
    ; M190 S50 ; 设置床温度并等待达到设定温度
    ; M109 S180 ; 设置挤出头温度并等待达到设定温度
    M106 S255 ; 开风扇
    SET_KINEMATIC_POSITION Z=??? ; 设置动力学位置,Z轴高度为12.3毫米
    G28 X0 Y0 ; 将X和Y轴归零

第二种方案

找到一个角落,自定义g代码让打印头归零获得z坐标。
然后打印?

不回零移动电机的方法

因为Klipper默认不允许在不回原的情况下移动xyz坐标

首先

1
2
[force_move] 
enable_force_move: true

第一种官方指令

FORCE_MOVE stepper=stepper_x distance=1 velocity=100 accel=300
强制移动某个轴,设定移动距离,移动速度,加速度。

第二种改写喷头坐标实现

1
2
3
#重写解锁电机的M84指令,然后设置当前位置(类似G92指定位置;强制设定低级运动学代码使用的打印头位置。) 
#官方用法为:SET_KINEMATIC_POSITION [X=<值>] [Y=<值>] [Z=<值>]
#不指定坐标值就是等于当前面板上的坐标
  1. 我使用SET_KINEMATIC_POSITION X=252.49 Y=175 Z=0 之后z坐标显示的是-0.11。实验以后是受到床网的影响。当开启床网渐退功能,在大于fade_end之后的坐标就正常显示,不会受到影响。

第三种重写M84指令(关闭电机指令)

1
2
3
4
5
6
7
8
9
10
[gcode_macro M84] 
rename_existing: M84.1
gcode:   
SET_STEPPER_ENABLE STEPPER=stepper_x enable=0   SET_STEPPER_ENABLE STEPPER=stepper_y enable=0   SET_STEPPER_ENABLE STEPPER=stepper_z enable=0   SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=0   SET_STEPPER_ENABLE STEPPER=extruder enable=0   #电机数量记得对应更新   
SET_KINEMATIC_POSITION

#开机后设定当前位置(解锁保护)
[delayed_gcode KINEMATIC_POSITION] initial_duration:0.2
gcode:   
SET_KINEMATIC_POSITION