SiC_FPV
February 25, 2022, 8:40pm
1
I have an IDEX printer, and I want to activate the fan of the second extruder when the tool is activated, I saw a Macro here, so I just copied, but still not working. So, basically something is sending the SET_FAN_SPEED FAN=extruder1_partfan SPEED=0 when the tool changes.
klippy.log (931.1 KB)
Should I write something on the GCode of the Tool Change? I tried but did’t worked. Appreciated
[fan_generic extruder0_partfan]
pin: PB0
[fan_generic extruder1_partfan]
pin: PB1
[gcode_macro M106]
gcode:
{% if params.P is defined %}
{% if params.S is defined %}
{% if params.S|int == 255 %}
{% set realspeed = 1 %}
{% else %}
{% if params.S|int == 0 %}
{% set realspeed = 0 %}
{% else %}
{% set realspeed = 0.003921params.S|int %}
{% endif %}
{% endif %}
SET_FAN_SPEED FAN=extruder{params.P|int}_partfan SPEED={realspeed}
{% else %}
SET_FAN_SPEED FAN=extruder{params.P|int}_partfan SPEED=1
{% endif %}
{% else %}
{% if params.S is defined %}
{% if params.S|int == 255 %}
{% set realspeed = 1 %}
{% else %}
{% if params.S|int == 0 %}
{% set realspeed = 0 %}
{% else %}
{% set realspeed = 0.003921params.S|int %}
{% endif %}
{% endif %}
SET_FAN_SPEED FAN=extruder0_partfan SPEED={realspeed}
{% else %}
SET_FAN_SPEED FAN=extruder0_partfan SPEED=1
{% endif %}
{% endif %}
[gcode_macro M107]
gcode:
{% if params.P is defined %}
SET_FAN_SPEED FAN=extruder{params.P|int}_partfan SPEED=0
{% else %}
SET_FAN_SPEED FAN=extruder0_partfan SPEED=0
SET_FAN_SPEED FAN=extruder1_partfan SPEED=0
{% endif %}
Hi @SiC_FPV try this
## add to T0 macro
SET_GCODE_VARIABLE MACRO=FAN_VARIABLE VARIABLE=active_fan VALUE=0
CARRIAGE_PRINT_FAN
## add to T1 macro
SET_GCODE_VARIABLE MACRO=FAN_VARIABLE VARIABLE=active_fan VALUE=1
CARRIAGE_PRINT_FAN
HW config
# X1 print cooling fan
[fan_generic fan]
pin: PC9
cycle_time: 0.0100
kick_start_time: 1.00
# X2 print cooling fan
[fan_generic fan1]
pin: PA8
cycle_time: 0.0100
kick_start_time: 1.000
Macro M106 / M107
[gcode_macro FAN_VARIABLE]
gcode:
variable_active_fan: 0
#--- Carriages print cooling FANs ---
variable_fan: 'fan' # carriage X1
variable_fan1: 'fan1' # carriage X2
#--- Other user define FANs ---
variable_fan2: 'fan2'
variable_fan3: 'fan3'
variable_fan4: 'fan4'
variable_fan5: 'fan5'
##########################################################
# PRINTER FANS MANAGEMENT
# Redefine G-code command M106 and M107
##########################################################
[gcode_macro M106]
description: Override "M106" to allow multiple extruders.
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% set raw_speed = params.S|default(0)|float %}
{% set fan_speed = (raw_speed / 255.0)|round(2) %}
{% set target_fan = params.P|default(fan_vars.active_fan)|int %}
{% set default_fan = ('fan', 'fan1', 'fan2', 'fan3', 'fan4', 'fan5')[target_fan] %}
{% if target_fan in [0,1] %}
### carriages print cooling FAN
CARRIAGE_PRINT_FAN SPEED={fan_speed}
{% else %}
### other user define FAN
SET_FAN_SPEED FAN={default_fan} SPEED={fan_speed}
{% endif %}
[gcode_macro M107]
description: Override "M107" to allow multiple extruders.
gcode:
M106 S0
[gcode_macro CARRIAGE_PRINT_FAN]
description: Set automatically the print fan speed for dual carriages modes
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% if params.SPEED is defined %}
{% set fan_speed = params.SPEED|float %}
{% else %}
### read print fan speed from active carriage/extruder
{% set fan_speed = printer["fan_generic " + fan_vars.fan].speed|float %}
{% set fan1_speed = printer["fan_generic " + fan_vars.fan1].speed|float %}
{% set fan_speed = [fan_speed, fan1_speed]|max %}
{% endif %}
{% if fan_vars.active_fan == 0 %}
### FAN on carriage X1
SET_FAN_SPEED FAN={fan_vars.fan} SPEED={fan_speed}
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED=0
{% elif fan_vars.active_fan == 1 %}
### FAN on carriage X2
SET_FAN_SPEED FAN={fan_vars.fan} SPEED=0
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED={fan_speed}
{% endif %}
1 Like
DrumClock:
##########################################################
# PRINTER FANS MANAGEMENT
# Redefine G-code command M106 and M107
##########################################################
[gcode_macro M106]
description: Override "M106" to allow multiple extruders.
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% set raw_speed = params.S|default(0)|float %}
{% set fan_speed = (raw_speed / 255.0)|round(2) %}
{% set target_fan = params.P|default(fan_vars.active_fan)|int %}
{% set default_fan = ('fan', 'fan1', 'fan2', 'fan3', 'fan4', 'fan5')[target_fan] %}
{% if target_fan in [0,1] %}
### carriages print cooling FAN
CARRIAGE_PRINT_FAN SPEED={fan_speed}
{% else %}
### other user define FAN
SET_FAN_SPEED FAN={default_fan} SPEED={fan_speed}
{% endif %}
[gcode_macro M107]
description: Override "M107" to allow multiple extruders.
gcode:
M106 S0
[gcode_macro CARRIAGE_PRINT_FAN]
description: Set automatically the print fan speed for dual carriages modes
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% if params.SPEED is defined %}
{% set fan_speed = params.SPEED|float %}
{% else %}
### read print fan speed from active carriage/extruder
{% set fan_speed = printer["fan_generic " + fan_vars.fan].speed|float %}
{% set fan1_speed = printer["fan_generic " + fan_vars.fan1].speed|float %}
{% set fan_speed = [fan_speed, fan1_speed]|max %}
{% endif %}
{% if fan_vars.active_fan == 0 %}
### FAN on carriage X1
SET_FAN_SPEED FAN={fan_vars.fan} SPEED={fan_speed}
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED=0
{% elif fan_vars.active_fan == 1 %}
### FAN on carriage X2
SET_FAN_SPEED FAN={fan_vars.fan} SPEED=0
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED={fan_speed}
{% endif %}
Thanks mate! I’ll try it, but seems it’s working!!!
1 Like
of course it works, I have tested it
1 Like
Hi @SiC_FPV
Version 2 - for multiple extruders on one carriages
eg my printer … Test(2) - YouTube
Add to macro Txx
## add to T0 macro
#
# CARRIAGE_PRINT_FAN
#
## add to T1 macro
#
# CARRIAGE_PRINT_FAN
HW config FANs
# X1 print cooling fan
# [fan_generic fan]
# pin: PC9
# cycle_time: 0.0100
# kick_start_time: 1.00
# X2 print cooling fan
# [fan_generic fan1]
# pin: PA8
# cycle_time: 0.0100
# kick_start_time: 1.000
# Other define FANs
# [fan_generic fan2]
# pin:
# [fan_generic fan3]
# pin:
# [fan_generic fan4]
# pin:
# [fan_generic fan5]
# pin:
Macros M160 / M107
##########################################################
# PRINTER FANS MANAGEMENT
# Redefine G-code command M106 and M107
##########################################################
[gcode_macro M106]
description: Override "M106" to allow multiple extruders.
gcode:
{% set raw_speed = params.S|default(255)|float %}
{% set fan_speed = (raw_speed / 255.0)|round(2) %}
{% if (params.P) is defined %}
{% set target_fan = params.P|int %}
{% set default_fan = ('fan', 'fan1', 'fan2', 'fan3', 'fan4', 'fan5')[target_fan] %}
SET_FAN_SPEED FAN={default_fan} SPEED={fan_speed}
{% else %}
### carriages print cooling FAN
CARRIAGE_PRINT_FAN SPEED={fan_speed}
{% endif %}
#===============================================================
[gcode_macro M107]
description: Override "M107" to allow multiple extruders.
gcode:
{% if (params.P) is defined %}
M106 S0 P{params.P}
{% else %}
M106 S0
{% endif %}
#===============================================================
[gcode_macro CARRIAGE_PRINT_FAN]
description: Set automatically the print fan speed for dual carriages modes
#--- Carriages print cooling FANs ---
variable_fan: 'fan' # carriage X1
variable_fan1: 'fan1' # carriage X2
gcode:
### FAN speed
{% if params.SPEED is defined %}
{% set fan_speed = params.SPEED|float %}
{% else %}
### read print fan speed from active carriage/extruder
{% set fan_speed = printer["fan_generic " + fan].speed|float %}
{% set fan1_speed = printer["fan_generic " + fan1].speed|float %}
{% set fan_speed = [fan_speed, fan1_speed]|max %}
{% endif %}
### Active FAN for carriage
{% set active_toolhead =({'extruder':0,'extruder1':1,'extruder2':2,'extruder3':3})[printer['toolhead'].extruder] %}
{% if active_toolhead in [0,1] %}
### FAN on carriage X1
SET_FAN_SPEED FAN={fan} SPEED={fan_speed}
SET_FAN_SPEED FAN={fan1} SPEED=0
{% elif active_toolhead in [2,3] %}
### FAN on carriage X2
SET_FAN_SPEED FAN={fan} SPEED=0
SET_FAN_SPEED FAN={fan1} SPEED={fan_speed}
{% endif %}
```
3 Likes
Damn bro! You’re the best!!! The first one worked perfect. And this one will do it as well!!! Klipper community is the best much appreciated!
I’m not the best … these are others who help learn Klipper
Do you use hybrid_corexy
or hybrid_corexz
kinematics?
it could work this:
### Active FAN for carriage
{% if printer.dual_carriage.active_carriage == "CARRIAGE_0" %}
### FAN on carriage X1
SET_FAN_SPEED FAN={fan} SPEED={fan_speed}
SET_FAN_SPEED FAN={fan1} SPEED=0
{% elif printer.dual_carriage.active_carriage == "CARRIAGE_1" %}
### FAN on carriage X2
SET_FAN_SPEED FAN={fan} SPEED=0
SET_FAN_SPEED FAN={fan1} SPEED={fan_speed}
{% endif %}```
Hi I’ve tried to use your macros but I receive this error:
!! Error evaluating 'gcode_macro M106:gcode': jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'active_fan'
Any suggestion? (please)
Hi, send me your current gcode_macro M106.
Here it is, thank you
[gcode_macro FAN_VARIABLE]
gcode:
variable_active_fan: 1
#--- Carriages print cooling FANs ---
variable_fan: 'fan' # carriage X1
variable_fan1: 'fan1' # carriage X2
#--- Other user define FANs ---
variable_fan2: 'fan2'
variable_fan3: 'fan3'
variable_fan4: 'fan4'
variable_fan5: 'fan5'
[gcode_macro M106]
description: Override "M106" to allow multiple extruders.
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% set raw_speed = params.S|default(0)|float %}
{% set fan_speed = (raw_speed / 255.0)|round(2) %}
{% set target_fan = params.P|default(fan_vars.active_fan)|int %}
{% set default_fan = ('fan', 'fan1', 'fan2', 'fan3', 'fan4', 'fan5')[target_fan] %}
{% if target_fan in [0,1] %}
### carriages print cooling FAN
CARRIAGE_PRINT_FAN SPEED={fan_speed}
{% else %}
### other user define FAN
SET_FAN_SPEED FAN={default_fan} SPEED={fan_speed}
{% endif %}
[gcode_macro M107]
description: Override "M107" to allow multiple extruders.
gcode:
M106 S0
[gcode_macro CARRIAGE_PRINT_FAN]
description: Set automatically the print fan speed for dual carriages modes
gcode:
{% set fan_vars = printer["gcode_macro FAN_VARIABLE"] %}
{% if params.SPEED is defined %}
{% set fan_speed = params.SPEED|float %}
{% else %}
### read print fan speed from active carriage/extruder
{% set fan_speed = printer["fan_generic " + fan_vars.fan].speed|float %}
{% set fan1_speed = printer["fan_generic " + fan_vars.fan1].speed|float %}
{% set fan_speed = [fan_speed, fan1_speed]|max %}
{% endif %}
{% if fan_vars.active_fan == 0 %}
### FAN on carriage X1
SET_FAN_SPEED FAN={fan_vars.fan} SPEED={fan_speed}
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED=0
{% elif fan_vars.active_fan == 1 %}
### FAN on carriage X2
SET_FAN_SPEED FAN={fan_vars.fan} SPEED=0
SET_FAN_SPEED FAN={fan_vars.fan1} SPEED={fan_speed}
{% endif %}
Hi, this is probably my first macro.
I am currently using universal macros for various printer cfgs.
Info here: GitHub - DrumClock/my_config
The advantage is that the names of the fans are loaded from printer.cfg and also the switching logic for IDEX, which is dependent on the type of kinematics, is redesigned.
Try new macros, otherwise you’ll have to find the problem yourself because it doesn’t have your complete cfg.
-Petr
1 Like