using CommunityToolkit.Mvvm.ComponentModel; using System.ComponentModel.DataAnnotations; using CommunityToolkit.Mvvm.Input; using TwinCAT.TypeSystem; using Heisig.HMI.AdsManager; using HMIToolkit; using InfineonHMI.Common; namespace Common; public sealed partial class PackMLControlVM : ObservableValidator, IDisposable { private IAdsManager _adsManager; private readonly string _variableName; [ObservableProperty] private string? sTitle; [ObservableProperty] private string? sCurrentMode; [ObservableProperty] private string? sCurrentState; [ObservableProperty] private HMIControlButtonVM? prodModeButtonVm; [ObservableProperty] private HMIControlButtonVM? manualModeButtonVm; [ObservableProperty] private HMIControlButtonVM? clearButtonVm; [ObservableProperty] private HMIControlButtonVM? resetButtonVm; [ObservableProperty] private HMIControlButtonVM? startButtonVm; [ObservableProperty] private HMIControlButtonVM? abortButtonVm; [ObservableProperty] private HMIControlButtonVM? holdButtonVm; [ObservableProperty] private HMIControlButtonVM? stopButtonVm; [ObservableProperty] private HMIControlButtonVM? suspendButtonVm; [ObservableProperty] private HMIControlButtonVM? unholdButtonVm; [ObservableProperty] private HMIControlButtonVM? unsuspendButtonVm; [ObservableProperty] private HMIControlButtonVM? completeButtonVm; [ObservableProperty] private bool canUserInteract; public PackMLControlVM() { SCurrentMode = "Modus: "; SCurrentState = "Aktueller Zustand: "; STitle = "Betriebsart"; ProdModeButtonVm = new(); ManualModeButtonVm = new(); ClearButtonVm= new(); ResetButtonVm= new(); StartButtonVm = new(); AbortButtonVm = new(); HoldButtonVm = new(); StopButtonVm = new(); SuspendButtonVm = new(); UnholdButtonVm = new(); UnsuspendButtonVm = new(); CompleteButtonVm = new(); var currentUser = Users.getCurrentUser(); canUserInteract = currentUser.UserLevel > 50; } public PackMLControlVM(IAdsManager adsManager, string variableName) { _adsManager = adsManager; _variableName = variableName; STitle = "Betriebsart"; SCurrentMode = "Modus: "; SCurrentState = "Aktueller Zustand: "; ProdModeButtonVm = new(_adsManager, _variableName + ".stBtnProdMode"); ManualModeButtonVm = new(_adsManager, _variableName + ".stBtnManualMode"); ClearButtonVm = new(_adsManager, _variableName + ".stBtnClear"); ResetButtonVm = new(_adsManager, _variableName + ".stBtnReset"); StartButtonVm = new(_adsManager, _variableName + ".stBtnStart"); AbortButtonVm = new(_adsManager, _variableName + ".stBtnAbort"); HoldButtonVm = new(_adsManager, _variableName + ".stBtnHold"); StopButtonVm = new(_adsManager, _variableName + ".stBtnStop"); SuspendButtonVm = new(_adsManager, _variableName + ".stBtnSuspend"); UnholdButtonVm = new(_adsManager, _variableName + ".stBtnUnhold"); UnsuspendButtonVm = new(_adsManager, _variableName + ".stBtnUnsuspend"); CompleteButtonVm = new(_adsManager, _variableName + ".stBtnComplete"); _adsManager.Register(_variableName + ".eCurrentState", StateChanged); _adsManager.Register(_variableName + ".eCurrentMode", ModeChanged); var currentUser = Users.getCurrentUser(); canUserInteract = currentUser.UserLevel > 50; } private void StateChanged(object? sender, ValueChangedEventArgs e) { var state = (int)e.Value; var curState = "Aktueller Status: "; switch (state) { case 0: curState += "Undefined"; break; case 1: curState += "Clearing"; break; case 2: curState += "Stopped"; break; case 3: curState += "Starting"; break; case 4: curState += "Idle"; break; case 5: curState += "Suspended"; break; case 6: curState += "Execute"; break; case 7: curState += "Stopping"; break; case 8: curState += "Aborting"; break; case 9: curState += "Aborted"; break; case 10: curState += "Holding"; break; case 11: curState += "Held"; break; case 12: curState += "Unholding"; break; case 13: curState += "Suspending"; break; case 14: curState += "Unsuspending"; break; case 15: curState += "Resetting"; break; case 16: curState += "Completing"; break; case 17: curState += "Completed"; break; default: curState += "Undefined"; break; } SCurrentState = curState; } private void ModeChanged(object? sender, ValueChangedEventArgs e) { var curMode = "Aktueller Modus: "; var mode = (int)e.Value; switch (mode) { case 0: curMode += "Invalid"; break; case 1: curMode += "Production"; break; case 2: curMode += "Maintenance"; break; case 3: curMode += "Manual"; break; case 4: curMode += "change_over"; break; case 5: curMode += "clean"; break; case 6: curMode += "set up"; break; case 7: curMode += "empty out"; break; default: curMode += "Invalid"; break; } SCurrentMode = curMode; } public void Dispose() { ProdModeButtonVm?.Dispose(); ManualModeButtonVm?.Dispose(); ClearButtonVm?.Dispose(); ResetButtonVm?.Dispose(); StartButtonVm?.Dispose(); AbortButtonVm?.Dispose(); HoldButtonVm?.Dispose(); StopButtonVm?.Dispose(); SuspendButtonVm?.Dispose(); UnholdButtonVm?.Dispose(); UnsuspendButtonVm?.Dispose(); CompleteButtonVm?.Dispose(); } }