using PamhagenSysCtrl.Helpers; using PamhagenSysCtrl.Windows; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace PamhagenSysCtrl { public partial class ManualControlWindow : Window { public ManualControlWindow() { InitializeComponent(); for (int i = 1; i <= 58; i++) { var b = new Button() { Content = $"V{i}", Margin = new(10 + ((i - 1) / 10) * 50, 10 + ((i - 1) % 10) * 40, 10, 10), BorderThickness = new(2), FontWeight = FontWeights.Bold, VerticalAlignment = VerticalAlignment.Top, HorizontalAlignment = HorizontalAlignment.Left, Height = 30, Width = 40, FontSize = 14, }; var borderStyle = new Style(typeof(Border)); borderStyle.Setters.Add(new Setter(Border.CornerRadiusProperty, new CornerRadius(5))); b.Resources.Add(typeof(Border), borderStyle); b.Click += (sender, evt) => { if (App.Plant == null || sender is not Button b) return; var i = int.Parse($"{b.Content}"[1..]); if (i == 58) { if (App.Plant.State.MW1_WantSelected) { App.Plant.SelectMW2(); } else { App.Plant.SelectMW1(); } } else if (i > 57) { return; } else if (App.Plant.State.Valve_WantOpen(i)) { App.Plant.CloseV(i); } else { App.Plant.OpenV(i); } }; ValvePanel.Children.Add(b); } App.Plant?.Update += OnUpdate; } private void OnClosed(object sender, EventArgs evt) { foreach (var win in Application.Current.Windows) { if (win is PlantSchemeWindow w) { w.Menu_Settings_ManualControl.IsChecked = false; } } } public void OnUpdate(object? sender, PlantEventArgs evt) { if (sender is not PamhagenPlant plant) return; for (int i = 1; i <= 58; i++) { var target = plant.State.Valve_WantClosed(i); var actual = plant.State.Valve_IsClosed(i); if (ValvePanel.Children[i - 1] is not Button b) continue; b.BorderBrush = target ? Brushes.DarkRed : Brushes.DarkGreen; b.Foreground = target ? Brushes.DarkRed : Brushes.DarkGreen; b.Background = actual ? Brushes.MistyRose : Brushes.MintCream; } ReblerButton.BorderBrush = plant.State.Rebler_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; ReblerButton.Foreground = plant.State.Rebler_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; ReblerButton.Background = plant.State.Rebler_IsActive ? Brushes.MintCream: Brushes.MistyRose; TroughAugerButton.BorderBrush = plant.State.TroughAuger_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; TroughAugerButton.Foreground = plant.State.TroughAuger_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; TroughAugerButton.Background = plant.State.TroughAuger_IsActive ? Brushes.MintCream : Brushes.MistyRose; StirrerMW1Button.BorderBrush = plant.State.MW1_Stirrer_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; StirrerMW1Button.Foreground = plant.State.MW1_Stirrer_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; StirrerMW1Button.Background = plant.State.MW1_Stirrer_IsActive ? Brushes.MintCream : Brushes.MistyRose; StirrerMW2Button.BorderBrush = plant.State.MW2_Stirrer_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; StirrerMW2Button.Foreground = plant.State.MW2_Stirrer_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; StirrerMW2Button.Background = plant.State.MW2_Stirrer_IsActive ? Brushes.MintCream : Brushes.MistyRose; Auger1Button.BorderBrush = plant.State.Auger1_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger1Button.Foreground = plant.State.Auger1_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger1Button.Background = plant.State.Auger1_IsActive ? Brushes.MintCream : Brushes.MistyRose; Auger2Button.BorderBrush = plant.State.Auger2_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger2Button.Foreground = plant.State.Auger2_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger2Button.Background = plant.State.Auger2_IsActive ? Brushes.MintCream : Brushes.MistyRose; Auger3Button.BorderBrush = plant.State.Auger3_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger3Button.Foreground = plant.State.Auger3_IsActive ? Brushes.DarkGreen : Brushes.DarkRed; Auger3Button.Background = plant.State.Auger3_IsActive ? Brushes.MintCream : Brushes.MistyRose; MP1BackwardButton.BorderBrush = plant.State.MP1_State == MotorState.Backward ? Brushes.DarkGreen : Brushes.SlateGray; MP1BackwardButton.Foreground = plant.State.MP1_State == MotorState.Backward ? Brushes.DarkGreen : Brushes.SlateGray; MP1BackwardButton.Background = plant.State.MP1_State == MotorState.Backward ? Brushes.MintCream : Brushes.WhiteSmoke; MP1HaltButton.BorderBrush = plant.State.MP1_State == MotorState.Halt ? Brushes.DarkRed : Brushes.SlateGray; MP1HaltButton.Foreground = plant.State.MP1_State == MotorState.Halt ? Brushes.DarkRed : Brushes.SlateGray; MP1HaltButton.Background = plant.State.MP1_State == MotorState.Halt ? Brushes.MistyRose : Brushes.WhiteSmoke; MP1ForwardButton.BorderBrush = plant.State.MP1_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.SlateGray; MP1ForwardButton.Foreground = plant.State.MP1_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.SlateGray; MP1ForwardButton.Background = plant.State.MP1_State == MotorState.Forward ? Brushes.MintCream: Brushes.WhiteSmoke; MP2BackwardButton.BorderBrush = plant.State.MP2_State == MotorState.Backward ? Brushes.DarkGreen : Brushes.SlateGray; MP2BackwardButton.Foreground = plant.State.MP2_State == MotorState.Backward ? Brushes.DarkGreen : Brushes.SlateGray; MP2BackwardButton.Background = plant.State.MP2_State == MotorState.Backward ? Brushes.MintCream : Brushes.WhiteSmoke; MP2HaltButton.BorderBrush = plant.State.MP2_State == MotorState.Halt ? Brushes.DarkRed : Brushes.SlateGray; MP2HaltButton.Foreground = plant.State.MP2_State == MotorState.Halt ? Brushes.DarkRed : Brushes.SlateGray; MP2HaltButton.Background = plant.State.MP2_State == MotorState.Halt ? Brushes.MistyRose : Brushes.WhiteSmoke; MP2ForwardButton.BorderBrush = plant.State.MP2_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.SlateGray; MP2ForwardButton.Foreground = plant.State.MP2_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.SlateGray; MP2ForwardButton.Background = plant.State.MP2_State == MotorState.Forward ? Brushes.MintCream : Brushes.WhiteSmoke; P12Button.BorderBrush = plant.State.P12_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P12Button.Foreground = plant.State.P12_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P12Button.Background = plant.State.P12_State == MotorState.Forward ? Brushes.MintCream : Brushes.MistyRose; P3Button.BorderBrush = plant.State.P3_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P3Button.Foreground = plant.State.P3_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P3Button.Background = plant.State.P3_State == MotorState.Forward ? Brushes.MintCream : Brushes.MistyRose; P4Button.BorderBrush = plant.State.P4_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P4Button.Foreground = plant.State.P4_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P4Button.Background = plant.State.P4_State == MotorState.Forward ? Brushes.MintCream : Brushes.MistyRose; P5Button.BorderBrush = plant.State.P5_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P5Button.Foreground = plant.State.P5_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P5Button.Background = plant.State.P5_State == MotorState.Forward ? Brushes.MintCream : Brushes.MistyRose; P6Button.BorderBrush = plant.State.P6_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P6Button.Foreground = plant.State.P6_State == MotorState.Forward ? Brushes.DarkGreen : Brushes.DarkRed; P6Button.Background = plant.State.P6_State == MotorState.Forward ? Brushes.MintCream : Brushes.MistyRose; Status.Text = $""" Presse Querschnecke: {plant.State.PressCrossAuger_State} Füllstände: Maischewanne 1: {plant.State.MW2_FillLevel} (ausgewählt: {plant.State.MW1_WantSelected}, Status: {plant.State.MW1_IsSelected}) Maischewanne 2: {plant.State.MW2_FillLevel} (ausgewählt: {plant.State.MW2_WantSelected}, Status: {plant.State.MW2_IsSelected}) Presse 1: {plant.State.Press1_HasClearance} Presse 2: {plant.State.Press2_HasClearance} Tank 1: {plant.State.T1_FillLevel} Tank 2: {plant.State.T2_FillLevel} Tank 3: {plant.State.T3_FillLevel} Tank 4: {plant.State.T4_FillLevel} Tank 5: {plant.State.T5_FillLevel} Tank 6: {plant.State.T6_FillLevel} Tank 7: {plant.State.T7_FillLevel} Tank 8: {plant.State.T8_FillLevel} Tank 9: {plant.State.T9_FillLevel} """; } private void TroughAugerButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.TroughAuger_IsActive) { App.Plant.StopTroughAuger(); } else { App.Plant.StartTroughAuger(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void ReblerButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.Rebler_IsActive) { App.Plant.StopRebler(); } else { App.Plant.StartRebler(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void StirrerMW1Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.MW1_Stirrer_IsActive) { App.Plant.StopStirrerMW1(); } else { App.Plant.StartStirrerMW1(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void StirrerMW2Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.MW2_Stirrer_IsActive) { App.Plant.StopStirrerMW2(); } else { App.Plant.StartStirrerMW2(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void Auger1Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.Auger1_IsActive) { App.Plant.StopAuger1(); } else { App.Plant.StartAuger1(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void Auger2Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.Auger2_IsActive) { App.Plant.StopAuger2(); } else { App.Plant.StartAuger2(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void Auger3Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.Auger3_IsActive) { App.Plant.StopAuger3(); } else { App.Plant.StartAuger3(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP1BackwardButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StartMP1Backward(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP1HaltButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StopMP1(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP1ForwardButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StartMP1Forward(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP2BackwardButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StartMP2Backward(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP2HaltButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StopMP2(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void MP2ForwardButton_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { App.Plant.StartMP2Forward(); } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void P12Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.P12_IsActive) { App.Plant.DisableP12(); } else { App.Plant.EnableP12(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void P3Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.P3_IsActive) { App.Plant.DisableP3(); } else { App.Plant.EnableP3(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void P4Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.P4_IsActive) { App.Plant.DisableP4(); } else { App.Plant.EnableP4(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void P5Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.P5_IsActive) { App.Plant.DisableP5(); } else { App.Plant.EnableP5(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } private void P6Button_Click(object? sender, RoutedEventArgs? evt) { if (App.Plant == null) return; try { if (App.Plant.State.P6_IsActive) { App.Plant.DisableP6(); } else { App.Plant.EnableP6(); } } catch (NoClearanceException exc) { MessageBox.Show($"{exc.Message}", "Keine Freigabe", MessageBoxButton.OK, MessageBoxImage.Error); } } } }