Initial Push
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using Heisig.HMI.AdsManager;
|
||||
|
||||
namespace UniperHMI;
|
||||
|
||||
public sealed partial class ModuleControlButtonVM : SMUBaseVM, IDisposable
|
||||
{
|
||||
public ModuleControlButtonVM() : base() { }
|
||||
|
||||
public ModuleControlButtonVM(IAdsManager adsManager, string variableName) : base(adsManager, variableName) { }
|
||||
|
||||
[RelayCommand]
|
||||
private void Clicked()
|
||||
{
|
||||
WeakReferenceMessenger.Default.Send(new NavigateMessage(_variableName, typeof(ModuleOverviewPage)));
|
||||
}
|
||||
}
|
||||
60
uniper_hmi/UniperHMI/OwnControls/ViewModels/SMUBaseVM.cs
Normal file
60
uniper_hmi/UniperHMI/OwnControls/ViewModels/SMUBaseVM.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Heisig.HMI.AdsManager;
|
||||
using TwinCAT.TypeSystem;
|
||||
|
||||
namespace UniperHMI;
|
||||
|
||||
public enum E_COMPONENT_STATUS : short
|
||||
{
|
||||
OFF = 0,
|
||||
ON = 1,
|
||||
CHARGING = 2,
|
||||
DISCHARGING = 3,
|
||||
ERROR = 4
|
||||
}
|
||||
|
||||
public partial class SMUBaseVM : ObservableObject, IDisposable
|
||||
{
|
||||
[ObservableProperty]
|
||||
protected float voltage;
|
||||
|
||||
[ObservableProperty]
|
||||
protected E_COMPONENT_STATUS status;
|
||||
|
||||
protected readonly string _variableName;
|
||||
|
||||
protected readonly IAdsManager? _adsManager;
|
||||
|
||||
public SMUBaseVM()
|
||||
{
|
||||
_variableName = string.Empty;
|
||||
_adsManager = null;
|
||||
voltage = 0.0f;
|
||||
status = E_COMPONENT_STATUS.OFF;
|
||||
}
|
||||
|
||||
public SMUBaseVM(IAdsManager adsManager, string variableName)
|
||||
{
|
||||
Status = E_COMPONENT_STATUS.OFF;
|
||||
_adsManager = adsManager;
|
||||
_variableName = variableName;
|
||||
|
||||
_adsManager!.Register(_variableName + ".rVoltage", VoltageChanged);
|
||||
_adsManager.Register(_variableName + ".eStatus", StatusChanged);
|
||||
}
|
||||
protected void VoltageChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
Voltage = (float)e.Value;
|
||||
}
|
||||
|
||||
protected void StatusChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
Status = (E_COMPONENT_STATUS)((short)e.Value);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_adsManager?.Deregister(_variableName + ".rVoltage", VoltageChanged);
|
||||
_adsManager?.Deregister(_variableName + ".eStatus", StatusChanged);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Heisig.HMI.AdsManager;
|
||||
|
||||
namespace UniperHMI;
|
||||
|
||||
public sealed partial class StringControlButtonVM : SMUBaseVM, IDisposable
|
||||
{
|
||||
public StringControlButtonVM() : base() { }
|
||||
|
||||
public StringControlButtonVM(IAdsManager adsManager, string variableName) : base(adsManager, variableName) { }
|
||||
|
||||
//[RelayCommand]
|
||||
//private void Clicked()
|
||||
//{
|
||||
// WeakReferenceMessenger.Default.Send(new NavigateMessage(_variableName, typeof(StringOverviewPage)));
|
||||
//}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using Heisig.HMI.AdsManager;
|
||||
|
||||
namespace UniperHMI.OwnControls
|
||||
{
|
||||
public sealed partial class UnitControlButtonVM : SMUBaseVM
|
||||
{
|
||||
public UnitControlButtonVM() : base() { }
|
||||
|
||||
public UnitControlButtonVM(IAdsManager adsManager, string variableName) : base(adsManager, variableName) { }
|
||||
|
||||
[RelayCommand]
|
||||
private void Clicked()
|
||||
{
|
||||
WeakReferenceMessenger.Default.Send(new NavigateMessage(_variableName, typeof(UnitDetailsControl)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,494 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using HMIToolkit;
|
||||
using TwinCAT.TypeSystem;
|
||||
using Heisig.HMI.AdsManager;
|
||||
|
||||
namespace UniperHMI
|
||||
{
|
||||
public sealed partial class UnitDetailsControlVM : ObservableObject, IDisposable
|
||||
{
|
||||
[ObservableProperty]
|
||||
private float rVoltage;
|
||||
|
||||
[ObservableProperty]
|
||||
private E_COMPONENT_STATUS status;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM pressureNegolytSegmentInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM pressureNegolytTankInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM temperatureNegolytTankInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM pressurePosolytSegmentInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM pressurePosolytTankInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private AnalogValueVM temperaturePosolytTankInVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool canOpenBothValves;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool canCloseBothValves;
|
||||
|
||||
[ObservableProperty]
|
||||
private short feedbackOpenValves;
|
||||
|
||||
[ObservableProperty]
|
||||
private short feedbackCloseValves;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool canStartBothPumps;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool canStopBothPumps;
|
||||
|
||||
[ObservableProperty]
|
||||
private short feedbackStartPumps;
|
||||
|
||||
[ObservableProperty]
|
||||
private short feedbackStopPumps;
|
||||
|
||||
private float _posolytPumpOnSpeed;
|
||||
private float _negolytPumpOnSpeed;
|
||||
|
||||
private float valveWindowHorizontalPosition;
|
||||
|
||||
private readonly BinaryValveControlVM _valveNegolytVM;
|
||||
private readonly BinaryValveControlVM _valvePosolytVM;
|
||||
private readonly AnalogMotorControlVM _pumpNegolytVM;
|
||||
private readonly AnalogMotorControlVM _pumpPosolytVM;
|
||||
|
||||
private BinaryValveWindow? _windowValveNegolyt;
|
||||
private BinaryValveWindow? _windowValvePosolyt;
|
||||
|
||||
private AnalogMotorWindow? _windowPumpNegolyt;
|
||||
private AnalogMotorWindow? _windowPumpPosolyt;
|
||||
|
||||
private readonly IAdsManager? _adsManager;
|
||||
private readonly string _variableName;
|
||||
|
||||
public UnitDetailsControlVM()
|
||||
{
|
||||
Status = E_COMPONENT_STATUS.OFF;
|
||||
rVoltage = 0.0f;
|
||||
_variableName = "";
|
||||
|
||||
// Negolyt
|
||||
PressureNegolytSegmentInVM = new AnalogValueVM();
|
||||
PressureNegolytTankInVM = new AnalogValueVM();
|
||||
TemperatureNegolytTankInVM = new AnalogValueVM();
|
||||
_valveNegolytVM = new BinaryValveControlVM();
|
||||
_pumpNegolytVM = new AnalogMotorControlVM();
|
||||
|
||||
_windowValveNegolyt = null;
|
||||
|
||||
// Posolyt
|
||||
PressurePosolytSegmentInVM = new AnalogValueVM();
|
||||
PressurePosolytTankInVM = new AnalogValueVM();
|
||||
TemperaturePosolytTankInVM = new AnalogValueVM();
|
||||
_valvePosolytVM = new BinaryValveControlVM();
|
||||
_pumpPosolytVM = new AnalogMotorControlVM();
|
||||
|
||||
_windowValvePosolyt = null;
|
||||
|
||||
valveWindowHorizontalPosition = 10;
|
||||
|
||||
}
|
||||
|
||||
public UnitDetailsControlVM(IAdsManager adsManager, string variableName)
|
||||
{
|
||||
_adsManager = adsManager;
|
||||
_variableName = variableName;
|
||||
|
||||
|
||||
Status = E_COMPONENT_STATUS.OFF;
|
||||
rVoltage = 0.0f;
|
||||
|
||||
|
||||
// Negolyt
|
||||
PressureNegolytSegmentInVM = new AnalogValueVM(_adsManager, _variableName + ".stP21", true);
|
||||
PressureNegolytTankInVM = new AnalogValueVM(_adsManager, _variableName + ".stP22", true);
|
||||
TemperatureNegolytTankInVM = new AnalogValueVM(_adsManager, _variableName + ".stT21", true);
|
||||
_valveNegolytVM = new BinaryValveControlVM(_adsManager, _variableName + ".stNS22");
|
||||
_valveNegolytVM.OpenButton.FeedbackChanged += OnValveNegolytOpenFeedbackChanged;
|
||||
_valveNegolytVM.CloseButton.FeedbackChanged += OnValveNegolytCloseFeedbackChanged;
|
||||
_valveNegolytVM.OpenButton.ReleaseChanged += OnValveNegolytOpenReleaseChanged;
|
||||
_valveNegolytVM.CloseButton.ReleaseChanged += OnValveNegolytCloseReleaseChanged;
|
||||
_pumpNegolytVM = new AnalogMotorControlVM(_adsManager, _variableName + ".stNS21");
|
||||
_pumpNegolytVM.StartButton.FeedbackChanged += OnPumpNegolytStartFeedbackChanged;
|
||||
_pumpNegolytVM.StopButton.FeedbackChanged += OnPumpNegolytStopFeedbackChanged;
|
||||
_pumpNegolytVM.StartButton.ReleaseChanged += OnPumpNegolytStartReleaseChanged;
|
||||
_pumpNegolytVM.StopButton.ReleaseChanged += OnPumpNegolytStopReleaseChanged;
|
||||
|
||||
|
||||
// Posolyt
|
||||
PressurePosolytSegmentInVM = new AnalogValueVM(_adsManager, _variableName + ".stP11", true);
|
||||
PressurePosolytTankInVM = new AnalogValueVM(_adsManager, _variableName + ".stP12", true);
|
||||
TemperaturePosolytTankInVM = new AnalogValueVM(_adsManager, _variableName + ".stT11", true);
|
||||
_valvePosolytVM = new BinaryValveControlVM(_adsManager, _variableName + ".stNS12");
|
||||
_valvePosolytVM.OpenButton.FeedbackChanged += OnValvePosolytOpenFeedbackChanged;
|
||||
_valvePosolytVM.CloseButton.FeedbackChanged += OnValvePosolytCloseFeedbackChanged;
|
||||
_valvePosolytVM.OpenButton.ReleaseChanged += OnValvePosolytOpenReleaseChanged;
|
||||
_valvePosolytVM.CloseButton.ReleaseChanged += OnValvePosolytCloseReleaseChanged;
|
||||
_pumpPosolytVM = new AnalogMotorControlVM(_adsManager, _variableName + ".stNS11");
|
||||
_pumpPosolytVM.StartButton.FeedbackChanged += OnPumpPosolytStartFeedbackChanged;
|
||||
_pumpPosolytVM.StopButton.FeedbackChanged += OnPumpPosolytStopFeedbackChanged;
|
||||
_pumpPosolytVM.StartButton.ReleaseChanged += OnPumpPosolytStartReleaseChanged;
|
||||
_pumpPosolytVM.StopButton.ReleaseChanged += OnPumpPosolytStopReleaseChanged;
|
||||
|
||||
|
||||
// Current status
|
||||
_adsManager.Register(_variableName + ".eStatus", StatusChanged);
|
||||
_adsManager.Register(_variableName + ".rVoltage", VoltageChanged);
|
||||
|
||||
|
||||
// Configured pump speed for on
|
||||
_adsManager.Register("GVL_CONFIG.rPumpNegolytOnPower", NegolytPumpOnSpeedChanged);
|
||||
_adsManager.Register("GVL_CONFIG.rPumpPosolytOnPower", PosolytPumpOnSpeedChanged);
|
||||
|
||||
valveWindowHorizontalPosition = 10;
|
||||
}
|
||||
|
||||
private void NegolytPumpOnSpeedChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
_negolytPumpOnSpeed = (float)e.Value;
|
||||
}
|
||||
|
||||
private void PosolytPumpOnSpeedChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
_posolytPumpOnSpeed = (float)e.Value;
|
||||
}
|
||||
|
||||
private void VoltageChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
RVoltage = (float)e.Value;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
// Dispose all necessary view models
|
||||
// Negolyt
|
||||
PressureNegolytSegmentInVM.Dispose();
|
||||
PressureNegolytTankInVM.Dispose();
|
||||
TemperatureNegolytTankInVM.Dispose();
|
||||
_valveNegolytVM.OpenButton.FeedbackChanged -= OnValveNegolytOpenFeedbackChanged;
|
||||
_valveNegolytVM.CloseButton.FeedbackChanged -= OnValveNegolytCloseFeedbackChanged;
|
||||
_valveNegolytVM.OpenButton.ReleaseChanged -= OnValveNegolytOpenReleaseChanged;
|
||||
_valveNegolytVM.CloseButton.ReleaseChanged -= OnValveNegolytCloseReleaseChanged;
|
||||
_valveNegolytVM.Dispose();
|
||||
_pumpNegolytVM.Dispose();
|
||||
|
||||
// Posolyt
|
||||
PressurePosolytSegmentInVM.Dispose();
|
||||
PressurePosolytTankInVM.Dispose();
|
||||
TemperaturePosolytTankInVM.Dispose();
|
||||
_valvePosolytVM.OpenButton.FeedbackChanged -= OnValvePosolytOpenFeedbackChanged;
|
||||
_valvePosolytVM.CloseButton.FeedbackChanged -= OnValvePosolytCloseFeedbackChanged;
|
||||
_valvePosolytVM.OpenButton.ReleaseChanged -= OnValvePosolytOpenReleaseChanged;
|
||||
_valvePosolytVM.CloseButton.ReleaseChanged -= OnValvePosolytCloseReleaseChanged;
|
||||
_valvePosolytVM.Dispose();
|
||||
_pumpPosolytVM.Dispose();
|
||||
|
||||
// Deregister variables
|
||||
_adsManager?.Deregister(_variableName + ".eStatus", StatusChanged);
|
||||
_adsManager?.Deregister(_variableName + ".rVoltage", VoltageChanged);
|
||||
_adsManager?.Deregister("GVL_CONFIG.rPumpNegolytOnPower", NegolytPumpOnSpeedChanged);
|
||||
_adsManager?.Deregister("GVL_CONFIG.rPumpPosolytOnPower", PosolytPumpOnSpeedChanged);
|
||||
|
||||
// Destroy windows
|
||||
_windowValveNegolyt?.Close();
|
||||
_windowValvePosolyt?.Close();
|
||||
_windowPumpNegolyt?.Close();
|
||||
_windowPumpPosolyt?.Close();
|
||||
}
|
||||
|
||||
private void StatusChanged(object? sender, ValueChangedEventArgs e)
|
||||
{
|
||||
Status = (E_COMPONENT_STATUS)((short)e.Value);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowValveNegolyt()
|
||||
{
|
||||
if (_adsManager != null && _windowValveNegolyt == null)
|
||||
{
|
||||
_windowValveNegolyt = new() { DataContext = _valveNegolytVM };
|
||||
_windowValveNegolyt.Closed += WindowValveNegolyt_Closed;
|
||||
_windowValveNegolyt.Show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void WindowValveNegolyt_Closed(object? sender, EventArgs e)
|
||||
{
|
||||
_windowValveNegolyt!.Close();
|
||||
_windowValveNegolyt = null;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowValvePosolyt()
|
||||
{
|
||||
if (_adsManager != null && _windowValvePosolyt == null)
|
||||
{
|
||||
_windowValvePosolyt = new() { DataContext = _valvePosolytVM };
|
||||
_windowValvePosolyt.Closed += WindowValvePosolyt_Closed;
|
||||
_windowValvePosolyt.Show();
|
||||
}
|
||||
}
|
||||
|
||||
private void WindowValvePosolyt_Closed(object? sender, EventArgs e)
|
||||
{
|
||||
_windowValvePosolyt!.Close();
|
||||
_windowValvePosolyt = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
[RelayCommand]
|
||||
public void ShowPumpNegolyt()
|
||||
{
|
||||
if (_adsManager != null && _windowPumpNegolyt == null)
|
||||
{
|
||||
_windowPumpNegolyt = new() { DataContext = _pumpNegolytVM };
|
||||
_windowPumpNegolyt.Closed += WindowPumpNegolyt_Closed;
|
||||
_windowPumpNegolyt.Show();
|
||||
}
|
||||
}
|
||||
|
||||
private void WindowPumpNegolyt_Closed(object? sender, EventArgs e)
|
||||
{
|
||||
_windowPumpNegolyt!.Close();
|
||||
_windowPumpNegolyt = null;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void ShowPumpPosolyt()
|
||||
{
|
||||
if (_adsManager != null && _windowPumpPosolyt == null)
|
||||
{
|
||||
_windowPumpPosolyt = new() { DataContext = _pumpPosolytVM };
|
||||
_windowPumpPosolyt.Closed += WindowPumpPosolyt_Closed;
|
||||
_windowPumpPosolyt.Show();
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void OpenBothValves()
|
||||
{
|
||||
_valveNegolytVM.OpenButton?.ButtonClickedCommand.Execute(null);
|
||||
_valvePosolytVM.OpenButton?.ButtonClickedCommand.Execute(null);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void CloseBothValves()
|
||||
{
|
||||
_valveNegolytVM.CloseButton?.ButtonClickedCommand.Execute(null);
|
||||
_valvePosolytVM.CloseButton?.ButtonClickedCommand.Execute(null);
|
||||
}
|
||||
|
||||
private void OnValveNegolytOpenFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateOpenFeedback();
|
||||
}
|
||||
|
||||
private void OnValvePosolytOpenFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateOpenFeedback();
|
||||
}
|
||||
|
||||
private void CalculateOpenFeedback()
|
||||
{
|
||||
if (_valveNegolytVM?.OpenButton.IFeedback == 1 && _valvePosolytVM?.OpenButton.IFeedback == 1)
|
||||
FeedbackOpenValves = 1;
|
||||
else if (_valveNegolytVM?.OpenButton.IFeedback == 0 && _valvePosolytVM?.OpenButton.IFeedback == 0)
|
||||
FeedbackOpenValves = 0;
|
||||
else
|
||||
FeedbackOpenValves = 2;
|
||||
}
|
||||
|
||||
private void OnValveNegolytCloseFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateCloseFeedback();
|
||||
}
|
||||
|
||||
private void OnValvePosolytCloseFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateCloseFeedback();
|
||||
}
|
||||
|
||||
private void CalculateCloseFeedback()
|
||||
{
|
||||
if (_valveNegolytVM?.CloseButton.IFeedback == 1 && _valvePosolytVM?.CloseButton.IFeedback == 1)
|
||||
FeedbackCloseValves = 1;
|
||||
else if (_valveNegolytVM?.CloseButton.IFeedback == 0 && _valvePosolytVM?.CloseButton.IFeedback == 0)
|
||||
FeedbackCloseValves = 0;
|
||||
else
|
||||
FeedbackCloseValves = 2;
|
||||
}
|
||||
|
||||
private void OnValveNegolytOpenReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateOpenRelease();
|
||||
}
|
||||
|
||||
private void OnValvePosolytOpenReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateOpenRelease();
|
||||
}
|
||||
|
||||
private void CalculateOpenRelease()
|
||||
{
|
||||
if (_valvePosolytVM == null || _valveNegolytVM == null)
|
||||
return;
|
||||
|
||||
if (_valveNegolytVM.OpenButton.XRelease && _valvePosolytVM.OpenButton.XRelease)
|
||||
CanOpenBothValves = true;
|
||||
else
|
||||
CanOpenBothValves = false;
|
||||
}
|
||||
|
||||
private void OnValveNegolytCloseReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateCloseRelease();
|
||||
}
|
||||
|
||||
private void OnValvePosolytCloseReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateCloseRelease();
|
||||
}
|
||||
|
||||
private void CalculateCloseRelease()
|
||||
{
|
||||
if (_valvePosolytVM == null || _valveNegolytVM == null)
|
||||
return;
|
||||
|
||||
if (_valveNegolytVM.CloseButton.XRelease && _valvePosolytVM.CloseButton.XRelease)
|
||||
CanCloseBothValves = true;
|
||||
else
|
||||
CanCloseBothValves = false;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void StartBothPumps()
|
||||
{
|
||||
if (_adsManager == null || _pumpNegolytVM == null || _pumpPosolytVM == null)
|
||||
return;
|
||||
|
||||
_pumpNegolytVM.Setpoint.RValue = _negolytPumpOnSpeed;
|
||||
_pumpPosolytVM.Setpoint.RValue = _posolytPumpOnSpeed;
|
||||
|
||||
_pumpNegolytVM.StartButton?.ButtonClickedCommand.Execute(null);
|
||||
_pumpPosolytVM.StartButton?.ButtonClickedCommand.Execute(null);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void StopBothPumps()
|
||||
{
|
||||
_pumpNegolytVM.StopButton?.ButtonClickedCommand.Execute(null);
|
||||
_pumpPosolytVM.StopButton?.ButtonClickedCommand.Execute(null);
|
||||
}
|
||||
|
||||
private void CalculateStartRelease()
|
||||
{
|
||||
if (_pumpNegolytVM == null || _pumpPosolytVM == null)
|
||||
return;
|
||||
|
||||
if (_pumpNegolytVM.StartButton.XRelease && _pumpPosolytVM.StartButton.XRelease)
|
||||
CanStartBothPumps = true;
|
||||
else
|
||||
CanStartBothPumps = false;
|
||||
}
|
||||
|
||||
private void CalculatStopRelease()
|
||||
{
|
||||
if (_pumpNegolytVM == null || _pumpPosolytVM == null)
|
||||
return;
|
||||
|
||||
if (_pumpNegolytVM.StopButton.XRelease && _pumpPosolytVM.StopButton.XRelease)
|
||||
CanStopBothPumps = true;
|
||||
else
|
||||
CanStopBothPumps = false;
|
||||
}
|
||||
|
||||
private void CalculateStartFeedback()
|
||||
{
|
||||
if (_pumpNegolytVM == null || _pumpPosolytVM == null)
|
||||
return;
|
||||
|
||||
if (_pumpNegolytVM.StartButton.IFeedback == 1 && _pumpPosolytVM.StartButton.IFeedback == 1)
|
||||
FeedbackStartPumps = 1;
|
||||
else if (_pumpNegolytVM.StartButton.IFeedback == 0 && _pumpPosolytVM.StartButton.IFeedback == 0)
|
||||
FeedbackStartPumps = 0;
|
||||
else
|
||||
FeedbackStartPumps = 2;
|
||||
}
|
||||
|
||||
private void CalculateStopFeedback()
|
||||
{
|
||||
if (_pumpNegolytVM == null || _pumpPosolytVM == null)
|
||||
return;
|
||||
|
||||
if (_pumpNegolytVM.StopButton.IFeedback == 1 && _pumpPosolytVM.StopButton.IFeedback == 1)
|
||||
FeedbackStopPumps = 1;
|
||||
else if (_pumpNegolytVM.StopButton.IFeedback == 0 && _pumpPosolytVM.StopButton.IFeedback == 0)
|
||||
FeedbackStopPumps = 0;
|
||||
else
|
||||
FeedbackStopPumps = 2;
|
||||
|
||||
}
|
||||
|
||||
private void OnPumpPosolytStopReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculatStopRelease();
|
||||
}
|
||||
|
||||
private void OnPumpPosolytStartReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStartRelease();
|
||||
}
|
||||
|
||||
private void OnPumpPosolytStopFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStopFeedback();
|
||||
}
|
||||
|
||||
private void OnPumpPosolytStartFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStartFeedback();
|
||||
}
|
||||
|
||||
private void OnPumpNegolytStopReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculatStopRelease();
|
||||
}
|
||||
|
||||
private void OnPumpNegolytStartReleaseChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStartRelease();
|
||||
}
|
||||
|
||||
private void OnPumpNegolytStopFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStopFeedback();
|
||||
}
|
||||
|
||||
private void OnPumpNegolytStartFeedbackChanged(object? sender, EventArgs e)
|
||||
{
|
||||
CalculateStartFeedback();
|
||||
}
|
||||
|
||||
private void WindowPumpPosolyt_Closed(object? sender, EventArgs e)
|
||||
{
|
||||
_windowPumpPosolyt!.Close();
|
||||
_windowPumpPosolyt = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
42
uniper_hmi/UniperHMI/OwnControls/Views/SMUControlButton.xaml
Normal file
42
uniper_hmi/UniperHMI/OwnControls/Views/SMUControlButton.xaml
Normal file
@@ -0,0 +1,42 @@
|
||||
<Button x:Class="UniperHMI.SMUControlButton"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:UniperHMI"
|
||||
d:DataContext="{d:DesignInstance Type=local:StringControlButtonVM, IsDesignTimeCreatable=True}"
|
||||
mc:Ignorable="d"
|
||||
Style="{StaticResource MahApps.Styles.Button}"
|
||||
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
||||
Width="Auto" Height="Auto"
|
||||
x:Name="root">
|
||||
|
||||
<Grid x:Name="mainGrid" Width="Auto" Height="Auto">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Row 0 -->
|
||||
<Label Content="{Binding SMUName, ElementName=root}" Grid.Row="0" Grid.ColumnSpan="3" FontSize="24" HorizontalAlignment="Center"/>
|
||||
|
||||
<!-- Row 1 -->
|
||||
<Line Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" X1="0" X2="{Binding ElementName=mainGrid, Path=ActualWidth}" Stroke="White" Margin="0,5,0,10"/>
|
||||
|
||||
<!-- Row 2 -->
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Spannung:" />
|
||||
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Voltage, StringFormat=N2}" MaxLines="1" Width="70" TextAlignment="Right" IsReadOnly="True" />
|
||||
<Label Grid.Row="2" Grid.Column="2" Content="V" />
|
||||
|
||||
<!-- Row 3 -->
|
||||
<Label Content="Status:" Grid.Row="3" Grid.Column="0" />
|
||||
<Label Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" Content="{Binding Status}" HorizontalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Button>
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace UniperHMI
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für StringControlButton.xaml
|
||||
/// </summary>
|
||||
public partial class SMUControlButton : Button
|
||||
{
|
||||
public static readonly DependencyProperty SMUNameProperty = DependencyProperty.Register("SMUName", typeof(string), typeof(SMUControlButton));
|
||||
public String SMUName
|
||||
{
|
||||
get { return (string)GetValue(SMUNameProperty); }
|
||||
set { SetValue(SMUNameProperty, value); }
|
||||
}
|
||||
|
||||
public SMUControlButton()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
138
uniper_hmi/UniperHMI/OwnControls/Views/UnitDetailsControl.xaml
Normal file
138
uniper_hmi/UniperHMI/OwnControls/Views/UnitDetailsControl.xaml
Normal file
@@ -0,0 +1,138 @@
|
||||
<UserControl xmlns:HMIToolkit="clr-namespace:HMIToolkit" x:Class="UniperHMI.UnitDetailsControl"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:local="clr-namespace:UniperHMI"
|
||||
mc:Ignorable="d"
|
||||
d:DataContext="{d:DesignInstance Type=local:UnitDetailsControlVM, IsDesignTimeCreatable=True}"
|
||||
HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Width="Auto" Height="Auto"
|
||||
x:Name="root">
|
||||
<UserControl.Resources>
|
||||
<HMIToolkit:FeedbackToColorConverter x:Key="feedbackConverter" />
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid x:Name="mainGrid">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
<RowDefinition Height="Auto"/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<!-- Row 0 -->
|
||||
<Label Content="{Binding UnitName, ElementName=root}" Grid.Row="0" Grid.ColumnSpan="4" FontSize="24" HorizontalAlignment="Center"/>
|
||||
|
||||
|
||||
<!-- Row 1 -->
|
||||
<Line Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" X1="0" X2="{Binding ElementName=mainGrid, Path=ActualWidth}" Stroke="White" Margin="0,5,0,10"/>
|
||||
|
||||
|
||||
<!-- Row 2 -->
|
||||
<Grid Grid.Row="2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0" Orientation="Horizontal" Width="Auto" HorizontalAlignment="Left">
|
||||
<Label Content="Spannung:" />
|
||||
<TextBox Text="{Binding RVoltage, StringFormat=N2}" MaxLines="1" Width="70" TextAlignment="Right" IsReadOnly="True" />
|
||||
<Label Content="V" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal">
|
||||
<Label Content="Status:" Margin="20,0,0,0"/>
|
||||
<Label Grid.ColumnSpan="2" Content="{Binding Status}" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<!-- Row 3 -->
|
||||
<Line Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="4" X1="0" X2="{Binding ElementName=mainGrid, Path=ActualWidth}" Stroke="White" Margin="0,5,0,10"/>
|
||||
|
||||
|
||||
<!-- Row 4 -->
|
||||
<Grid Grid.Row="4">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
<Label Grid.Row="0" Grid.Column="0" Content="Negolyt:" FontWeight="Bold" HorizontalAlignment="Center"/>
|
||||
<Label Grid.Row="0" Grid.Column="2" Content="Posolyt:" FontWeight="Bold" HorizontalAlignment="Center"/>
|
||||
|
||||
<Button Grid.Row="1" Grid.Column="0" Content="Tankventil" Command="{Binding ShowValveNegolytCommand}" HorizontalAlignment="Center" Width="100" />
|
||||
<Button Grid.Row="1" Grid.Column="2" Content="Tankventil" Command="{Binding ShowValvePosolytCommand}" HorizontalAlignment="Center" Width="100" />
|
||||
|
||||
<!-- Open Close both valves -->
|
||||
<Label Grid.Row="0" Grid.Column="1" Content="Both:" FontWeight="Bold" HorizontalAlignment="Center"/>
|
||||
<Grid Grid.Row="1" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Button Grid.Column="0" Content="Open" Width="50" Command="{Binding OpenBothValvesCommand}" IsEnabled="{Binding CanOpenBothValves}" Background="{Binding FeedbackOpenValves, Converter={StaticResource feedbackConverter}}"/>
|
||||
<Button Grid.Column="1" Content="Close" Width="50" Command="{Binding CloseBothValvesCommand}" IsEnabled="{Binding CanCloseBothValves}" Background="{Binding FeedbackCloseValves, Converter={StaticResource feedbackConverter}}" Margin="5,0,0,0"/>
|
||||
</Grid>
|
||||
|
||||
<!-- Start stop both pumps -->
|
||||
<Grid Grid.Row="2" Grid.Column="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Button Grid.Column="0" Content="Start" Command="{Binding StartBothPumpsCommand}" IsEnabled="{Binding CanStartBothPumps}" Background="{Binding FeedbackStartPumps, Converter={StaticResource feedbackConverter}}" Width="50" Margin="0,5,0,0"/>
|
||||
<Button Grid.Column="1" Content="Stop" Command="{Binding StopBothPumpsCommand}" IsEnabled="{Binding CanStopBothPumps}" Background="{Binding FeedbackStopPumps, Converter={StaticResource feedbackConverter}}" Width="50" Margin="5,5,0,0"/>
|
||||
</Grid>
|
||||
|
||||
<Button Grid.Row="2" Grid.Column="0" Content="Pumpe" Command="{Binding ShowPumpNegolytCommand}" HorizontalAlignment="Center" Width="100" Margin="0,5,0,0"/>
|
||||
<Button Grid.Row="2" Grid.Column="2" Content="Pumpe" Command="{Binding ShowPumpPosolytCommand}" HorizontalAlignment="Center" Width="100" Margin="0,5,0,0"/>
|
||||
</Grid>
|
||||
|
||||
|
||||
|
||||
<!-- Row 5 -->
|
||||
<Line Grid.Row="5" X1="0" X2="{Binding ElementName=mainGrid, Path=ActualWidth}" Stroke="White" Margin="0,5,0,10"/>
|
||||
|
||||
|
||||
<!-- Row 6 -->
|
||||
<Grid Grid.Row="6">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
<RowDefinition />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<Label Grid.Row="0" Grid.Column="1" Content="Negolyt:" FontWeight="Bold" />
|
||||
<Label Grid.Row="0" Grid.Column="2" Content="Posolyt:" FontWeight="Bold" />
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="0" Content="Druck Segment Inlet:" />
|
||||
<HMIToolkit:AnalogValue Grid.Row="1" Grid.Column="1" DataContext="{Binding PressureNegolytSegmentInVM}" HorizontalAlignment="Left" />
|
||||
<HMIToolkit:AnalogValue Grid.Row="1" Grid.Column="2" DataContext="{Binding PressurePosolytSegmentInVM}" HorizontalAlignment="Left" />
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0" Content="Druck Tank Inlet:" Margin="0,5,0,0"/>
|
||||
<HMIToolkit:AnalogValue Grid.Row="2" Grid.Column="1" DataContext="{Binding PressureNegolytTankInVM}" HorizontalAlignment="Left" Margin="0,5,0,0"/>
|
||||
<HMIToolkit:AnalogValue Grid.Row="2" Grid.Column="2" DataContext="{Binding PressurePosolytTankInVM}" HorizontalAlignment="Left" Margin="0,5,0,0"/>
|
||||
|
||||
<Label Grid.Row="3" Grid.Column="0" Content="Temperatur Tank Inlet:" Margin="0,5,0,5"/>
|
||||
<HMIToolkit:AnalogValue Grid.Row="3" Grid.Column="1" DataContext="{Binding TemperatureNegolytTankInVM}" HorizontalAlignment="Left" Margin="0,5,0,5"/>
|
||||
<HMIToolkit:AnalogValue Grid.Row="3" Grid.Column="2" DataContext="{Binding TemperaturePosolytTankInVM}" HorizontalAlignment="Left" Margin="0,5,0,5"/>
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
</UserControl>
|
||||
@@ -0,0 +1,22 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace UniperHMI
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für UnitControl.xaml
|
||||
/// </summary>
|
||||
public partial class UnitDetailsControl : UserControl
|
||||
{
|
||||
public static readonly DependencyProperty UnitNameProperty = DependencyProperty.Register("UnitName", typeof(string), typeof(UnitDetailsControl));
|
||||
public String UnitName
|
||||
{
|
||||
get { return (string)GetValue(UnitNameProperty); }
|
||||
set { SetValue(UnitNameProperty, value); }
|
||||
}
|
||||
public UnitDetailsControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user