diff --git a/macros/main.cfg b/macros/main.cfg index c08a2c7..a43b2be 100644 --- a/macros/main.cfg +++ b/macros/main.cfg @@ -25,7 +25,8 @@ gcode: initial_duration: 1 gcode: STATUS_READY - SET_FAN_SPEED FAN=SoC SPEED=0.3 + _Set_SoC_FAN_Speed Mode=Idle + #SET_FAN_SPEED FAN=SoC SPEED=0.3 [delayed_gcode _INIT_TIMELAPSE_CHECK_TIME] initial_duration: 1 @@ -43,6 +44,12 @@ gcode: {action_respond_info('action:poweroff')} {action_call_remote_method("shutdown_machine")} +[gcode_macro _SET_IDLE_MODE] +gcode: + _CHAMBER_LED_OFF + _Set_SoC_FAN_Speed Mode=Idle + M84 + [gcode_macro _CHAMBER_LED_OFF] gcode: @@ -50,7 +57,20 @@ gcode: [gcode_macro _CHAMBER_LED_ON] gcode: - SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1 + SET_LED LED="chamber_leds" RED=1 GREEN=1 BLUE=1 SYNC=0 TRANSMIT=1 + +[gcode_macro _Set_SoC_FAN_Speed] +description: Установка режима работы вентиляторов обдува блока электроники +variable_fan_mode_speeds: { 'Idle': [0,0], 'Printing': [0.3,0.6] } +variable_exist_fans: [ 'SoC_Left', 'SoC_Right'] +gcode: + {% set mode = params.MODE|default("Idle") %} + {% set fan_speeds = fan_mode_speeds[mode] %} + { action_respond_info("set soc fans %s" % (fan_speeds)) } + {% for fan in exist_fans %} + SET_FAN_SPEED FAN={fan} SPEED={fan_speeds[loop.index0]} + {% endfor %} + [gcode_macro _LED_SWITCH] gcode: @@ -88,6 +108,8 @@ gcode: [gcode_macro QUAD_GANTRY_LEVEL] rename_existing: QUAD_GANTRY_LEVEL_BASE gcode: + _Set_SoC_FAN_Speed Mode=Printing + _CHAMBER_LED_ON SET_GCODE_VARIABLE MACRO=_KNOMI_STATUS VARIABLE=qgling VALUE=True STATUS_LEVELING QUAD_GANTRY_LEVEL_BASE @@ -109,7 +131,6 @@ gcode: [gcode_macro PRINT_START] gcode: - _CHAMBER_LED_ON #PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]} {% set BED_TEMP = params.BED|default(60)|float %} {% set EXTRUDER_TEMP = params.EXTRUDER|default(210)|float %} @@ -386,7 +407,185 @@ gcode: G1 E{purge_distance} F{speed} # purge G1 E-{unload_distance} F{max_velocity} # fast-unload RESTORE_GCODE_STATE NAME=unload_state + +[gcode_macro PURGE_AFTER_FILAMENT_CHANGE] +description: Безопасная очистка сопла после замены филамента с опциональным автоматическим хомингом +gcode: + # === ПРОВЕРКА СОСТОЯНИЯ ПРИНТЕРА === + {% if printer.idle_timeout.state == "Printing" %} + {action_respond_info("⚠️ ПРИНТЕР ЗАНЯТ ПЕЧАТЬЮ!")} + {action_respond_info("🛑 Очистка невозможна во время печати!")} + {action_raise_error("ОШИБКА: Принтер занят печатью!")} + {% elif printer['toolhead'].is_printing == true %} + {action_respond_info("⚠️ ДЕТЕКТИРОВАНА АКТИВНАЯ ПЕЧАТЬ!")} + {action_raise_error("ОШИБКА: Активная печать обнаружена!")} + {% endif %} + # === ПРОВЕРКА НЕОБХОДИМОСТИ ХОМИНГА === + {% set homed_axes = printer.toolhead.homed_axes %} + {% set need_homing = false %} + + {% if 'x' not in homed_axes or 'y' not in homed_axes or 'z' not in homed_axes %} + {% set need_homing = true %} + {action_respond_info("🔍 Обнаружены непрохоменные оси: %s" % (['x','y','z']|reject('in', homed_axes)|join(', ')))} + + # Проверяем параметр AUTO_HOME + {% if params.AUTO_HOME|default(1)|int == 1 %} + {action_respond_info("✅ АВТОМАТИЧЕСКИЙ ХОМИНГ ВКЛЮЧЕН (AUTO_HOME=1)")} + {action_respond_info("🔄 Выполняем G28 для всех осей...")} + G28 + {% set need_homing = false %} # После хоминга оси прохомены + {% else %} + {action_respond_info("❓ Для автоматического хоминга используйте: PURGE_AFTER_FILAMENT_CHANGE AUTO_HOME=1")} + {action_respond_info("🛑 ИЛИ выполните хоминг вручную (кнопка 'Home All' в интерфейсе)")} + {action_raise_error("ТРЕБУЕТСЯ ХОМИНГ ОСЕЙ ПЕРЕД ОЧИСТКОЙ")} + {% endif %} + {% endif %} + + # === НАСТРОЙКА ПОД МАТЕРИАЛ === + {% set material = params.MATERIAL|default('PLA')|lower %} + + {% if material == 'pla' %} + {% set default_temp = 210 %} + {% set fan_speed_final = 255 %} + {% elif material == 'petg' %} + {% set default_temp = 230 %} + {% set fan_speed_final = 180 %} + {% elif material == 'abs' %} + {% set default_temp = 240 %} + {% set fan_speed_final = 0 %} + {% elif material == 'tpu' %} + {% set default_temp = 220 %} + {% set fan_speed_final = 100 %} + {% else %} + {% set default_temp = 220 %} + {% set fan_speed_final = 255 %} + {% endif %} + + {% set target_temp = params.TEMP|default(default_temp)|int %} + + # === СТАНДАРТНЫЕ ПАРАМЕТРЫ === + {% set retract_length = 18 %} + {% set retract_speed = 60 %} + {% set min_extrude = 50 %} + {% set max_extrude = 150 %} + + # === РАСЧЕТ ДЛИНЫ ВЫДАВЛИВАНИЯ === + {% set nozzle_diameter = params.NOZZLE|default(0.4)|float %} + {% set filament_diameter = params.FILAMENT_DIAM|default(1.75)|float %} + + {% set base_length = 80 %} + {% set diameter_factor = nozzle_diameter / 0.4 %} + {% set calculated_length = base_length * diameter_factor %} + + {% set total_length = params.LENGTH|default(calculated_length|round(0))|float %} + + {% if total_length < min_extrude %} + {action_respond_info("⚠️ Установлена минимальная длина очистки: %dмм" % min_extrude)} + {% set total_length = min_extrude %} + {% elif total_length > max_extrude %} + {action_respond_info("⚠️ ПРЕДУПРЕЖДЕНИЕ: Запрашиваемая длина %.1fмм превышает безопасный лимит %dмм" % (total_length, max_extrude))} + {% set total_length = max_extrude %} + {% endif %} + + {% set extrude_speed = params.SPEED|default(20)|int %} + + # === БЕЗОПАСНОЕ ПЕРЕМЕЩЕНИЕ В БЕЗОПАСНУЮ ПОЗИЦИЮ === + M118 СТАРТ: Перемещение в безопасную позицию + + # Проверяем текущие позиции и границы + {% set x_max = printer.configfile.settings['stepper_x']['position_max']|float %} + {% set y_max = printer.configfile.settings['stepper_y']['position_max']|float %} + + # Вычисляем безопасные координаты (90% от максимума) + {% set safe_x = x_max * 0.9 %} + {% set safe_y = y_max * 0.9 %} + + # Проверяем текущую Z позицию + {% set current_z = printer.toolhead.position.z %} + {% set safe_z = 50 if current_z < 50 else current_z %} + + # Проверяем, что координаты в допустимых пределах + {% if safe_x > x_max %} + {% set safe_x = x_max * 0.8 %} + {% endif %} + + {% if safe_y > y_max %} + {% set safe_y = y_max * 0.8 %} + {% endif %} + + # Относительное перемещение по Z сначала (если нужно поднять) + {% if current_z < 50 %} + M118 ПОЗИЦИЯ: Подъем по оси Z до 50мм + G91 + G1 Z{50 - current_z} F300 + G90 + {% endif %} + + # Перемещение в XY безопасную позицию + M118 ПОЗИЦИЯ: Перемещение в XY позицию (%.1f, %.1f) % (safe_x, safe_y) + G1 X{safe_x} Y{safe_y} F6000 + + # НАГРЕВ СОПЛА + M118 ПРОГРЕСС: Нагрев сопла до {target_temp|int}C для {material|upper} + M104 S{target_temp} + M109 S{target_temp} + + # ЦИКЛЫ ОЧИСТКИ + M118 ПРОГРЕСС: Предварительная очистка (3 цикла) + + {% for i in range(3) %} + G92 E0 + G1 E10 F{extrude_speed|float*60} + G1 E-5 F{retract_speed|float*60} + G4 P300 + M118 ПРОГРЕСС: Цикл {i+1}/3 завершен + {% endfor %} + + # ОСНОВНОЕ ВЫДАВЛИВАНИЕ + G92 E0 + + {% set first_part = total_length * 0.8 %} + M118 ПРОГРЕСС: Основное выдавливание: {first_part|round(1)}мм + G1 E{first_part} F{extrude_speed|float*60} + + {% set second_part = total_length * 0.2 %} + M118 ПРОГРЕСС: Финальное выдавливание: {second_part|round(1)}мм + M106 S{fan_speed_final} + G1 E{total_length} F{extrude_speed|float*60} + + G4 P1000 + + # РЕТРАКТ + M118 ПРОГРЕСС: Ретракт на {retract_length}мм + G91 + G1 E-{retract_length} F{retract_speed|float*60} + G90 + + # ЗАДЕРЖКА И ОХЛАЖДЕНИЕ + M118 ПРОГРЕСС: Задержка 2с для охлаждения + G4 P2000 + + M118 ПРОГРЕСС: Отключение обдува + M107 + + M118 ПРОГРЕСС: Охлаждение сопла + M104 S150 + G4 P3000 + M104 S0 + + # ФИНАЛЬНАЯ СТАТИСТИКА + {% set total_extruded = total_length - retract_length %} + {% set filament_area = 3.14159 * (filament_diameter/2)**2 %} + {% set volume_flow = filament_area * extrude_speed %} + {% set total_time = (total_length / extrude_speed) + 10 %} + + M118 СТАТИСТИКА: Материал: {material|upper} + M118 СТАТИСТИКА: Сопло: {nozzle_diameter|round(1)}мм + M118 СТАТИСТИКА: Выдавлено: {total_length|round(1)}мм (всего) + M118 СТАТИСТИКА: Чистый материал: {total_extruded|round(1)}мм + M118 СТАТИСТИКА: Объемный расход: {volume_flow|round(1)}мм3/сек + M118 ГОТОВО: Очистка завершена! ✅ [gcode_macro test_speed_fast] gcode: diff --git a/octopus_pro_1.1.cfg b/octopus_pro_1.1.cfg index f61e9a3..0cbd00c 100644 --- a/octopus_pro_1.1.cfg +++ b/octopus_pro_1.1.cfg @@ -204,12 +204,20 @@ pin: PD14 cycle_time: 0.01 hardware_pwm: false -[multi_pin soc_pin] -pins: PD12, PD13 +#[multi_pin soc_pin] +#pins: PD12, PD13 -[fan_generic SoC] -pin: multi_pin: soc_pin +#[fan_generic SoC] +#pin: multi_pin: soc_pin +#max_power: 1 + +[fan_generic SoC_Left] +pin: PD13 +max_power: 1 + +[fan_generic SoC_Right] +pin: PD12 max_power: 1 diff --git a/printer.cfg b/printer.cfg index b119d5f..5213eb6 100644 --- a/printer.cfg +++ b/printer.cfg @@ -1,7 +1,7 @@ [include mainsail.cfg] [include timelapse.cfg] -[include hbb.cfg] +#[include hbb.cfg] # Happy Hare #[include mmu/base/*.cfg] @@ -165,8 +165,9 @@ activate_gcode: ##################################################################### [idle_timeout] -timeout: 1800 +timeout: 600 gcode: + _SET_IDLE_MODE #_CHAMBER_LED_OFF [quad_gantry_level] @@ -216,9 +217,9 @@ adaptive_margin: 5 #*# [bed_mesh default] #*# version = 1 #*# points = -#*# 0.047812, 0.011875, 0.018437, 0.068750 -#*# 0.045312, 0.025312, 0.030625, 0.085937 -#*# 0.057500, 0.017812, 0.029375, 0.089062 +#*# 0.047812, 0.011875, 0.018437, 0.068750 +#*# 0.045312, 0.025312, 0.030625, 0.085937 +#*# 0.057500, 0.017812, 0.029375, 0.089062 #*# x_count = 4 #*# y_count = 3 #*# mesh_x_pps = 2 @@ -231,4 +232,4 @@ adaptive_margin: 5 #*# max_y = 283.447 #*# #*# [probe] -#*# z_offset = -0.835 +#*# z_offset = -0.830