最前面的
Klipper本身是不支持断电续打的,这些天陆续刷到了一些断电续打的视频,进行了一些思考,在这里总结一下。
参考
3D打印机Klipper固件相关分享计划 8. 断料检测、断电模型保护/续打
不回零不给移动电机?Klipper直接重新定义M84命令 强制移动!
概论
这几天陆陆续续看了一些断电续打的方案。
大概就是在断电时利用UPS供电触发一个自定义的macro,然后这个macro控制关闭热床和喷头加热,移开打印头(断电保护)。写坐标文件到硬盘。之后就是改代码上机打印了。大抵如下啊
断电 ->把喷嘴从模型上已开(断电保护模型) -> 恢复供电 -> 断点续打
但是目前搞不到UPS,也就是没法断电时瞬间写入坐标。那就只能效仿malin,每隔一定时间写一次坐标,然后在删除代码打印,比如2S?还是10S???
或者另一种方案,换层时写入,这样是不是对性能要求没那么高呢?
本来想每秒存一次位置的,但是。。。从主板那里得到消息存储芯片会出问题。那每层存一次位置呢??
24/8/1 断电续打基本完结了,实际测下来,接缝的痕迹还是很明显的,续打的效果非常差,不建议。。。
获取坐标
启用save_variables配置分段
用来将变量保存到磁盘,以便在重新启动时使用。所有存储的变量在启动时会被加载到printer.save_variables.variables dict 变量中
- 启用功能 
 这里注意启用之后会直接创建文件
 还有就是直接输入文件名无效比如ccvariables.cfg。反正我是没找到创建的文件去哪里了。 要选择路径带文件名- 1 
 2
 3- [save_variables] 
 filename:~/printer_data/config/tempVariables.cfg
 # 必须提供一个可以用来保存参数到磁盘的文件名。
- 将变量保存到磁盘 - SAVE_VARIABLE VARIABLE=<名称> VALUE=<值>
- 取数据 - 1 
 2- {% set svv = printer.save_variables.variables %} 
 {svv.<名称>}
提取坐标保存到文件
| 1 | [gcode_macro save_LOCATION] | 
切片软件处理
每层图层改变后执行一次坐标存取
处理打印文件
第一种方案直接强制z坐标
- 参考不回零移动电机的方法第二种
- 删除打印层之前所有代码先点击开头,然后滑动滚轮到末尾,按住shift在点击末尾,就可以选中多行了。 
- 增加打印头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 | [force_move] | 
第一种官方指令
FORCE_MOVE stepper=stepper_x distance=1 velocity=100 accel=300
强制移动某个轴,设定移动距离,移动速度,加速度。
第二种改写喷头坐标实现
| 1 | #重写解锁电机的M84指令,然后设置当前位置(类似G92指定位置;强制设定低级运动学代码使用的打印头位置。) | 
- 我使用SET_KINEMATIC_POSITION X=252.49 Y=175 Z=0之后z坐标显示的是-0.11。实验以后是受到床网的影响。当开启床网渐退功能,在大于fade_end之后的坐标就正常显示,不会受到影响。
第三种重写M84指令(关闭电机指令)
| 1 | [gcode_macro M84] |