"Regelkreis" für Bauraumheizung
Dieses Makro soll bei jedem Schichtwechsel abgefragt werden und die BauraumTemp anpassen. Leider bekomme ich einen Fehler bei der Abfrage des Temp Sensors. Hat wer eine Idee?
[gcode_macro MAINTAIN_CHAMBER_TEMP] ;Diese Zeile definiert ein Makro mit dem Namen _MAINTAIN_CHAMBER_TEMP, das verwendet wird, um die Kammer-Temperatur während des Drucks konstant zu halten.
description: Konstante Kammer-Temperatur während des Drucks aufrechterhalten.
gcode:;Dieser Block enthält den eigentlichen G-Code, der im Makro ausgeführt wird.
{% if params.CHAMBER_TEMP is defined and params.CHAMBER_TEMP|int > 0 %} ;Dies ist eine Bedingung, die überprüft, ob die Parameter CHAMBER_TEMP und BED_TEMP definiert sind und ob CHAMBER_TEMP größer als 0 ist. Diese Überprüfung stellt sicher, dass die notwendigen Temperaturparameter vorhanden sind und die Kammer-Temperatur überprüft werden kann.
{% set chambertempcontrol = (params.CHAMBER_TEMP|int) + 20 %} ;Hier wird eine Variable chambertempcontrol erstellt und auf den Wert von CHAMBER_TEMP plus 20 gesetzt. Dies definiert die gewünschte Regeltemperatur für den Heizer.
{% set hysteresis = 5 %} ;Eine weitere Variable namens hysteresis wird erstellt und auf den Wert 5 gesetzt. Die Hysterese ist der Unterschied zwischen dem Ein- und Ausschalten der Heizung, um Temperaturschwankungen zu vermeiden.
3 Replies
adverse-sapphireOP•17mo ago
GET_CURRENT_TEMPERATURE SENSOR="temperature_sensor chamber_temp"
{% set currentchambertemp = temperature|int %}
; Wenn die Kammer-Temperatur unter dem Sollwert minus Hysterese liegt {% if currentchambertemp < (params.CHAMBER_TEMP) - hysteresis %} ;Hier wird eine Bedingung überprüft. Es wird überprüft, ob die aktuelle Kammer-Temperatur (currentchambertemp) unter dem Sollwert (CHAMBER_TEMP) minus der Hysterese (hysteresis) liegt. Wenn dies der Fall ist, wird der darin enthaltene Codeblock ausgeführt. SET_HEATER_TEMPERATURE HEATER=chamber TARGET={chambertempcontrol} ;Wenn die oben genannte Bedingung wahr ist, wird diese Anweisung ausgeführt. Sie setzt die Zieltemperatur der Kammerheizung (HEATER=chamber) auf den Wert von chambertempcontrol. Dies bedeutet, dass die Heizung aktiviert wird, um die Kammer auf die gewünschte Temperatur zu bringen. ; wenn die KJammertemperatur etwas oberhalb des Sollwertes liegt {% elif currentchambertemp > (params.CHAMBER_TEMP) + hysteresis %} ;Dies ist eine Bedingung, die überprüft, ob die aktuelle Kammer-Temperatur (currentchambertemp) über dem Sollwert (params.CHAMBER_TEMP) plus der Hysterese (hysteresis) liegt. Wenn dies zutrifft, wird der folgende Codeblock ausgeführt. SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.CHAMBER_TEMP} ;Wenn die oben genannte Bedingung erfüllt ist, wird diese Anweisung ausgeführt. Sie setzt das Ziel für die Kammerheizung (HEATER=chamber) auf den Wert des Sollwerts für die Kammer-Temperatur (params.CHAMBER_TEMP). Dies führt dazu, dass die Heizung aktiviert wird, um die Kammer auf oder nahe dem gewünschten Sollwert zu halten.
; Ansonsten Heizer ausschalten {% else %} SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0 {% endif %} {% endif %} Ist erledigt
; Wenn die Kammer-Temperatur unter dem Sollwert minus Hysterese liegt {% if currentchambertemp < (params.CHAMBER_TEMP) - hysteresis %} ;Hier wird eine Bedingung überprüft. Es wird überprüft, ob die aktuelle Kammer-Temperatur (currentchambertemp) unter dem Sollwert (CHAMBER_TEMP) minus der Hysterese (hysteresis) liegt. Wenn dies der Fall ist, wird der darin enthaltene Codeblock ausgeführt. SET_HEATER_TEMPERATURE HEATER=chamber TARGET={chambertempcontrol} ;Wenn die oben genannte Bedingung wahr ist, wird diese Anweisung ausgeführt. Sie setzt die Zieltemperatur der Kammerheizung (HEATER=chamber) auf den Wert von chambertempcontrol. Dies bedeutet, dass die Heizung aktiviert wird, um die Kammer auf die gewünschte Temperatur zu bringen. ; wenn die KJammertemperatur etwas oberhalb des Sollwertes liegt {% elif currentchambertemp > (params.CHAMBER_TEMP) + hysteresis %} ;Dies ist eine Bedingung, die überprüft, ob die aktuelle Kammer-Temperatur (currentchambertemp) über dem Sollwert (params.CHAMBER_TEMP) plus der Hysterese (hysteresis) liegt. Wenn dies zutrifft, wird der folgende Codeblock ausgeführt. SET_HEATER_TEMPERATURE HEATER=chamber TARGET={params.CHAMBER_TEMP} ;Wenn die oben genannte Bedingung erfüllt ist, wird diese Anweisung ausgeführt. Sie setzt das Ziel für die Kammerheizung (HEATER=chamber) auf den Wert des Sollwerts für die Kammer-Temperatur (params.CHAMBER_TEMP). Dies führt dazu, dass die Heizung aktiviert wird, um die Kammer auf oder nahe dem gewünschten Sollwert zu halten.
; Ansonsten Heizer ausschalten {% else %} SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0 {% endif %} {% endif %} Ist erledigt
Willst du die Lösung noch dokumentieren falls jemand über die Suche drau stößt?
adverse-sapphireOP•17mo ago
Ja - bin aber gerade unterwegs
[gcode_macro _START_PRINT_HEAT_CHAMBER]
description: Uses the chamber sensor to wait for chamber temp. Override the _START_PRINT_HEAT_CHAMBER macro to implement heated chamber handling.
variable_target_temp: 0
gcode:
{% if params.CHAMBER_TEMP is defined and params.BED_TEMP is defined and params.CHAMBER_TEMP|int > 0 %}
{% set chambertempcontrol = (params.CHAMBER_TEMP|int) + 30 %}
{% set z = printer["gcode_macro RatOS"].start_print_park_z_height|float %}
{% set zSpeed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %}
SET_GCODE_VARIABLE MACRO=_START_PRINT_HEAT_CHAMBER VARIABLE=target_temp VALUE={params.CHAMBER_TEMP}
G0 Z{z} F{zSpeed}
M84
M117 Heating chamber...
RESPOND MSG="Heating chamber..."
M140 S{params.BED_TEMP}
M106 S125
SET_FAN_SPEED FAN=Nevermore_fan SPEED=1.0
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={chambertempcontrol}
TEMPERATURE_WAIT SENSOR="temperature_sensor chamber_temp" MINIMUM={params.CHAMBER_TEMP}
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={(params.CHAMBER_TEMP|int) + 20}
UPDATE_DELAYED_GCODE ID=_HEAT_CHAMBER_CONTROL DURATION=1.0
MAYBE_HOME
M106 S0
SET_FAN_SPEED FAN=Nevermore_fan SPEED=0.5
{% endif %}
[delayed_gcode _HEAT_CHAMBER_CONTROL]
initial_duration: 0
gcode:
{% if printer['temperature_sensor chamber_temp'].temperature < printer["gcode_macro _START_PRINT_HEAT_CHAMBER"].target_temp|int %}
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={(printer["gcode_macro _START_PRINT_HEAT_CHAMBER"].target_temp|int) + 30}
{% elif printer['temperature_sensor chamber_temp'].temperature > printer["gcode_macro _START_PRINT_HEAT_CHAMBER"].target_temp|int %}
SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0
{% else %}
SET_HEATER_TEMPERATURE HEATER=chamber TARGET={(printer["gcode_macro _START_PRINT_HEAT_CHAMBER"].target_temp|int) + 5}
{% endif %}
UPDATE_DELAYED_GCODE ID=_HEAT_CHAMBER_CONTROL DURATION=5
[delayed_gcode HEATER_CHAMBER_OFF]
initial_duration: 0
gcode:
SET_HEATER_TEMPERATURE HEATER=chamber TARGET=0