mirror of
https://github.com/QIDITECH/QIDI_Q1_Pro.git
synced 2026-01-30 23:48:43 +03:00
Compare commits
9 Commits
V4.4.18
...
Q1_Pro_V4.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b7c36f9a6 | ||
|
|
d6048da6c1 | ||
|
|
e62f278aa6 | ||
|
|
16f019084d | ||
|
|
b3c00805bf | ||
|
|
0ce78cc607 | ||
|
|
d1d606ada4 | ||
|
|
9618b8bfca | ||
|
|
a89c84c043 |
19
README.md
19
README.md
@@ -8,19 +8,26 @@ 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.18
|
## Update Content for Version 4.4.19
|
||||||
|
|
||||||
**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.** Added port 80 to Fluidd.
|
**1.** Modified platform calibration logic
|
||||||
|
|
||||||
**2.** Fixed the issue where power failure resume could not work.
|
During platform tilt calibration, the machine performs a sensorless homing downwards to ensure the heights of the left and right Z axes are consistent.
|
||||||
|
|
||||||
**3.** Fixed the issue with USB device unmounting failing in certain cases.
|
**2.** Optimized Gcode processing logic
|
||||||
|
|
||||||
**4.** Added Ethernet switching feature.
|
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.
|
||||||
|
|
||||||
**5.** Added error prompt for QR code generation.
|
**3.** Added functionality to move without homing
|
||||||
|
|
||||||
|
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.
225
config/Adaptive_Mesh.cfg
Normal file
225
config/Adaptive_Mesh.cfg
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
# # # 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}
|
||||||
|
|
||||||
@@ -1,8 +1,13 @@
|
|||||||
# Q1_Pro
|
# Q1_Pro
|
||||||
# V4.4.16 2024-3-14
|
# V4.4.16 2024-3-14
|
||||||
# modify: variable change M106 & M141 & M107
|
# update: variable change M106 & M141 & M107
|
||||||
# V4.4.16 2024-3-26
|
# V4.4.16 2024-3-26
|
||||||
# modify: variable change [homing_override]->add M204 S10000
|
# update: 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:
|
||||||
@@ -11,18 +16,30 @@ 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
|
;G4 P500
|
||||||
QIDI_PROBE_PIN_1
|
QIDI_PROBE_PIN_1
|
||||||
probe probe_speed=10 samples=3
|
M204 S30
|
||||||
SET_KINEMATIC_POSITION Z=-0.1
|
G4 P500
|
||||||
|
probe probe_speed=5 lift_speed=5 samples=5 sample_retract_dist=5
|
||||||
|
move_subzoffset
|
||||||
|
M114
|
||||||
|
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:
|
||||||
@@ -35,70 +52,103 @@ gcode:
|
|||||||
{% set z = printer.save_variables.variables.z_offset %}
|
{% set z = printer.save_variables.variables.z_offset %}
|
||||||
SET_GCODE_OFFSET Z={z} MOVE=0
|
SET_GCODE_OFFSET Z={z} MOVE=0
|
||||||
|
|
||||||
[gcode_macro CLEAR_NOZZLE]
|
[gcode_macro CLEAR_NOZZLE_PLR]
|
||||||
gcode:
|
gcode:
|
||||||
{% set hotendtemp = params.HOTEND|int %}
|
{% set hotendtemp = params.HOTEND|default(250)|int %}
|
||||||
G1 Z60 F600
|
{% if (printer.gcode_move.position.z ) < 35 %}
|
||||||
G1 X97 F9000
|
G90
|
||||||
G1 Y254 F9000
|
G1 Z35 F900
|
||||||
|
{% else %}
|
||||||
|
G91
|
||||||
|
G1 Z5 F900
|
||||||
|
G90
|
||||||
|
{% endif %}
|
||||||
|
G1 X97 F15000
|
||||||
|
G1 Y243 F15000
|
||||||
|
G1 Y254 F800
|
||||||
|
|
||||||
M109 S{hotendtemp}
|
M109 S{hotendtemp}
|
||||||
|
|
||||||
G92 E0
|
G92 E0
|
||||||
G1 E80 F400
|
G1 E80 F400
|
||||||
M106 S255
|
M106 S255
|
||||||
|
|
||||||
|
G1 X97 F500
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 X85 F2000
|
||||||
|
G1 X97 F2000
|
||||||
|
G1 Y240 F800
|
||||||
|
|
||||||
|
[gcode_macro CLEAR_NOZZLE]
|
||||||
|
gcode:
|
||||||
|
{% set hotendtemp = params.HOTEND|int %}
|
||||||
|
{% if (printer.gcode_move.position.z ) < 35 %}
|
||||||
|
G1 Z35 F900
|
||||||
|
{% else %}
|
||||||
|
G91
|
||||||
|
G1 Z5 F900
|
||||||
|
G90
|
||||||
|
{% endif %}
|
||||||
|
G1 X97 F15000
|
||||||
|
G1 Y243 F15000
|
||||||
|
G1 Y254 F800
|
||||||
|
|
||||||
|
M109 S{hotendtemp}
|
||||||
|
|
||||||
|
G92 E0
|
||||||
|
G1 E80 F400
|
||||||
|
M106 S255
|
||||||
|
M400
|
||||||
M106 P2 S0
|
M106 P2 S0
|
||||||
M104 S0
|
M104 S0
|
||||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-30}
|
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-20}
|
||||||
|
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 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 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
G1 X85 F2000
|
||||||
G1 X98 F2000
|
G1 X97 F2000
|
||||||
G1 X85 F2000
|
|
||||||
G1 X98 F2000
|
|
||||||
M400
|
M400
|
||||||
M118 Nozzle cleared
|
M118 Nozzle cleared
|
||||||
G1 Y120 F9000
|
G1 Y240 F800
|
||||||
G1 X230 F9000
|
G1 Y120 F15000
|
||||||
|
G1 X230 F15000
|
||||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
|
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
|
||||||
M107
|
M107
|
||||||
M106 P2 S0
|
M106 P2 S0
|
||||||
@@ -113,6 +163,9 @@ 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}
|
||||||
@@ -120,7 +173,7 @@ gcode:
|
|||||||
CLEAR_NOZZLE HOTEND={hotendtemp}
|
CLEAR_NOZZLE HOTEND={hotendtemp}
|
||||||
|
|
||||||
M190 S{bedtemp}
|
M190 S{bedtemp}
|
||||||
Z_TILT_ADJUST
|
# Z_TILT_ADJUST
|
||||||
G29
|
G29
|
||||||
G0 Z50 F600
|
G0 Z50 F600
|
||||||
G0 X0 Y0 F6000
|
G0 X0 Y0 F6000
|
||||||
@@ -129,11 +182,20 @@ gcode:
|
|||||||
M109 S{hotendtemp}
|
M109 S{hotendtemp}
|
||||||
M204 S10000
|
M204 S10000
|
||||||
|
|
||||||
|
ENABLE_ALL_SENSOR
|
||||||
|
save_last_file
|
||||||
|
|
||||||
|
[gcode_macro ENABLE_ALL_SENSOR]
|
||||||
|
gcode:
|
||||||
ENABLE_FILAMENT_WIDTH_SENSOR
|
ENABLE_FILAMENT_WIDTH_SENSOR
|
||||||
RESET_FILAMENT_WIDTH_SENSOR
|
RESET_FILAMENT_WIDTH_SENSOR
|
||||||
query_filament_width
|
query_filament_width
|
||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1
|
||||||
save_last_file
|
|
||||||
|
[gcode_macro DISABLE_ALL_SENSOR]
|
||||||
|
gcode:
|
||||||
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
||||||
|
DISABLE_FILAMENT_WIDTH_SENSOR
|
||||||
|
|
||||||
[gcode_macro AUTOTUNE_SHAPERS]
|
[gcode_macro AUTOTUNE_SHAPERS]
|
||||||
variable_autotune_shapers: 'ei'
|
variable_autotune_shapers: 'ei'
|
||||||
@@ -149,7 +211,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 KINEMATIC_POSITION]
|
[gcode_macro DETECT_INTERRUPTION]
|
||||||
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 %}
|
||||||
@@ -158,19 +220,13 @@ gcode:
|
|||||||
M118 No: CLEAR_LAST_FILE
|
M118 No: CLEAR_LAST_FILE
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
[delayed_gcode KINEMATIC_POSITION]
|
[delayed_gcode PRINTER_INIT]
|
||||||
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
|
||||||
@@ -180,6 +236,7 @@ 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
|
||||||
@@ -214,9 +271,9 @@ gcode:
|
|||||||
{% if params.Z is undefined %}
|
{% if params.Z is undefined %}
|
||||||
SET_KINEMATIC_POSITION X=0
|
SET_KINEMATIC_POSITION X=0
|
||||||
SET_KINEMATIC_POSITION Y=0
|
SET_KINEMATIC_POSITION Y=0
|
||||||
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-5}
|
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-10}
|
||||||
G91
|
G91
|
||||||
G1 Z5 F600
|
G1 Z7 F600
|
||||||
G1 X10 F2400
|
G1 X10 F2400
|
||||||
G1 Y10 F2400
|
G1 Y10 F2400
|
||||||
G4 P2000
|
G4 P2000
|
||||||
@@ -239,7 +296,7 @@ gcode:
|
|||||||
BEEP I=1 DUR=100
|
BEEP I=1 DUR=100
|
||||||
G1 X10 F1200
|
G1 X10 F1200
|
||||||
|
|
||||||
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-5}
|
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-10}
|
||||||
|
|
||||||
G90
|
G90
|
||||||
G1 X120 Y120 F7800
|
G1 X120 Y120 F7800
|
||||||
@@ -282,17 +339,13 @@ 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
|
||||||
|
|
||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
DISABLE_ALL_SENSOR
|
||||||
DISABLE_FILAMENT_WIDTH_SENSOR
|
|
||||||
SET_GCODE_OFFSET Z=0 MOVE=0
|
SET_GCODE_OFFSET Z=0 MOVE=0
|
||||||
BED_MESH_CLEAR
|
BED_MESH_CLEAR
|
||||||
G31
|
G31
|
||||||
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:
|
||||||
@@ -321,8 +374,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
|
||||||
|
|
||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
DISABLE_ALL_SENSOR
|
||||||
DISABLE_FILAMENT_WIDTH_SENSOR
|
|
||||||
SET_GCODE_OFFSET Z=0 MOVE=0
|
SET_GCODE_OFFSET Z=0 MOVE=0
|
||||||
BED_MESH_CLEAR
|
BED_MESH_CLEAR
|
||||||
G31
|
G31
|
||||||
@@ -345,6 +397,8 @@ gcode:
|
|||||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 ; disable filament sensor
|
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 ; disable filament sensor
|
||||||
SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume
|
SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume
|
||||||
BASE_PAUSE ; pause print
|
BASE_PAUSE ; pause print
|
||||||
|
G92 E0
|
||||||
|
G1 E-5 F1800
|
||||||
{% if (printer.gcode_move.position.z ) < z %}
|
{% if (printer.gcode_move.position.z ) < z %}
|
||||||
G91 ; relative positioning
|
G91 ; relative positioning
|
||||||
G1 Z{z} F900 ; raise Z up by z hop amount
|
G1 Z{z} F900 ; raise Z up by z hop amount
|
||||||
@@ -363,7 +417,6 @@ 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
|
||||||
@@ -405,8 +458,6 @@ 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).
|
||||||
@@ -553,8 +604,6 @@ gcode:
|
|||||||
|
|
||||||
[gcode_macro M4028]
|
[gcode_macro M4028]
|
||||||
gcode:
|
gcode:
|
||||||
G28
|
|
||||||
Z_TILT_ADJUST
|
|
||||||
G28
|
G28
|
||||||
get_zoffset
|
get_zoffset
|
||||||
M400
|
M400
|
||||||
@@ -569,7 +618,7 @@ 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
|
||||||
|
|
||||||
@@ -582,28 +631,49 @@ 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: filament unlode
|
description: unload filament
|
||||||
gcode:
|
gcode:
|
||||||
M118 Heat up complete
|
M118 Heat up complete
|
||||||
G92 E0
|
G92 E0
|
||||||
G0 E15 F400
|
G0 E15 F400
|
||||||
G4 P1000
|
G4 P1000
|
||||||
G92 E0
|
G92 E0
|
||||||
G1 E-80 F800
|
G1 E-90 F800
|
||||||
M400
|
M400
|
||||||
M118 Unload finish
|
M118 Filament unloaded
|
||||||
|
|
||||||
[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 Load finish
|
M118 Filament loaded
|
||||||
|
|
||||||
[output_pin sound]
|
[output_pin sound]
|
||||||
pin: U_1:PA13
|
pin: gpio8
|
||||||
value:0
|
value:0
|
||||||
|
|
||||||
[gcode_macro beep_on]
|
[gcode_macro beep_on]
|
||||||
@@ -686,126 +756,19 @@ gcode:
|
|||||||
|
|
||||||
[gcode_macro Z_DOUDONG]
|
[gcode_macro Z_DOUDONG]
|
||||||
gcode:
|
gcode:
|
||||||
m204 S5000
|
M204 S30
|
||||||
G91
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-2 F6000
|
|
||||||
G1 X2 F6000
|
|
||||||
G1 X-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
|
|
||||||
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
|
G90
|
||||||
|
G0 Z1
|
||||||
|
G91
|
||||||
|
G4 P3000
|
||||||
|
SET_PIN PIN=ctlyd VALUE=1
|
||||||
|
{% for z in range(1,7) %}
|
||||||
|
G1 Z10 F900
|
||||||
|
G1 Z-10 F900
|
||||||
|
{% endfor %}
|
||||||
SET_PIN PIN=ctlyd VALUE=0
|
SET_PIN PIN=ctlyd VALUE=0
|
||||||
SET_Z_VELOCITY_LIMIT VALUE=10
|
G4 P1000
|
||||||
G4 P500
|
G1 Z4
|
||||||
|
G90
|
||||||
|
# M204 S10000
|
||||||
|
|
||||||
|
|||||||
66
config/plr.cfg
Normal file
66
config/plr.cfg
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
[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
|
||||||
|
|
||||||
@@ -1,15 +1,25 @@
|
|||||||
# Q1_Pro
|
# Q1_Pro
|
||||||
# V4.4.14 2024-3-14
|
# V4.4.14 2024-3-14
|
||||||
# modify: heater_generic hot -> chamber
|
# update: 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
|
||||||
# modify: delete comments
|
# update: 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
|
||||||
|
# update: 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]
|
||||||
@@ -75,7 +85,6 @@ 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
|
||||||
@@ -150,7 +159,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:245
|
position_max:246
|
||||||
homing_speed:50
|
homing_speed:50
|
||||||
homing_retract_dist:0
|
homing_retract_dist:0
|
||||||
homing_positive_dir:False
|
homing_positive_dir:False
|
||||||
@@ -180,13 +189,17 @@ microsteps: 128
|
|||||||
rotation_distance: 4
|
rotation_distance: 4
|
||||||
full_steps_per_rotation: 200
|
full_steps_per_rotation: 200
|
||||||
endstop_pin:probe:z_virtual_endstop #U_1:PC3 for Z-max
|
endstop_pin:probe:z_virtual_endstop #U_1:PC3 for Z-max
|
||||||
|
endstop_pin_reverse:tmc2209_stepper_z:virtual_endstop
|
||||||
position_endstop:-0.2
|
position_endstop:-0.2
|
||||||
|
position_endstop_reverse:248
|
||||||
position_max:248
|
position_max:248
|
||||||
position_min: -6
|
position_min: -4
|
||||||
homing_speed: 8
|
homing_speed: 8
|
||||||
|
homing_speed_reverse: 8
|
||||||
second_homing_speed: 10
|
second_homing_speed: 10
|
||||||
homing_retract_dist: 5.0
|
homing_retract_dist: 5.0
|
||||||
homing_positive_dir:false
|
homing_positive_dir:false
|
||||||
|
homing_positive_dir_reverse:true
|
||||||
step_pulse_duration:0.0000001
|
step_pulse_duration:0.0000001
|
||||||
|
|
||||||
[stepper_z1]
|
[stepper_z1]
|
||||||
@@ -197,6 +210,7 @@ microsteps: 128
|
|||||||
rotation_distance: 4
|
rotation_distance: 4
|
||||||
full_steps_per_rotation: 200
|
full_steps_per_rotation: 200
|
||||||
step_pulse_duration:0.0000001
|
step_pulse_duration:0.0000001
|
||||||
|
endstop_pin_reverse:tmc2209_stepper_z1:virtual_endstop
|
||||||
|
|
||||||
[z_tilt]
|
[z_tilt]
|
||||||
z_positions:
|
z_positions:
|
||||||
@@ -244,6 +258,8 @@ run_current: 0.6
|
|||||||
#hold_current: 0.17
|
#hold_current: 0.17
|
||||||
interpolate: True
|
interpolate: True
|
||||||
stealthchop_threshold: 9999999999
|
stealthchop_threshold: 9999999999
|
||||||
|
diag_pin:^U_1:PC12
|
||||||
|
driver_SGTHRS:130
|
||||||
|
|
||||||
[tmc2209 stepper_z1]
|
[tmc2209 stepper_z1]
|
||||||
uart_pin:U_1: PB7
|
uart_pin:U_1: PB7
|
||||||
@@ -251,6 +267,8 @@ run_current: 0.6
|
|||||||
#hold_current: 0.17
|
#hold_current: 0.17
|
||||||
interpolate: True
|
interpolate: True
|
||||||
stealthchop_threshold: 9999999999
|
stealthchop_threshold: 9999999999
|
||||||
|
diag_pin:^U_1:PA13
|
||||||
|
driver_SGTHRS:130
|
||||||
|
|
||||||
[heater_bed]
|
[heater_bed]
|
||||||
heater_pin: U_1:PB10
|
heater_pin: U_1:PB10
|
||||||
@@ -312,15 +330,16 @@ hardware_pwm: false
|
|||||||
kick_start_time: 0.100
|
kick_start_time: 0.100
|
||||||
off_below: 0.0
|
off_below: 0.0
|
||||||
|
|
||||||
[heater_fan chamber_fan]
|
[chamber_fan chamber_fan]
|
||||||
pin:U_1:PA4
|
pin:U_1:PA4
|
||||||
max_power: 1.0
|
max_power: 1.0
|
||||||
shutdown_speed: 0
|
shutdown_speed: 0
|
||||||
kick_start_time: 0.5
|
kick_start_time: 0.5
|
||||||
heater: chamber
|
heater:chamber
|
||||||
heater_temp: 35
|
|
||||||
fan_speed: 1.0
|
fan_speed: 1.0
|
||||||
off_below: 0
|
off_below: 0
|
||||||
|
idle_timeout:60
|
||||||
|
idle_speed:1.0
|
||||||
|
|
||||||
[heater_fan hotend_fan]
|
[heater_fan hotend_fan]
|
||||||
pin:gpio25
|
pin:gpio25
|
||||||
@@ -348,7 +367,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_z,stepper_z1
|
stepper:stepper_x,stepper_y
|
||||||
|
|
||||||
[fan_generic cooling_fan]
|
[fan_generic cooling_fan]
|
||||||
pin:gpio2
|
pin:gpio2
|
||||||
@@ -383,11 +402,12 @@ 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:10
|
speed:5
|
||||||
|
lift_speed:5
|
||||||
probe_accel:50
|
probe_accel:50
|
||||||
samples: 2
|
samples: 2
|
||||||
samples_result: average
|
samples_result: submaxmin
|
||||||
sample_retract_dist: 3.0
|
sample_retract_dist: 5.0
|
||||||
samples_tolerance: 0.05
|
samples_tolerance: 0.05
|
||||||
samples_tolerance_retries:5
|
samples_tolerance_retries:5
|
||||||
|
|
||||||
@@ -405,105 +425,12 @@ algorithm:bicubic
|
|||||||
bicubic_tension:0.2
|
bicubic_tension:0.2
|
||||||
mesh_pps: 2, 2
|
mesh_pps: 2, 2
|
||||||
vibrate_gcode:
|
vibrate_gcode:
|
||||||
G90
|
Z_DOUDONG
|
||||||
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:
|
||||||
PAUSE
|
M118 Filament tangle detected
|
||||||
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
|
||||||
|
|||||||
11
config/saved_variables.cfg
Normal file
11
config/saved_variables.cfg
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[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
|
||||||
|
|
||||||
424
config/timelapse.cfg
Normal file
424
config/timelapse.cfg
Normal file
@@ -0,0 +1,424 @@
|
|||||||
|
# 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 %}
|
||||||
@@ -255,4 +255,8 @@ void refresh_page_auto_unload();
|
|||||||
int get_mks_ethernet();
|
int get_mks_ethernet();
|
||||||
void set_mks_ethernet(int target);
|
void set_mks_ethernet(int target);
|
||||||
|
|
||||||
|
std::string hex_to_utf8(const std::string& hex);
|
||||||
|
|
||||||
|
void check_print_interrupted();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -420,6 +420,15 @@
|
|||||||
|
|
||||||
#define TJC_PAGE_INSTALLING 90
|
#define TJC_PAGE_INSTALLING 90
|
||||||
|
|
||||||
|
#define TJC_PAGE_AUTO_WARNING 91
|
||||||
|
#define TJC_PAGE_AUTO_WARNING_YES 0x00
|
||||||
|
|
||||||
|
#define TJC_PAGE_CALIBRATE_WARNING 92
|
||||||
|
#define TJC_PAGE_CALIBRATE_WARNING_NEXT 0x00
|
||||||
|
#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);
|
||||||
|
|||||||
2
main.cpp
2
main.cpp
@@ -240,7 +240,7 @@ int main(int argc, char** argv) {
|
|||||||
mks_get_version();
|
mks_get_version();
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
send_cmd_val(tty_fd, "logo.version", "18"); // CLL 检测UI与SOC版本是否匹配4.4.18版本输出标记数字为18
|
send_cmd_val(tty_fd, "logo.version", "19"); // CLL 检测UI与SOC版本是否匹配4.4.19版本输出标记数字为19
|
||||||
if (find_screen_tft_file == false) {
|
if (find_screen_tft_file == false) {
|
||||||
previous_page_id = TJC_PAGE_LOGO;
|
previous_page_id = TJC_PAGE_LOGO;
|
||||||
if (get_mks_oobe_enabled() == true) {
|
if (get_mks_oobe_enabled() == true) {
|
||||||
|
|||||||
107
src/event.cpp
107
src/event.cpp
@@ -364,6 +364,8 @@ extern std::string thumbnail_path;
|
|||||||
|
|
||||||
extern bool cache_clicked;
|
extern bool cache_clicked;
|
||||||
|
|
||||||
|
int unhomed_move_mode = 0; // CLL 用于保存上次按下的移动按钮,当触发需先归位操作时进行移动, 1(x up),2(x down),3(y up),4(y down),5(z up),6(z down)
|
||||||
|
|
||||||
// CLL 以下变量用于修复gcode响应函数和refresh函数之间的冲突(gcode响应函数需设置变量在refresh_page_show中统一改变页面,否则会产生冲突)
|
// CLL 以下变量用于修复gcode响应函数和refresh函数之间的冲突(gcode响应函数需设置变量在refresh_page_show中统一改变页面,否则会产生冲突)
|
||||||
bool jump_to_move_pop_1 = false;
|
bool jump_to_move_pop_1 = false;
|
||||||
bool jump_to_move_pop_2 = false;
|
bool jump_to_move_pop_2 = false;
|
||||||
@@ -404,6 +406,42 @@ void refresh_page_show() {
|
|||||||
page_to(TJC_PAGE_MOVE_POP_1);
|
page_to(TJC_PAGE_MOVE_POP_1);
|
||||||
}
|
}
|
||||||
if (jump_to_move_pop_2 == true) {
|
if (jump_to_move_pop_2 == true) {
|
||||||
|
switch (unhomed_move_mode)
|
||||||
|
{
|
||||||
|
case 1: // X_UP
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 X10 F3000\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2: // X_DOWN
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 X-10 F3000\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3: // Y_UP
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 Y10 F3000\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4: // Y_DOWN
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 Y-10 F3000\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5: // Z_UP
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 Z-10 F600\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6: // Z_DOWN
|
||||||
|
ep->Send(json_run_a_gcode("SET_KINEMATIC_POSITION Z=150\nSET_KINEMATIC_POSITION X=150\nSET_KINEMATIC_POSITION Y=150\n"));
|
||||||
|
ep->Send(json_run_a_gcode("G91\nG1 Z10 F600\nG90\nM84\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
unhomed_move_mode = 0;
|
||||||
jump_to_move_pop_2 = false;
|
jump_to_move_pop_2 = false;
|
||||||
page_to(TJC_PAGE_MOVE_POP_2);
|
page_to(TJC_PAGE_MOVE_POP_2);
|
||||||
}
|
}
|
||||||
@@ -855,6 +893,7 @@ void refresh_page_auto_finish() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void refresh_page_auto_moving() {
|
void refresh_page_auto_moving() {
|
||||||
|
send_cmd_txt(tty_fd, "t5", "(" + std::to_string(printer_heater_bed_temperature) + "/" + std::to_string(printer_heater_bed_target) + ")");
|
||||||
if (step_1 == true) {
|
if (step_1 == true) {
|
||||||
send_cmd_picc(tty_fd, "q0", "109");
|
send_cmd_picc(tty_fd, "q0", "109");
|
||||||
send_cmd_pco(tty_fd, "t1", "65535");
|
send_cmd_pco(tty_fd, "t1", "65535");
|
||||||
@@ -1491,7 +1530,7 @@ void refresh_page_main() {
|
|||||||
|
|
||||||
// CLL 每次开机发送断电续打
|
// CLL 每次开机发送断电续打
|
||||||
if (open_reprint_asked == false) {
|
if (open_reprint_asked == false) {
|
||||||
ep->Send(json_run_a_gcode("KINEMATIC_POSITION\n"));
|
check_print_interrupted();
|
||||||
open_reprint_asked = true;
|
open_reprint_asked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1696,26 +1735,32 @@ void move_home() {
|
|||||||
|
|
||||||
void move_x_decrease() {
|
void move_x_decrease() {
|
||||||
ep->Send(move(AXIS_X, "-" + std::to_string(printer_move_dist), 130));
|
ep->Send(move(AXIS_X, "-" + std::to_string(printer_move_dist), 130));
|
||||||
|
unhomed_move_mode = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_x_increase() {
|
void move_x_increase() {
|
||||||
ep->Send(move(AXIS_X, "+" + std::to_string(printer_move_dist), 130));
|
ep->Send(move(AXIS_X, "+" + std::to_string(printer_move_dist), 130));
|
||||||
|
unhomed_move_mode = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_y_decrease() {
|
void move_y_decrease() {
|
||||||
ep->Send(move(AXIS_Y, "-" + std::to_string(printer_move_dist), 130));
|
ep->Send(move(AXIS_Y, "-" + std::to_string(printer_move_dist), 130));
|
||||||
|
unhomed_move_mode = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_y_increase() {
|
void move_y_increase() {
|
||||||
ep->Send(move(AXIS_Y, "+" + std::to_string(printer_move_dist), 130));
|
ep->Send(move(AXIS_Y, "+" + std::to_string(printer_move_dist), 130));
|
||||||
|
unhomed_move_mode = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_z_decrease() {
|
void move_z_decrease() {
|
||||||
ep->Send(move(AXIS_Z, "-" + std::to_string(printer_move_dist), 10));
|
ep->Send(move(AXIS_Z, "-" + std::to_string(printer_move_dist), 10));
|
||||||
|
unhomed_move_mode = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
void move_z_increase() {
|
void move_z_increase() {
|
||||||
ep->Send(move(AXIS_Z, "+" + std::to_string(printer_move_dist), 10));
|
ep->Send(move(AXIS_Z, "+" + std::to_string(printer_move_dist), 10));
|
||||||
|
unhomed_move_mode = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_filament_detected() {
|
bool get_filament_detected() {
|
||||||
@@ -2115,7 +2160,7 @@ void go_to_network() {
|
|||||||
scan_ssid_and_show();
|
scan_ssid_and_show();
|
||||||
get_wlan0_status();
|
get_wlan0_status();
|
||||||
if (strcmp(status_result.wpa_state, "COMPLETED") == 0) {
|
if (strcmp(status_result.wpa_state, "COMPLETED") == 0) {
|
||||||
current_connected_ssid_name = status_result.ssid; // 如果已经连接wifi,获取wifi的名字
|
current_connected_ssid_name = hex_to_utf8(status_result.ssid); // 如果已经连接wifi,获取wifi的名字
|
||||||
} else if (strcmp(status_result.wpa_state, "INACTIVE")) {
|
} else if (strcmp(status_result.wpa_state, "INACTIVE")) {
|
||||||
current_connected_ssid_name.clear(); // 如果没连接wifi,清除掉当前已连接wifi的名字
|
current_connected_ssid_name.clear(); // 如果没连接wifi,清除掉当前已连接wifi的名字
|
||||||
}
|
}
|
||||||
@@ -2143,7 +2188,7 @@ void refresh_page_wifi_list() {
|
|||||||
if (0 == page_wifi_current_pages) {
|
if (0 == page_wifi_current_pages) {
|
||||||
if (0 == i) {
|
if (0 == i) {
|
||||||
if (strcmp(status_result.wpa_state, "COMPLETED") == 0) {
|
if (strcmp(status_result.wpa_state, "COMPLETED") == 0) {
|
||||||
send_cmd_txt(tty_fd, "t" + std::to_string(i+1), status_result.ssid);
|
send_cmd_txt(tty_fd, "t" + std::to_string(i+1), hex_to_utf8(status_result.ssid));
|
||||||
} else {
|
} else {
|
||||||
send_cmd_txt(tty_fd, "t" + std::to_string(i+1), page_wifi_ssid_list[i]);
|
send_cmd_txt(tty_fd, "t" + std::to_string(i+1), page_wifi_ssid_list[i]);
|
||||||
}
|
}
|
||||||
@@ -2496,7 +2541,10 @@ void level_mode_printing_print_file() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void update_finished_tips() {
|
void update_finished_tips() {
|
||||||
page_to(TJC_PAGE_UPDATE_FINISH);
|
// page_to(TJC_PAGE_UPDATE_FINISH);
|
||||||
|
sleep(5);
|
||||||
|
system("sync");
|
||||||
|
system("systemctl restart makerbase-client.service");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_mks_oobe_enabled() {
|
bool get_mks_oobe_enabled() {
|
||||||
@@ -2885,6 +2933,7 @@ void bed_calibrate() {
|
|||||||
if (manual_count == 4) {
|
if (manual_count == 4) {
|
||||||
bed_offset = 0;
|
bed_offset = 0;
|
||||||
printer_idle_timeout_state = "Printing";
|
printer_idle_timeout_state = "Printing";
|
||||||
|
ep->Send(json_run_a_gcode("ABORT\n"));
|
||||||
ep->Send(json_run_a_gcode("M4030"));
|
ep->Send(json_run_a_gcode("M4030"));
|
||||||
page_to(TJC_PAGE_BED_MOVING);
|
page_to(TJC_PAGE_BED_MOVING);
|
||||||
}else if (manual_count == 3) {
|
}else if (manual_count == 3) {
|
||||||
@@ -3055,7 +3104,7 @@ void print_log() {
|
|||||||
system("bash -c 'cp /home/mks/klipper_logs/auto_update.log* /home/mks/gcode_files/sda1/QD_Log/'");
|
system("bash -c 'cp /home/mks/klipper_logs/auto_update.log* /home/mks/gcode_files/sda1/QD_Log/'");
|
||||||
system("bash -c 'cp /root/frp/frpc.log* /home/mks/gcode_files/sda1/QD_Log/'");
|
system("bash -c 'cp /root/frp/frpc.log* /home/mks/gcode_files/sda1/QD_Log/'");
|
||||||
system("bash -c 'cp /root/frp/frpc.*.log /home/mks/gcode_files/sda1/QD_Log/'");
|
system("bash -c 'cp /root/frp/frpc.*.log /home/mks/gcode_files/sda1/QD_Log/'");
|
||||||
system("cp /root/frp/frpc.toml /home/mks/gcode_files/sda1/QD_Log/frpc.toml");
|
system("cp /root/frp/frpc.toml /home/mks/gcode_files/sda1/QD_Log/server.cfg");
|
||||||
page_to(TJC_PAGE_PRINT_LOG_S);
|
page_to(TJC_PAGE_PRINT_LOG_S);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3228,16 +3277,15 @@ void go_to_showqr() {
|
|||||||
page_to(TJC_PAGE_SHOW_QR);
|
page_to(TJC_PAGE_SHOW_QR);
|
||||||
if (strcmp(status_result.wpa_state, "COMPLETED") == 0 || mks_ethernet) {
|
if (strcmp(status_result.wpa_state, "COMPLETED") == 0 || mks_ethernet) {
|
||||||
if (qr_refreshed == false) {
|
if (qr_refreshed == false) {
|
||||||
|
send_cmd_cp_close(tty_fd, "cp0");
|
||||||
if (open_qr_refreshed == true || access("/home/mks/qrcode/qrcode.jpg", F_OK) == -1)
|
if (open_qr_refreshed == true || access("/home/mks/qrcode/qrcode.jpg", F_OK) == -1)
|
||||||
qrmessage = run_python_code("python3 /home/mks/qrcode/qrcode_QD.py 176\n");
|
qrmessage = run_python_code("python3 /home/mks/qrcode/qrcode_QD.py 176\n");
|
||||||
std::cout << "qrmessage:" << qrmessage << std::endl;
|
std::cout << "qrmessage:" << qrmessage << std::endl;
|
||||||
if (qrmessage.find("Missing or invalid") != -1) {
|
if (qrmessage.find("Missing or invalid") != -1) {
|
||||||
send_cmd_txt(tty_fd, "t4", qrmessage);
|
send_cmd_txt(tty_fd, "t4", qrmessage);
|
||||||
send_cmd_vis(tty_fd, "t4", "1");
|
send_cmd_vis(tty_fd, "t4", "1");
|
||||||
send_cmd_cp_close(tty_fd, "cp0");
|
|
||||||
} else if (qrmessage.find("No") != -1) {
|
} else if (qrmessage.find("No") != -1) {
|
||||||
send_cmd_vis(tty_fd, "t4", "1");
|
send_cmd_vis(tty_fd, "t4", "1");
|
||||||
send_cmd_cp_close(tty_fd, "cp0");
|
|
||||||
} else {
|
} else {
|
||||||
open_qr_refreshed = true;
|
open_qr_refreshed = true;
|
||||||
refresh_files_list_picture("/home/mks/qrcode/qrcode.jpg", 176, 0);
|
refresh_files_list_picture("/home/mks/qrcode/qrcode.jpg", 176, 0);
|
||||||
@@ -3295,7 +3343,12 @@ 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时,该函数用于切换服务器,需要重新刷新二维码
|
||||||
}
|
}
|
||||||
@@ -3468,7 +3521,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_Q1.py");
|
target_soc_version = run_python_code("python3 /root/auto_update/version_check.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);
|
||||||
@@ -3520,7 +3573,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_Q1.py\n");
|
system("python3 /root/auto_update/download_update.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");
|
||||||
@@ -3582,4 +3635,38 @@ void set_mks_ethernet(int target) {
|
|||||||
mksini_save();
|
mksini_save();
|
||||||
mksini_free();
|
mksini_free();
|
||||||
mks_ethernet = target;
|
mks_ethernet = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string hex_to_utf8(const std::string& hex) {
|
||||||
|
std::ostringstream utf8;
|
||||||
|
size_t i = 0;
|
||||||
|
while (i < hex.size()) {
|
||||||
|
if (i + 3 < hex.size() && hex[i] == '\\' && hex[i + 1] == 'x') {
|
||||||
|
std::string hex_byte = hex.substr(i + 2, 2);
|
||||||
|
int value;
|
||||||
|
std::istringstream(hex_byte) >> std::hex >> value;
|
||||||
|
utf8 << static_cast<char>(value);
|
||||||
|
i += 4;
|
||||||
|
} else {
|
||||||
|
utf8 << hex[i++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -416,6 +416,8 @@ void start_update()
|
|||||||
system("systemctl stop moonraker.service\n");
|
system("systemctl stop moonraker.service\n");
|
||||||
system("find /home/mks/gcode_files -maxdepth 1 -type d ! -name sd* -a ! -name '.*' | grep gcode_files/ | xargs rm -rf");
|
system("find /home/mks/gcode_files -maxdepth 1 -type d ! -name sd* -a ! -name '.*' | grep gcode_files/ | xargs rm -rf");
|
||||||
system("cp /home/mks/gcode_files/sda1/QD_Update/QD_gcode/*.gcode /home/mks/gcode_files; chmod 777 /home/mks/gcode_files/*.gcode; sync");
|
system("cp /home/mks/gcode_files/sda1/QD_Update/QD_gcode/*.gcode /home/mks/gcode_files; chmod 777 /home/mks/gcode_files/*.gcode; sync");
|
||||||
|
sleep(3);
|
||||||
|
system("systemctl restart moonraker.service\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检测到UI文件
|
// 检测到UI文件
|
||||||
@@ -435,8 +437,7 @@ void start_update()
|
|||||||
|
|
||||||
if (!factory_mode) {
|
if (!factory_mode) {
|
||||||
command += "mv " + filePath + " " + filePath + ".bak; ";
|
command += "mv " + filePath + " " + filePath + ".bak; ";
|
||||||
}
|
}
|
||||||
|
|
||||||
command += "sync";
|
command += "sync";
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
break; // 每次更新只处理一个UI文件
|
break; // 每次更新只处理一个UI文件
|
||||||
@@ -460,7 +461,7 @@ void start_update()
|
|||||||
{
|
{
|
||||||
std::string filename = entry->d_name;
|
std::string filename = entry->d_name;
|
||||||
if (filename.rfind(".bak") != std::string::npos) continue;
|
if (filename.rfind(".bak") != std::string::npos) continue;
|
||||||
if (filename.find("QD_Q1_PATCH") == 0 || filename.find("QD_Q1_SOC") == 0 || filename.find("QD_Mate3_SOC") == 0)
|
if (filename.find("QD_Q1_PATCH") == 0 || filename.find("QD_Q1_SOC") == 0 || filename.find("QD_Mates3_SOC") == 0)
|
||||||
{
|
{
|
||||||
std::string file_path = base_path + filename;
|
std::string file_path = base_path + filename;
|
||||||
std::string command = "mv " + file_path + " " + base_path + "mks.deb; dpkg -i --force-overwrite " + base_path + "mks.deb;";
|
std::string command = "mv " + file_path + " " + base_path + "mks.deb; dpkg -i --force-overwrite " + base_path + "mks.deb;";
|
||||||
@@ -472,7 +473,6 @@ void start_update()
|
|||||||
{
|
{
|
||||||
new_file_name += ".bak";
|
new_file_name += ".bak";
|
||||||
}
|
}
|
||||||
|
|
||||||
command = "mv " + base_path + "mks.deb " + new_file_name + "; sync";
|
command = "mv " + base_path + "mks.deb " + new_file_name + "; sync";
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
63
src/ui.cpp
63
src/ui.cpp
@@ -104,6 +104,8 @@ extern bool mks_file_parse_finished;
|
|||||||
extern int printer_extruder_temperature;
|
extern int printer_extruder_temperature;
|
||||||
extern int printer_extruder_target;
|
extern int printer_extruder_target;
|
||||||
|
|
||||||
|
extern int printer_heater_bed_target;
|
||||||
|
|
||||||
extern std::string printer_webhooks_state;
|
extern std::string printer_webhooks_state;
|
||||||
|
|
||||||
extern bool printer_ready;
|
extern bool printer_ready;
|
||||||
@@ -642,18 +644,30 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
|||||||
switch (widget_id)
|
switch (widget_id)
|
||||||
{
|
{
|
||||||
case TJC_PAGE_ALL_TO_MAIN:
|
case TJC_PAGE_ALL_TO_MAIN:
|
||||||
page_to(TJC_PAGE_MAIN);
|
if (printer_print_stats_state == "printing" || printer_print_stats_state == "paused") {
|
||||||
|
page_to(TJC_PAGE_PRINTING);
|
||||||
|
jump_to_print = false;
|
||||||
|
} else
|
||||||
|
page_to(TJC_PAGE_MAIN);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_ALL_TO_FILE_LIST:
|
case TJC_PAGE_ALL_TO_FILE_LIST:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_ALL_TO_ADJUST:
|
case TJC_PAGE_ALL_TO_ADJUST:
|
||||||
go_to_adjust();
|
if (printer_print_stats_state == "printing" || printer_print_stats_state == "paused") {
|
||||||
|
page_to(TJC_PAGE_PRINTING);
|
||||||
|
jump_to_print = false;
|
||||||
|
} else
|
||||||
|
go_to_adjust();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_ALL_TO_SETTING:
|
case TJC_PAGE_ALL_TO_SETTING:
|
||||||
go_to_setting();
|
if (printer_print_stats_state == "printing" || printer_print_stats_state == "paused") {
|
||||||
|
page_to(TJC_PAGE_PRINTING);
|
||||||
|
jump_to_print = false;
|
||||||
|
} else
|
||||||
|
go_to_setting();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_PREVIEW_BACK:
|
case TJC_PAGE_PREVIEW_BACK:
|
||||||
@@ -699,6 +713,11 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_PREVIEW_BED_LEVELING:
|
case TJC_PAGE_PREVIEW_BED_LEVELING:
|
||||||
|
if (printer_print_stats_state == "printing" || printer_print_stats_state == "paused") {
|
||||||
|
page_to(TJC_PAGE_PRINTING);
|
||||||
|
jump_to_print = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (printer_bed_leveling == true) {
|
if (printer_bed_leveling == true) {
|
||||||
printer_bed_leveling = false;
|
printer_bed_leveling = false;
|
||||||
}else {
|
}else {
|
||||||
@@ -1369,8 +1388,7 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_LEVEL_MODE_BED_CALIBRATION:
|
case TJC_PAGE_LEVEL_MODE_BED_CALIBRATION:
|
||||||
manual_count = 4;
|
page_to(TJC_PAGE_CALIBRATE_WARNING);
|
||||||
bed_calibrate();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_LEVEL_MODE_TO_COMMON_SETTING:
|
case TJC_PAGE_LEVEL_MODE_TO_COMMON_SETTING:
|
||||||
@@ -1419,6 +1437,10 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case TJC_PAGE_AUTO_HEATERBED_NEXT:
|
case TJC_PAGE_AUTO_HEATERBED_NEXT:
|
||||||
|
if (printer_heater_bed_target < 35) {
|
||||||
|
page_to(TJC_PAGE_AUTO_WARNING);
|
||||||
|
break;
|
||||||
|
}
|
||||||
auto_level_button_enabled = true;
|
auto_level_button_enabled = true;
|
||||||
printer_idle_timeout_state = "Printing";
|
printer_idle_timeout_state = "Printing";
|
||||||
start_auto_level();
|
start_auto_level();
|
||||||
@@ -2070,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_MAIN);
|
page_to(TJC_PAGE_RE_PRINTING);
|
||||||
send_gcode("RESUME_INTERRUPTED\n");
|
send_gcode("RESUME_INTERRUPTED\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2346,6 +2368,35 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TJC_PAGE_AUTO_WARNING:
|
||||||
|
switch (widget_id)
|
||||||
|
{
|
||||||
|
case TJC_PAGE_AUTO_WARNING_YES:
|
||||||
|
page_to(TJC_PAGE_AUTO_HEATERBED);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TJC_PAGE_CALIBRATE_WARNING:
|
||||||
|
switch (widget_id)
|
||||||
|
{
|
||||||
|
case TJC_PAGE_CALIBRATE_WARNING_NEXT:
|
||||||
|
manual_count = 4;
|
||||||
|
bed_calibrate();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TJC_PAGE_CALIBRATE_WARNING_BACK:
|
||||||
|
page_to(TJC_PAGE_LEVEL_MODE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user