toggle added to extruder 2 and 3

This commit is contained in:
Hans Sebastian Pöhlmann authored and Christian committed 2026-02-16 16:50:13 +01:00
1 parent af0b5deff0
commit 88c6195d6c
15 files changed
+135 -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(),
});
/**
@@ -224,6 +224,20 @@ export function useExtruder2() {
);
};
const setTemperatureTargetEnabled = (enabled: boolean) => {
updateStateOptimistically(
(current) => {
current.data.extruder_settings_state.nozzle_temperature_target_enabled =
enabled;
},
() =>
requestTemperatureTargetEnabled({
machine_identification_unique: machineIdentification,
data: { SetTemperatureTargetEnabled: enabled },
}),
);
};
const setPressurePidKp = (kp: number) => {
updateStateOptimistically(
(current) => {
@@ -373,6 +387,10 @@ export function useExtruder2() {
z.object({ SetExtruderPressureLimitIsEnabled: z.boolean() }),
);
const { request: requestTemperatureTargetEnabled } = useMachineMutation(
z.object({ SetTemperatureTargetEnabled: z.boolean() }),
);
const { request: requestPressurePidSettings } = useMachineMutation(
z.object({
SetPressurePidSettings: z.object({
@@ -443,6 +461,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(),
});
/**
@@ -224,6 +224,20 @@ export function useExtruder3() {
);
};
const setTemperatureTargetEnabled = (enabled: boolean) => {
updateStateOptimistically(
(current) => {
current.data.extruder_settings_state.nozzle_temperature_target_enabled =
enabled;
},
() =>
requestTemperatureTargetEnabled({
machine_identification_unique: machineIdentification,
data: { SetTemperatureTargetEnabled: enabled },
}),
);
};
const setPressurePidKp = (kp: number) => {
updateStateOptimistically(
(current) => {
@@ -373,6 +387,10 @@ export function useExtruder3() {
z.object({ SetExtruderPressureLimitIsEnabled: z.boolean() }),
);
const { request: requestTemperatureTargetEnabled } = useMachineMutation(
z.object({ SetTemperatureTargetEnabled: z.boolean() }),
);
const { request: requestPressurePidSettings } = useMachineMutation(
z.object({
SetPressurePidSettings: z.object({
@@ -439,6 +457,7 @@ export function useExtruder3() {
setMiddleHeatingTemperature,
setExtruderPressureLimit,
setExtruderPressureLimitEnabled,
setTemperatureTargetEnabled,
setPressurePidKp,
setPressurePidKi,
setPressurePidKd,
+1
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)]
+3
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,
@@ -20,6 +20,7 @@ pub struct TemperatureController {
temperature_pid_output: f64,
heating_element_wattage: f64,
max_clamp: f64,
target_temp_enabled: bool,
}
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
SetTemperatureTargetEnabled(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::SetTemperatureTargetEnabled(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));
+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: false,
},
inverter_status_state: InverterStatusState {
running: false,