68 lines
2.7 KiB
C#
68 lines
2.7 KiB
C#
using PamhagenSysCtrl.Helpers;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
|
|
namespace PamhagenSysCtrl {
|
|
public partial class MainWindow : Window {
|
|
|
|
public MainWindow() {
|
|
InitializeComponent();
|
|
|
|
for (int i = 1; i <= 60; 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),
|
|
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) return;
|
|
if (App.Plant.WantValveOpen(i)) {
|
|
App.Plant.CloseV(i);
|
|
} else {
|
|
App.Plant.OpenV(i);
|
|
}
|
|
App.Plant.CommitChanges();
|
|
};
|
|
ButtonPanel.Children.Add(b);
|
|
}
|
|
}
|
|
|
|
public async void ConnectButton_Click(object? sender, RoutedEventArgs evt) {
|
|
try {
|
|
App.Plant = new(PortInput.Text);
|
|
App.Plant.Update += OnUpdate;
|
|
await App.Plant.StartThread();
|
|
} catch (Exception exc) {
|
|
App.Plant?.Dispose();
|
|
App.Plant = null;
|
|
var str = "Beim Aufbauen einer Verbindung zur SPS ist ein Fehler aufgetreten:\n\n" + exc.Message;
|
|
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
|
MessageBox.Show(str, "SPS-Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
}
|
|
|
|
public void OnUpdate(object? sender, EventArgs evt) {
|
|
if (sender is not PamhagenPlant plant) return;
|
|
|
|
for (int i = 1; i <= 60; i++) {
|
|
var target = plant.GetV(i);
|
|
var actual = plant.GetDS(i);
|
|
if (ButtonPanel.Children[i - 1] is not Button b)
|
|
continue;
|
|
b.BorderBrush = target ? Brushes.DarkRed : Brushes.SlateGray;
|
|
b.Foreground = target ? Brushes.DarkRed : Brushes.Black;
|
|
b.Background = actual ? Brushes.MistyRose : Brushes.WhiteSmoke;
|
|
}
|
|
}
|
|
}
|
|
}
|