using CommunityToolkit.Mvvm.ComponentModel; using Heisig.HMI.AdsManager; using TwinCAT.TypeSystem; namespace InfineonHMI; 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); } }