mirror of
https://github.com/QIDITECH/QIDI_Q1_Pro.git
synced 2026-01-30 15:38:43 +03:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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.
|
||||
|
||||
|
||||
## 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.
|
||||
|
||||
**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.
|
||||
|
||||
|
||||
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,11 @@
|
||||
# Q1_Pro
|
||||
# V4.4.16 2024-3-14
|
||||
# modify: variable change M106 & M141 & M107
|
||||
# update: variable change M106 & M141 & M107
|
||||
# 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
|
||||
|
||||
[gcode_macro test_zoffset]
|
||||
gcode:
|
||||
@@ -11,18 +14,30 @@ gcode:
|
||||
G1 X{120 - printer.probe["x_offset"]} Y{120 - printer.probe["y_offset"]} F9000
|
||||
G1 Z10 F600
|
||||
probe
|
||||
M400
|
||||
G4 P5000
|
||||
G1 Z10 F600
|
||||
|
||||
[gcode_macro move_subzoffset]
|
||||
gcode:
|
||||
|
||||
G1 Z{printer.probe.last_z_result} F600
|
||||
|
||||
[gcode_macro get_zoffset]
|
||||
gcode:
|
||||
G1 Z10 F600
|
||||
Z_DOUDONG
|
||||
G4 P500
|
||||
;G4 P500
|
||||
QIDI_PROBE_PIN_1
|
||||
probe probe_speed=10 samples=3
|
||||
SET_KINEMATIC_POSITION Z=-0.1
|
||||
M204 S30
|
||||
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
|
||||
QIDI_PROBE_PIN_2
|
||||
M204 S10000
|
||||
|
||||
[gcode_macro save_zoffset]
|
||||
gcode:
|
||||
@@ -35,70 +50,103 @@ gcode:
|
||||
{% set z = printer.save_variables.variables.z_offset %}
|
||||
SET_GCODE_OFFSET Z={z} MOVE=0
|
||||
|
||||
[gcode_macro CLEAR_NOZZLE]
|
||||
[gcode_macro CLEAR_NOZZLE_PLR]
|
||||
gcode:
|
||||
{% set hotendtemp = params.HOTEND|int %}
|
||||
G1 Z60 F600
|
||||
G1 X97 F9000
|
||||
G1 Y254 F9000
|
||||
{% set hotendtemp = params.HOTEND|default(250)|int %}
|
||||
{% if (printer.gcode_move.position.z ) < 35 %}
|
||||
G90
|
||||
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
|
||||
|
||||
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
|
||||
M104 S0
|
||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-30}
|
||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM={hotendtemp-20}
|
||||
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
|
||||
G1 X65 F500
|
||||
G1 X88 F500
|
||||
G1 X65 F500
|
||||
G1 X88 F500
|
||||
G1 X65 F500
|
||||
G1 X88 F500
|
||||
G1 X65 F500
|
||||
G1 X88 F500
|
||||
G1 X65 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 X97 F500
|
||||
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X85 F2000
|
||||
G1 X98 F2000
|
||||
G1 X97 F2000
|
||||
|
||||
M400
|
||||
M118 Nozzle cleared
|
||||
G1 Y120 F9000
|
||||
G1 X230 F9000
|
||||
G1 Y240 F800
|
||||
G1 Y120 F15000
|
||||
G1 X230 F15000
|
||||
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=140
|
||||
M107
|
||||
M106 P2 S0
|
||||
@@ -120,7 +168,7 @@ gcode:
|
||||
CLEAR_NOZZLE HOTEND={hotendtemp}
|
||||
|
||||
M190 S{bedtemp}
|
||||
Z_TILT_ADJUST
|
||||
# Z_TILT_ADJUST
|
||||
G29
|
||||
G0 Z50 F600
|
||||
G0 X0 Y0 F6000
|
||||
@@ -129,11 +177,20 @@ gcode:
|
||||
M109 S{hotendtemp}
|
||||
M204 S10000
|
||||
|
||||
ENABLE_ALL_SENSOR
|
||||
save_last_file
|
||||
|
||||
[gcode_macro ENABLE_ALL_SENSOR]
|
||||
gcode:
|
||||
ENABLE_FILAMENT_WIDTH_SENSOR
|
||||
RESET_FILAMENT_WIDTH_SENSOR
|
||||
query_filament_width
|
||||
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]
|
||||
variable_autotune_shapers: 'ei'
|
||||
@@ -149,7 +206,7 @@ gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
||||
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
||||
|
||||
[gcode_macro KINEMATIC_POSITION]
|
||||
[gcode_macro DETECT_INTERRUPTION]
|
||||
gcode:
|
||||
{% set was_interrupted = printer.save_variables.variables.was_interrupted %}
|
||||
{% if was_interrupted %}
|
||||
@@ -158,19 +215,13 @@ gcode:
|
||||
M118 No: CLEAR_LAST_FILE
|
||||
{% endif %}
|
||||
|
||||
[delayed_gcode KINEMATIC_POSITION]
|
||||
[delayed_gcode PRINTER_INIT]
|
||||
initial_duration:0.2
|
||||
gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_z enable=1
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
||||
BED_MESH_CLEAR
|
||||
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]
|
||||
axes:xyz
|
||||
@@ -214,9 +265,9 @@ gcode:
|
||||
{% if params.Z is undefined %}
|
||||
SET_KINEMATIC_POSITION X=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
|
||||
G1 Z5 F600
|
||||
G1 Z7 F600
|
||||
G1 X10 F2400
|
||||
G1 Y10 F2400
|
||||
G4 P2000
|
||||
@@ -239,7 +290,7 @@ gcode:
|
||||
BEEP I=1 DUR=100
|
||||
G1 X10 F1200
|
||||
|
||||
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-5}
|
||||
SET_KINEMATIC_POSITION Z={printer.toolhead.axis_maximum.z-10}
|
||||
|
||||
G90
|
||||
G1 X120 Y120 F7800
|
||||
@@ -282,17 +333,13 @@ gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
||||
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
||||
|
||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
||||
DISABLE_FILAMENT_WIDTH_SENSOR
|
||||
DISABLE_ALL_SENSOR
|
||||
SET_GCODE_OFFSET Z=0 MOVE=0
|
||||
BED_MESH_CLEAR
|
||||
G31
|
||||
CLEAR_LAST_FILE
|
||||
BEEP I=2 DUR=500
|
||||
|
||||
|
||||
|
||||
|
||||
[gcode_macro CANCEL_PRINT]
|
||||
rename_existing: BASE_CANCEL_PRINT
|
||||
gcode:
|
||||
@@ -321,8 +368,7 @@ gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_z1 enable=1
|
||||
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
||||
|
||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0
|
||||
DISABLE_FILAMENT_WIDTH_SENSOR
|
||||
DISABLE_ALL_SENSOR
|
||||
SET_GCODE_OFFSET Z=0 MOVE=0
|
||||
BED_MESH_CLEAR
|
||||
G31
|
||||
@@ -345,6 +391,8 @@ gcode:
|
||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=0 ; disable filament sensor
|
||||
SAVE_GCODE_STATE NAME=PAUSE ; save current print position for resume
|
||||
BASE_PAUSE ; pause print
|
||||
G92 E0
|
||||
G1 E-5 F1800
|
||||
{% if (printer.gcode_move.position.z ) < z %}
|
||||
G91 ; relative positioning
|
||||
G1 Z{z} F900 ; raise Z up by z hop amount
|
||||
@@ -363,7 +411,6 @@ gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=extruder enable=0
|
||||
{% endif %}
|
||||
|
||||
|
||||
[gcode_macro RESUME]
|
||||
rename_existing: BASE_RESUME
|
||||
variable_zhop: 0
|
||||
@@ -405,8 +452,6 @@ gcode:
|
||||
SET_FILAMENT_SENSOR SENSOR=fila ENABLE=1 ; enable filament sensor
|
||||
{% endif %}
|
||||
|
||||
|
||||
|
||||
[gcode_macro BEEP]
|
||||
gcode:
|
||||
{% set i = params.I|default(1)|int %} ; Iterations (number of times to beep).
|
||||
@@ -553,8 +598,6 @@ gcode:
|
||||
|
||||
[gcode_macro M4028]
|
||||
gcode:
|
||||
G28
|
||||
Z_TILT_ADJUST
|
||||
G28
|
||||
get_zoffset
|
||||
M400
|
||||
@@ -569,7 +612,7 @@ gcode:
|
||||
M118 Position init complete
|
||||
|
||||
CLEAR_NOZZLE HOTEND=240
|
||||
Z_TILT_ADJUST
|
||||
|
||||
G28
|
||||
get_zoffset
|
||||
|
||||
@@ -582,15 +625,35 @@ gcode:
|
||||
G1 X120 Y120 F9000
|
||||
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]
|
||||
description: filament unlode
|
||||
description: filament unload
|
||||
gcode:
|
||||
M118 Heat up complete
|
||||
G92 E0
|
||||
G0 E15 F400
|
||||
G4 P1000
|
||||
G92 E0
|
||||
G1 E-80 F800
|
||||
G1 E-90 F800
|
||||
M400
|
||||
M118 Unload finish
|
||||
|
||||
@@ -603,7 +666,7 @@ gcode:
|
||||
M118 Load finish
|
||||
|
||||
[output_pin sound]
|
||||
pin: U_1:PA13
|
||||
pin: gpio8
|
||||
value:0
|
||||
|
||||
[gcode_macro beep_on]
|
||||
@@ -686,126 +749,19 @@ gcode:
|
||||
|
||||
[gcode_macro Z_DOUDONG]
|
||||
gcode:
|
||||
m204 S5000
|
||||
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
|
||||
M204 S30
|
||||
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_Z_VELOCITY_LIMIT VALUE=10
|
||||
G4 P500
|
||||
G4 P1000
|
||||
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
|
||||
# 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 fan2 -> fan_generic auxiliary_cooling_fan
|
||||
# out_put_pin fan3 -> fan_generic chamber_circulation_fan
|
||||
# heater_fan hot -> heater_fan chamber
|
||||
# verify_heater hot -> verify_heater chamber
|
||||
# V4.4.17 2024-3-29
|
||||
# modify: delete comments
|
||||
# update: delete comments
|
||||
# add time_update macro
|
||||
# [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 Adaptive_Mesh.cfg]
|
||||
[include gcode_macro.cfg]
|
||||
@@ -75,7 +85,6 @@ min_diameter: 0.3
|
||||
use_current_dia_while_delay: False
|
||||
pause_on_runout:True
|
||||
runout_gcode:
|
||||
pause
|
||||
RESET_FILAMENT_WIDTH_SENSOR
|
||||
M118 Filament run out
|
||||
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
|
||||
position_min: -5.5
|
||||
position_endstop: -5.5
|
||||
position_max:245
|
||||
position_max:246
|
||||
homing_speed:50
|
||||
homing_retract_dist:0
|
||||
homing_positive_dir:False
|
||||
@@ -180,13 +189,17 @@ microsteps: 128
|
||||
rotation_distance: 4
|
||||
full_steps_per_rotation: 200
|
||||
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_reverse:248
|
||||
position_max:248
|
||||
position_min: -6
|
||||
position_min: -4
|
||||
homing_speed: 8
|
||||
homing_speed_reverse: 8
|
||||
second_homing_speed: 10
|
||||
homing_retract_dist: 5.0
|
||||
homing_positive_dir:false
|
||||
homing_positive_dir_reverse:true
|
||||
step_pulse_duration:0.0000001
|
||||
|
||||
[stepper_z1]
|
||||
@@ -197,6 +210,7 @@ microsteps: 128
|
||||
rotation_distance: 4
|
||||
full_steps_per_rotation: 200
|
||||
step_pulse_duration:0.0000001
|
||||
endstop_pin_reverse:tmc2209_stepper_z1:virtual_endstop
|
||||
|
||||
[z_tilt]
|
||||
z_positions:
|
||||
@@ -244,6 +258,8 @@ run_current: 0.6
|
||||
#hold_current: 0.17
|
||||
interpolate: True
|
||||
stealthchop_threshold: 9999999999
|
||||
diag_pin:^U_1:PC12
|
||||
driver_SGTHRS:130
|
||||
|
||||
[tmc2209 stepper_z1]
|
||||
uart_pin:U_1: PB7
|
||||
@@ -251,6 +267,8 @@ run_current: 0.6
|
||||
#hold_current: 0.17
|
||||
interpolate: True
|
||||
stealthchop_threshold: 9999999999
|
||||
diag_pin:^U_1:PA13
|
||||
driver_SGTHRS:130
|
||||
|
||||
[heater_bed]
|
||||
heater_pin: U_1:PB10
|
||||
@@ -312,15 +330,16 @@ hardware_pwm: false
|
||||
kick_start_time: 0.100
|
||||
off_below: 0.0
|
||||
|
||||
[heater_fan chamber_fan]
|
||||
[chamber_fan chamber_fan]
|
||||
pin:U_1:PA4
|
||||
max_power: 1.0
|
||||
shutdown_speed: 0
|
||||
kick_start_time: 0.5
|
||||
heater: chamber
|
||||
heater_temp: 35
|
||||
heater:chamber
|
||||
fan_speed: 1.0
|
||||
off_below: 0
|
||||
idle_timeout:60
|
||||
idle_speed:1.0
|
||||
|
||||
[heater_fan hotend_fan]
|
||||
pin:gpio25
|
||||
@@ -383,11 +402,12 @@ recovery_time:0
|
||||
x_offset: 17.6
|
||||
y_offset: 4.4
|
||||
z_offset: 0.000001
|
||||
speed:10
|
||||
speed:5
|
||||
lift_speed:5
|
||||
probe_accel:50
|
||||
samples: 2
|
||||
samples_result: average
|
||||
sample_retract_dist: 3.0
|
||||
samples_result: submaxmin
|
||||
sample_retract_dist: 5.0
|
||||
samples_tolerance: 0.05
|
||||
samples_tolerance_retries:5
|
||||
|
||||
@@ -405,105 +425,12 @@ algorithm:bicubic
|
||||
bicubic_tension:0.2
|
||||
mesh_pps: 2, 2
|
||||
vibrate_gcode:
|
||||
G90
|
||||
m204 S5000
|
||||
SET_Z_VELOCITY_LIMIT VALUE=15
|
||||
SET_PIN PIN=ctlyd VALUE=1
|
||||
G4 P500
|
||||
G91
|
||||
G1 Z1 F900
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G1 Z1
|
||||
G1 Z-1
|
||||
G90
|
||||
SET_PIN PIN=ctlyd VALUE=0
|
||||
SET_Z_VELOCITY_LIMIT VALUE=10
|
||||
G4 P500
|
||||
Z_DOUDONG
|
||||
|
||||
[filament_switch_sensor fila]
|
||||
pause_on_runout: True
|
||||
runout_gcode:
|
||||
PAUSE
|
||||
M118 Filament tangle detected
|
||||
event_delay: 3.0
|
||||
pause_delay: 0.5
|
||||
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();
|
||||
void set_mks_ethernet(int target);
|
||||
|
||||
std::string hex_to_utf8(const std::string& hex);
|
||||
|
||||
void check_print_interrupted();
|
||||
|
||||
#endif
|
||||
|
||||
@@ -420,6 +420,15 @@
|
||||
|
||||
#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 page_to(int page_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();
|
||||
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) {
|
||||
previous_page_id = TJC_PAGE_LOGO;
|
||||
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;
|
||||
|
||||
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中统一改变页面,否则会产生冲突)
|
||||
bool jump_to_move_pop_1 = false;
|
||||
bool jump_to_move_pop_2 = false;
|
||||
@@ -404,6 +406,42 @@ void refresh_page_show() {
|
||||
page_to(TJC_PAGE_MOVE_POP_1);
|
||||
}
|
||||
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;
|
||||
page_to(TJC_PAGE_MOVE_POP_2);
|
||||
}
|
||||
@@ -855,6 +893,7 @@ void refresh_page_auto_finish() {
|
||||
}
|
||||
|
||||
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) {
|
||||
send_cmd_picc(tty_fd, "q0", "109");
|
||||
send_cmd_pco(tty_fd, "t1", "65535");
|
||||
@@ -1491,7 +1530,7 @@ void refresh_page_main() {
|
||||
|
||||
// CLL 每次开机发送断电续打
|
||||
if (open_reprint_asked == false) {
|
||||
ep->Send(json_run_a_gcode("KINEMATIC_POSITION\n"));
|
||||
check_print_interrupted();
|
||||
open_reprint_asked = true;
|
||||
}
|
||||
}
|
||||
@@ -1696,26 +1735,32 @@ void move_home() {
|
||||
|
||||
void move_x_decrease() {
|
||||
ep->Send(move(AXIS_X, "-" + std::to_string(printer_move_dist), 130));
|
||||
unhomed_move_mode = 2;
|
||||
}
|
||||
|
||||
void move_x_increase() {
|
||||
ep->Send(move(AXIS_X, "+" + std::to_string(printer_move_dist), 130));
|
||||
unhomed_move_mode = 1;
|
||||
}
|
||||
|
||||
void move_y_decrease() {
|
||||
ep->Send(move(AXIS_Y, "-" + std::to_string(printer_move_dist), 130));
|
||||
unhomed_move_mode = 4;
|
||||
}
|
||||
|
||||
void move_y_increase() {
|
||||
ep->Send(move(AXIS_Y, "+" + std::to_string(printer_move_dist), 130));
|
||||
unhomed_move_mode = 3;
|
||||
}
|
||||
|
||||
void move_z_decrease() {
|
||||
ep->Send(move(AXIS_Z, "-" + std::to_string(printer_move_dist), 10));
|
||||
unhomed_move_mode = 5;
|
||||
}
|
||||
|
||||
void move_z_increase() {
|
||||
ep->Send(move(AXIS_Z, "+" + std::to_string(printer_move_dist), 10));
|
||||
unhomed_move_mode = 6;
|
||||
}
|
||||
|
||||
bool get_filament_detected() {
|
||||
@@ -2115,7 +2160,7 @@ void go_to_network() {
|
||||
scan_ssid_and_show();
|
||||
get_wlan0_status();
|
||||
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")) {
|
||||
current_connected_ssid_name.clear(); // 如果没连接wifi,清除掉当前已连接wifi的名字
|
||||
}
|
||||
@@ -2143,7 +2188,7 @@ void refresh_page_wifi_list() {
|
||||
if (0 == page_wifi_current_pages) {
|
||||
if (0 == i) {
|
||||
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 {
|
||||
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() {
|
||||
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() {
|
||||
@@ -2885,6 +2933,7 @@ void bed_calibrate() {
|
||||
if (manual_count == 4) {
|
||||
bed_offset = 0;
|
||||
printer_idle_timeout_state = "Printing";
|
||||
ep->Send(json_run_a_gcode("ABORT\n"));
|
||||
ep->Send(json_run_a_gcode("M4030"));
|
||||
page_to(TJC_PAGE_BED_MOVING);
|
||||
}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 /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);
|
||||
}
|
||||
}
|
||||
@@ -3228,16 +3277,15 @@ void go_to_showqr() {
|
||||
page_to(TJC_PAGE_SHOW_QR);
|
||||
if (strcmp(status_result.wpa_state, "COMPLETED") == 0 || mks_ethernet) {
|
||||
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)
|
||||
qrmessage = run_python_code("python3 /home/mks/qrcode/qrcode_QD.py 176\n");
|
||||
std::cout << "qrmessage:" << qrmessage << std::endl;
|
||||
if (qrmessage.find("Missing or invalid") != -1) {
|
||||
send_cmd_txt(tty_fd, "t4", qrmessage);
|
||||
send_cmd_vis(tty_fd, "t4", "1");
|
||||
send_cmd_cp_close(tty_fd, "cp0");
|
||||
} else if (qrmessage.find("No") != -1) {
|
||||
send_cmd_vis(tty_fd, "t4", "1");
|
||||
send_cmd_cp_close(tty_fd, "cp0");
|
||||
} else {
|
||||
open_qr_refreshed = true;
|
||||
refresh_files_list_picture("/home/mks/qrcode/qrcode.jpg", 176, 0);
|
||||
@@ -3295,7 +3343,12 @@ void update_server(int choice)
|
||||
{
|
||||
// CLL 连接服务器获取json文件
|
||||
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 {
|
||||
qr_refreshed = false; // CLL 当choice不为0时,该函数用于切换服务器,需要重新刷新二维码
|
||||
}
|
||||
@@ -3468,7 +3521,7 @@ void check_online_version() {
|
||||
page_to(TJC_PAGE_SEARCH_SERVER);
|
||||
if (connection_method == 0)
|
||||
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;
|
||||
if (target_soc_version.find("0") == 0) {
|
||||
page_to(TJC_PAGE_UPDATE_MODE);
|
||||
@@ -3520,7 +3573,7 @@ void online_update() {
|
||||
pthread_t recevice_progress_pthread;
|
||||
pthread_create(&recevice_progress_pthread, NULL, recevice_progress_handle, NULL);
|
||||
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);
|
||||
system("sync\n");
|
||||
system("systemctl restart makerbase-client\n");
|
||||
@@ -3582,4 +3635,38 @@ void set_mks_ethernet(int target) {
|
||||
mksini_save();
|
||||
mksini_free();
|
||||
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;
|
||||
}
|
||||
} 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("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");
|
||||
sleep(3);
|
||||
system("systemctl restart moonraker.service\n");
|
||||
}
|
||||
|
||||
// 检测到UI文件
|
||||
@@ -435,8 +437,7 @@ void start_update()
|
||||
|
||||
if (!factory_mode) {
|
||||
command += "mv " + filePath + " " + filePath + ".bak; ";
|
||||
}
|
||||
|
||||
}
|
||||
command += "sync";
|
||||
system(command.c_str());
|
||||
break; // 每次更新只处理一个UI文件
|
||||
@@ -460,7 +461,7 @@ void start_update()
|
||||
{
|
||||
std::string filename = entry->d_name;
|
||||
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 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";
|
||||
}
|
||||
|
||||
command = "mv " + base_path + "mks.deb " + new_file_name + "; sync";
|
||||
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_target;
|
||||
|
||||
extern int printer_heater_bed_target;
|
||||
|
||||
extern std::string printer_webhooks_state;
|
||||
|
||||
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)
|
||||
{
|
||||
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;
|
||||
|
||||
case TJC_PAGE_ALL_TO_FILE_LIST:
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
case TJC_PAGE_PREVIEW_BACK:
|
||||
@@ -699,6 +713,11 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
||||
break;
|
||||
|
||||
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) {
|
||||
printer_bed_leveling = false;
|
||||
}else {
|
||||
@@ -1369,8 +1388,7 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
||||
break;
|
||||
|
||||
case TJC_PAGE_LEVEL_MODE_BED_CALIBRATION:
|
||||
manual_count = 4;
|
||||
bed_calibrate();
|
||||
page_to(TJC_PAGE_CALIBRATE_WARNING);
|
||||
break;
|
||||
|
||||
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;
|
||||
|
||||
case TJC_PAGE_AUTO_HEATERBED_NEXT:
|
||||
if (printer_heater_bed_target < 35) {
|
||||
page_to(TJC_PAGE_AUTO_WARNING);
|
||||
break;
|
||||
}
|
||||
auto_level_button_enabled = true;
|
||||
printer_idle_timeout_state = "Printing";
|
||||
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:
|
||||
switch(widget_id) {
|
||||
case TJC_PAGE_RESUME_PRINT_YES:
|
||||
page_to(TJC_PAGE_MAIN);
|
||||
page_to(TJC_PAGE_RE_PRINTING);
|
||||
send_gcode("RESUME_INTERRUPTED\n");
|
||||
break;
|
||||
|
||||
@@ -2346,6 +2368,35 @@ void tjc_event_clicked_handler(int page_id, int widget_id, int type_id) {
|
||||
}
|
||||
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:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user