1 Commits

Author SHA1 Message Date
CChen616
bb8598ec34 V4.4.19_beta update 2024-04-29 16:20:28 +08:00
15 changed files with 318 additions and 897 deletions

View File

@@ -8,26 +8,19 @@ QIDI_Q1_Pro is a server-side application designed specifically for the Q1_Pro mo
For convenience, QIDI provides version-specific packaged files. Please download the necessary compressed package file prefixed with "Q1_Pro." We offer several versions of the source code tailored to different needs; select the appropriate branch for download, with each branch name reflecting the corresponding version. For convenience, QIDI provides version-specific packaged files. Please download the necessary compressed package file prefixed with "Q1_Pro." We offer several versions of the source code tailored to different needs; select the appropriate branch for download, with each branch name reflecting the corresponding version.
## Update Content for Version 4.4.19 ## Update Content for Version 4.4.18
**Note:** After updating, the Klipper configuration file will be replaced. The previous configuration file will be backed up as `printer_{datetime}.cfg`, printer recalibration will be required. **Note:** After updating, the Klipper configuration file will be replaced. The previous configuration file will be backed up as `printer_{datetime}.cfg`, printer recalibration will be required.
**1.** Modified platform calibration logic **1.** Added port 80 to Fluidd.
During platform tilt calibration, the machine performs a sensorless homing downwards to ensure the heights of the left and right Z axes are consistent. **2.** Fixed the issue where power failure resume could not work.
**2.** Optimized Gcode processing logic **3.** Fixed the issue with USB device unmounting failing in certain cases.
We have increased the processing priority of certain Gcodes, such as SET_GCODE_OFFSET, to ensure they are executed immediately upon input. However, due to the presence of a move queue in the toolhead, which temporarily stores some parsed movements, the effect is not immediate. We plan to continue improving this in future versions. **4.** Added Ethernet switching feature.
**3.** Added functionality to move without homing **5.** Added error prompt for QR code generation.
We have noticed that in some cases, such as when printing is unexpectedly interrupted, users may want to move the Z-axis to facilitate the removal of a broken model upon machine restart. Typically, this would require homing before movement, but homing can be obstructed by the model. Therefore, we have added the capability to move the Z-axis without homing and provided corresponding prompts.
**4.** Fixed issues with camera loading under specific circumstances
**5.** Fixed display issues with connected WiFi name
We also addressed an issue where the display of connected WiFi names containing Unicode characters appeared blank, and this has been fixed.
**6.** Adjusted default parameters. **6.** Adjusted default parameters.

Binary file not shown.

Binary file not shown.

View File

@@ -1,225 +0,0 @@
# # # Klipper Adaptive Meshing # # #
# Heads up! If you have any other BED_MESH_CALIBRATE macros defined elsewhere in your config, you will need to comment out / remove them for this to work. (Klicky/Euclid Probe)
# You will also need to be sure that [exclude_object] is defined in printer.cfg, and your slicer is labeling objects.
# This macro will parse information from objects in your gcode to define a min and max mesh area to probe, creating an adaptive mesh!
# This macro will not increase probe_count values in your [bed_mesh] config. If you want richer meshes, be sure to increase probe_count. We recommend at least 5,5.
[gcode_macro BED_MESH_CALIBRATE]
rename_existing: _BED_MESH_CALIBRATE
### This section allows control of status LEDs your printer may have.
variable_led_enable: False # Enables/disables the use of status LEDs in this macro.
variable_status_macro: 'status_meshing' # If you have status LEDs in your printer (StealthBurner), you can use the macro that changes their status here.
### This section configures mesh point fuzzing, which allows probe points to be varied slightly if printing multiples of the same G-code file.
variable_fuzz_enable: False # Enables/disables the use of mesh point fuzzing to slightly randomize probing points to spread out wear on a build surface, default is False.
variable_fuzz_min: 0 # If enabled, the minimum amount in mm a probe point can be randomized, default is 0.
variable_fuzz_max: 4 # If enabled, the maximum amount in mm a probe point can be randomized, default is 4.
### This section is for configuring a mesh margin, which allows the probed mesh to be expanded outwards from the print area.
variable_margin_enable: False # Enables/disables adding a margin to the meshed area to pad a mesh out for specific needs, default is False.
variable_margin_size: 5 # Size in millimeters to expand the mesh outwards from the print area in all directions.
### This section is for those using a dockable probe that is stored outside of the print area. ###
variable_probe_dock_enable: False # Enables/disables the use of a dockable probe that is stored outside of the print area, default is False.
variable_attach_macro: 'Attach_Probe' # Here is where you define the macro that ATTACHES the probe to the printhead. E.g. 'Attach_Probe'
variable_detach_macro: 'Dock_Probe' # Here is where you define the macro that DETACHES the probe from the printhead. E.g. 'Dock_Probe'
### This section is for those who are using Moonraker's Update Manager for KAMP, or want a more verbose macro. ###
variable_display_parameters: True # Display macro paramters in the console, useful for debugging the SETUP_KAMP_MESHING call, or more verbosity.
gcode:
{% if display_parameters == True %}
{ action_respond_info("led_enable : %d" % (led_enable)) }
{ action_respond_info("status_macro: \'%s\'" % (status_macro)) }
{ action_respond_info("fuzz_enable : %d" % (fuzz_enable)) }
{ action_respond_info("fuzz_min : %f" % (fuzz_min)) }
{ action_respond_info("fuzz_max : %f" % (fuzz_max)) }
{ action_respond_info("probe_dock_enable: %d" % (probe_dock_enable)) }
{ action_respond_info("attach_macro: \'%s\'" % (attach_macro)) }
{ action_respond_info("detach_macro: \'%s\'" % (detach_macro)) }
{% endif %}
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %}
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %}
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %}
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %}
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %}
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %}
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %}
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %}
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %}
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %}
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %}
{% if margin_enable == False %}
{% set margin_size = 0 %}
{% endif %}
{ action_respond_info("{} object points, clamping to bed mesh [{!r} {!r}]".format(
all_points | count,
bed_mesh_min,
bed_mesh_max,
)) }
{% if fuzz_enable == True %}
{% set fuzz_range = range((fuzz_min * 100) | int, (fuzz_max * 100) | int + 1) %}
{% set x_min = (bed_mesh_min[0] + fuzz_max - margin_size, x_min) | max - (fuzz_range | random / 100.0) %}
{% set y_min = (bed_mesh_min[1] + fuzz_max - margin_size, y_min) | max - (fuzz_range | random / 100.0) %}
{% set x_max = (bed_mesh_max[0] - fuzz_max + margin_size, x_max) | min + (fuzz_range | random / 100.0) %}
{% set y_max = (bed_mesh_max[1] - fuzz_max + margin_size, y_max) | min + (fuzz_range | random / 100.0) %}
{% else %}
{% set x_min = [ bed_mesh_min[0], x_min - margin_size ] | max %}
{% set y_min = [ bed_mesh_min[1], y_min - margin_size ] | max %}
{% set x_max = [ bed_mesh_max[0], x_max + margin_size ] | min %}
{% set y_max = [ bed_mesh_max[1], y_max + margin_size ] | min %}
{% endif %}
{ action_respond_info("Object bounds, clamped to the bed_mesh: {!r}, {!r}".format(
(x_min, y_min),
(x_max, y_max),
)) }
{% set points_x = (((x_max - x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %}
{% set points_y = (((y_max - y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %}
{% if params.PROFILE is defined %}
{% set PROFILE2 =params.PROFILE %}
{% else %}
{% set PROFILE2 ="default" %}
{% endif %}
{% if (([points_x, points_y]|max) > 4) %}
{% set algorithm = "bicubic" %}
{% set min_points = 4 %}
{% else %}
{% set algorithm = "lagrange" %}
{% set min_points = 3 %}
{% endif %}
{ action_respond_info( "Algorithm: {}".format(algorithm)) }
{% set points_x = [points_x, min_points]|max %}
{% set points_y = [points_y, min_points]|max %}
{ action_respond_info( "Points: x: {}, y: {}".format(points_x, points_y) ) }
{% if printer.configfile.settings.bed_mesh.relative_reference_index is defined %}
{% set ref_index = (points_x * points_y / 2) | int %}
{ action_respond_info( "Reference index: {}".format(ref_index) ) }
{% else %}
{% set ref_index = -1 %}
{% endif %}
{% if probe_dock_enable == True %}
{attach_macro} # Attach/deploy a probe if the probe is stored somewhere outside of the print area
{% endif %}
{% if led_enable == True %}
{status_macro} # Set status LEDs
{% endif %}
_BED_MESH_CALIBRATE mesh_min={x_min},{y_min} mesh_max={x_max},{y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} RELATIVE_REFERENCE_INDEX={ref_index} PROFILE={params.PROFILE|default("default")}
{% if probe_dock_enable == True %}
{detach_macro} # Detach/stow a probe if the probe is stored somewhere outside of the print area
{% endif %}
[gcode_macro SETUP_KAMP_MESHING]
gcode:
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=led_enable VALUE={params.LED_ENABLE|default(False)|int}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=status_macro VALUE='"{params.STATUS_MACRO|default('status_meshing')|string}"'
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_enable VALUE={params.FUZZ_ENABLE|default(False)|int}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_min VALUE={params.FUZZ_MIN|default(0)|float}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=fuzz_max VALUE={params.FUZZ_MAX|default(4)|float}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=probe_dock_enable VALUE={params.PROBE_DOCK_ENABLE|default(False)|int}
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=attach_macro VALUE='"{params.ATTACH_MACRO|default('Attach_Probe')|string}"'
SET_GCODE_VARIABLE MACRO=BED_MESH_CALIBRATE VARIABLE=detach_macro VALUE='"{params.DETACH_MACRO|default('Dock_Probe')|string}"'
# # # Klipper Adaptive Purging - Line # # #
# This macro will parse information from objects in your gcode and create a nearby purge!
# For successful purging, you may need to configure:
#
# [extruder]
# ...
# max_extrude_cross_section: 5
[gcode_macro LINE_PURGE]
description: A purge macro that adapts to be near your actual printed objects
variable_adaptive_enable: True # Change to False if you'd like the purge to be in the same spot every print
variable_z_height: 0.4 # Height above the bed to purge
variable_purge_amount: 40 # Amount of filament in millimeters to purge
variable_line_length: 50 # Overall desired length of purge line in millimeters, around 1/5th of X axis length is a good starting value
variable_flow_rate: 12 # Desired flow rate in mm3/s (Around 12 for standard flow hotends, around 24 for high flow hotends)
variable_x_default: 10 # Default X location to purge. If adaptive_enable is True, this is overwritten
variable_y_default: 10 # Default Y location to purge. If adaptive_enable is True, this is overwritten
variable_distance_to_object_y: 10 # Y distance in millimeters away from the print area for purging. Must be less than or equal to y_default if adaptive_enable is False
### This section is for those who are using Moonraker's Update Manager for KAMP, or want a more verbose macro. ###
variable_display_parameters: True # Display macro paramters in the console, useful for debugging the SETUP_LINE_PURGE call, or more verbosity.
gcode:
{% if display_parameters == True %}
{ action_respond_info("adaptive_enable : %d" % (adaptive_enable)) }
{ action_respond_info("z_height : %f" % (z_height)) }
{ action_respond_info("purge_amount : %f" % (purge_amount)) }
{ action_respond_info("line_length : %f" % (line_length)) }
{ action_respond_info("flow_rate : %f" % (flow_rate)) }
{ action_respond_info("x_default : %f" % (x_default)) }
{ action_respond_info("y_default : %f" % (y_default)) }
{ action_respond_info("distance_to_object_y : %f" % (distance_to_object_y)) }
{% endif %}
{% if adaptive_enable == True %}
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %}
{% set x_origin = (all_points | map(attribute=0) | min | default(x_default)) %}
{% set y_origin = (all_points | map(attribute=1) | min | default(y_default)) %}
{% set x_origin = ([x_origin, 0] | max) %}
{% set y_origin = ([y_origin, 0] | max) %}
{% else %}
{% set x_origin = x_default | float %}
{% set y_origin = y_default | float %}
{% endif %}
{% set nozzle_dia = printer.configfile.config.extruder.nozzle_diameter | float %}
{% set cross_section = nozzle_dia * z_height | float %}
{% set purge_move_speed = (cross_section * flow_rate) * 60 | float %}
{% set travel_speed = (printer.toolhead.max_velocity) * 30 | float %}
G92 E0 # Reset extruder
G0 F{travel_speed} # Set travel speed
G90 # Absolute positioning
G0 X{x_origin} Y{y_origin - distance_to_object_y} # Move to purge position
G0 Z{z_height} # Move to purge Z height
M83 # Relative extrusion mode
G1 X{x_origin + line_length} E{purge_amount} F{purge_move_speed} # Purge line
G1 E-.5 F2100 # Retract
G92 E0 # Reset extruder distance
M82 # Absolute extrusion mode
G0 Z{z_height * 2} F{travel_speed} # Z hop
[gcode_macro SETUP_LINE_PURGE]
gcode:
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=display_parameters VALUE={params.DISPLAY_PARAMETERS|default(True)|int}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=adaptive_enable VALUE={params.ADAPTIVE_ENABLE|default(True)|int}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=z_height VALUE={params.Z_HEIGHT|default(0.4)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=purge_amount VALUE={params.PURGE_AMOUNT|default(40)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=line_length VALUE={params.LINE_LENGTH|default(50)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=flow_rate VALUE={params.FLOW_RATE|default(12)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=x_default VALUE={params.X_DEFAULT|default(10)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=y_default VALUE={params.Y_DEFAULT|default(10)|float}
SET_GCODE_VARIABLE MACRO=LINE_PURGE VARIABLE=distance_to_object_y VALUE={params.DISTANCE_TO_OBJECT_Y|default(10)|float}

View File

@@ -1,13 +1,8 @@
# Q1_Pro # Q1_Pro
# V4.4.16 2024-3-14 # V4.4.16 2024-3-14
# update: variable change M106 & M141 & M107 # modify: variable change M106 & M141 & M107
# V4.4.16 2024-3-26 # V4.4.16 2024-3-26
# update: variable change [homing_override]->add M204 S10000 # modify: variable change [homing_override]->add M204 S10000
# V4.4.20 2024-6-17
# update: Z_DOUDONG CLEAR_NOZZLE get_zoffset rewrite
# move_subzoffset added
# V4.4.21 2024-6-22
# update: Enable chamber exhaust fan by default when chamber temp not set
[gcode_macro test_zoffset] [gcode_macro test_zoffset]
gcode: gcode:
@@ -16,30 +11,18 @@ gcode:
G1 X{120 - printer.probe["x_offset"]} Y{120 - printer.probe["y_offset"]} F9000 G1 X{120 - printer.probe["x_offset"]} Y{120 - printer.probe["y_offset"]} F9000
G1 Z10 F600 G1 Z10 F600
probe probe
M400
G4 P5000
G1 Z10 F600 G1 Z10 F600
[gcode_macro move_subzoffset]
gcode:
G1 Z{printer.probe.last_z_result} F600
[gcode_macro get_zoffset] [gcode_macro get_zoffset]
gcode: gcode:
G1 Z10 F600 G1 Z10 F600
Z_DOUDONG Z_DOUDONG
;G4 P500
QIDI_PROBE_PIN_1
M204 S30
G4 P500 G4 P500
probe probe_speed=5 lift_speed=5 samples=5 sample_retract_dist=5 QIDI_PROBE_PIN_1
move_subzoffset probe probe_speed=10 samples=3
M114 SET_KINEMATIC_POSITION Z=-0.1
SET_KINEMATIC_POSITION Z=-0.07
G1 Z30 F600 G1 Z30 F600
QIDI_PROBE_PIN_2 QIDI_PROBE_PIN_2
M204 S10000
[gcode_macro save_zoffset] [gcode_macro save_zoffset]
gcode: gcode:
@@ -63,9 +46,8 @@ gcode:
G1 Z5 F900 G1 Z5 F900
G90 G90
{% endif %} {% endif %}
G1 X97 F15000 G1 X97 F9000
G1 Y243 F15000 G1 Y254 F9000
G1 Y254 F800
M109 S{hotendtemp} M109 S{hotendtemp}
@@ -73,20 +55,22 @@ gcode:
G1 E80 F400 G1 E80 F400
M106 S255 M106 S255
G1 X97 F500 G1 X98 F500
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 Y240 F800 G1 Y240 F9000
[gcode_macro CLEAR_NOZZLE] [gcode_macro CLEAR_NOZZLE]
gcode: gcode:
@@ -98,9 +82,8 @@ gcode:
G1 Z5 F900 G1 Z5 F900
G90 G90
{% endif %} {% endif %}
G1 X97 F15000 G1 X97 F9000
G1 Y243 F15000 G1 Y254 F9000
G1 Y254 F800
M109 S{hotendtemp} M109 S{hotendtemp}
@@ -110,45 +93,56 @@ gcode:
M400 M400
M106 P2 S0 M106 P2 S0
M104 S0 M104 S0
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-20} TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-30}
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000
G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X65 F500
G1 X88 F500
G1 X65 F500
G1 X88 F500
G1 X65 F500 G1 X65 F500
G1 X88 F500 G1 X88 F500
G1 X65 F500 G1 X65 F500
G1 X88 F500 G1 X88 F500
G1 X65 F500 G1 X65 F500
G1 X97 F500
G1 Y249 F500
G1 Y254 F500
G1 Y249 F500
G1 Y254 F500
G1 Y249 F500
G1 Y253.5 F500
G1 X88 F500
G1 X65 F500
G1 X88 F500
G1 X65 F500
G1 X85 F500
G1 X98 F500
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000 G1 X85 F2000
G1 X97 F2000 G1 X98 F2000
G1 X85 F2000
G1 X98 F2000
M400 M400
M118 Nozzle cleared M118 Nozzle cleared
G1 Y240 F800 G1 Y120 F9000
G1 Y120 F15000 G1 X230 F9000
G1 X230 F15000
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140 TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
M107 M107
M106 P2 S0 M106 P2 S0
@@ -163,9 +157,6 @@ gcode:
{% set hotendtemp = params.HOTEND|int %} {% set hotendtemp = params.HOTEND|int %}
{% set chambertemp = params.CHAMBER|default(0)|int %} {% set chambertemp = params.CHAMBER|default(0)|int %}
set_zoffset set_zoffset
{% if chambertemp == 0 %}
M106 P3 S255
{% endif %}
M104 S0 M104 S0
M140 S{bedtemp} M140 S{bedtemp}
M141 S{chambertemp} M141 S{chambertemp}
@@ -197,6 +188,7 @@ gcode:
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
DISABLE_FILAMENT_WIDTH_SENSOR DISABLE_FILAMENT_WIDTH_SENSOR
[gcode_macro AUTOTUNE_SHAPERS] [gcode_macro AUTOTUNE_SHAPERS]
variable_autotune_shapers: 'ei' variable_autotune_shapers: 'ei'
gcode: gcode:
@@ -211,7 +203,7 @@ gcode:
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
SET_STEPPER_ENABLE STEPPER=extruder enable=0 SET_STEPPER_ENABLE STEPPER=extruder enable=0
[gcode_macro DETECT_INTERRUPTION] [gcode_macro KINEMATIC_POSITION]
gcode: gcode:
{% set was_interrupted = printer.save_variables.variables.was_interrupted %} {% set was_interrupted = printer.save_variables.variables.was_interrupted %}
{% if was_interrupted %} {% if was_interrupted %}
@@ -220,13 +212,19 @@ gcode:
M118 No: CLEAR_LAST_FILE M118 No: CLEAR_LAST_FILE
{% endif %} {% endif %}
[delayed_gcode PRINTER_INIT] [delayed_gcode KINEMATIC_POSITION]
initial_duration:0.2 initial_duration:0.2
gcode: gcode:
SET_STEPPER_ENABLE STEPPER=stepper_z enable=1 SET_STEPPER_ENABLE STEPPER=stepper_z enable=1
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1 SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
BED_MESH_CLEAR BED_MESH_CLEAR
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
{% set was_interrupted = printer.save_variables.variables.was_interrupted %}
{% if was_interrupted %}
M118 Detected unexpected interruption during the last print. Do you want to resume printing? (Do not move the extruder before resuming.)
M118 Yes: RESUME_INTERRUPTED
M118 No: CLEAR_LAST_FILE
{% endif %}
[homing_override] [homing_override]
axes:xyz axes:xyz
@@ -236,7 +234,6 @@ gcode:
{% set RUN_CUR = driver_config.run_current %} {% set RUN_CUR = driver_config.run_current %}
{% set HOLD_CUR = driver_config.hold_current %} {% set HOLD_CUR = driver_config.hold_current %}
M204 S10000 M204 S10000
M220 S100
{% if params.X is defined %} {% if params.X is defined %}
SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.7} SET_TMC_CURRENT STEPPER=stepper_x CURRENT={HOME_CUR * 0.7}
G28 X G28 X
@@ -346,6 +343,9 @@ gcode:
CLEAR_LAST_FILE CLEAR_LAST_FILE
BEEP I=2 DUR=500 BEEP I=2 DUR=500
[gcode_macro CANCEL_PRINT] [gcode_macro CANCEL_PRINT]
rename_existing: BASE_CANCEL_PRINT rename_existing: BASE_CANCEL_PRINT
gcode: gcode:
@@ -417,6 +417,7 @@ gcode:
SET_STEPPER_ENABLE STEPPER=extruder enable=0 SET_STEPPER_ENABLE STEPPER=extruder enable=0
{% endif %} {% endif %}
[gcode_macro RESUME] [gcode_macro RESUME]
rename_existing: BASE_RESUME rename_existing: BASE_RESUME
variable_zhop: 0 variable_zhop: 0
@@ -458,6 +459,8 @@ gcode:
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 ; enable filament sensor SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 ; enable filament sensor
{% endif %} {% endif %}
[gcode_macro BEEP] [gcode_macro BEEP]
gcode: gcode:
{% set i = params.I|default(1)|int %} ; Iterations (number of times to beep). {% set i = params.I|default(1)|int %} ; Iterations (number of times to beep).
@@ -604,6 +607,8 @@ gcode:
[gcode_macro M4028] [gcode_macro M4028]
gcode: gcode:
G28
# Z_TILT_ADJUST
G28 G28
get_zoffset get_zoffset
M400 M400
@@ -618,12 +623,16 @@ gcode:
M118 Position init complete M118 Position init complete
CLEAR_NOZZLE HOTEND=240 CLEAR_NOZZLE HOTEND=240
# Z_TILT_ADJUST
G28 G28
get_zoffset get_zoffset
[gcode_macro M4030] [gcode_macro M4030]
gcode: gcode:
REVERSE_HOMING
G91
G1 Z-30
G90
BED_MESH_CLEAR BED_MESH_CLEAR
SET_GCODE_OFFSET Z=0 MOVE=0 SET_GCODE_OFFSET Z=0 MOVE=0
G28 G28
@@ -631,28 +640,8 @@ gcode:
G1 X120 Y120 F9000 G1 X120 Y120 F9000
G1 Z0 F600 G1 Z0 F600
[gcode_macro M4031]
gcode:
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.8 }
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.8 }
REVERSE_HOMING
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current}
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current}
G91
G1 Z-30 F600
G90
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current * 0.8 }
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current * 0.8 }
REVERSE_HOMING
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={printer.configfile.settings['tmc2209 stepper_z'].run_current}
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={printer.configfile.settings['tmc2209 stepper_z1'].run_current}
G91
G1 Z-30 F600
G90
[gcode_macro M603] [gcode_macro M603]
description: unload filament description: filament unlode
gcode: gcode:
M118 Heat up complete M118 Heat up complete
G92 E0 G92 E0
@@ -661,16 +650,15 @@ gcode:
G92 E0 G92 E0
G1 E-90 F800 G1 E-90 F800
M400 M400
M118 Filament unloaded M118 Unload finish
[gcode_macro M604] [gcode_macro M604]
description: load filament
gcode: gcode:
M118 Heat up complete M118 Heat up complete
M83 M83
G1 E80 F400 G1 E80 F400
M400 M400
M118 Filament loaded M118 Load finish
[output_pin sound] [output_pin sound]
pin: gpio8 pin: gpio8
@@ -756,19 +744,126 @@ gcode:
[gcode_macro Z_DOUDONG] [gcode_macro Z_DOUDONG]
gcode: gcode:
M204 S30 m204 S5000
G90 G91
G0 Z1 G1 X2 F6000
G91 G1 X-2 F6000
G4 P3000 G1 X2 F6000
SET_PIN PIN=ctlyd VALUE=1 G1 X-2 F6000
{% for z in range(1,7) %} G1 X2 F6000
G1 Z10 F900 G1 X-2 F6000
G1 Z-10 F900 G1 X2 F6000
{% endfor %} G1 X-2 F6000
SET_PIN PIN=ctlyd VALUE=0 G1 X2 F6000
G4 P1000 G1 X-2 F6000
G1 Z4 G1 X2 F6000
G90 G1 X-2 F6000
# M204 S10000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G1 Y2 F6000
G1 Y-2 F6000
G90
m204 S5000
SET_Z_VELOCITY_LIMIT VALUE=15
SET_PIN PIN=ctlyd VALUE=1
G91
G1 Z1 F900
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G90
SET_PIN PIN=ctlyd VALUE=0
SET_Z_VELOCITY_LIMIT VALUE=10
G4 P500

View File

@@ -1,66 +0,0 @@
[gcode_shell_command POWER_LOSS_RESUME]
command: bash /home/mks/scripts/plr/plr.sh
timeout: 120
[gcode_shell_command UPDATE_GCODE_LINES]
command: bash /home/mks/scripts/plr/update_gcode_lines.sh
[gcode_macro save_last_file]
gcode:
{% set svv = printer.save_variables.variables %}
{% set filepath=printer.virtual_sdcard.file_path %}
{% set filename=filepath.split('/')%}
SAVE_VARIABLE VARIABLE=was_interrupted VALUE=True
SAVE_VARIABLE VARIABLE=print_temp VALUE={printer.extruder.target}
SAVE_VARIABLE VARIABLE=bed_temp VALUE={printer['heater_bed'].target}
{% if printer["heater_generic chamber"] is defined %}
SAVE_VARIABLE VARIABLE=hot_temp VALUE={printer['heater_generic chamber'].target}
{% else %}
SAVE_VARIABLE VARIABLE=hot_temp VALUE=0
{% endif %}
M118 Last File: { filename[-1] }
M117 Last File: { filename[-1] }
G4 P2000
[gcode_macro CLEAR_LAST_FILE]
gcode:
{% set filename='' %}
SAVE_VARIABLE VARIABLE=last_file VALUE='"{ filename }"'
SAVE_VARIABLE VARIABLE=was_interrupted VALUE=False
[gcode_macro LOG_Z]
gcode:
{% set z_pos = printer.gcode_move.gcode_position.z %}
RESPOND MSG="Current Z is {z_pos}"
SAVE_VARIABLE VARIABLE=power_resume_z VALUE={z_pos}
[gcode_macro RESUME_INTERRUPTED]
gcode:
set_zoffset
RUN_SHELL_COMMAND CMD=UPDATE_GCODE_LINES
{% set profile_name = params.PROFILE_NAME|default(printer.save_variables.variables.profile_name)|string %}
# {% set g_lines = params.GCODE_LINES|default(printer.save_variables.variables.gcode_lines)|string %}
# {% set last_file = params.GCODE_FILE|default(printer.save_variables.variables.last_file)|string %}
# {% set print_temp = params.PRINT_TEMP|default(printer.save_variables.variables.print_temp)|float %}
# {% set bed_temp = params.BED_TEMP|default(printer.save_variables.variables.bed_temp)|float %}
# {% set hot_temp = params.HOT_TEMP|default(printer.save_variables.variables.hot_temp)|float %}
# {% set filepath = params.FILE_PATH|default(printer.save_variables.variables.file_path)|string %}
BED_MESH_PROFILE LOAD={profile_name}
RUN_SHELL_COMMAND CMD=POWER_LOSS_RESUME
SDCARD_PRINT_FILE FILENAME=/.plr/plr.gcode
# [gcode_macro RESUME_INTERRUPTED]
# gcode:
# set_zoffset
# {% set profile_name = params.PROFILE_NAME|default(printer.save_variables.variables.profile_name)|string %}
# {% set z_height = params.Z_HEIGHT|default(printer.save_variables.variables.power_resume_z)|float %}
# {% set last_file = params.GCODE_FILE|default(printer.save_variables.variables.last_file)|string %}
# {% set print_temp = params.PRINT_TEMP|default(printer.save_variables.variables.print_temp)|float %}
# {% set bed_temp = params.BED_TEMP|default(printer.save_variables.variables.bed_temp)|float %}
# {% set hot_temp = params.HOT_TEMP|default(printer.save_variables.variables.hot_temp)|float %}
# {% set filepath = params.FILE_PATH|default(printer.save_variables.variables.file_path)|string %}
# BED_MESH_PROFILE LOAD={profile_name}
# RUN_SHELL_COMMAND CMD=POWER_LOSS_RESUME PARAMS="{z_height} {last_file} {print_temp} {bed_temp} {hot_temp} {filepath}"
# SDCARD_PRINT_FILE FILENAME=/.plr/plr.gcode

View File

@@ -1,25 +1,17 @@
# Q1_Pro # Q1_Pro
# V4.4.14 2024-3-14 # V4.4.14 2024-3-14
# update: heater_generic hot -> chamber # modify: heater_generic hot -> chamber
# out_put_pin fan0 -> fan_generic cooling_fan # out_put_pin fan0 -> fan_generic cooling_fan
# out_put_pin fan2 -> fan_generic auxiliary_cooling_fan # out_put_pin fan2 -> fan_generic auxiliary_cooling_fan
# out_put_pin fan3 -> fan_generic chamber_circulation_fan # out_put_pin fan3 -> fan_generic chamber_circulation_fan
# heater_fan hot -> heater_fan chamber # heater_fan hot -> heater_fan chamber
# verify_heater hot -> verify_heater chamber # verify_heater hot -> verify_heater chamber
# V4.4.17 2024-3-29 # V4.4.17 2024-3-29
# update: delete comments # modify: delete comments
# add time_update macro # add time_update macro
# [bed_mesh] 6,6 ->8,8 # [bed_mesh] 6,6 ->8,8
# V4.4.19 2024-4-16 #V4.4.19 2024-4-16
# update: add [chamber_fan chamber_fan] # modify: add [chamber_fan chamber_fan]
# V4.4.20 2024-6-17
# update: [smart_effector]
# samples_result: average -> submaxmin
# speed: 10 -> 5
# sample_retract_dist: 3.0 -> 5.0
# [stepper_x]
# position_max: 245 -> 246
[include timelapse.cfg] [include timelapse.cfg]
[include Adaptive_Mesh.cfg] [include Adaptive_Mesh.cfg]
[include gcode_macro.cfg] [include gcode_macro.cfg]
@@ -85,6 +77,7 @@ min_diameter: 0.3
use_current_dia_while_delay: False use_current_dia_while_delay: False
pause_on_runout:True pause_on_runout:True
runout_gcode: runout_gcode:
pause
RESET_FILAMENT_WIDTH_SENSOR RESET_FILAMENT_WIDTH_SENSOR
M118 Filament run out M118 Filament run out
event_delay: 3.0 event_delay: 3.0
@@ -159,7 +152,7 @@ full_steps_per_rotation:200 #set to 400 for 0.9 degree stepper
endstop_pin:tmc2240_stepper_x:virtual_endstop endstop_pin:tmc2240_stepper_x:virtual_endstop
position_min: -5.5 position_min: -5.5
position_endstop: -5.5 position_endstop: -5.5
position_max:246 position_max:245
homing_speed:50 homing_speed:50
homing_retract_dist:0 homing_retract_dist:0
homing_positive_dir:False homing_positive_dir:False
@@ -259,7 +252,7 @@ run_current: 0.6
interpolate: True interpolate: True
stealthchop_threshold: 9999999999 stealthchop_threshold: 9999999999
diag_pin:^U_1:PC12 diag_pin:^U_1:PC12
driver_SGTHRS:130 driver_SGTHRS:140
[tmc2209 stepper_z1] [tmc2209 stepper_z1]
uart_pin:U_1: PB7 uart_pin:U_1: PB7
@@ -268,7 +261,7 @@ run_current: 0.6
interpolate: True interpolate: True
stealthchop_threshold: 9999999999 stealthchop_threshold: 9999999999
diag_pin:^U_1:PA13 diag_pin:^U_1:PA13
driver_SGTHRS:130 driver_SGTHRS:140
[heater_bed] [heater_bed]
heater_pin: U_1:PB10 heater_pin: U_1:PB10
@@ -367,7 +360,7 @@ max_power:1.0
shutdown_speed:1.0 shutdown_speed:1.0
cycle_time:0.01 cycle_time:0.01
fan_speed: 0.6 fan_speed: 0.6
stepper:stepper_x,stepper_y stepper:stepper_z,stepper_z1
[fan_generic cooling_fan] [fan_generic cooling_fan]
pin:gpio2 pin:gpio2
@@ -402,12 +395,11 @@ recovery_time:0
x_offset: 17.6 x_offset: 17.6
y_offset: 4.4 y_offset: 4.4
z_offset: 0.000001 z_offset: 0.000001
speed:5 speed:10
lift_speed:5
probe_accel:50 probe_accel:50
samples: 2 samples: 2
samples_result: submaxmin samples_result: average
sample_retract_dist: 5.0 sample_retract_dist: 3.0
samples_tolerance: 0.05 samples_tolerance: 0.05
samples_tolerance_retries:5 samples_tolerance_retries:5
@@ -425,12 +417,105 @@ algorithm:bicubic
bicubic_tension:0.2 bicubic_tension:0.2
mesh_pps: 2, 2 mesh_pps: 2, 2
vibrate_gcode: vibrate_gcode:
Z_DOUDONG G90
m204 S5000
SET_Z_VELOCITY_LIMIT VALUE=15
SET_PIN PIN=ctlyd VALUE=1
G4 P500
G91
G1 Z1 F900
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G1 Z1
G1 Z-1
G90
SET_PIN PIN=ctlyd VALUE=0
SET_Z_VELOCITY_LIMIT VALUE=10
G4 P500
[filament_switch_sensor fila] [filament_switch_sensor fila]
pause_on_runout: True pause_on_runout: True
runout_gcode: runout_gcode:
M118 Filament tangle detected PAUSE
event_delay: 3.0 event_delay: 3.0
pause_delay: 0.5 pause_delay: 0.5
switch_pin:U_1:PC3 switch_pin:U_1:PC3

View File

@@ -1,11 +0,0 @@
[Variables]
bed_temp = 60.0
filepath = ''
hot_temp = 0.0
last_file = ''
power_resume_z = 0.0
print_temp = 210.0
profile_name = 'kamp'
was_interrupted = False
z_offset = 0.0

View File

@@ -1,424 +0,0 @@
# Timelapse klipper macro definition
#
# Copyright (C) 2021 Christoph Frei <fryakatkop@gmail.com>
# Copyright (C) 2021 Alex Zellner <alexander.zellner@googlemail.com>
#
# This file may be distributed under the terms of the GNU GPLv3 license
#
# Macro version 1.14
#
##### DO NOT CHANGE ANY MACRO!!! #####
##########################################################################
# #
# GET_TIMELAPSE_SETUP: Print the Timelapse setup to console #
# #
##########################################################################
[gcode_macro GET_TIMELAPSE_SETUP]
description: Print the Timelapse setup
gcode:
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
{% set output_txt = ["Timelapse Setup:"] %}
{% set _dummy = output_txt.append("enable: %s" % tl.enable) %}
{% set _dummy = output_txt.append("park: %s" % tl.park.enable) %}
{% if tl.park.enable %}
{% set _dummy = output_txt.append("park position: %s time: %s s" % (tl.park.pos, tl.park.time)) %}
{% set _dummy = output_txt.append("park cord x:%s y:%s dz:%s" % (tl.park.coord.x, tl.park.coord.y, tl.park.coord.dz)) %}
{% set _dummy = output_txt.append("travel speed: %s mm/s" % tl.speed.travel) %}
{% endif %}
{% set _dummy = output_txt.append("fw_retract: %s" % tl.extruder.fw_retract) %}
{% if not tl.extruder.fw_retract %}
{% set _dummy = output_txt.append("retract: %s mm speed: %s mm/s" % (tl.extruder.retract, tl.speed.retract)) %}
{% set _dummy = output_txt.append("extrude: %s mm speed: %s mm/s" % (tl.extruder.extrude, tl.speed.extrude)) %}
{% endif %}
{% set _dummy = output_txt.append("verbose: %s" % tl.verbose) %}
{action_respond_info(output_txt|join("\n"))}
################################################################################################
# #
# Use _SET_TIMELAPSE_SETUP [ENABLE=value] [VERBOSE=value] [PARK_ENABLE=value] [PARK_POS=value] #
# [PARK_TIME=value] [CUSTOM_POS_X=value] [CUSTOM_POS_Y=value] #
# [CUSTOM_POS_DZ=value][TRAVEL_SPEED=value] [RETRACT_SPEED=value] #
# [EXTRUDE_SPEED=value] [EXTRUDE_DISTANCE=value] #
# [RETRACT_DISTANCE=value] [FW_RETRACT=value] #
# #
################################################################################################
[gcode_macro _SET_TIMELAPSE_SETUP]
description: Set user parameters for timelapse
gcode:
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
##### get min and max bed size #####
{% set min = printer.toolhead.axis_minimum %}
{% set max = printer.toolhead.axis_maximum %}
{% set round_bed = True if printer.configfile.settings.printer.kinematics is in ['delta','polar','rotary_delta','winch']
else False %}
{% set park = {'min' : {'x': (min.x / 1.42)|round(3) if round_bed else min.x|round(3),
'y': (min.y / 1.42)|round(3) if round_bed else min.y|round(3)},
'max' : {'x': (max.x / 1.42)|round(3) if round_bed else max.x|round(3),
'y': (max.y / 1.42)|round(3) if round_bed else max.y|round(3)},
'center': {'x': (max.x-(max.x-min.x)/2)|round(3),
'y': (max.y-(max.y-min.y)/2)|round(3)}} %}
##### set new values #####
{% if params.ENABLE %}
{% if params.ENABLE|lower is in ['true', 'false'] %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=enable VALUE={True if params.ENABLE|lower == 'true' else False}
{% else %}
{action_raise_error("ENABLE=%s not supported. Allowed values are [True, False]" % params.ENABLE|capitalize)}
{% endif %}
{% endif %}
{% if params.VERBOSE %}
{% if params.VERBOSE|lower is in ['true', 'false'] %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=verbose VALUE={True if params.VERBOSE|lower == 'true' else False}
{% else %}
{action_raise_error("VERBOSE=%s not supported. Allowed values are [True, False]" % params.VERBOSE|capitalize)}
{% endif %}
{% endif %}
{% if params.CUSTOM_POS_X %}
{% if params.CUSTOM_POS_X|float >= min.x and params.CUSTOM_POS_X|float <= max.x %}
{% set _dummy = tl.park.custom.update({'x':params.CUSTOM_POS_X|float|round(3)}) %}
{% else %}
{action_raise_error("CUSTOM_POS_X=%s must be within [%s - %s]" % (params.CUSTOM_POS_X, min.x, max.x))}
{% endif %}
{% endif %}
{% if params.CUSTOM_POS_Y %}
{% if params.CUSTOM_POS_Y|float >= min.y and params.CUSTOM_POS_Y|float <= max.y %}
{% set _dummy = tl.park.custom.update({'y':params.CUSTOM_POS_Y|float|round(3)}) %}
{% else %}
{action_raise_error("CUSTOM_POS_Y=%s must be within [%s - %s]" % (params.CUSTOM_POS_Y, min.y, max.y))}
{% endif %}
{% endif %}
{% if params.CUSTOM_POS_DZ %}
{% if params.CUSTOM_POS_DZ|float >= min.z and params.CUSTOM_POS_DZ|float <= max.z %}
{% set _dummy = tl.park.custom.update({'dz':params.CUSTOM_POS_DZ|float|round(3)}) %}
{% else %}
{action_raise_error("CUSTOM_POS_DZ=%s must be within [%s - %s]" % (params.CUSTOM_POS_DZ, min.z, max.z))}
{% endif %}
{% endif %}
{% if params.PARK_ENABLE %}
{% if params.PARK_ENABLE|lower is in ['true', 'false'] %}
{% set _dummy = tl.park.update({'enable':True if params.PARK_ENABLE|lower == 'true' else False}) %}
{% else %}
{action_raise_error("PARK_ENABLE=%s not supported. Allowed values are [True, False]" % params.PARK_ENABLE|capitalize)}
{% endif %}
{% endif %}
{% if params.PARK_POS %}
{% if params.PARK_POS|lower is in ['center','front_left','front_right','back_left','back_right','custom','x_only','y_only'] %}
{% set dic = {'center' : {'x': park.center.x , 'y': park.center.y , 'dz': 1 },
'front_left' : {'x': park.min.x , 'y': park.min.y , 'dz': 0 },
'front_right' : {'x': park.max.x , 'y': park.min.y , 'dz': 0 },
'back_left' : {'x': park.min.x , 'y': park.max.y , 'dz': 0 },
'back_right' : {'x': park.max.x , 'y': park.max.y , 'dz': 0 },
'custom' : {'x': tl.park.custom.x, 'y': tl.park.custom.y, 'dz': tl.park.custom.dz},
'x_only' : {'x': tl.park.custom.x, 'y': 'none' , 'dz': tl.park.custom.dz},
'y_only' : {'x': 'none' , 'y': tl.park.custom.y, 'dz': tl.park.custom.dz}} %}
{% set _dummy = tl.park.update({'pos':params.PARK_POS|lower}) %}
{% set _dummy = tl.park.update({'coord':dic[tl.park.pos]}) %}
{% else %}
{action_raise_error("PARK_POS=%s not supported. Allowed values are [CENTER, FRONT_LEFT, FRONT_RIGHT, BACK_LEFT, BACK_RIGHT, CUSTOM, X_ONLY, Y_ONLY]"
% params.PARK_POS|upper)}
{% endif %}
{% endif %}
{% if params.PARK_TIME %}
{% if params.PARK_TIME|float >= 0.0 %}
{% set _dummy = tl.park.update({'time':params.PARK_TIME|float|round(3)}) %}
{% else %}
{action_raise_error("PARK_TIME=%s must be a positive number" % params.PARK_TIME)}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=park VALUE="{tl.park}"
{% if params.TRAVEL_SPEED %}
{% if params.TRAVEL_SPEED|float > 0.0 %}
{% set _dummy = tl.speed.update({'travel':params.TRAVEL_SPEED|float|round(3)}) %}
{% else %}
{action_raise_error("TRAVEL_SPEED=%s must be larger than 0" % params.TRAVEL_SPEED)}
{% endif %}
{% endif %}
{% if params.RETRACT_SPEED %}
{% if params.RETRACT_SPEED|float > 0.0 %}
{% set _dummy = tl.speed.update({'retract':params.RETRACT_SPEED|float|round(3)}) %}
{% else %}
{action_raise_error("RETRACT_SPEED=%s must be larger than 0" % params.RETRACT_SPEED)}
{% endif %}
{% endif %}
{% if params.EXTRUDE_SPEED %}
{% if params.EXTRUDE_SPEED|float > 0.0 %}
{% set _dummy = tl.speed.update({'extrude':params.EXTRUDE_SPEED|float|round(3)}) %}
{% else %}
{action_raise_error("EXTRUDE_SPEED=%s must be larger than 0" % params.EXTRUDE_SPEED)}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=speed VALUE="{tl.speed}"
{% if params.EXTRUDE_DISTANCE %}
{% if params.EXTRUDE_DISTANCE|float >= 0.0 %}
{% set _dummy = tl.extruder.update({'extrude':params.EXTRUDE_DISTANCE|float|round(3)}) %}
{% else %}
{action_raise_error("EXTRUDE_DISTANCE=%s must be specified as positiv number" % params.EXTRUDE_DISTANCE)}
{% endif %}
{% endif %}
{% if params.RETRACT_DISTANCE %}
{% if params.RETRACT_DISTANCE|float >= 0.0 %}
{% set _dummy = tl.extruder.update({'retract':params.RETRACT_DISTANCE|float|round(3)}) %}
{% else %}
{action_raise_error("RETRACT_DISTANCE=%s must be specified as positiv number" % params.RETRACT_DISTANCE)}
{% endif %}
{% endif %}
{% if params.FW_RETRACT %}
{% if params.FW_RETRACT|lower is in ['true', 'false'] %}
{% if 'firmware_retraction' in printer.configfile.settings %}
{% set _dummy = tl.extruder.update({'fw_retract': True if params.FW_RETRACT|lower == 'true' else False}) %}
{% else %}
{% set _dummy = tl.extruder.update({'fw_retract':False}) %}
{% if params.FW_RETRACT|capitalize == 'True' %}
{action_raise_error("[firmware_retraction] not defined in printer.cfg. Can not enable fw_retract")}
{% endif %}
{% endif %}
{% else %}
{action_raise_error("FW_RETRACT=%s not supported. Allowed values are [True, False]" % params.FW_RETRACT|capitalize)}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=extruder VALUE="{tl.extruder}"
{% if printer.configfile.settings['gcode_macro pause'] is defined %}
{% set _dummy = tl.macro.update({'pause': printer.configfile.settings['gcode_macro pause'].rename_existing}) %}
{% endif %}
{% if printer.configfile.settings['gcode_macro resume'] is defined %}
{% set _dummy = tl.macro.update({'resume': printer.configfile.settings['gcode_macro resume'].rename_existing}) %}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=macro VALUE="{tl.macro}"
##########################################################################
# #
# TIMELAPSE_TAKE_FRAME: take the next picture #
# #
##########################################################################
######################### definition #########################
## enable: enable or disable the next frame. Valid inputs: [True, False]
## takingframe: internal use. Valid inputs: [True, False]
##
## park.enable: enable or disable to park the head while taking a picture. Valid inputs: [True, False]
## park.pos : used position for parking. Valid inputs: [center, front_left, front_right, back_left, back_right, custom, x_only, y_only]
## park.time : used for the debug macro. Time in s
## park.custom.x, park.custom.y: coordinates of the custom parkposition. Unit [mm]
## park.custom.dz : custom z hop for the picture. Unit [mm]
## park.coord : internal use
##
## extruder.fw_retract: enable disable fw retraction [True,False]
## extruder.extrude : filament extruded at the end of park. Unit [mm]
## extruder.retract : filament retract at the start of park. Unit [mm]
##
## speed.travel : used speed for travel from and to the park positon. Unit: [mm/min]
## speed.retract: used speed for retract [mm/min]
## speed.extrude: used speed for extrude [mm/min]
##
## verbose: Enable mesage output of TIMELAPSE_TAKE_FRAME
##
## restore.absolute.coordinates: internal use
## restore.absolute.extrude : internal use
## restore.speed : internal use
## restore.e : internal use
## restore.factor.speed : internal use
## restore.factor.extrude : internal use
##
## macro.pause : internal use
## macro.resume : internal use
##
## is_paused: internal use
###############################################################
[gcode_macro TIMELAPSE_TAKE_FRAME]
description: Take Timelapse shoot
variable_enable: False
variable_takingframe: False
variable_park: {'enable': False,
'pos' : 'center',
'time' : 0.1,
'custom': {'x': 0, 'y': 0, 'dz': 0},
'coord' : {'x': 0, 'y': 0, 'dz': 0}}
variable_extruder: {'fw_retract': False,
'retract': 1.0,
'extrude': 1.0}
variable_speed: {'travel': 100,
'retract': 15,
'extrude': 15}
variable_verbose: True
variable_restore: {'absolute': {'coordinates': True, 'extrude': True}, 'speed': 1500, 'e':0, 'factor': {'speed': 1.0, 'extrude': 1.0}}
variable_macro: {'pause': 'PAUSE', 'resume': 'RESUME'}
variable_is_paused: False
gcode:
{% set hyperlapse = True if params.HYPERLAPSE and params.HYPERLAPSE|lower =='true' else False %}
{% if enable %}
{% if (hyperlapse and printer['gcode_macro HYPERLAPSE'].run) or
(not hyperlapse and not printer['gcode_macro HYPERLAPSE'].run) %}
{% if park.enable %}
{% set pos = {'x': 'X' + park.coord.x|string if park.pos != 'y_only' else '',
'y': 'Y' + park.coord.y|string if park.pos != 'x_only' else '',
'z': 'Z'+ [printer.gcode_move.gcode_position.z + park.coord.dz, printer.toolhead.axis_maximum.z]|min|string} %}
{% set restore = {'absolute': {'coordinates': printer.gcode_move.absolute_coordinates,
'extrude' : printer.gcode_move.absolute_extrude},
'speed' : printer.gcode_move.speed,
'e' : printer.gcode_move.gcode_position.e,
'factor' : {'speed' : printer.gcode_move.speed_factor,
'extrude': printer.gcode_move.extrude_factor}} %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=restore VALUE="{restore}"
{% if not printer[printer.toolhead.extruder].can_extrude %}
{% if verbose %}{action_respond_info("Timelapse: Warning, minimum extruder temperature not reached!")}{% endif %}
{% else %}
{% if extruder.fw_retract %}
G10
{% else %}
M83 ; insure relative extrusion
G0 E-{extruder.retract} F{speed.retract * 60}
{% endif %}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=True
{macro.pause} ; execute the klipper PAUSE command
SET_GCODE_OFFSET X=0 Y=0 ; this will insure that the head parks always at the same position in a multi setup
G90 ; insure absolute move
{% if "xyz" not in printer.toolhead.homed_axes %}
{% if verbose %}{action_respond_info("Timelapse: Warning, axis not homed yet!")}{% endif %}
{% else %}
G0 {pos.x} {pos.y} {pos.z} F{speed.travel * 60}
{% endif %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=takingframe VALUE=True
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
M400
{% endif %}
_TIMELAPSE_NEW_FRAME HYPERLAPSE={hyperlapse}
{% endif %}
{% else %}
{% if verbose %}{action_respond_info("Timelapse: disabled, take frame ignored")}{% endif %}
{% endif %}
[gcode_macro _TIMELAPSE_NEW_FRAME]
description: action call for timelapse shoot. must be a seperate macro
gcode:
{action_call_remote_method("timelapse_newframe",
macropark=printer['gcode_macro TIMELAPSE_TAKE_FRAME'].park,
hyperlapse=params.HYPERLAPSE)}
[delayed_gcode _WAIT_TIMELAPSE_TAKE_FRAME]
gcode:
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
{% set factor = {'speed': printer.gcode_move.speed_factor, 'extrude': printer.gcode_move.extrude_factor} %}
{% if tl.takingframe %}
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_TAKE_FRAME DURATION=0.5
{% else %}
{tl.macro.resume} VELOCITY={tl.speed.travel} ; execute the klipper RESUME command
SET_GCODE_VARIABLE MACRO=TIMELAPSE_TAKE_FRAME VARIABLE=is_paused VALUE=False
{% if not printer[printer.toolhead.extruder].can_extrude %}
{action_respond_info("Timelapse: Warning minimum extruder temperature not reached!")}
{% else %}
{% if tl.extruder.fw_retract %}
G11
{% else %}
G0 E{tl.extruder.extrude} F{tl.speed.extrude * 60}
G0 F{tl.restore.speed}
{% if tl.restore.absolute.extrude %}
M82
G92 E{tl.restore.e}
{% endif %}
{% endif %}
{% endif %}
{% if tl.restore.factor.speed != factor.speed %} M220 S{(factor.speed*100)|round(0)} {% endif %}
{% if tl.restore.factor.extrude != factor.extrude %} M221 S{(factor.extrude*100)|round(0)} {% endif %}
{% if not tl.restore.absolute.coordinates %} G91 {% endif %}
{% endif %}
####################################################################################################
# #
# HYPERLAPSE: Starts or stops a Hyperlapse video #
# Usage: HYPERLAPSE ACTION=START [CYCLE=time] starts a hyperlapse with cycle time (default 30 sec) #
# HYPERLAPSE ACTION=STOP stops the hyperlapse recording #
# #
####################################################################################################
######################### definition #########################
## cycle: cycle time in seconds
## run: internal use [True/False]
###############################################################
[gcode_macro HYPERLAPSE]
description: Start/Stop a hyperlapse recording
variable_cycle: 0
variable_run: False
gcode:
{% set cycle = params.CYCLE|default(30)|int %}
{% if params.ACTION and params.ACTION|lower == 'start' %}
{action_respond_info("Hyperlapse: frames started (Cycle %d sec)" % cycle)}
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=True
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=cycle VALUE={cycle}
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={cycle}
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
{% elif params.ACTION and params.ACTION|lower == 'stop' %}
{% if run %}{action_respond_info("Hyperlapse: frames stopped")}{% endif %}
SET_GCODE_VARIABLE MACRO=HYPERLAPSE VARIABLE=run VALUE=False
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION=0
{% else %}
{action_raise_error("Hyperlapse: No valid input parameter
Use:
- HYPERLAPSE ACTION=START [CYCLE=time]
- HYPERLAPSE ACTION=STOP")}
{% endif %}
[delayed_gcode _HYPERLAPSE_LOOP]
gcode:
UPDATE_DELAYED_GCODE ID=_HYPERLAPSE_LOOP DURATION={printer["gcode_macro HYPERLAPSE"].cycle}
TIMELAPSE_TAKE_FRAME HYPERLAPSE=True
##########################################################################
# #
# TIMELAPSE_RENDER: Render the video at print end #
# #
##########################################################################
######################### definition #########################
## render: internal use. Valid inputs: [True, False]
## run_identifier: internal use. Valid input [0 .. 3]
###############################################################
[gcode_macro TIMELAPSE_RENDER]
description: Render Timelapse video and wait for the result
variable_render: False
variable_run_identifier: 0
gcode:
{action_respond_info("Timelapse: Rendering started")}
{action_call_remote_method("timelapse_render", byrendermacro="True")}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=render VALUE=True
{printer.configfile.settings['gcode_macro pause'].rename_existing} ; execute the klipper PAUSE command
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
[delayed_gcode _WAIT_TIMELAPSE_RENDER]
gcode:
{% set ri = printer['gcode_macro TIMELAPSE_RENDER'].run_identifier % 4 %}
SET_GCODE_VARIABLE MACRO=TIMELAPSE_RENDER VARIABLE=run_identifier VALUE={ri + 1}
{% if printer['gcode_macro TIMELAPSE_RENDER'].render %}
M117 Rendering {['-','\\','|','/'][ri]}
UPDATE_DELAYED_GCODE ID=_WAIT_TIMELAPSE_RENDER DURATION=0.5
{% else %}
{action_respond_info("Timelapse: Rendering finished")}
M117
{printer.configfile.settings['gcode_macro resume'].rename_existing} ; execute the klipper RESUME command
{% endif %}
##########################################################################
# #
# TEST_STREAM_DELAY: Helper macro to find stream and park delay #
# #
##########################################################################
[gcode_macro TEST_STREAM_DELAY]
description: Helper macro to find stream and park delay
gcode:
{% set min = printer.toolhead.axis_minimum %}
{% set max = printer.toolhead.axis_maximum %}
{% set act = printer.toolhead.position %}
{% set tl = printer['gcode_macro TIMELAPSE_TAKE_FRAME'] %}
{% if act.z > 5.0 %}
G0 X{min.x + 5.0} F{tl.speed.travel|int * 60}
G0 X{(max.x-min.x)/2}
G4 P{tl.park.time|float * 1000}
_TIMELAPSE_NEW_FRAME HYPERLAPSE=FALSE
G0 X{max.x - 5.0}
{% else %}
{action_raise_error("Toolhead z %.3f to low. Please place head above z = 5.0" % act.z)}
{% endif %}

View File

@@ -257,6 +257,4 @@ void set_mks_ethernet(int target);
std::string hex_to_utf8(const std::string& hex); std::string hex_to_utf8(const std::string& hex);
void check_print_interrupted();
#endif #endif

View File

@@ -427,8 +427,6 @@
#define TJC_PAGE_CALIBRATE_WARNING_NEXT 0x00 #define TJC_PAGE_CALIBRATE_WARNING_NEXT 0x00
#define TJC_PAGE_CALIBRATE_WARNING_BACK 0x01 #define TJC_PAGE_CALIBRATE_WARNING_BACK 0x01
#define TJC_PAGE_RE_PRINTING 93
void parse_cmd_msg_from_tjc_screen(char *cmd); void parse_cmd_msg_from_tjc_screen(char *cmd);
void page_to(int page_id); void page_to(int page_id);
void tjc_event_clicked_handler(int page_id, int widget_id, int type_id); void tjc_event_clicked_handler(int page_id, int widget_id, int type_id);

View File

@@ -1530,7 +1530,7 @@ void refresh_page_main() {
// CLL 每次开机发送断电续打 // CLL 每次开机发送断电续打
if (open_reprint_asked == false) { if (open_reprint_asked == false) {
check_print_interrupted(); ep->Send(json_run_a_gcode("KINEMATIC_POSITION\n"));
open_reprint_asked = true; open_reprint_asked = true;
} }
} }
@@ -3343,12 +3343,7 @@ void update_server(int choice)
{ {
// CLL 连接服务器获取json文件 // CLL 连接服务器获取json文件
if (choice == 0) { if (choice == 0) {
// system("curl -s -S -L -o /root/frp/server_list.json http://www.aws.qidi3dprinter.com:5050/downloads/server_list.json"); system("curl -s -S -L -o /root/frp/server_list.json http://www.aws.qidi3dprinter.com:5050/downloads/server_list.json");
get_mks_selected_server();
std::string server_for_command = selected_server.empty() ? "aws" : selected_server;
std::string command = "curl -s -S -L -o /root/frp/server_list.json http://www." + server_for_command + ".qidi3dprinter.com:5050/downloads/server_list.json";
std::cout << "Executing command: " << command << std::endl;
system(command.c_str());
} else { } else {
qr_refreshed = false; // CLL 当choice不为0时该函数用于切换服务器需要重新刷新二维码 qr_refreshed = false; // CLL 当choice不为0时该函数用于切换服务器需要重新刷新二维码
} }
@@ -3521,7 +3516,7 @@ void check_online_version() {
page_to(TJC_PAGE_SEARCH_SERVER); page_to(TJC_PAGE_SEARCH_SERVER);
if (connection_method == 0) if (connection_method == 0)
return; return;
target_soc_version = run_python_code("python3 /root/auto_update/version_check.py"); target_soc_version = run_python_code("python3 /root/auto_update/version_check_Q1.py");
std::cout << "服务器版本:" << target_soc_version << std::endl; std::cout << "服务器版本:" << target_soc_version << std::endl;
if (target_soc_version.find("0") == 0) { if (target_soc_version.find("0") == 0) {
page_to(TJC_PAGE_UPDATE_MODE); page_to(TJC_PAGE_UPDATE_MODE);
@@ -3573,7 +3568,7 @@ void online_update() {
pthread_t recevice_progress_pthread; pthread_t recevice_progress_pthread;
pthread_create(&recevice_progress_pthread, NULL, recevice_progress_handle, NULL); pthread_create(&recevice_progress_pthread, NULL, recevice_progress_handle, NULL);
system("rm /home/mks/gcode_files/.cache/*\n"); system("rm /home/mks/gcode_files/.cache/*\n");
system("python3 /root/auto_update/download_update.py\n"); system("python3 /root/auto_update/download_update_Q1.py\n");
// page_to(TJC_PAGE_UPDATE_FINISH); // page_to(TJC_PAGE_UPDATE_FINISH);
system("sync\n"); system("sync\n");
system("systemctl restart makerbase-client\n"); system("systemctl restart makerbase-client\n");
@@ -3652,21 +3647,4 @@ std::string hex_to_utf8(const std::string& hex) {
} }
} }
return utf8.str(); return utf8.str();
}
void check_print_interrupted() {
std::ifstream infile("/home/mks/klipper_config/saved_variables.cfg");
if (!infile) {
std::cerr << "无法打开文件 " << "/home/mks/klipper_config/saved_variables.cfg" << std::endl;
return;
}
std::stringstream buffer;
buffer << infile.rdbuf();
std::string printer_variables = buffer.str();
infile.close();
std::string print_interrupted_status = printer_variables.substr(printer_variables.find("was_interrupted =") + 18, 5);
if (print_interrupted_status != "False") {
ep->Send(json_run_a_gcode("DETECT_INTERRUPTION\n"));
jump_to_resume_print = true;
}
} }

View File

@@ -234,7 +234,7 @@ void parse_gcode_response(nlohmann::json params) {
step_2 = true; step_2 = true;
} }
} else if (params0.find("echo: Detected unexpected interruption during the last print.") != -1 || params0.find("echo: Yes: RESUME_INTERRUPTED") != -1 || params0.find("echo: No: CLEAR_LAST_FILE") != -1) { } else if (params0.find("echo: Detected unexpected interruption during the last print.") != -1 || params0.find("echo: Yes: RESUME_INTERRUPTED") != -1 || params0.find("echo: No: CLEAR_LAST_FILE") != -1) {
// jump_to_resume_print = true; jump_to_resume_print = true;
} }
} }
} }

View File

@@ -2092,7 +2092,7 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
case TJC_PAGE_RESUME_PRINT: case TJC_PAGE_RESUME_PRINT:
switch(widget_id) { switch(widget_id) {
case TJC_PAGE_RESUME_PRINT_YES: case TJC_PAGE_RESUME_PRINT_YES:
page_to(TJC_PAGE_RE_PRINTING); page_to(TJC_PAGE_MAIN);
send_gcode("RESUME_INTERRUPTED\n"); send_gcode("RESUME_INTERRUPTED\n");
break; break;

View File

@@ -1,4 +1,4 @@
[version] [version]
mcu = V0.10.0 mcu = V0.10.0
ui = V4.4.18 ui = V4.4.19
soc = V4.4.18 soc = V4.4.19