To view or edit the hidden default printer files ssh as root into your printer.
Go to “Settings -> General -> Root Account” enable root access then.
ssh root@192.168.1.16
cd /mnt/UDISK/printer_data/config
ls -l
(If ssh will not connect go to “Network” and forget current connection and reconnect.)
Default printer files
box.cfg
[serial_485 serial485]
serial: /dev/ttyS5
baud: 230400
[auto_addr]
[filament_rack]
not_pin: !PA5
[box]
bus:serial485
filament_sensor:filament_sensor
pre_cut_pos_x: 10 #预撞刀的位置,保证垂直撞刀
pre_cut_pos_y: 200
#cut_pos_x: -6.5
cut_pos_y: 200
Tn_retrude: -10 #切料后,使耗材退出挤出齿轮的长度
Tn_retrude_velocity: 600 #回抽速度
Tn_extrude_temp: 220 #挤出温度
Tn_extrude: 140 #如果当前温度设置温度,预加热刀120
Tn_extrude_velocity: 360 #挤出速度
buffer_empty_len: 30 #缓冲器回抽预留长度,需要挤出缓冲器预留的长度 (切断挤出机内撞刀到挤出齿轮的长度)
clean_left_pos_x: 135 #料槽吐完料摆动 左边界
clean_left_pos_y: 378
clean_right_pos_x: 160 #料槽吐完料摆动 右边界
clean_right_pos_y: 378
clean_velocity: 12000
box_need_clean_length:70
cut_velocity: 30000
extrude_pos_x: 133 #切换料吐料的位置
extrude_pos_y: 378
has_extrude_pos: 1 #有没有吐料需要 区分K1_MAX和f008
safe_pos_y: 345
safe_pos_x: 225
clean_pos_left_x: 160 #擦喷嘴 硅胶的左边界的坐标
clean_pos_right_x:170 #擦喷嘴 硅胶的右边界的坐标
clean_pos_middle_y:374 #擦喷嘴 硅胶的Y轴中间坐标
pre_cut_cal_pos_x:-5 #预切刀校准位置,减少校准时间
check_cut_pos_x_max: -5.5 #切刀校准最大值
check_cut_pos_x_min: -9.5 #切刀校准最小值
switch_pin:!nozzle_mcu:PB9
version: 1
[load_ai]
[gcode_macro BOX_LOAD_MATERIAL_HEATING]
gcode:
BOX_GO_TO_EXTRUDE_POS
BOX_SET_TEMP
[gcode_macro BOX_LOAD_MATERIAL_CUT_MATERIAL]
gcode:
BOX_CUT_MATERIAL
BOX_SAVE_FAN
[gcode_macro BOX_LOAD_MATERIAL_RETRUDE_MATERIAL]
gcode:
BOX_GO_TO_EXTRUDE_POS
BOX_SET_TEMP
BOX_MODE_WAIT
BOX_RETRUDE_MATERIAL
[gcode_macro BOX_LOAD_MATERIAL_EXTRUDE_MATERIAL]
gcode:
{% set get_tnn = "" %}
{% if 'TNN' in params|upper %}
{% set get_tnn = ('TNN=' + params.TNN) %}
{% endif %}
BOX_MODE_WAIT
BOX_EXTRUDE_MATERIAL {get_tnn}
[gcode_macro BOX_LOAD_MATERIAL_MATERIAL_FLUSH]
gcode:
{% set get_tnn = "" %}
{% if 'TNN' in params|upper %}
{% set get_tnn = ('TNN=' + params.TNN) %}
{% endif %}
BOX_EXTRUDER_EXTRUDE {get_tnn}
BOX_MATERIAL_CHANGE_FLUSH
[gcode_macro BOX_LOAD_MATERIAL_END]
gcode:
BOX_RESTORE_FAN
BOX_MOVE_TO_SAFE_POS
[gcode_macro BOX_LOAD_MATERIAL]
gcode:
BOX_LOAD_MATERIAL_HEATING
BOX_LOAD_MATERIAL_CUT_MATERIAL
BOX_LOAD_MATERIAL_RETRUDE_MATERIAL
BOX_LOAD_MATERIAL_EXTRUDE_MATERIAL
BOX_LOAD_MATERIAL_MATERIAL_FLUSH
BOX_LOAD_MATERIAL_END
[gcode_macro BOX_QUIT_MATERIAL_HEATING]
gcode:
BOX_GO_TO_EXTRUDE_POS
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
BOX_SET_TEMP
{% endif %}
[gcode_macro BOX_QUIT_MATERIAL_CUT_MATERIAL]
gcode:
BOX_CUT_MATERIAL
[gcode_macro BOX_QUIT_MATERIAL_RETRUDE_MATERIAL]
gcode:
BOX_GO_TO_EXTRUDE_POS
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
BOX_SET_TEMP
{% endif %}
BOX_RETRUDE_MATERIAL
[gcode_macro BOX_QUIT_MATERIAL_END]
gcode:
BOX_MOVE_TO_SAFE_POS
[gcode_macro BOX_QUIT_MATERIAL]
gcode:
BOX_QUIT_MATERIAL_HEATING
BOX_QUIT_MATERIAL_CUT_MATERIAL
BOX_QUIT_MATERIAL_RETRUDE_MATERIAL
BOX_QUIT_MATERIAL_END
# eg:
# BOX_EXTRUDE_MATERIAL TNN=T1A
# BOX_EXTRUDER_EXTRUDE TNN=T1A
# BOX_MATERIAL_FLUSH LEN=100 VELOCITY=360 TEMP=220
# BOX_RETRUDE_MATERIAL_WITH_TNN TNN=T1A
[gcode_macro BOX_INFO_REFRESH]
gcode:
BOX_SET_PRE_LOADING ADDR={params.ADDR} NUM={params.NUM} ACTION=RUN
M400
BOX_GET_RFID ADDR={params.ADDR} NUM={params.NUM}
M400
BOX_GET_REMAIN_LEN ADDR={params.ADDR} NUM={params.NUM}
M400
# CR_BOX_PRE_OPT
# CR_BOX_CUT
# CR_BOX_RETRUDE
# CR_BOX_EXTRUDE
# CR_BOX_WASTE
# CR_BOX_FLUSH
# CR_BOX_END_OPT
# CR_BOX_PRE_OPT_EXTRA
# CR_BOX_END_OPT_EXTRA
# 准备换耗材:M8200 P S[next] CR_BOX_PRE_OPT
# 切刀动作 M8200 C S0 CR_BOX_CUT
# 料盒退料动作:M8200 R I[pre] p0 CR_BOX_RETRUDE
# 料盒进料动作:M8200 L I[next] p1 CR_BOX_EXTRUDE
# 废料槽检测:M8200 W CR_BOX_WASTE
# 冲刷动作:M8200 F S[speed]L[length] CR_BOX_FLUSH
# 结束M8200 O S[next] CR_BOX_END_OPT
[gcode_macro M8200]
variable_tnn: None
gcode:
{% if params.P is defined %}
# 准备换耗材:M8200 P S[next]
CR_BOX_PRE_OPT
{% endif %}
{% if params.C is defined %}
# 切刀动作 M8200 C S0
CR_BOX_CUT
{% endif %}
{% if params.R is defined %}
# 料盒退料动作:M8200 R I[pre] p0
{% if params.E is defined %}
CR_BOX_RETRUDE LENGTH={params.E|float}
{% else %}
CR_BOX_RETRUDE
{% endif %}
{% endif %}
{% if params.L is defined %}
# 料盒进料动作:M8200 L I[next] p1
{% set I_param = params.I|int %}
{% set addr = (I_param / 4 + 1)|int|string %}
{% set num_map = ['A', 'B', 'C', 'D'] %}
{% set num = (I_param % 4)|int %}
{% set tnn = 'T' + addr + num_map[num] %}
{action_respond_info("tnn: %s" % tnn)}
CR_BOX_EXTRUDE TNN={tnn}
SET_GCODE_VARIABLE MACRO=M8200 VARIABLE=tnn VALUE='"{tnn}"'
CR_BOX_WASTE
{% endif %}
{% if params.W is defined %}
# 废料槽检测:M8200 W
CR_BOX_WASTE
{% endif %}
{% if params.F is defined %}
# 冲刷动作:M8200 F S[speed]L[length]
{% set tnn = printer['gcode_macro M8200'].tnn %}
{action_respond_info("tnn: %s" % tnn)}
CR_BOX_FLUSH TNN={tnn}
SET_GCODE_VARIABLE MACRO=M8200 VARIABLE=tnn VALUE='""'
{% endif %}
{% if params.O is defined %}
# 结束M8200 O S[next]
CR_BOX_END_OPT
{% endif %}
##### 举例T0可由以下宏命令替换 #####
# # CR_BOX_PRE_OPT
# M8200 P
# # CR_BOX_CUT
# M8200 C
# # CR_BOX_RETRUDE
# M8200 R
# # CR_BOX_EXTRUDE
# M8200 L I0
# # CR_BOX_WASTE
# M8200 W
# # CR_BOX_FLUSH
# M8200 F
# # CR_BOX_END_OPT
# M8200 O
# # T命令拆解后替换
# # 此处示例T0(假设均为同类型耗材,当前Z坐标50,已有耗材进去,当前挤出温度220,T0最大挤出温度为240)
# ## 1. 抬升Z轴,防止刮模型
# G0 Z50.4 F600
# ## 2. 预处理处理
# M8200 P
# ## 3. 移动到预切刀位置
# G0 X10 Y200 F12000
# ## 4. 设置撞刀的速度、加速度与加减速度
# SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=25000
# G0 F9000
# ## 5. 执行切刀动作
# M8200 C
# ## 6. 移动到挤出位置
# ### 先移动Y轴
# G0 Y345 F12000
# ### 6.1. 移动X轴,对准废料槽,此位置直行无碰撞风险
# G0 X139
# ### 6.2. 移动Y轴,进入废料槽
# G0 Y378
# ### 6.3. 移动X轴抬起挡板,易于接收废料,使其成型
# G0 X133
# ## 7. 耗材退到料盒
# M8200 R
# ## 8. 提前设置耗材挤出温度
# M104 S240
# ## 9. 料盒进料
# M8200 L I0
# ## 10. 冲刷(只展示一次)
# G91
# G0 E90 F600
# G90
# ### 10.1. 设置一下加速度与加减速,横擦一下,使用钢片割断耗材
# SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000
# G0 X160 F12000
# G0 X135
# ### 10.2 胶条上圆圈擦拭
# G0 X160 Y374 F12000
# G2 I4 J0 P1 F10000
# G0 X170 Y374 F12000
# G3 I-4 J0 P1 F10000
# ### 10.3 横擦抖动,并回到挤出位置
# G0 X160 Y378 F12000
# G0 X133 Y378 F12000
# G0 X160 Y378 F12000
# G0 X133 Y378 F12000
# G0 X160 Y378 F12000
# G0 X133 Y378 F12000
# ## 11. 移动出废料槽
# G0 X160
# G0 Y345 F12000
# ## 12. 结束处理
# M8200 O
# ## 13. 恢复Z轴(或者移动回模型后再恢复Z轴)
# G0 Z50 F600
gcode_macro.cfg
# F008
# CreateDate: 2023/03/21
[gcode_macro PRINTER_PARAM]
variable_z_safe_pause: 0.0
variable_z_safe_g28: 3.0
variable_max_x_position: 350.0
variable_max_y_position: 352.0
variable_max_z_position: 350.0
variable_fans: 3
variable_auto_g29: 0
variable_fan0_min: 25
variable_fan1_min: 50
variable_fan2_min: 100
variable_fan2_speed: 0
variable_fan0_speed: 0
variable_hotend_temp: 0
variable_e_min_current: 0.27
variable_bed_steady_temp: 29,60,70,100
variable_bed_steady_time: 180,60,120,600
gcode:
[gcode_macro MAINTENANCE_ITEM_PARAM]
variable_cut_calibration: 10000 # 次数
variable_shaper_calibrate: 1800000 # 秒 500小时
variable_belt_tensioning: 3600000 # 秒 1000小时
variable_motion_mechanism_lubrication: 1800000 # 秒
variable_camera_maintenance: 1800000 # 秒
variable_fan_inspection: 1800000 # 秒
variable_nozzle: 20000 # 克
variable_cut: 100000 # 次
variable_machine_teflon_tube: 3600000 # 秒
variable_wipe_mouth_strip: 1800000 # 秒
variable_air_filter: 1800000 # 秒
variable_cfs_teflon_tube: 3600000 # 秒
variable_cfs_desiccant: 1800000 # 秒
gcode:
[gcode_macro MAINTENANCE_ITEM]
gcode:
[gcode_macro AUTOTUNE_SHAPERS]
variable_autotune_shapers: 'zv','mzv','ei'
gcode:
[gcode_macro IF_NEED_HOME]
gcode:
{% set x_axes = printer.toolhead.homed_axes %}
{% if x_axes is defined and x_axes[0] is defined %}
{action_respond_info(
"x_axes: %s \n"
% (x_axes))}
{% else %}
G28
{% endif %}
[gcode_macro LOAD_MATERIAL_CLOSE_FAN2]
variable_fan2_value: 0
gcode:
SAVE_GCODE_STATE NAME=myMoveState
{% if printer['output_pin fan2'].value > 0.0 %}
SET_GCODE_VARIABLE MACRO=LOAD_MATERIAL_CLOSE_FAN2 VARIABLE=fan2_value VALUE={printer['output_pin fan2'].value}
M107 P2
{% endif %}
[gcode_macro LOAD_MATERIAL_RESTORE_FAN2]
gcode:
{% set fan2_value = printer['gcode_macro LOAD_MATERIAL_CLOSE_FAN2'].fan2_value|float %}
RESTORE_GCODE_STATE NAME=myMoveState
{% if fan2_value > 0.0 %}
{% set s_value = (fan2_value * 255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) * 255 / (255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) %}
M106 P2 S{s_value}
SET_GCODE_VARIABLE MACRO=LOAD_MATERIAL_CLOSE_FAN2 VARIABLE=fan2_value VALUE=0
{% endif %}
[gcode_macro LOAD_MATERIAL_HEATING]
gcode:
SAVE_GCODE_STATE NAME=myMoveState
BOX_GO_TO_EXTRUDE_POS
FILAMENT_RACK_SAVE_FAN
FILAMENT_RACK_PRE_FLUSH
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
FILAMENT_RACK_SET_TEMP
{% endif %}
[gcode_macro LOAD_MATERIAL_MATERIAL_FLUSH]
gcode:
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
FILAMENT_RACK_FLUSH
{% endif %}
[gcode_macro LOAD_MATERIAL_END]
gcode:
FILAMENT_RACK_RESTORE_FAN
SET_COOL_TEMP
BOX_MOVE_TO_SAFE_POS
RESTORE_GCODE_STATE NAME=myMoveState
[gcode_macro LOAD_MATERIAL]
gcode:
LOAD_MATERIAL_HEATING
LOAD_MATERIAL_MATERIAL_FLUSH
LOAD_MATERIAL_END
[gcode_macro QUIT_MATERIAL_HEATING]
gcode:
SAVE_GCODE_STATE NAME=myMoveState
BOX_GO_TO_EXTRUDE_POS
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
FILAMENT_RACK_SET_TEMP
{% endif %}
[gcode_macro QUIT_MATERIAL_CUT_MATERIAL]
gcode:
BOX_MOVE_TO_CUT
M400
[gcode_macro QUIT_MATERIAL_RETRUDE_MATERIAL]
gcode:
{% if printer["filament_switch_sensor filament_sensor"].filament_detected %}
G91
G0 E-10 F360
G90
M400
{% endif %}
[gcode_macro QUIT_MATERIAL_END]
gcode:
BOX_MOVE_TO_SAFE_POS
SET_COOL_TEMP
RESTORE_GCODE_STATE NAME=myMoveState
[gcode_macro QUIT_MATERIAL]
gcode:
QUIT_MATERIAL_HEATING
QUIT_MATERIAL_CUT_MATERIAL
QUIT_MATERIAL_RETRUDE_MATERIAL
QUIT_MATERIAL_END
[gcode_macro Qmode]
variable_flag: 0
variable_accel: 0
variable_accel_to_decel: 0
variable_velocity: 0
variable_square_corner_velocity: 0
variable_pressure_advance:0.0
variable_fan0_value: 0.00
variable_fan1_value: 0.00
variable_fan2_value: 0.00
variable_speed_factor: 0
variable_max_accel: 2500
variable_max_accel_to_decel: 2500
gcode:
{% set printer_state = printer.print_stats.state %}
{% if printer['gcode_macro Qmode'].flag|int == 0 %}
{% if printer_state == "printing" or printer_state == "paused" %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=accel VALUE={printer.toolhead.max_accel}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=accel_to_decel VALUE={printer.toolhead.max_accel_to_decel}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=velocity VALUE={printer.toolhead.max_velocity}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=square_corner_velocity VALUE={printer.toolhead.square_corner_velocity}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=pressure_advance VALUE={printer.extruder.pressure_advance}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=speed_factor VALUE={printer.gcode_move.speed_factor}
# Set Motion Parameters
SET_VELOCITY_LIMIT ACCEL=2500
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500
SET_VELOCITY_LIMIT VELOCITY=150
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=5
SET_PRESSURE_ADVANCE ADVANCE=0.05
M220 S50
{% set tmp = printer['output_pin fan0'].value * 255 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE={tmp}
{% if tmp - printer['gcode_macro PRINTER_PARAM'].fan0_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
{% set tmp = printer['gcode_macro PRINTER_PARAM'].fan0_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
SET_PIN PIN=fan0 VALUE={tmp}
{% endif %}
{% set tmp = printer['output_pin fan1'].value * 255 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE={printer['output_pin fan1'].value * 255}
{% if tmp - printer['gcode_macro PRINTER_PARAM'].fan1_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
{% set tmp = printer['gcode_macro PRINTER_PARAM'].fan1_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
SET_PIN PIN=fan1 VALUE={tmp}
{% endif %}
{% set tmp = printer['output_pin fan2'].value * 255 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE={printer['output_pin fan2'].value * 255}
{% if tmp - printer['gcode_macro PRINTER_PARAM'].fan2_min > (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
{% set tmp = printer['gcode_macro PRINTER_PARAM'].fan2_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
SET_PIN PIN=fan2 VALUE={tmp}
{% endif %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=flag VALUE=1
SET_QMODE_FLAG FLAG=1
{% endif %}
{% endif %}
[gcode_macro Qmode_exit]
gcode:
{% set printer_state = printer.print_stats.state %}
{% if printer['gcode_macro Qmode'].flag|int == 1 %}
{% if printer_state == "printing" or printer_state == "paused" %}
SET_VELOCITY_LIMIT ACCEL={printer['gcode_macro Qmode'].accel}
SET_VELOCITY_LIMIT ACCEL_TO_DECEL={printer['gcode_macro Qmode'].accel_to_decel}
SET_VELOCITY_LIMIT VELOCITY={printer['gcode_macro Qmode'].velocity}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={printer['gcode_macro Qmode'].square_corner_velocity}
SET_PRESSURE_ADVANCE ADVANCE={printer['gcode_macro Qmode'].pressure_advance}
M220 S{printer['gcode_macro Qmode'].speed_factor * 100}
{% if printer['output_pin fan0'].value != 0 %}
{action_respond_info("fan0_value = %s" % printer['gcode_macro Qmode'].fan0_value)}
SET_PIN PIN=fan0 VALUE={printer['gcode_macro Qmode'].fan0_value}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE=0
{% endif %}
{% if printer['output_pin fan1'].value != 0 %}
{action_respond_info("fan1_value = %s" % printer['gcode_macro Qmode'].fan1_value)}
SET_PIN PIN=fan1 VALUE={printer['gcode_macro Qmode'].fan1_value}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE=0
{% endif %}
{% if printer['output_pin fan2'].value != 0 %}
{action_respond_info("fan2_value = %s" % printer['gcode_macro Qmode'].fan2_value)}
SET_PIN PIN=fan2 VALUE={printer['gcode_macro Qmode'].fan2_value}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE=0
{% endif %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=flag VALUE=0
SET_QMODE_FLAG FLAG=0
{% endif %}
{% endif %}
[gcode_macro M204]
rename_existing: M204.1
gcode:
# {% if printer['gcode_macro Qmode'].flag|int == 0 %}
{% set get_params = "" %}
{% set qmode_max_accel = printer['gcode_macro Qmode'].max_accel|string %}
{% if 'S' in params|upper %}
{% if printer['gcode_macro Qmode'].flag|int == 1 and params.S|float > qmode_max_accel|float %}
{% set get_params = (get_params + ' ' + 'S' + qmode_max_accel) %}
{% else %}
{% set get_params = (get_params + ' ' + 'S' + params.S) %}
{% endif %}
{% endif %}
{% if 'P' in params|upper %}
{% if printer['gcode_macro Qmode'].flag|int == 1 and params.P|float > qmode_max_accel|float %}
{% set get_params = (get_params + ' ' + 'P' + qmode_max_accel) %}
{% else %}
{% set get_params = (get_params + ' ' + 'P' + params.P) %}
{% endif %}
{% endif %}
{% if 'T' in params|upper %}
{% if printer['gcode_macro Qmode'].flag|int == 1 and params.T|float > qmode_max_accel|float %}
{% set get_params = (get_params + ' ' + 'T' + qmode_max_accel) %}
{% else %}
{% set get_params = (get_params + ' ' + 'T' + params.T) %}
{% endif %}
{% endif %}
M204.1 {get_params}
# {% endif %}
[gcode_macro M205]
gcode:
{% if 'X' in params %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.X}
{% elif 'Y' in params %}
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY={params.Y}
{% endif %}
[gcode_macro M106]
gcode:
{% set fans = printer["gcode_macro PRINTER_PARAM"].fans|int %}
{% set fan = 0 %}
{% set value = 0 %}
{% if params.P is defined %}
{% set tmp = params.P|int %}
{% if tmp < fans %}
{% set fan = tmp %}
{% endif %}
{% endif %}
{% if params.S is defined %}
{% set tmp = params.S|float %}
{% else %}
{% set tmp = 255 %}
{% endif %}
{% if tmp > 0 %}
{% if fan == 0 %}
{% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan0_min) / 255 * tmp %}
{% if printer['gcode_macro Qmode'].flag | int == 1 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan0_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan0_min + value}
{% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) / 2 %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + value %}
{% endif %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan0_min + value %}
{% endif %}
{% endif %}
{% if fan == 1 %}
{% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan1_min) / 255 * tmp %}
{% if printer['gcode_macro Qmode'].flag | int == 1 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan1_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan1_min + value}
{% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan1_min) / 2 %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + value %}
{% endif %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan1_min + value %}
{% endif %}
{% endif %}
{% if fan == 2 %}
{% set value = (255 - printer["gcode_macro PRINTER_PARAM"].fan2_min) / 255 * tmp %}
{% if printer['gcode_macro Qmode'].flag | int == 1 %}
SET_GCODE_VARIABLE MACRO=Qmode VARIABLE=fan2_value VALUE={printer["gcode_macro PRINTER_PARAM"].fan2_min + value}
{% if value > (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) / 2 %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + value %}
{% endif %}
{% else %}
{% set value = printer["gcode_macro PRINTER_PARAM"].fan2_min + value %}
{% endif %}
{% endif %}
{% endif %}
{% if value >= 255 %}
{% set value = 255 %}
{% endif %}
SET_PIN PIN=fan{fan} VALUE={value}
[gcode_macro M107]
gcode:
{% set fans = printer["gcode_macro PRINTER_PARAM"].fans|int %}
{% if params.P is defined %}
{% if params.P|int < fans %}
SET_PIN PIN=fan{params.P|int} VALUE=0
{% else %}
SET_PIN PIN=fan0 VALUE=0
{% endif %}
{% else %}
SET_PIN PIN=fan0 VALUE=0
SET_PIN PIN=fan2 VALUE=0
{% endif %}
[gcode_macro M141]
gcode:
{% if 'S' in params|upper %}
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=1
{% if printer["temperature_fan chamber_fan"].speed > 0.0 %}
SET_PIN PIN=fan1 VALUE=255
{% else %}
SET_PIN PIN=fan1 VALUE=0
{% endif %}
{% if params.S|int > 40 %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET=0
SET_PIN PIN=fan1 VALUE=0
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={params.S}
{% elif params.S|int > 0 %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={params.S|default(35)}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% else %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET=35
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% if params.S|int == 0 %}
SET_PIN PIN=fan1 VALUE=0
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M191]
gcode:
{% if 'S' in params|upper %}
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=1
{% if printer["temperature_fan chamber_fan"].speed > 0.0 %}
SET_PIN PIN=fan1 VALUE=255
{% else %}
SET_PIN PIN=fan1 VALUE=0
{% endif %}
{% if params.S|int > 40 %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET=0
SET_PIN PIN=fan1 VALUE=0
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={params.S} WAIT=1
{% elif params.S|int > 0 %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={params.S|default(35)}
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0 WAIT=1
{% else %}
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET=35
SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET=0
{% if params.S|int == 0 %}
SET_PIN PIN=fan1 VALUE=0
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=0
{% endif %}
{% endif %}
{% endif %}
[gcode_macro M900]
gcode:
{% if 'K' in params %}
{% if 'E' in params %}
SET_PRESSURE_ADVANCE EXTRUDER={params.E} ADVANCE={params.K}
{% else %}
SET_PRESSURE_ADVANCE ADVANCE={params.K}
{% endif %}
{% endif %}
[delayed_gcode wait_temp]
# initial_duration: 2.
gcode:
{% set cur_temp = printer.extruder.temperature %}
{% if cur_temp|int < 40 %}
{action_respond_info("end_temp!\n")}
WAIT_TEMP_END
{% else %}
{action_respond_info("cur_temp = %s \n" % (cur_temp))}
UPDATE_DELAYED_GCODE ID=wait_temp DURATION=5
{% endif %}
[gcode_macro WAIT_TEMP_START]
gcode:
UPDATE_DELAYED_GCODE ID=wait_temp DURATION=1
M106 P0 S255
[gcode_macro WAIT_TEMP_END]
gcode:
UPDATE_DELAYED_GCODE ID=wait_temp DURATION=0
M106 P0 S0
[gcode_macro PRINT_CALIBRATION]
# This part of the command is replaced by the application side without passing parameters
gcode:
CX_PRINT_LEVELING_CALIBRATION
[gcode_macro FIRST_FLOOR_PAUSE_POSITION]
gcode:
{% set extruder_temp = printer.custom_macro.g28_ext_temp %}
M104 S{extruder_temp}
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer['gcode_macro PRINTER_PARAM'].max_x_position|float + 1 %}
G90
G1 Z2 F600
G1 X{x_park} Y{y_park} F6000
G1 Z0.2 F600
[gcode_macro ACCURATE_G28]
gcode:
ACCURATE_HOME_Z
# PRINT_TEMP_SET EXTRUDER_TEMP=130 BED_TEMP=40
# PRINT_TEMP_SET EXTRUDER_TEMP=130 BED_TEMP=40 WAIT_TEMP=1
[gcode_macro PRINT_TEMP_SET]
gcode:
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(220)|float %}
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_WAITTEMP = (140.0|float)|int %}
{% set WAIT_TEMP = params.WAIT_TEMP|default(0)|int %}
M106 S0 #需要关闭模型风扇
M140 S{BED_TEMP}
M104 S{EXTRUDER_WAITTEMP}
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000
{% if WAIT_TEMP|int == 1 %}
M104 S{EXTRUDER_WAITTEMP}
M190 S{BED_TEMP}
M109 S{EXTRUDER_WAITTEMP}
{% endif %}
[gcode_macro ZDOWN_SWITCH_SET]
gcode:
ZDOWN_SWITCH ENABLE={params.VALUE}
[gcode_macro SET_CHAMBER_FAN]
gcode:
{% set temp = printer["temperature_fan chamber_fan"].temperature|int %}
{% set target = printer["temperature_fan chamber_fan"].target|int %}
{% set control = printer["configfile"]["config"]["temperature_fan chamber_fan"].control %}
{action_respond_info("temp: %s, target: %s, control: %s" % (temp, target, control))}
{% if control == "watermark" %}
{% set max_delta = printer["configfile"]["config"]["temperature_fan chamber_fan"].max_delta|int %}
{action_respond_info("max_delta: %s" % (max_delta))}
{% if temp >= target %}
{% set tmp = temp + max_delta + 1 %}
# 由于M141设置导致风扇未开启,需要恢复状态(先设置高于的温度值,再恢复)
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={tmp}
G4 P500
M400
SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={target}
{% endif %}
{% endif %}
[gcode_macro START_PRINT]
variable_prepare: 0
gcode:
BOX_START_PRINT
G90
SET_GCODE_OFFSET Z=0
{% set g28_extruder_temp = printer.custom_macro.g28_ext_temp %}
{% set bed_temp = printer.custom_macro.default_bed_temp %}
{% set extruder_temp = printer.custom_macro.default_extruder_temp %}
{% set BED_TEMP = params.BED_TEMP|default(60)|float %}
{% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(220)|float %}
# {% set EXTRUDER_WAITTEMP = (EXTRUDER_TEMP/1.5|float)|int %}
{% set EXTRUDER_WAITTEMP = (140.0|float)|int %}
# {% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% if printer['gcode_macro START_PRINT'].prepare|int == 0 %}
{action_respond_info("print prepared 111")}
M106 S0 #需要关闭模型风扇
M140 S{params.BED_TEMP}
M104 S{EXTRUDER_WAITTEMP}
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000
G28
# 精擦嘴
NOZZLE_CLEAR
M104 S{EXTRUDER_WAITTEMP}
M190 S{params.BED_TEMP}
M109 S{EXTRUDER_WAITTEMP}
BOX_NOZZLE_CLEAN
# 精归零
NEXT_HOMEZ_NACCU
G28 Z
{% else %}
PRINT_PREPARE_CLEAR
{% endif %}
M140 S{params.BED_TEMP}
M104 S{params.EXTRUDER_TEMP}
BOX_GO_TO_EXTRUDE_POS
M190 S{params.BED_TEMP}
M109 S{params.EXTRUDER_TEMP} ;wait nozzle heating
M220 S100 ;Reset Feedrate
# M221 S100 ;Reset Flowrate
G21
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=10
M204 S5000
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=5000
BOX_NOZZLE_CLEAN
G92 E0 ; Reset Extruder
SET_PIN PIN=extruder_fan VALUE=1
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=1
[gcode_macro PRINT_PREPARED]
gcode:
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=prepare VALUE=1
{action_respond_info("print prepared")}
[gcode_macro PRINT_PREPARE_CLEAR]
gcode:
SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=prepare VALUE=0
[gcode_macro END_PRINT_POINT_WITHOUT_LIFTING]
gcode:
{% if "xyz" in printer.toolhead.homed_axes %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
{% set act_z = printer.toolhead.position.z|float %}
G91
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-1.0 F180
G1 E-{E} F4000
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
{% if act_z < (max_z - 5) %}
G1 Z2.0 F600
{% endif %}
G90
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
G1 X{x_park} Y{y_park} F30000
{% else %}
{action_respond_info("end print xyz_axes is NULL\n")}
{% endif %}
[gcode_macro END_PRINT_Z_SAFE]
gcode:
{% if "xyz" in printer.toolhead.homed_axes %}
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
{% set act_z = printer.toolhead.position.z|float %}
G91
{action_respond_info("END_PRINT_Z_SAFE act_z:%s, max_z:%s \n" % (act_z, max_z))}
{% if act_z < (max_z - 5) %}
{action_respond_info("END_PRINT_Z_SAFE G1 Z2.0 F600 \n")}
G1 Z2.0 F600
{% endif %}
G90
{% else %}
{action_respond_info("end print xyz_axes is NULL\n")}
{% endif %}
[gcode_macro END_PRINT_POINT]
gcode:
{% if "xyz" in printer.toolhead.homed_axes %}
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set z_safe = 0.0 %}
{% if act_z < (max_z / 2) %}
{% set z_safe = (max_z / 2) - act_z %}
{% elif act_z < max_z %}
{% set z_safe = 2.0 %}
{% endif %}
G91
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-1.0 F180
G1 E-{E} F4000
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
# {action_respond_info("END_PRINT_POINT act_z:%s, max_z:%s \n" % (act_z, max_z))}
# {% if act_z < (max_z - 5) %}
# {action_respond_info("END_PRINT_POINT G1 Z2.0 F600 \n")}
# G1 Z2.0 F600
# {% endif %}
G90
# {% set y_park = printer.toolhead.axis_maximum.y/2 %}
# {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
# G1 X{x_park} Y{y_park} F30000
{% if z_safe > 2.0 %}
G91
{% set z_safe = z_safe - 2.0 %}
G1 Z{z_safe} F600
G90
{% endif %}
{% else %}
{action_respond_info("end print xyz_axes is NULL\n")}
{% endif %}
[gcode_macro END_PRINT]
gcode:
RESTORE_LIMITS
ENABLE_PRESSURE_ADVANCE VALUE=1
M400
G92 E0
END_PRINT_Z_SAFE
BOX_END
BOX_END_PRINT
Qmode_exit
EXCLUDE_OBJECT_RESET
PRINT_PREPARE_CLEAR
M220 S100
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000
TURN_OFF_HEATERS
M107 P1
M107 P2
END_PRINT_POINT
WAIT_TEMP_START
M106 P0 S127
M141 S0
SET_PIN PIN=extruder_fan VALUE=0
# SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=0
[gcode_macro FIRST_FLOOR_PAUSE]
description: Pause the first floor print
# change this if you need more or less extrusion
variable_extrude: 2.0
gcode:
##### read E from pause macro #####
{% set E = printer["gcode_macro FIRST_FLOOR_PAUSE"].extrude|float %}
##### set park positon for x and y #####
# default is your max posion from your printer.cfg
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
##### calculate save lift position #####
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set z_safe = 0.0 %}
{% if act_z < (max_z - 2.0) %}
{% set z_safe = 2.0 %}
{% elif act_z < max_z %}
{% set z_safe = max_z - act_z %}
{% endif %}
##### end of definitions #####
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=z_safe_pause VALUE={z_safe|float}
PAUSE_BASE
G91
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-1.0 F180
G1 E-{E} F300
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
G1 Z{z_safe} F600
G90
G1 X{x_park} Y{y_park} F30000
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
# save fan2 value and turn off fan2
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan2_speed VALUE={printer['output_pin fan2'].value}
{% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
{action_respond_info("fan2_value = %s \n" % (fspeed))}
M106 P2 S0
M106 S0
[gcode_macro FIRST_FLOOR_RESUME]
description: Resume the first floor print
gcode:
{% if printer['gcode_macro PRINTER_PARAM'].fan2_speed > 0 %}
# {% set fspeed = printer['gcode_macro PRINTER_PARAM'].fan2_speed %}
# {action_respond_info("fan2_value2 = %s \n" % (fspeed))}
# SET_PIN PIN=fan2 VALUE={(printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 + 0.5)|int}
{% set s_value = (printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) * 255 / (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min)|float %}
M106 P2 S{s_value}
{% endif %}
##### read E from pause macro #####
{% set E = printer["gcode_macro FIRST_FLOOR_PAUSE"].extrude|float + 1.0 %}
#### get VELOCITY parameter if specified ####
{% if 'VELOCITY' in params|upper %}
{% set get_params = ('VELOCITY=' + params.VELOCITY) %}
{%else %}
{% set get_params = "" %}
{% endif %}
##### end of definitions #####
{% if printer.extruder.can_extrude|lower == 'true' %}
G91
G1 E{E} F2100
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
M400
RESUME_BASE {get_params}
[gcode_macro PAUSE]
description: Pause the actual running print
rename_existing: PAUSE_BASE
# change this if you need more or less extrusion
variable_extrude: 2.0
gcode:
{% if printer.pause_resume.is_paused|lower == 'false' %}
PAUSE_BASE
PAUSE_EXTERNAL
{% endif %}
[gcode_macro PAUSE_EXTERNAL]
gcode:
##### read E from pause macro #####
{% set E = printer["gcode_macro PAUSE"].extrude|float %}
##### set park positon for x and y #####
# default is your max posion from your printer.cfg
{% set y_park = printer.toolhead.axis_maximum.y/2 %}
{% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
##### calculate save lift position #####
{% set max_z = printer["gcode_macro PRINTER_PARAM"].max_z_position|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set z_safe = 0.0 %}
{% if act_z < 48.0 %}
{% set z_safe = 50.0 - act_z %}
{% elif act_z < (max_z - 2.0) %}
{% set z_safe = 2.0 %}
{% elif act_z < max_z %}
{% set z_safe = max_z - act_z %}
{% endif %}
{action_respond_info("z_safe = %s"% (z_safe))}
##### end of definitions #####
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=z_safe_pause VALUE={z_safe|float}
M400
G91
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=hotend_temp VALUE={printer.extruder.target}
M104 S140
{% if "xyz" in printer.toolhead.homed_axes %}
{% if printer.extruder.can_extrude|lower == 'true' %}
G1 E-1.0 F180
G1 E-{E} F360
{% else %}
{action_respond_info("Extruder not hot enough")}
{% endif %}
G1 Z{z_safe} F600
M400
G90
BOX_GO_TO_EXTRUDE_POS
BOX_NOZZLE_CLEAN
BOX_MOVE_TO_SAFE_POS
{% else %}
{action_respond_info("Printer not homed")}
{% endif %}
# save fan2 value and turn off fan2
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan2_speed VALUE={printer['output_pin fan2'].value}
{% set fspeed = printer['output_pin fan2'].value %}
{action_respond_info("fan2_value = %s \n" % (fspeed))}
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_speed VALUE={printer['output_pin fan0'].value}
{% set fspeed = printer['output_pin fan0'].value %}
{action_respond_info("fan0_value = %s \n" % (fspeed))}
M106 P2 S0
M106 P0 S0
SET_PIN PIN=extruder_fan VALUE=0
[gcode_macro CALIBRATE_CUT_POS]
gcode:
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
SET_LIMITS
MOTOR_SYS_PARAM NUM=1 DATA=1 ID=70 PARAMS=300 PARAMS_TYPE=float
MOTOR_CHECK_CUT_POS
M400
MOTOR_SYS_PARAM NUM=1 DATA=1 ID=70 PARAMS=100 PARAMS_TYPE=float
RESTORE_LIMITS
[gcode_macro INPUTSHAPER]
gcode:
{% set enabled = printer["filament_switch_sensor filament_sensor"].enabled %}
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
{% endif %}
G90
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
{% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
{% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
G1 X{POSITION_X} Y{POSITION_Y} F6000
G1 Z10 F600
SHAPER_CALIBRATE
CXSAVE_CONFIG
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
{% endif %}
M400
[gcode_macro BELT_TENSION]
gcode:
G90
{% if "xy" not in printer.toolhead.homed_axes %}
G28 X Y
{% endif %}
BED_MESH_CLEAR
BOX_MOVE_TO_SAFE_POS
M400
M84
{% if 'X' in params.AXES|upper %}
BELT_MDL_INFO MDL_NAME=mdlx
BELT_MDL_SET MDL_NAME=mdlx MDL_N=140
{% elif 'Y' in params.AXES|upper %}
BELT_MDL_INFO MDL_NAME=mdly
BELT_MDL_SET MDL_NAME=mdly MDL_N=140
{% else %}
BELT_MDL_INFO MDL_NAME=mdlx
BELT_MDL_SET MDL_NAME=mdlx MDL_N=140
BELT_MDL_INFO MDL_NAME=mdly
BELT_MDL_SET MDL_NAME=mdly MDL_N=140
{% endif %}
SET_MAINTENANCE_ITEM_VARIABLE NAME=calibrate VARIABLE=belt_tensioning VALUE=0
[gcode_macro BEDPID]
gcode:
PID_CALIBRATE HEATER=heater_bed TARGET=100
SAVE_CONFIG
[gcode_macro NOZZLE_PID]
gcode:
SET_PIN PIN=fan0 VALUE=255
PID_CALIBRATE HEATER=extruder TARGET=230
SAVE_CONFIG
SET_PIN PIN=fan0 VALUE=0
[gcode_macro NOZZLE_PID_HIGH]
gcode:
SET_PIN PIN=fan0 VALUE=255
PID_CALIBRATE HEATER=extruder TARGET=320
SAVE_CONFIG
SET_PIN PIN=fan0 VALUE=0
[gcode_macro TUNOFFINPUTSHAPER]
gcode:
SET_INPUT_SHAPER SHAPER_FREQ_X=0 SHAPER_FREQ_Y=0
[gcode_macro RESUME]
description: Resume the actual running print
rename_existing: RESUME_BASE
gcode:
RESUME_EXTERNAL_PROCESS
RESUME_BASE {get_params}
[gcode_macro RESUME_EXTERNAL_PROCESS]
gcode:
BOX_ERROR_RESUME_PROCESS
RESUME_EXTERNAL
[gcode_macro RESUME_EXTERNAL]
gcode:
{% if printer.pause_resume.resume_err is none or printer.pause_resume.resume_err|lower == 'false' %}
{% if printer['gcode_macro PRINTER_PARAM'].hotend_temp|int != 0 %}
{% if printer['gcode_macro PRINTER_PARAM'].hotend_temp|int > printer.extruder.temperature %}
M109 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
{% else %}
M104 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
{% endif %}
SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=hotend_temp VALUE=0
{% endif %}
{% if printer['gcode_macro PRINTER_PARAM'].fan2_speed > 0 %}
SET_PIN PIN=fan2 VALUE={(printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 + 0.5)|int}
{% set s_value = (printer['gcode_macro PRINTER_PARAM'].fan2_speed * 255 - printer['gcode_macro PRINTER_PARAM'].fan2_min) * 255 / (255 - printer['gcode_macro PRINTER_PARAM'].fan2_min)|float %}
# M106 P2 S{s_value}
{% endif %}
{% if printer['gcode_macro PRINTER_PARAM'].fan0_speed > 0 %}
SET_PIN PIN=fan0 VALUE={(printer['gcode_macro PRINTER_PARAM'].fan0_speed * 255 + 0.5)|int}
{% set s_value_0 = (printer['gcode_macro PRINTER_PARAM'].fan0_speed * 255 - printer['gcode_macro PRINTER_PARAM'].fan0_min) * 255 / (255 - printer['gcode_macro PRINTER_PARAM'].fan0_min)|float %}
# M106 P2 S{s_value}
{% endif %}
BOX_GO_TO_EXTRUDE_POS
{% set z_resume_move = printer['gcode_macro PRINTER_PARAM'].z_safe_pause|int %}
{% if z_resume_move > 2 %}
{% set z_resume_move = z_resume_move - 2 %}
G91
#G1 Z-{z_resume_move} F600
M400
{% endif %}
{action_respond_info("z_resume_move = %s"% (z_resume_move))}
##### read E from pause macro #####
{% set E = printer["gcode_macro PAUSE"].extrude|float + 80.0 %}
{% set E_VELOCITY = printer['filament_rack'].remain_material_velocity * 0.8 %}
{action_respond_info("velocity: %s" % (E_VELOCITY))}
#### get VELOCITY parameter if specified ####
{% if 'VELOCITY' in params|upper %}
{% set get_params = ('VELOCITY=' + params.VELOCITY) %}
{%else %}
{% set get_params = "" %}
{% endif %}
##### end of definitions #####
{% if printer.extruder.can_extrude|lower == 'false' %}
{action_respond_info("Extruder not hot enough, SET M109 S%s" %
printer['gcode_macro PRINTER_PARAM'].hotend_temp|int)}
M109 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
{% else %}
M104 S{printer['gcode_macro PRINTER_PARAM'].hotend_temp|int}
{% endif %}
G91
M106 S0
G1 E{E} F{E_VELOCITY}
G90
M106 S127
G4 P3000
BOX_NOZZLE_CLEAN
M106 P2 S{s_value}
M106 P0 S{s_value_0}
SET_LIMITS
M400
SET_PIN PIN=extruder_fan VALUE=1
{% endif %}
[gcode_macro CANCEL_PRINT]
description: Cancel the actual running print
rename_existing: CANCEL_PRINT_BASE
gcode:
{action_respond_info("start END_PRINT")}
END_PRINT
{action_respond_info("end END_PRINT success")}
CANCEL_PRINT_BASE
{action_respond_info("CANCEL_PRINT success")}
CLEAR_EEPROM_INFO
[gcode_macro MOTOR_CANCEL_PRINT]
gcode:
Qmode_exit
EXCLUDE_OBJECT_RESET
PRINT_PREPARE_CLEAR
M220 S100
SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000
TURN_OFF_HEATERS
M107 P1
M107 P2
M141 S0
SET_PIN PIN=extruder_fan VALUE=0
BOX_SET_CURRENT_BOX_IDLE_MODE
CANCEL_PRINT_BASE
WAIT_TEMP_START
[gcode_macro G29]
gcode:
{% if 'PROBE_COUNT' in params|upper %}
{% set get_count = ('PROBE_COUNT' + params.PROBE_COUNT) %}
{%else %}
{% set get_count = "" %}
{% endif %}
{% set bed_temp = printer.custom_macro.default_bed_temp %}
{% set extruder_temp = printer.custom_macro.g28_ext_temp %}
{% set nozzle_clear_temp = printer.custom_macro.default_extruder_temp %}
{% if 'BED_TEMP' in params|upper and params.BED_TEMP|default(0)|int >= printer.custom_macro.default_bed_temp %}
{% set bed_temp = params.BED_TEMP %}
{% endif %}
{% if 'EXTRUDER_TEMP' in params|upper %}
{% set nozzle_clear_temp = params.EXTRUDER_TEMP %}
{% endif %}
{% set enabled = printer["filament_switch_sensor filament_sensor"].enabled %}
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
{% endif %}
M104 S{extruder_temp}
M140 S{bed_temp}
{% if "xy" not in printer.toolhead.homed_axes %}
G28 X Y
{% endif %}
# 此处Z归位一定要下降,此次光电找平后,不恢复上次做Z_TILT_ADJUST记录的adjustments值
# 每次调平在上面的重新做Z_TILT_ADJUST,才能得到新的adjustments调整值
# 设置标志位 ZDOWN的时候 不恢复上次做Z_TILT_ADJUST记录的adjustments值
SET_G29_FLAG VALUE=1
G28 Z
BED_MESH_CLEAR
NOZZLE_CLEAR
M104 S{extruder_temp}
M190 S{bed_temp}
M109 S{extruder_temp}
# 精擦嘴后做一次光电找平获取最大Z轴高度值
ZDOWN_SWITCH ENABLE=1
G28 Z
BED_MESH_CLEAR
Z_TILT_ADJUST WAITTIME=5
NEXT_HOMEZ_NACCU
G28 Z
SET_G29_FLAG VALUE=0
M204 S5000
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=5000
BED_MESH_CALIBRATE {get_count}
G1 Z175 F1200
BOX_MOVE_TO_SAFE_POS
CXSAVE_CONFIG
TURN_OFF_HEATERS
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
{% endif %}
[gcode_macro BED_MANUAL_CAL_START]
gcode:
{action_respond_info("bed manual calibration start")}
[gcode_macro BED_MANUAL_CAL_END]
gcode:
{action_respond_info("bed manual calibration end")}
[gcode_macro BED_MANUAL_CAL] ;手动调节热床后需要重新校准Z_MAX值
gcode:
BED_MANUAL_CAL_START
SET_G29_FLAG VALUE=1
G28 Z
BED_MESH_CLEAR
NOZZLE_CLEAR
NEXT_HOMEZ_NACCU
G28 Z
BED_MESH_CLEAR
ZDOWN_SWITCH ENABLE=1
G28 Z
SET_G29_FLAG VALUE=0
TURN_OFF_HEATERS
BED_MANUAL_CAL_END
[gcode_macro BED_MESH_CALIBRATE_START_PRINT] # 用于打印前的归位调平
gcode:
{% if 'PROBE_COUNT' in params|upper %}
{% set get_count = ('PROBE_COUNT' + params.PROBE_COUNT) %}
{%else %}
{% set get_count = "" %}
{% endif %}
{% if 'GCODE_FILE' in params|upper %}
{% set get_gcode_file = ("GCODE_FILE='"+ params.GCODE_FILE + "'") %}
{%else %}
{% set get_gcode_file = "" %}
{% endif %}
{action_respond_info("get_gcode_file = %s" % (get_gcode_file))}
{% set bed_temp = printer.custom_macro.default_bed_temp %}
{% set extruder_temp = printer.custom_macro.g28_ext_temp %}
{% set nozzle_clear_temp = printer.custom_macro.default_extruder_temp %}
{% if 'BED_TEMP' in params|upper and params.BED_TEMP|default(0)|int >= printer.custom_macro.default_bed_temp %}
{% set bed_temp = params.BED_TEMP %}
{% endif %}
{% if 'EXTRUDER_TEMP' in params|upper %}
{% set nozzle_clear_temp = params.EXTRUDER_TEMP %}
{% endif %}
{% set enabled = printer["filament_switch_sensor filament_sensor"].enabled %}
M106 S0
M104 S{extruder_temp}
M140 S{bed_temp}
{% if "z" not in printer.toolhead.homed_axes %}
G28
{% endif %}
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
{% endif %}
M104 S{extruder_temp}
M190 S{bed_temp}
M109 S{extruder_temp}
{% if printer['gcode_macro START_PRINT'].prepare|int == 0 %}
PRINT_PREPARED
BED_MESH_CLEAR
NOZZLE_CLEAR
NEXT_HOMEZ_NACCU
G28 Z
{% endif %}
M204 S5000
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=5000
BED_MESH_CALIBRATE {get_count} {get_gcode_file}
G0 Z10 F600
CXSAVE_CONFIG
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
{% endif %}
[gcode_macro WAIT_BED_STABLE_POS]
gcode:
{% if "xyz" not in printer.toolhead.homed_axes %}
G28
{% endif %}
BOX_MOVE_TO_SAFE_POS
G1 Z45 F1200
[gcode_macro TEST_HOME]
gcode:
{% for _ in range(100) %}
G28
{% endfor %}
[gcode_macro A_TriPress_STEP1]
gcode:
G28
G1 Z25 F600
[gcode_macro A_TriPress_STEP2]
gcode:
PROBE_ACCURACY PROBE_SPEED=5
[gcode_macro EXTRUDE_TEST]
gcode:
M104 S220
{% set times = params.TIMES|default(1)|int %}
{% for _ in range(times) %}
BOX_MOVE_TO_CUT
BOX_GO_TO_EXTRUDE_POS
G91
G0 E100 F360
G90
M400
# BOX_BLOW
SET_PIN PIN=fan0 VALUE=255
G4 P4000
SET_PIN PIN=fan0 VALUE=0
M400
BOX_NOZZLE_CLEAN
{% endfor %}
[gcode_macro A_G28_test] ;归零与重复探测精度测试
gcode:
{% set Count = params.G28_COUNT|default(3000)|int %}
{% set RECount = params.COUNT|default(1000)|int %}
M109 S140
{% for _ in range(Count) %}
G28
{% endfor %}
TEST_REPROBE C={RECount}
M104 S0
[gcode_macro START_TIMER]
variable_time: 0
gcode:
# {% for k in printer["mcu"] %}
# action_respond_info("{ k }")
# {% endfor %}
{% set ns = printer["system_stats"]["monotonic"]|default(0) %} ; 时钟sync同步精度
{action_respond_info("ns = %s " % (ns))}
SET_GCODE_VARIABLE MACRO=START_TIMER VARIABLE=time VALUE={ns}
[gcode_macro END_TIMER]
gcode:
{% set name = params.NAME|default("DefaultGcodeSeg") %}
{% set end = printer["system_stats"]["monotonic"]|default(0) %}
{% set duration = end - printer["gcode_macro START_TIMER"].time|float %}
{action_respond_info("[%s] Timer duration = %.2f seconds" % (name, duration))}
[gcode_macro Z_AXIS_CALIBRATION]
gcode:
{% set bed_temp = printer.custom_macro.default_bed_temp %}
{% set extruder_temp = printer.custom_macro.g28_ext_temp %}
{% set nozzle_clear_temp = printer.custom_macro.default_extruder_temp %}
{% if 'BED_TEMP' in params|upper and params.BED_TEMP|default(0)|int >= printer.custom_macro.default_bed_temp %}
{% set bed_temp = params.BED_TEMP %}
{% endif %}
{% if 'EXTRUDER_TEMP' in params|upper %}
{% set nozzle_clear_temp = params.EXTRUDER_TEMP %}
{% endif %}
{% set enabled = printer["filament_switch_sensor filament_sensor"].enabled %}
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
{% endif %}
M104 S{extruder_temp}
M140 S{bed_temp}
{% if "xy" not in printer.toolhead.homed_axes %}
G28 X Y
{% endif %}
SET_G29_FLAG VALUE=1
G28 Z
BED_MESH_CLEAR
NOZZLE_CLEAR
M104 S{extruder_temp}
M190 S{bed_temp}
M109 S{extruder_temp}
ZDOWN_SWITCH ENABLE=1
G28 Z
BED_MESH_CLEAR
Z_TILT_ADJUST WAITTIME=5
NEXT_HOMEZ_NACCU
G28 Z
SET_G29_FLAG VALUE=0
G1 Z175 F600
BOX_MOVE_TO_SAFE_POS
TURN_OFF_HEATERS
{% if enabled %}
SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
{% endif %}
[gcode_macro CANCEL_CHAMBER_FAN_SWITCH]
gcode:
SET_TEMPERATURE_FAN_SWITCH TEMPERATURE_FAN=chamber_fan VALUE=1
motor_control.cfg
# F008
# Printer_size: 350x350x350
# Version: v1.0.0
# CreateDate: 2025/08/20
# FW: mot2_023_C30-mot2_002_072.bin
[motor_control]
overcurrent_switch: 0
switch: 1
retries: 4
cut_pos_offset: 0.4 # 切刀位置补偿系数 mm
motor_closed_loop: x,y,z,z1,e
motor_x_dir: PB9,0
motor_x_step: PB10,0
motor_x_stall: PB11
motor_y_dir: !PB7,0
motor_y_step: PB8,0
motor_y_stall: PB12
motor_z_dir: PB5,0
motor_z_step: PB6,1
motor_z_stall: PB13
motor_z1_dir: PA1,1
motor_z1_step: PB15,1
motor_z1_stall: PA10
motor_e_stall: nozzle_mcu:PB12
#/*** general param */
# x_param_stall_mode: 2
# x_param_stall_cur_A: 0.70
# x_param_stall_pos_err_rad: 0.012
# x_param_ud_cal_set: 0.15
# x_param_motion_dir: 1.0
# x_param_encoder_calibtate_official_ud_cal_set: 0.15
# motor param
# x_motor_param_R: 0.78
# x_motor_param_L: 0.0014
# x_motor_param_Ke: 0.098676
# controller param
# x_controller_param_en_feedforward_idiq: 1
# x_controller_param_en_feedforward_uduq: 1
# position loop PID param
x_controller_pos_loop_pid_param_kp: 100
# speed loop PID param
x_controller_spd_loop_pid_param_kp: 0.028
x_controller_spd_loop_pid_param_ki: 6.0
# x_controller_spd_loop_pid_param_kc: 0.5
# x_controller_spd_loop_pid_fal_param_en: 0
# x_controller_spd_loop_pid_fal_param_a: 1.0
# x_controller_spd_loop_pid_fal_param_zoom: 0.1
# current loop PID param
x_controller_cur_loop_pid_param_kp: 2.5
x_controller_cur_loop_pid_param_ki: 200.0
# x_controller_cur_loop_pid_param_kc: 0.5
# x_controller_cur_loop_pid_fal_param_en: 0
# x_controller_cur_loop_pid_fal_param_a: 1.2
# x_controller_cur_loop_pid_fal_param_zoom: 0.25
# leso param
x_controller_leso_param_b0k: 1.0
x_controller_leso_param_z3k: 0
x_controller_leso_param_wp: 4000
x_controller_leso_param_ws: 4000
x_controller_leso_param_wd: 400
# fwc param
# x_controller_fwc_param_en: 1
# x_controller_fwc_param_I_max: 5.5
# x_controller_fwc_param_wm_base: 120
# current filter param
# x_controller_cur_filter_param_en: 0
# x_controller_cur_filter_param_fc: 6000
# protection param
# x_protection_param_protect_en: 1
# x_protection_param_prt_peak_cur_A: 999.0
# x_protection_param_prt_continuous_cur_A: 4.0
# x_protection_param_prt_continuous_time_s: 1.0
# x_protection_param_prt_over_speed_rad_s: 314.159271
# x_protection_param_prt_over_speed_time_s: 0.1
x_protection_param_prt_track_max_err: 0.3
x_protection_param_prt_track_err_time: 0.1
# x_protection_param_power_voltage_min: 20.0
# x_protection_param_mcu_temp_max: 115.0
# step controller param
# x_step_controller_param_subdivision: 16
# communication interface param
# x_cmd_int_param_char_cmd_support: 1
# zazen mode param
# x_zazen_param_zazen_en: 1
# x_zazen_param_zazen_trigger_time_s: 1.0
# x_zazen_param_zazen_gain_spd_kp: 0.7
# x_zazen_param_zazen_gain_spd_ki: 1.0
# x_zazen_param_zazen_gain_cur_kp: 1.0
# x_zazen_param_zazen_gain_cur_ki: 1.0
# slicer param
x_stall_pos_err_rad_for_slicer: 0.016375
#/*** general param */
# y_param_stall_mode: 2
# y_param_stall_cur_A: 0.70
# y_param_stall_pos_err_rad: 0.012
# y_param_ud_cal_set: 0.15
# y_param_motion_dir: 1.0
# y_param_encoder_calibtate_official_ud_cal_set: 0.15
# motor param
# y_motor_param_R: 0.78
# y_motor_param_L: 0.0014
# y_motor_param_Ke: 0.098676
# controller param
# y_controller_param_en_feedforward_idiq: 1
# y_controller_param_en_feedforward_uduq: 1
# position loop PID param
y_controller_pos_loop_pid_param_kp: 300
# speed loop PID param
y_controller_spd_loop_pid_param_kp: 0.028
y_controller_spd_loop_pid_param_ki: 6.0
# y_controller_spd_loop_pid_param_kc: 0.5
# y_controller_spd_loop_pid_fal_param_en: 0
# y_controller_spd_loop_pid_fal_param_a: 1.0
# y_controller_spd_loop_pid_fal_param_zoom: 0.1
# current loop PID param
y_controller_cur_loop_pid_param_kp: 2.5
y_controller_cur_loop_pid_param_ki: 200.0
# y_controller_cur_loop_pid_param_kc: 0.5
# y_controller_cur_loop_pid_fal_param_en: 0
# y_controller_cur_loop_pid_fal_param_a: 1.2
# y_controller_cur_loop_pid_fal_param_zoom: 0.25
# leso param
y_controller_leso_param_b0k: 1.0
y_controller_leso_param_z3k: 0
y_controller_leso_param_wp: 4000
y_controller_leso_param_ws: 4000
y_controller_leso_param_wd: 400
# fwc param
# y_controller_fwc_param_en: 1
# y_controller_fwc_param_I_max: 5.5
# y_controller_fwc_param_wm_base: 120
# current filter param
# y_controller_cur_filter_param_en: 0
# y_controller_cur_filter_param_fc: 6000
# protection param
# y_protection_param_protect_en: 1
# y_protection_param_prt_peak_cur_A: 999.0
# y_protection_param_prt_continuous_cur_A: 4.0
# y_protection_param_prt_continuous_time_s: 1.0
# y_protection_param_prt_over_speed_rad_s: 314.159271
# y_protection_param_prt_over_speed_time_s: 0.1
y_protection_param_prt_track_max_err: 0.3
y_protection_param_prt_track_err_time: 0.1
# y_protection_param_power_voltage_min: 20.0
# y_protection_param_mcu_temp_max: 115.0
# step controller param
# y_step_controller_param_subdivision: 16
# communication interface param
# y_cmd_int_param_char_cmd_support: 1
# zazen mode param
# y_zazen_param_zazen_en: 1
# y_zazen_param_zazen_trigger_time_s: 1.0
# y_zazen_param_zazen_gain_spd_kp: 0.7
# y_zazen_param_zazen_gain_spd_ki: 1.0
# y_zazen_param_zazen_gain_cur_kp: 1.0
# y_zazen_param_zazen_gain_cur_ki: 1.0
# slicer param
y_stall_pos_err_rad_for_slicer: 0.016375
#/*** general param */
# z_param_stall_mode: 2
# z_param_stall_cur_A: 0.70
# z_param_stall_pos_err_rad: 0.012
# z_param_ud_cal_set: 0.15
# z_param_motion_dir: 1.0
# z_param_encoder_calibtate_official_ud_cal_set: 0.15
# motor param
# z_motor_param_R: 0.78
# z_motor_param_L: 0.0014
# z_motor_param_Ke: 0.098676
# controller param
# z_controller_param_en_feedforward_idiq: 1
# z_controller_param_en_feedforward_uduq: 1
# position loop PID param
z_controller_pos_loop_pid_param_kp: 100
# speed loop PID param
z_controller_spd_loop_pid_param_kp: 0.035
z_controller_spd_loop_pid_param_ki: 2.0
# z_controller_spd_loop_pid_param_kc: 0.5
# z_controller_spd_loop_pid_fal_param_en: 0
# z_controller_spd_loop_pid_fal_param_a: 1.0
# z_controller_spd_loop_pid_fal_param_zoom: 0.1
# current loop PID param
z_controller_cur_loop_pid_param_kp: 2.5
z_controller_cur_loop_pid_param_ki: 200.0
# z_controller_cur_loop_pid_param_kc: 0.5
# z_controller_cur_loop_pid_fal_param_en: 0
# z_controller_cur_loop_pid_fal_param_a: 1.2
# z_controller_cur_loop_pid_fal_param_zoom: 0.25
# leso param
z_controller_leso_param_b0k: 1.0
z_controller_leso_param_z3k: 0
z_controller_leso_param_wp: 4000
z_controller_leso_param_ws: 4000
z_controller_leso_param_wd: 400
# fwc param
# z_controller_fwc_param_en: 1
# z_controller_fwc_param_I_max: 5.5
# z_controller_fwc_param_wm_base: 120
# current filter param
# z_controller_cur_filter_param_en: 0
# z_controller_cur_filter_param_fc: 6000
# protection param
# z_protection_param_protect_en: 1
# z_protection_param_prt_peak_cur_A: 999.0
# z_protection_param_prt_continuous_cur_A: 4.0
# z_protection_param_prt_continuous_time_s: 1.0
# z_protection_param_prt_over_speed_rad_s: 314.159271
# z_protection_param_prt_over_speed_time_s: 0.1
z_protection_param_prt_track_max_err: 0.3
z_protection_param_prt_track_err_time: 0.1
# z_protection_param_power_voltage_min: 20.0
# z_protection_param_mcu_temp_max: 115.0
# step controller param
# z_step_controller_param_subdivision: 16
# communication interface param
# z_cmd_int_param_char_cmd_support: 1
# zazen mode param
# z_zazen_param_zazen_en: 1
# z_zazen_param_zazen_trigger_time_s: 1.0
# z_zazen_param_zazen_gain_spd_kp: 0.7
# z_zazen_param_zazen_gain_spd_ki: 1.0
# z_zazen_param_zazen_gain_cur_kp: 1.0
# z_zazen_param_zazen_gain_cur_ki: 1.0
#/*** general param */
# z1_param_stall_mode: 2
# z1_param_stall_cur_A: 0.70
# z1_param_stall_pos_err_rad: 0.012
# z1_param_ud_cal_set: 0.15
# z1_param_motion_dir: 1.0
# z1_param_encoder_calibtate_official_ud_cal_set: 0.15
# motor param
# z1_motor_param_R: 0.78
# z1_motor_param_L: 0.0014
# z1_motor_param_Ke: 0.098676
# controller param
# z1_controller_param_en_feedforward_idiq: 1
# z1_controller_param_en_feedforward_uduq: 1
# position loop PID param
z1_controller_pos_loop_pid_param_kp: 100
# speed loop PID param
z1_controller_spd_loop_pid_param_kp: 0.035
z1_controller_spd_loop_pid_param_ki: 2.0
# z1_controller_spd_loop_pid_param_kc: 0.5
# z1_controller_spd_loop_pid_fal_param_en: 0
# z1_controller_spd_loop_pid_fal_param_a: 1.0
# z1_controller_spd_loop_pid_fal_param_zoom: 0.1
# current loop PID param
z1_controller_cur_loop_pid_param_kp: 2.5
z1_controller_cur_loop_pid_param_ki: 200.0
# z1_controller_cur_loop_pid_param_kc: 0.5
# z1_controller_cur_loop_pid_fal_param_en: 0
# z1_controller_cur_loop_pid_fal_param_a: 1.2
# z1_controller_cur_loop_pid_fal_param_zoom: 0.25
# leso param
z1_controller_leso_param_b0k: 1.0
z1_controller_leso_param_z3k: 0
z1_controller_leso_param_wp: 4000
z1_controller_leso_param_ws: 4000
z1_controller_leso_param_wd: 400
# fwc param
# z1_controller_fwc_param_en: 1
# z1_controller_fwc_param_I_max: 5.5
# z1_controller_fwc_param_wm_base: 120
# current filter param
# z1_controller_cur_filter_param_en: 0
# z1_controller_cur_filter_param_fc: 6000
# protection param
# z1_protection_param_protect_en: 1
# z1_protection_param_prt_peak_cur_A: 999.0
# z1_protection_param_prt_continuous_cur_A: 4.0
# z1_protection_param_prt_continuous_time_s: 1.0
# z1_protection_param_prt_over_speed_rad_s: 314.159271
# z1_protection_param_prt_over_speed_time_s: 0.1
z1_protection_param_prt_track_max_err: 0.3
z1_protection_param_prt_track_err_time: 0.1
# z1_protection_param_power_voltage_min: 20.0
# z1_protection_param_mcu_temp_max: 115.0
# step controller param
# z1_step_controller_param_subdivision: 16
# communication interface param
# z1_cmd_int_param_char_cmd_support: 1
# zazen mode param
# z1_zazen_param_zazen_en: 1
# z1_zazen_param_zazen_trigger_time_s: 1.0
# z1_zazen_param_zazen_gain_spd_kp: 0.7
# z1_zazen_param_zazen_gain_spd_ki: 1.0
# z1_zazen_param_zazen_gain_cur_kp: 1.0
# z1_zazen_param_zazen_gain_cur_ki: 1.0
printer_params.cfg
# F008
# Printer_size: 300x300x300
# Version: v1.0.0
# CreateDate: 2023/03/21
# Nozzle_mcu: chip: GD32F303CBT6
# version: K1-NOZZLE-M_V12
# Leveling_mcu: chip: GD32E230F8P6
# version: F008-L-V11
# mcu: chip: GD32F303RET6
# version: CR4CU220812S12
[fan_feedback]
fan0_pin: PC6 # PTC Fan
fan1_pin: nozzle_mcu:PA12 # 喉管散热风扇
fan2_pin: nozzle_mcu:PC13 # 模型散热风扇
print_delay_time: 3
current_delay_time: 2
[custom_macro]
default_bed_temp: 50
default_extruder_temp: 220
g28_ext_temp: 140
# 产品定义参数
[gcode_macro product_param]
# 模型成型尺寸
variable_bed_size_x: 350
variable_bed_size_y: 350
variable_bed_size_z: 350
# 支持最高温度
variable_nozzle_temp: 350
variable_bed_temp: 120
variable_chamber_temp: 60
gcode:
printer.cfg
# F008
# Printer_size: 350*350*350
# Version: v1.1.4
# CreateDate: 2024/03/09
# Nozzle_mcu: chip: GD32F303CBT6
# version: CR1FN200338C15
# mcu: chip: GD32F303RET6
# version: CR4FN200338C15
[include sensorless.cfg]
[include gcode_macro.cfg]
[include printer_params.cfg]
[include box.cfg]
[include motor_control.cfg]
[mcu]
serial: /dev/ttyS2
baud: 230400
restart_method: command
[mcu nozzle_mcu]
serial: /dev/ttyS3
baud: 230400
restart_method: command
[verify_heater extruder]
check_gain_time: 60
heating_gain: 1.0
[verify_heater heater_bed]
check_gain_time: 120
heating_gain: 1.0
hysteresis: 10
[mcu rpi]
serial: /tmp/klipper_host_mcu
[bl24c16f]
i2c_mcu: rpi
i2c_bus: i2c.1
i2c_speed: 400000
[idle_timeout]
timeout: 1800
[virtual_sdcard]
path: /mnt/UDISK/printer_data/gcodes
forced_leveling: true
[gcode_arcs]
resolution: 1.0
[temperature_sensor mcu_temp]
sensor_type: temperature_mcu
min_temp: -30
max_temp: 100
[stepper_x]
step_pin: PB8
dir_pin: !PB7
enable_pin: !PA9
microsteps: 16
rotation_distance: 40
endstop_pin: PB11
position_endstop: 352.5
position_min: -10
position_max: 352.5
homing_speed: 100
homing_retract_dist: 10
[stepper_y]
step_pin: PB10
dir_pin: PB9
enable_pin: !PA9
microsteps: 16
rotation_distance: 40
endstop_pin: PB12
position_endstop: -6.2
position_min: -6.2
position_max: 400
homing_speed: 100
homing_retract_dist: 10
[stepper_z]
step_pin: PB6
dir_pin: PB5
enable_pin: !PA9
microsteps: 16
rotation_distance:8
endstop_pin: probe:z_virtual_endstop
position_min: -10
position_max: 360
homing_speed: 5
second_homing_speed: 5
homing_retract_dist: 5
[stepper_z1]
step_pin: PB15
dir_pin: PA1
enable_pin: !PA9
microsteps: 16
rotation_distance:8
endstop_pin: probe:z_virtual_endstop
[z_tilt]
z_positions:
-15,175
375,175
points:
5,175
345,175
speed: 300
horizontal_move_z: 5
retries: 10
retry_tolerance: 0.1
[thermistor my_thermistor]
temperature1:25
resistance1:260000
temperature2:220
resistance2:738
temperature3:350
resistance3:98
[extruder]
max_extrude_cross_section: 100
max_extrude_only_distance:1000.0
step_pin:nozzle_mcu:PB5
dir_pin: !nozzle_mcu:PB4
enable_pin:!nozzle_mcu:PB2
microsteps:16
rotation_distance:6.9
nozzle_diameter:0.400
filament_diameter:1.750
heater_pin:nozzle_mcu:PB8
sensor_type: my_thermistor
sensor_pin:nozzle_mcu:PA0
pressure_advance: 0.038
pressure_advance_smooth_time: 0.040
control:pid
pid_kp: 14.296
pid_ki: 1.271
pid_kd: 40.206
high_temp_value: 280
pid_kp_high_temp: 16.443
pid_ki_high_temp: 1.370
pid_kd_high_temp: 49.329
min_temp:-30# 0 20240326
max_temp:390
[heater_bed]
heater_pin: PC8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
control: pid
pid_Kp: 37
pid_Ki: 0.18
pid_Kd: 280
min_temp: -30
max_temp: 135
[filament_switch_sensor filament_sensor]
pause_on_runout: true
switch_pin: ^!nozzle_mcu:PA11
runout_gcode:
{% if printer.extruder.can_extrude|lower == 'true' %}
G91
G0 E30 F600
G90
{% endif %}
BOX_CHECK_MATERIAL_REFILL
[multi_pin heater_fans]
pins:nozzle_mcu:PB7,PB1
[heater_fan hotend_fan]
pin:multi_pin:heater_fans
heater:extruder
heater_temp:50.0
[static_digital_output fan0_en]
pins: nozzle_mcu: PB6
[output_pin fan0]
pin: !nozzle_mcu: PB15
pwm: True
cycle_time: 0.01
hardware_pwm: false
value: 0.00
scale: 255
shutdown_value: 0.0
[multi_pin heater_fan2]
pins:PB4,PB3
[output_pin fan2]
pin: multi_pin:heater_fan2
pwm: True
cycle_time: 0.0100
hardware_pwm: false
value: 0.00
scale: 255
shutdown_value: 0.0
[output_pin fan1]
pin: PA0
pwm: True
cycle_time: 0.0100
hardware_pwm: false
value: 0.00
scale: 255
shutdown_value: 0.0
[heater_fan chamber_fan]
pin: !PB14
enable_pin: PB2
heater:chamber_heater
is_ptc_fan: 1
heater_temp: 100 # set an unattainable temperature, ensure that the fan does not work in lower temperature
[temperature_sensor chamber_temp]
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
min_temp: -30
max_temp: 125
[duplicate_pin_override]
pins: PC5,PA0,PC7,PB7,PB8,PB9,PB10,PB5,PB6,PA1,PB15,PB11,PB12,PB13,PA10,PA9,PB2,PB14,PB1
[heater_generic chamber_heater]
heater_pin:PC12
max_power:1.0
sensor_type:NTC 100K MGB18-104F39050L32
sensor_pin:PC5
control: watermark
# control: pid
# pid_Kp: 37
# pid_Ki: 0.18
# pid_Kd: 280
min_temp:-30
max_temp:80
[verify_heater chamber_heater]
max_error: 80
check_gain_time:345600
hysteresis: 15
heating_gain: 1
[temperature_fan chamber_fan]
pin: PA0
cycle_time: 0.0100
hardware_pwm: false
max_power: 1
shutdown_speed: 0
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
min_temp: -30
max_temp: 80
control: watermark
max_delta: 0.5
target_temp: 35.0
max_speed: 1.0
min_speed: 0.0
[multi_pin LED_pin]
pins:PB0,PA12
[output_pin LED]
pin:multi_pin:LED_pin
pwm: True
cycle_time: 0.010
value: 1
[output_pin extruder_fan]
pin: nozzle_mcu: PB1
[output_pin power]
pin: PC9
[output_pin ptc_power]
pin: PB2
value: 1
# [motor_control]
# overcurrent_switch: 0
# switch: 1
# retries: 4
# cut_pos_offset: 0.4 # 切刀位置补偿系数 mm
# motor_closed_loop: x,y,z,z1,e
# motor_x_dir: PB9,0
# motor_x_step: PB10,0
# motor_x_stall: PB11
# motor_y_dir: !PB7,0
# motor_y_step: PB8,0
# motor_y_stall: PB12
# motor_z_dir: PB5,0
# motor_z_step: PB6,1
# motor_z_stall: PB13
# motor_z1_dir: PA1,1
# motor_z1_step: PB15,1
# motor_z1_stall: PA10
# motor_e_stall: nozzle_mcu:PB12
[lis2dw]
cs_pin: nozzle_mcu:PA4
spi_speed: 5000000
axes_map: x,z,y
spi_software_sclk_pin: nozzle_mcu:PA5
spi_software_mosi_pin: nozzle_mcu:PA7
spi_software_miso_pin: nozzle_mcu:PA6
[resonance_tester]
accel_chip: lis2dw
probe_points:
175,175,175
min_freq: 20
max_freq: 120
accel_per_hz: 100
[prtouch_v3]
z_offset: 0
speed: 5
quick_lift_speed:100
samples: 1
samples_result: average
samples_tolerance_retries: 5
samples_tolerance: 0.5
prth_clr_probe_pos:150,355
step_swap_pin: !PC7
pres_swap_pin: nozzle_mcu:PA15
prth_msg_show: True
#prth_dbg_ippt: 172.21.20.205
pres_cs0_pin: nozzle_mcu:PB13, nozzle_mcu:PB14
pres_tri_hold:4000, 10000, 500
# prth_tmp_comp: 26,300,0,0.135 #默认使用非线性温度补偿功能,26,300,0,0.11 使用2.5mm不削薄应变片+提高应变片激励电压方案 #26,300,0,0.135削薄应变片
enable_not_linear_comp:True #是否使能温度非线性补偿功能,True使能 False不使能(使用线性补偿)
pres_cfg_regs:60 #60(1280/128)44(640/128)56(1280/64)
# prth_gas_calr:0.001 # 高斯滤波标准差的开方,0.001 ~ 10,值越小,网床平滑滤波程序越弱,注释为关闭
prth_max_chps:8
prth_tri_zacc:1000
prth_min_fans:0.6
# regional_prtouch_switch: False # 区域调平开关,默认True开启
# regional_prtouch_percentage:0.8
high_low_temp_leveling:True
bed_mesh_fall_comp_diagonal: -0.045, -0.045, -0.025, -0.025, -0.02
bed_mesh_fall_comp_axis:-0.055, -0.055, -0.035, 0, 0, 0, -0.025, -0.025, -0.035
# bed_mesh_add_comp: 0.035, 0.020, 0
# horizontal_move_z_quick: 1 # mm 探测时的抬升高度
need_steady_regional:0.8 # 需要热床稳定区域
[bed_mesh]
speed: 100
mesh_min: 5,5
mesh_max: 345,345
probe_count:9,9
mesh_pps: 2, 2
fade_start: 5.0
fade_end: 50.0
bicubic_tension: 0.2
algorithm: bicubic
horizontal_move_z:5
split_delta_z: 0.01
move_check_distance: 1
[display_status]
[printer]
kinematics: corexy
max_velocity: 800
max_accel: 30000
max_accel_to_decel: 30000
max_z_velocity: 30
square_corner_velocity: 5
max_z_accel: 1000
[pause_resume]
[exclude_object]
[z_align]
distance_ratio: 0.85 # 向上快速运动距离的比例系数
quick_speed: 30 # mm/s 下降速度
slow_speed: 10 # mm/s 探测速度
rising_dist: 10 # mm 首次探测到光电后的上升距离
safe_dist: 40 # mm 热床倾斜偏差安全值 一侧光电触发后,另一侧允许下降的距离
filter_cnt: 10 # 连续触发限位的次数,用作滤波
timeout: 30 # s 单次探测超时时间
retries: 5 # 重试次数
retry_tolerance: 10 # 两个光电的调整允许的最大偏差 10步 步距是0.0025mm
endstop_pin_z: PA15, PA8 # 光电触发,多个光电配置方式:endstop_pin_z: PA15, PA8... 最多支持4个
zd_up: 0 # 步进电机远离限位开关的电平
zes_untrig: 1 # 限位开关未触发时的电平
zmax_safe_pox_diff: 10 # zmax_safe_pox = stepper_z中的position_max-zmax_safe_pox_diff
[belt_mdl mdlx]
ch_max_dis: 5 # 模块最大行程,单位 mm
ch_best_n: 140 # 皮带最佳受力,单位 N
ch_best_error: 0.15 #皮带检测误差值±0.15
[belt_mdl mdly]
ch_max_dis: 5 # 模块最大行程,单位 mm
ch_best_n: 140 # 皮带最佳受力,单位 N
ch_best_error: 0.15 #皮带检测误差值±0.15
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [auto_addr]
#*# mb_addr_table_uniids =
#*# 0xB8, 0x64, 0x3B, 0x4E, 0x84, 0x12, 0xB0, 0x16, 0x48, 0x31, 0x34, 0x38
#*# 0x00
#*# 0x00
#*# 0x00
#*#
#*# [box]
#*# cut_pos_x = -7.20
#*#
#*# [input_shaper]
#*# shaper_type_x = ei
#*# shaper_freq_x = 37.6
#*# shaper_type_y = mzv
#*# shaper_freq_y = 42.0
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 0.266000, 0.316000, 0.384000, 0.436000, 0.464000, 0.441000, 0.444000, 0.373000, 0.334000
#*# 0.146000, 0.194000, 0.241000, 0.296000, 0.303000, 0.306000, 0.281000, 0.204000, 0.161000
#*# 0.066000, 0.134000, 0.174000, 0.219000, 0.214000, 0.206000, 0.156000, 0.099000, 0.051000
#*# 0.044000, 0.069000, 0.116000, 0.139000, 0.164000, 0.154000, 0.119000, 0.056000, 0.038000
#*# 0.004000, 0.036000, 0.129000, 0.156000, 0.141000, 0.121000, 0.084000, 0.049000, 0.009000
#*# -0.016000, 0.049000, 0.099000, 0.122000, 0.131000, 0.121000, 0.084000, 0.041000, 0.046000
#*# -0.001000, 0.059000, 0.121000, 0.156000, 0.156000, 0.149000, 0.124000, 0.084000, 0.039000
#*# 0.054000, 0.089000, 0.178000, 0.199000, 0.216000, 0.204000, 0.199000, 0.176000, 0.101000
#*# 0.146000, 0.206000, 0.266000, 0.299000, 0.319000, 0.319000, 0.259000, 0.236000, 0.176000
#*# x_count = 9
#*# y_count = 9
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 5.0
#*# max_x = 345.0
#*# min_y = 5.0
#*# max_y = 345.0
sensorless.cfg
# Createdate: 2023/03/08
[force_move]
enable_force_move: true
[gcode_macro xyz_ready]
variable_x_ready: 0
variable_y_ready: 0
variable_z_ready: 0
variable_xy_moved: 0
variable_z_moved: 0
variable_safe_z: 3
gcode:
[gcode_macro _IF_HOME_Z]
gcode:
M204 S100
{% if printer['gcode_macro xyz_ready'].z_ready|int == 1 %}
{% if printer.toolhead.position.z|int < 5 %}
{% set z_park = 5.0 - printer.toolhead.position.z|int %}
G91
# G1 z{z_park} F600
G90
{% endif %}
{% else %}
{% if printer['gcode_macro xyz_ready'].z_moved|int == 0 %}
{% if printer.print_stats.z_pos|float <= 20.0 or printer.print_stats.power_loss == 1 %}
# FORCE_MOVE STEPPER=stepper_z DISTANCE={printer["gcode_macro PRINTER_PARAM"].z_safe_g28} VELOCITY=10
# {% else %}
# FORCE_MOVE STEPPER=stepper_z DISTANCE=0.1 VELOCITY=10 #rock_20240120 强制移动单Z
{% endif %}
{% if printer.print_stats.power_loss == 0 %}
# STEPPER_Z_SENEORLESS
# FORCE_MOVE STEPPER=stepper_z stepper_z1 DISTANCE=-320 VELOCITY=10
{% endif %}
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_moved VALUE=1
{% endif %}
{% endif %}
[gcode_macro _IF_MOVE_XY]
gcode:
M204 S2000
_IF_HOME_Z
{% if printer['gcode_macro xyz_ready'].xy_moved|int == 0 %}
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=xy_moved VALUE=1
{% endif %}
[gcode_macro _HOME_X]
gcode:
_IF_MOVE_XY
{% if printer['gcode_macro xyz_ready'].x_ready|int == 1 %}
{% if (printer.configfile.settings['stepper_x'].position_max - printer.toolhead.position.x)|round < 10 %}
{% set x_park = (10 - (printer.configfile.settings['stepper_x'].position_max - printer.toolhead.position.x))|round %}
{% if x_park > 0 %}
G91
G1 x-{x_park} F6000
G90
{% endif %}
{% endif %}
{% endif %}
# Home
G28 X
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=x_ready VALUE=1
# Move away
G91
G1 X-10 F3600
G90
# Wait just a second (give StallGuard registers time to clear)
# G4 P2000
[gcode_macro _HOME_Y]
gcode:
_IF_MOVE_XY
{% if printer['gcode_macro xyz_ready'].y_ready|int == 1 %}
{% if printer.toolhead.position.y|round < 8 %}
{% set y_park = 8 - printer.toolhead.position.y|round %}
{% if y_park > 0 %}
G91
G1 y{y_park} F6000
G90
# G4 P1000
{% endif %}
{% endif %}
{% endif %}
# Home
G28 Y
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=y_ready VALUE=1
# Move away
G91
G1 Y10 F3600
G90
# Wait just a second (give StallGuard registers time to clear)
# G4 P2000
[gcode_macro _HOME_Z]
gcode:
{% if printer['gcode_macro xyz_ready'].y_ready|int == 1 %}
{% if printer['gcode_macro xyz_ready'].x_ready|int == 1 %}
_IF_HOME_Z
{% endif %}
{% endif %}
{% if printer.print_stats.z_pos|float >= 260.0 %}
# FORCE_MOVE STEPPER=stepper_z DISTANCE=-8 VELOCITY=10
{% endif %}
# 计算归零中点,根据bed_mesh参数计算,适配多种不同机器
{% set X_s = printer.configfile.settings['bed_mesh'].mesh_min[0]|int %}
{% set X_e = printer.configfile.settings['bed_mesh'].mesh_max[0]|int %}
{% set Y_s = printer.configfile.settings['bed_mesh'].mesh_min[1]|int %}
{% set Y_e = printer.configfile.settings['bed_mesh'].mesh_max[1]|int %}
{% set POSITION_X = (X_e-X_s)/2+X_s|int %}
{% set POSITION_Y = (Y_e-Y_s)/2+Y_s|int %}
G91
{% set x_park = POSITION_X - printer.toolhead.position.x|int %}
{% set y_park = POSITION_Y - printer.toolhead.position.y|int %}
{action_respond_info("x_park = %s \n" % (POSITION_X))}
{action_respond_info("y_park = %s \n" % (POSITION_Y))}
M204 S2000
G1 x{x_park} y{y_park} F12000
G90
M204 S500
G28 Z
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_ready VALUE=1
G1 Z5 F600
# BED_MESH_SET_ENABLE
[gcode_macro LEAVE_FLUSH_AREA]
gcode:
FORCE_MOVE STEPPER=stepper_y DISTANCE=100 VELOCITY=50
[homing_override]
axes: xyz
# set_position_x: 0
# set_position_y: 0
# set_position_z:0
gcode:
MOTOR_STALL_MODE DATA=1
MOTOR_SYS_PARAM NUM=1 DATA=1 ID=70 PARAMS=300 PARAMS_TYPE=float
M204 S500
# BED_MESH_CLEAR
{% set x_axes = printer.toolhead.homed_axes %}
{% if x_axes is defined and x_axes[0] is defined %}
{action_respond_info(
"x_axes: %s \n"
% (x_axes))}
{% else %}
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=x_ready VALUE=0
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=y_ready VALUE=0
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_ready VALUE=0
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=xy_moved VALUE=0
SET_GCODE_VARIABLE MACRO=xyz_ready VARIABLE=z_moved VALUE=0
{action_respond_info(
"x_axes is NULL\n")}
{% endif %}
{% if x_axes is not defined or x_axes[2] is not defined %}
BED_MESH_CLEAR
{% endif %}
{% set home_all = 'X' not in params and 'Y' not in params %}
{% if 'Z' in params and 'X' not in params and 'Y' not in params %}
{% if x_axes[0] is defined and x_axes[1] is defined %}
{% set home_all = 0 %}
{% endif %}
{% endif %}
{% if home_all or 'Y' in params %}
_HOME_Y
{% endif %}
{% if home_all or 'X' in params %}
_HOME_X
{% endif %}
{% if home_all %}
FORCE_MOVE STEPPER=stepper_y DISTANCE=-3 VELOCITY=10
{% endif %}
{% if 'X' in params and 'Y' in params %}
FORCE_MOVE STEPPER=stepper_y DISTANCE=-3 VELOCITY=10
{% endif %}
{% if 'X' in params and x_axes is defined and x_axes[0] is defined and x_axes[1] is not defined and x_axes[0] == 'y' %}
FORCE_MOVE STEPPER=stepper_y DISTANCE=-3 VELOCITY=10
{% endif %}
{% if 'Y' in params and x_axes is defined and x_axes[0] is defined and x_axes[1] is not defined and x_axes[0] == 'x'%}
FORCE_MOVE STEPPER=stepper_y DISTANCE=-3 VELOCITY=10
{% endif %}
{% if home_all or 'Z' in params %}
{% if x_axes[2] is not defined %}
BOX_GO_TO_EXTRUDE_POS
PRES_CHECK RUN=1
BOX_NOZZLE_CLEAN
PRES_CHECK RUN=0
{% endif %}
SET_PIN PIN=extruder_fan VALUE=0
_HOME_Z
{% endif %}
BED_MESH_PROFILE LOAD="default"
MOTOR_STALL_MODE DATA=2
MOTOR_CHECK_PROTECTION_AFTER_HOME DATA=11
MOTOR_SYS_PARAM NUM=1 DATA=1 ID=70 PARAMS=100 PARAMS_TYPE=float
{% set acc = printer.toolhead.max_accel %}
M204 S{acc}
