Merge pull request #1123 from qitechgmbh/1119-disable-nozzle-temp-check-on-extruder

1119 Added toggle to disable nozzle heater/temp check for extruder 2 and 3
This commit is contained in:
Christian authored and GitHub committed 2026-02-20 19:15:20 +01:00
commit 8a3de40501
20 files changed
+174 -25

No files matched your search

+17 -14
View File
@@ -16,6 +16,7 @@ type Props = {
min: number;
max: number;
onChangeTargetTemp?: (temperature: number) => void;
targetTemperatureEnabled: boolean;
};
export function HeatingZone({
title,
@@ -25,6 +26,7 @@ export function HeatingZone({
heatingTimeSeries,
heatingPower,
onChangeTargetTemp,
targetTemperatureEnabled,
}: Props) {
const targetTemperature = heatingState?.target_temperature ?? 150;
@@ -41,19 +43,20 @@ export function HeatingZone({
timeseries={heatingTimeSeries}
/>
</div>
<Label label="Target Temperature">
<EditValue
value={targetTemperature}
defaultValue={150}
min={min}
max={max}
unit="C"
title="Target Temperature"
renderValue={(value) => roundToDecimals(value, 1)}
onChange={onChangeTargetTemp}
/>
</Label>
{targetTemperatureEnabled && (
<Label label="Target Temperature">
<EditValue
value={targetTemperature}
defaultValue={150}
min={min}
max={max}
unit="C"
title="Target Temperature"
renderValue={(value) => roundToDecimals(value, 1)}
onChange={onChangeTargetTemp}
/>
</Label>
)}
</div>
<TimeSeriesValueNumeric
@@ -65,7 +68,7 @@ export function HeatingZone({
timeseries={heatingPower}
/>
{heatingState?.wiring_error && (
{heatingState?.wiring_error && targetTemperatureEnabled && (
<StatusBadge variant="error">
Cant Read Temperature! Check Temperature Sensor Wiring!
</StatusBadge>
@@ -68,10 +68,12 @@ export function Extruder2ControlPage() {
backTemperature.current?.value ?? 0,
state?.heating_states.back.target_temperature ?? 1,
);
const nozzleReady = isZoneReadyForExtrusion(
nozzleTemperature.current?.value ?? 0,
state?.heating_states.nozzle.target_temperature ?? 1,
);
const nozzleReady =
!state?.extruder_settings_state.nozzle_temperature_target_enabled ||
isZoneReadyForExtrusion(
nozzleTemperature.current?.value ?? 0,
state?.heating_states.nozzle.target_temperature ?? 1,
);
return frontReady && middleReady && backReady && nozzleReady;
};
@@ -87,6 +89,7 @@ export function Extruder2ControlPage() {
onChangeTargetTemp={setFrontHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Middle"}
@@ -96,6 +99,7 @@ export function Extruder2ControlPage() {
onChangeTargetTemp={setMiddleHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Back"}
@@ -105,6 +109,7 @@ export function Extruder2ControlPage() {
onChangeTargetTemp={setBackHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Nozzle"}
@@ -114,6 +119,10 @@ export function Extruder2ControlPage() {
onChangeTargetTemp={setNozzleHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={
state?.extruder_settings_state.nozzle_temperature_target_enabled ??
true
}
/>
<ControlCard className="bg-red" title="Screw Drive">
{state?.inverter_status_state.overload_warning == true ? (
@@ -20,6 +20,7 @@ export function Extruder2SettingsPage() {
setPressurePidKi,
setPressurePidKd,
setTemperaturePidValue,
setTemperatureTargetEnabled,
} = useExtruder2();
const [showAdvanced, setShowAdvanced] = useState(false);
@@ -68,6 +69,16 @@ export function Extruder2SettingsPage() {
onChange={setExtruderPressureLimitEnabled}
/>
</Label>
<Label label="Nozzle Temperature Target Enabled">
<SelectionGroupBoolean
value={
state?.extruder_settings_state.nozzle_temperature_target_enabled
}
optionTrue={{ children: "Enabled" }}
optionFalse={{ children: "Disabled" }}
onChange={setTemperatureTargetEnabled}
/>
</Label>
<Label label="Show Advanced PID Settings">
<SelectionGroupBoolean
value={showAdvanced}
@@ -109,6 +109,7 @@ export const heatingStatesSchema = z.object({
export const extruderSettingsStateSchema = z.object({
pressure_limit: z.number(),
pressure_limit_enabled: z.boolean(),
nozzle_temperature_target_enabled: z.boolean(),
});
/**
@@ -232,6 +232,20 @@ export function useExtruder2() {
);
};
const setTemperatureTargetEnabled = (enabled: boolean) => {
updateStateOptimistically(
(current) => {
current.data.extruder_settings_state.nozzle_temperature_target_enabled =
enabled;
},
() =>
requestNozzleTemperatureTargetEnabled({
machine_identification_unique: machineIdentification,
data: { SetNozzleTemperatureTargetEnabled: enabled },
}),
);
};
const setPressurePidKp = (kp: number) => {
updateStateOptimistically(
(current) => {
@@ -381,6 +395,10 @@ export function useExtruder2() {
z.object({ SetExtruderPressureLimitIsEnabled: z.boolean() }),
);
const { request: requestNozzleTemperatureTargetEnabled } = useMachineMutation(
z.object({ SetNozzleTemperatureTargetEnabled: z.boolean() }),
);
const { request: requestPressurePidSettings } = useMachineMutation(
z.object({
SetPressurePidSettings: z.object({
@@ -459,6 +477,7 @@ export function useExtruder2() {
setPressurePidKi,
setPressurePidKd,
setTemperaturePidValue,
setTemperatureTargetEnabled,
resetInverter,
};
}
@@ -68,10 +68,12 @@ export function Extruder3ControlPage() {
backTemperature.current?.value ?? 0,
state?.heating_states.back.target_temperature ?? 1,
);
const nozzleReady = isZoneReadyForExtrusion(
nozzleTemperature.current?.value ?? 0,
state?.heating_states.nozzle.target_temperature ?? 1,
);
const nozzleReady =
!state?.extruder_settings_state.nozzle_temperature_target_enabled ||
isZoneReadyForExtrusion(
nozzleTemperature.current?.value ?? 0,
state?.heating_states.nozzle.target_temperature ?? 1,
);
return frontReady && middleReady && backReady && nozzleReady;
};
@@ -87,6 +89,7 @@ export function Extruder3ControlPage() {
onChangeTargetTemp={setFrontHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Middle"}
@@ -96,6 +99,7 @@ export function Extruder3ControlPage() {
onChangeTargetTemp={setMiddleHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Back"}
@@ -105,6 +109,7 @@ export function Extruder3ControlPage() {
onChangeTargetTemp={setBackHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={true}
/>
<HeatingZone
title={"Heating Nozzle"}
@@ -114,6 +119,10 @@ export function Extruder3ControlPage() {
onChangeTargetTemp={setNozzleHeatingTemperature}
min={0}
max={300}
targetTemperatureEnabled={
state?.extruder_settings_state.nozzle_temperature_target_enabled ??
true
}
/>
<ControlCard className="bg-red" title="Screw Drive">
{state?.inverter_status_state.overload_warning == true ? (
@@ -20,6 +20,7 @@ export function Extruder3SettingsPage() {
setPressurePidKi,
setPressurePidKd,
setTemperaturePidValue,
setTemperatureTargetEnabled,
} = useExtruder3();
const [showAdvanced, setShowAdvanced] = useState(false);
@@ -68,6 +69,16 @@ export function Extruder3SettingsPage() {
onChange={setExtruderPressureLimitEnabled}
/>
</Label>
<Label label="Nozzle Temperature Target Enabled">
<SelectionGroupBoolean
value={
state?.extruder_settings_state.nozzle_temperature_target_enabled
}
optionTrue={{ children: "Enabled" }}
optionFalse={{ children: "Disabled" }}
onChange={setTemperatureTargetEnabled}
/>
</Label>
<Label label="Show Advanced PID Settings">
<SelectionGroupBoolean
value={showAdvanced}
@@ -109,6 +109,7 @@ export const heatingStatesSchema = z.object({
export const extruderSettingsStateSchema = z.object({
pressure_limit: z.number(),
pressure_limit_enabled: z.boolean(),
nozzle_temperature_target_enabled: z.boolean(),
});
/**
@@ -232,6 +232,28 @@ export function useExtruder3() {
);
};
const setTemperatureTargetEnabled = (enabled: boolean) => {
const res = enabled
? true
: confirm(
"This will disable the ability to set a temperature target for the nozzle heating element and will any wiring error message. Only proceed if you understand the risks.",
);
if (res) {
updateStateOptimistically(
(current) => {
current.data.extruder_settings_state.nozzle_temperature_target_enabled =
enabled;
},
() =>
requestNozzleTemperatureTargetEnabled({
machine_identification_unique: machineIdentification,
data: { SetNozzleTemperatureTargetEnabled: enabled },
}),
);
}
};
const setPressurePidKp = (kp: number) => {
updateStateOptimistically(
(current) => {
@@ -381,6 +403,10 @@ export function useExtruder3() {
z.object({ SetExtruderPressureLimitIsEnabled: z.boolean() }),
);
const { request: requestNozzleTemperatureTargetEnabled } = useMachineMutation(
z.object({ SetNozzleTemperatureTargetEnabled: z.boolean() }),
);
const { request: requestPressurePidSettings } = useMachineMutation(
z.object({
SetPressurePidSettings: z.object({
@@ -455,6 +481,7 @@ export function useExtruder3() {
setMiddleHeatingTemperature,
setExtruderPressureLimit,
setExtruderPressureLimitEnabled,
setTemperatureTargetEnabled,
setPressurePidKp,
setPressurePidKi,
setPressurePidKd,
+7
View File
@@ -152,6 +152,7 @@ pub struct HeatingState {
pub struct ExtruderSettingsState {
pub pressure_limit: f64,
pub pressure_limit_enabled: bool,
pub nozzle_temperature_target_enabled: bool,
}
#[derive(Serialize, Debug, Clone, PartialEq, Eq)]
@@ -237,6 +238,9 @@ pub enum Mutation {
// Reset
ResetInverter(bool),
// Toggle nozzle temperature target
SetNozzleTemperatureTargetEnabled(bool),
}
#[derive(Debug)]
@@ -317,6 +321,9 @@ impl MachineApi for ExtruderV2 {
Mutation::SetTemperaturePidSettings(settings) => {
self.configure_temperature_pid(settings);
}
Mutation::SetNozzleTemperatureTargetEnabled(enabled) => {
self.set_nozzle_temperature_target_is_enabled(enabled);
}
}
Ok(())
}
+9
View File
@@ -94,6 +94,9 @@ impl ExtruderV2 {
pressure_limit_enabled: self
.screw_speed_controller
.get_nozzle_pressure_limit_enabled(),
nozzle_temperature_target_enabled: self
.temperature_controller_nozzle
.get_temperature_target_enabled(),
},
inverter_status_state: InverterStatusState {
running: self.screw_speed_controller.inverter.status.running,
@@ -296,6 +299,12 @@ impl ExtruderV2 {
self.emit_state();
}
pub fn set_nozzle_temperature_target_is_enabled(&mut self, enabled: bool) {
self.temperature_controller_nozzle
.set_temperature_target_enabled(enabled);
self.emit_state();
}
pub fn configure_pressure_pid(&mut self, settings: PidSettings) {
self.screw_speed_controller
.pid
+3
View File
@@ -41,6 +41,9 @@ impl MachineApi for ExtruderV2 {
Mutation::SetTemperaturePidSettings(settings) => {
self.configure_temperature_pid(settings);
}
Mutation::SetNozzleTemperatureTargetEnabled(enabled) => {
self.set_nozzle_temperature_target_is_enabled(enabled);
}
}
Ok(())
}
+6
View File
@@ -130,6 +130,12 @@ impl ExtruderV2 {
self.emit_state();
}
pub fn set_nozzle_temperature_target_is_enabled(&mut self, enabled: bool) {
self.extruder_settings_state
.nozzle_temperature_target_enabled = enabled;
self.emit_state();
}
pub fn configure_pressure_pid(&mut self, settings: PidSettings) {
self.pid_settings.pressure.ki = settings.ki;
self.pid_settings.pressure.kp = settings.kp;
+1
View File
@@ -81,6 +81,7 @@ impl MachineNewTrait for ExtruderV2 {
extruder_settings_state: ExtruderSettingsState {
pressure_limit: 200.0,
pressure_limit_enabled: false,
nozzle_temperature_target_enabled: true,
},
inverter_status_state: InverterStatusState {
running: false,
@@ -20,6 +20,7 @@ pub struct TemperatureController {
temperature_pid_output: f64,
heating_element_wattage: f64,
max_clamp: f64,
target_temp_enabled: bool, // Sets whether the frontend should display a target temperature setter for this temp controller
}
impl TemperatureController {
@@ -55,6 +56,7 @@ impl TemperatureController {
temperature_pid_output: 0.0,
heating_element_wattage,
max_clamp,
target_temp_enabled: true,
}
}
@@ -62,6 +64,14 @@ impl TemperatureController {
self.heating.target_temperature = temp;
}
pub fn set_temperature_target_enabled(&mut self, enabled: bool) {
self.target_temp_enabled = enabled;
}
pub fn get_temperature_target_enabled(&self) -> bool {
self.target_temp_enabled
}
pub const fn disallow_heating(&mut self) {
self.heating_allowed = false;
}
+6 -3
View File
@@ -143,6 +143,9 @@ pub enum Mutation {
SetExtruderPressureLimit(f64),
SetExtruderPressureLimitIsEnabled(bool),
// ToggleTemperatureTarget
SetNozzleTemperatureTargetEnabled(bool),
// Pid Configure
SetPressurePidSettings(PidSettings),
SetTemperaturePidSettings(TemperaturePid),
@@ -203,7 +206,6 @@ impl MachineApi for ExtruderV3 {
Mutation::SetInverterTargetPressure(bar) => self.set_target_pressure(bar),
Mutation::SetInverterTargetRpm(rpm) => self.set_target_rpm(rpm),
Mutation::ResetInverter(_) => self.reset_inverter(),
Mutation::SetFrontHeatingTargetTemperature(temp) => {
self.set_target_temperature(temp, HeatingType::Front)
}
@@ -222,14 +224,15 @@ impl MachineApi for ExtruderV3 {
Mutation::SetExtruderPressureLimitIsEnabled(enabled) => {
self.set_nozzle_pressure_limit_is_enabled(enabled);
}
Mutation::SetPressurePidSettings(settings) => {
self.configure_pressure_pid(settings);
}
Mutation::SetTemperaturePidSettings(settings) => {
self.configure_temperature_pid(settings);
}
Mutation::SetNozzleTemperatureTargetEnabled(enabled) => {
self.set_nozzle_temperature_target_is_enabled(enabled);
}
}
Ok(())
}
+9
View File
@@ -102,6 +102,9 @@ impl ExtruderV3 {
pressure_limit_enabled: self
.screw_speed_controller
.get_nozzle_pressure_limit_enabled(),
nozzle_temperature_target_enabled: self
.temperature_controller_nozzle
.get_temperature_target_enabled(),
},
inverter_status_state: InverterStatusState {
running: self.screw_speed_controller.inverter.status.running,
@@ -240,6 +243,12 @@ impl ExtruderV3 {
self.emit_state();
}
pub fn set_nozzle_temperature_target_is_enabled(&mut self, enabled: bool) {
self.temperature_controller_nozzle
.set_temperature_target_enabled(enabled);
self.emit_state();
}
pub fn set_nozzle_pressure_limit(&mut self, pressure: f64) {
self.screw_speed_controller
.set_nozzle_pressure_limit(Pressure::new::<bar>(pressure));
+3
View File
@@ -41,6 +41,9 @@ impl MachineApi for ExtruderV2 {
Mutation::SetTemperaturePidSettings(settings) => {
self.configure_temperature_pid(settings);
}
Mutation::SetNozzleTemperatureTargetEnabled(enabled) => {
self.set_nozzle_temperature_target_is_enabled(enabled);
}
}
Ok(())
}
+6
View File
@@ -128,6 +128,12 @@ impl ExtruderV2 {
self.emit_state();
}
pub fn set_nozzle_temperature_target_is_enabled(&mut self, enabled: bool) {
self.extruder_settings_state
.nozzle_temperature_target_enabled = enabled;
self.emit_state();
}
pub fn configure_pressure_pid(&mut self, settings: PidSettings) {
self.pid_settings.pressure.ki = settings.ki;
self.pid_settings.pressure.kp = settings.kp;
+1
View File
@@ -81,6 +81,7 @@ impl MachineNewTrait for ExtruderV2 {
extruder_settings_state: ExtruderSettingsState {
pressure_limit: 200.0,
pressure_limit_enabled: false,
nozzle_temperature_target_enabled: true,
},
inverter_status_state: InverterStatusState {
running: false,