From 4f8c401caea7defe1a7ffa312aa52e68dec58b55 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Fri, 7 Aug 2026 10:30:37 +0200 Subject: [PATCH] Adjust clearances to new pipe schema --- PamhagenSysCtrl/Helpers/PamhagenGraph.cs | 4 +- PamhagenSysCtrl/Helpers/PamhagenPlant.cs | 70 +++++++++---------- PamhagenSysCtrl/Helpers/PamhagenPlc.cs | 11 +-- .../Windows/ManualControlWindow.xaml.cs | 4 +- 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/PamhagenSysCtrl/Helpers/PamhagenGraph.cs b/PamhagenSysCtrl/Helpers/PamhagenGraph.cs index bd4fee4..e9e976f 100644 --- a/PamhagenSysCtrl/Helpers/PamhagenGraph.cs +++ b/PamhagenSysCtrl/Helpers/PamhagenGraph.cs @@ -385,8 +385,8 @@ namespace PamhagenSysCtrl.Helpers { CreatePipe(xp5, xp6); CreatePipe(xp7, xp8); - var zv1 = new CenterValve("ZV1", pr1cX, prY - 40, () => App.Plant?.FillLevelPress1 != FillState.Full); - var zv2 = new CenterValve("ZV2", pr2cX, prY - 40, () => App.Plant?.FillLevelPress2 != FillState.Full); + var zv1 = new CenterValve("ZV1", pr1cX, prY - 40, () => App.Plant?.Press1HasClerance ?? false); + var zv2 = new CenterValve("ZV2", pr2cX, prY - 40, () => App.Plant?.Press2HasClerance ?? false); CreatePipe(xp6, zv1, true); CreatePipe(xp8, zv2, true); CreateInlet(zv1, press1, true); diff --git a/PamhagenSysCtrl/Helpers/PamhagenPlant.cs b/PamhagenSysCtrl/Helpers/PamhagenPlant.cs index 49d10be..faf16b3 100644 --- a/PamhagenSysCtrl/Helpers/PamhagenPlant.cs +++ b/PamhagenSysCtrl/Helpers/PamhagenPlant.cs @@ -13,7 +13,7 @@ namespace PamhagenSysCtrl.Helpers { protected bool ActuatorsChanged = false; protected PamhagenPlc.ActuatorStates Actuators; - protected PamhagenPlc.SensorStates Sensors = new(default, default, default, default, [ + protected PamhagenPlc.SensorStates Sensors = new(default, default, default, default, default, default, default, [ FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown, FillState.Unknown ], default); @@ -28,10 +28,10 @@ namespace PamhagenSysCtrl.Helpers { public int TroughSelector => Sensors.TroughSelector; public bool IsMWSelected => Sensors.TroughSelector == 1; public bool IsMW2Selected => Sensors.TroughSelector == 2; - public FillState FillLevelMW1 => Sensors.FillingLevels.MW1; - public FillState FillLevelMW2 => Sensors.FillingLevels.MW2; - public FillState FillLevelPress1 => Sensors.FillingLevels.Press1; - public FillState FillLevelPress2 => Sensors.FillingLevels.Press2; + public FillState FillLevelMW1 => Sensors.FillingLevelMW1; + public FillState FillLevelMW2 => Sensors.FillingLevelMW2; + public bool Press1HasClerance => Sensors.ClearancePress1; + public bool Press2HasClerance => Sensors.ClearancePress2; public FillState FillLevelT1 => Sensors.FillingLevelTanks[0]; public FillState FillLevelT2 => Sensors.FillingLevelTanks[1]; public FillState FillLevelT3 => Sensors.FillingLevelTanks[2]; @@ -211,8 +211,8 @@ namespace PamhagenSysCtrl.Helpers { (b && ((HasWTClearanceBA && HasT9ClearanceA) || (HasWTClearanceBB && HasT9ClearanceB))); public bool MP1HasClearance => FillLevelMW1 != FillState.Empty && ( - (MP1HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (MP1HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (MP1HasClearancePress1 && Press1HasClerance) || + (MP1HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(MP1HasClearanceTanksA, MP1HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(MP1HasClearanceTanksA, MP1HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(MP1HasClearanceTanksA, MP1HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -224,11 +224,11 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank9(MP1HasClearanceTanksA, MP1HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); protected bool MP1HasClearancePress1 => - (AreValvesOpen(1, 6, 51) && AreValvesClosed(3, 4, 5, 55)) || - (AreValvesOpen(4, 8, 52) && AreValvesClosed(1, 2, 7, 56)); + (AreValvesOpen(1, 6, 51) && AreValvesClosed(3, 4, 5, 50, 52, 53, 55)) || + (AreValvesOpen(4, 8, 52) && AreValvesClosed(1, 2, 7, 50, 51, 53, 56)); protected bool MP1HasClearancePress2 => - (AreValvesOpen(1, 6, 55) && AreValvesClosed(3, 4, 5, 51)) || - (AreValvesOpen(4, 8, 56) && AreValvesClosed(1, 2, 7, 52)); + (AreValvesOpen(1, 6, 55) && AreValvesClosed(3, 4, 5, 51, 54, 56, 57)) || + (AreValvesOpen(4, 8, 56) && AreValvesClosed(1, 2, 7, 52, 54, 55, 57)); protected bool MP1HasClearanceTanksA => AreValvesOpen(1, 5) && AreValvesClosed(3, 4, 6); protected bool MP1HasClearanceTanksB => AreValvesOpen(4, 7, 9) && AreValvesClosed(1, 2, 8, 10); @@ -238,8 +238,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool MP2HasClearance => FillLevelMW2 != FillState.Empty && ( - (MP2HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (MP2HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (MP2HasClearancePress1 && Press1HasClerance) || + (MP2HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(MP2HasClearanceTanksA, MP2HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(MP2HasClearanceTanksA, MP2HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(MP2HasClearanceTanksA, MP2HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -251,11 +251,11 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank9(MP2HasClearanceTanksA, MP2HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); protected bool MP2HasClearancePress1 => - (AreValvesOpen(2, 8, 52) && AreValvesClosed(3, 4, 7, 56)) || - (AreValvesOpen(3, 6, 51) && AreValvesClosed(1, 2, 5, 55)); + (AreValvesOpen(2, 8, 52) && AreValvesClosed(3, 4, 7, 50, 51, 53, 56)) || + (AreValvesOpen(3, 6, 51) && AreValvesClosed(1, 2, 5, 50, 52, 53, 55)); protected bool MP2HasClearancePress2 => - (AreValvesOpen(2, 8, 56) && AreValvesClosed(3, 4, 7, 52)) || - (AreValvesOpen(3, 6, 55) && AreValvesClosed(2, 1, 5, 51)); + (AreValvesOpen(2, 8, 56) && AreValvesClosed(3, 4, 7, 52, 54, 55, 57)) || + (AreValvesOpen(3, 6, 55) && AreValvesClosed(2, 1, 5, 51, 54, 56, 57)); protected bool MP2HasClearanceTanksA => AreValvesOpen(3, 5) && AreValvesClosed(1, 2, 6); protected bool MP2HasClearanceTanksB => AreValvesOpen(2, 7, 9) && AreValvesClosed(3, 4, 8, 10); @@ -265,8 +265,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool P12HasClearance => (FillLevelT1 != FillState.Empty || FillLevelT2 != FillState.Empty) && ( - (P12HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (P12HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (P12HasClearancePress1 && Press1HasClerance) || + (P12HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(false, P12HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(false, P12HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(false, P12HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -277,8 +277,8 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank8(false, P12HasClearanceTanksB) && FillLevelT8 != FillState.Full) || (HasClearanceTank9(false, P12HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); - protected bool P12HasClearancePress1 => AreValvesOpen(44, 46, 49, 50) && AreValvesClosed(10, 45, 47, 48, 54); - protected bool P12HasClearancePress2 => AreValvesOpen(44, 46, 49, 54) && AreValvesClosed(10, 45, 47, 48, 50); + protected bool P12HasClearancePress1 => AreValvesOpen(44, 46, 49, 50) && AreValvesClosed(10, 45, 47, 48, 54, 51, 52, 53); + protected bool P12HasClearancePress2 => AreValvesOpen(44, 46, 49, 54) && AreValvesClosed(10, 45, 47, 48, 50, 55, 56, 57); protected bool P12HasClearanceTanksB => AreValvesOpen(44, 10) && AreValvesClosed(9, 45, 46); public MotorState P12 { @@ -287,8 +287,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool P3HasClearance => FillLevelT3 != FillState.Empty && ( - (P3HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (P3HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (P3HasClearancePress1 && Press1HasClerance) || + (P3HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(false, P3HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(false, P3HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(false, P3HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -299,8 +299,8 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank8(false, P3HasClearanceTanksB) && FillLevelT8 != FillState.Full) || (HasClearanceTank9(false, P3HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); - protected bool P3HasClearancePress1 => AreValvesOpen(45, 46, 49, 50) && AreValvesClosed(10, 44, 47, 48, 54); - protected bool P3HasClearancePress2 => AreValvesOpen(45, 46, 49, 54) && AreValvesClosed(10, 44, 47, 48, 50); + protected bool P3HasClearancePress1 => AreValvesOpen(45, 46, 49, 50) && AreValvesClosed(10, 44, 47, 48, 51, 52, 53, 54); + protected bool P3HasClearancePress2 => AreValvesOpen(45, 46, 49, 54) && AreValvesClosed(10, 44, 47, 48, 50, 55, 56, 57); protected bool P3HasClearanceTanksB => AreValvesOpen(45, 10) && AreValvesClosed(9, 44, 46); public MotorState P3 { @@ -309,8 +309,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool P4HasClearance => FillLevelT4 != FillState.Empty && ( - (P4HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (P4HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (P4HasClearancePress1 && Press1HasClerance) || + (P4HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(false, P4HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(false, P4HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(false, P4HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -321,8 +321,8 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank8(false, P4HasClearanceTanksB) && FillLevelT8 != FillState.Full) || (HasClearanceTank9(false, P4HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); - protected bool P4HasClearancePress1 => AreValvesOpen(47, 49, 50) && AreValvesClosed(46, 48, 54); - protected bool P4HasClearancePress2 => AreValvesOpen(47, 49, 54) && AreValvesClosed(46, 48, 50); + protected bool P4HasClearancePress1 => AreValvesOpen(47, 49, 50) && AreValvesClosed(46, 48, 51, 52, 53, 54); + protected bool P4HasClearancePress2 => AreValvesOpen(47, 49, 54) && AreValvesClosed(46, 48, 50, 55, 56, 57); protected bool P4HasClearanceTanksB => AreValvesOpen(47, 46, 10) && AreValvesClosed(9, 44, 45, 48, 49); public MotorState P4 { @@ -331,8 +331,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool P5HasClearance => FillLevelT5 != FillState.Empty && ( - (P5HasClearancePress1 && FillLevelPress1 != FillState.Full) || - (P5HasClearancePress2 && FillLevelPress2 != FillState.Full) || + (P5HasClearancePress1 && Press1HasClerance) || + (P5HasClearancePress2 && Press2HasClerance) || (HasClearanceTank1(false, P5HasClearanceTanksB) && FillLevelT1 != FillState.Full) || (HasClearanceTank2(false, P5HasClearanceTanksB) && FillLevelT2 != FillState.Full) || (HasClearanceTank3(false, P5HasClearanceTanksB) && FillLevelT3 != FillState.Full) || @@ -343,8 +343,8 @@ namespace PamhagenSysCtrl.Helpers { (HasClearanceTank8(false, P5HasClearanceTanksB) && FillLevelT8 != FillState.Full) || (HasClearanceTank9(false, P5HasClearanceTanksB) && FillLevelT9 != FillState.Full) || false); - protected bool P5HasClearancePress1 => AreValvesOpen(48, 49, 50) && AreValvesClosed(46, 47, 54); - protected bool P5HasClearancePress2 => AreValvesOpen(48, 49, 54) && AreValvesClosed(46, 47, 50); + protected bool P5HasClearancePress1 => AreValvesOpen(48, 49, 50) && AreValvesClosed(46, 47, 51, 52, 53, 54); + protected bool P5HasClearancePress2 => AreValvesOpen(48, 49, 54) && AreValvesClosed(46, 47, 50, 55, 56, 57); protected bool P5HasClearanceTanksB => AreValvesOpen(48, 46, 10) && AreValvesClosed(9, 44, 45, 47, 49); public MotorState P5 { @@ -353,8 +353,8 @@ namespace PamhagenSysCtrl.Helpers { } public bool P6HasClearance => - (IsValveOpen(53) && IsValveClosed(57) && FillLevelPress1 != FillState.Full) || - (IsValveOpen(57) && IsValveClosed(53) && FillLevelPress2 != FillState.Full); + (AreValvesOpen(53) && AreValvesClosed(50, 51, 52, 57) && Press1HasClerance) || + (AreValvesOpen(57) && AreValvesClosed(53, 54, 55, 56) && Press2HasClerance); public MotorState P6 { get => Actuators.P6; diff --git a/PamhagenSysCtrl/Helpers/PamhagenPlc.cs b/PamhagenSysCtrl/Helpers/PamhagenPlc.cs index 2f06fc5..815ebff 100644 --- a/PamhagenSysCtrl/Helpers/PamhagenPlc.cs +++ b/PamhagenSysCtrl/Helpers/PamhagenPlc.cs @@ -5,7 +5,10 @@ namespace PamhagenSysCtrl.Helpers { public record struct SensorStates( long PressureSensors, - (FillState MW1, FillState MW2, FillState Press1, FillState Press2) FillingLevels, + FillState FillingLevelMW1, + FillState FillingLevelMW2, + bool ClearancePress1, + bool ClearancePress2, int TroughSelector, double GradationOe, FillState[] FillingLevelTanks, @@ -109,8 +112,8 @@ namespace PamhagenSysCtrl.Helpers { var mw1 = Int3ToFillState((f1 ) & 0x7); // 111 011 001 000 var mw2 = Int3ToFillState((f1 >> 3) & 0x7); // 111 011 001 000 - var p1 = Int1ToFillState((f1 >> 6) & 0x1); // 1 0 - var p2 = Int1ToFillState((f1 >> 7) & 0x1); // 1 0 + var p1 = ((f1 >> 6) & 0x1) == 0; // 1 0 + var p2 = ((f1 >> 7) & 0x1) == 0; // 1 0 var wp = ((f1 >> 8) & 0x3); // 10 01 // Masseligerät : 4mA => 50 Oe @@ -137,7 +140,7 @@ namespace PamhagenSysCtrl.Helpers { var t9 = Int1ToFillState((f2 >> 13) & 0x1); // 1 0 var q1 = Int1ToPumpState((f2 >> 15) & 0x1); // 1 0 - return new SensorStates(pressure, (mw1, mw2, p1, p2), wp == 3 ? -1 : wp == 1 ? 2 : wp == 2 ? 1 : 0, oe, [t1, t2, t3, t4, t5, t6, t7, t8, t9], q1); + return new SensorStates(pressure, mw1, mw2, p1, p2, wp == 3 ? -1 : wp == 1 ? 2 : wp == 2 ? 1 : 0, oe, [t1, t2, t3, t4, t5, t6, t7, t8, t9], q1); } protected async Task<(ushort RW000, ushort RW001, ushort RW002, ushort RW003, ushort RW004, ushort RW005, ushort RW006)> ReadOutputRegisters() { diff --git a/PamhagenSysCtrl/Windows/ManualControlWindow.xaml.cs b/PamhagenSysCtrl/Windows/ManualControlWindow.xaml.cs index 50ceddb..4113363 100644 --- a/PamhagenSysCtrl/Windows/ManualControlWindow.xaml.cs +++ b/PamhagenSysCtrl/Windows/ManualControlWindow.xaml.cs @@ -134,8 +134,8 @@ namespace PamhagenSysCtrl { Füllstände: Maischewanne 1: {plant.FillLevelMW1} (ausgewählt: {plant.WantMW1Selected}, Status: {plant.IsMWSelected}) Maischewanne 2: {plant.FillLevelMW2} (ausgewählt: {plant.WantMW2Selected}, Status: {plant.IsMW2Selected}) - Presse 1: {plant.FillLevelPress1} - Presse 2: {plant.FillLevelPress2} + Presse 1: {plant.Press1HasClerance} + Presse 2: {plant.Press2HasClerance} Tank 1: {plant.FillLevelT1} Tank 2: {plant.FillLevelT2} Tank 3: {plant.FillLevelT3}