using Aurora; using Aurora.Api; using Aurora.View; using Hermes; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace AuroraHeightSensor.Keyence.Views { public class UCHeightSensorControlViewModel : NotifyPropertyChangedBase { private readonly HeightSensor _Device; private string _Id; public string Id { get => _Id; set => SetProperty(ref _Id, value); } private double _CH0Value; public double CH0Value { get => _CH0Value; set => SetProperty(ref _CH0Value, value); } private double _CH1Value; public double CH1Value { get => _CH1Value; set => SetProperty(ref _CH1Value, value); } private double _CH2Value; public double CH2Value { get => _CH2Value; set => SetProperty(ref _CH2Value, value); } private double _CH3Value; public double CH3Value { get => _CH3Value; set => SetProperty(ref _CH3Value, value); } private string _Receive; public string Receive { get => _Receive; set => SetProperty(ref _Receive, value); } private bool _IsCh00 = false; public bool IsCh00 { get => _IsCh00; set => SetProperty(ref _IsCh00, value); } private bool _IsCh01 = true; public bool IsCh01 { get => _IsCh01; set => SetProperty(ref _IsCh01, value); } private bool _IsCh02 = false; public bool IsCh02 { get => _IsCh02; set => SetProperty(ref _IsCh02, value); } private bool _IsCh03 = false; public bool IsCh03 { get => _IsCh03; set => SetProperty(ref _IsCh03, value); } public ICommand CMD_ViewLoaded { get; } public ICommand CMD_ViewUnloaded { get; } public ICommand CMD_Read { get; } public ICommand CMD_ZeroShift { get; } public ICommand CMD_ZeroShiftReset { get; } public ICommand CMD_AutoTransmit { get; } public ICommand OnMeasured { get; private set; } public ICommand CMD_Reset { get; } public UCHeightSensorControlViewModel(IAuroraEnvironment env, string deviceId) { Id = deviceId; _Device = env.DeviceManager.GetDevice(deviceId) as HeightSensor; CMD_Read = new DelegateCommand(Read); CMD_ZeroShift = new DelegateCommand(SetZeroShift); CMD_ZeroShiftReset = new DelegateCommand(SetZeroShiftReset); CMD_AutoTransmit = new DelegateCommand(StartStopAutoTransmit); CMD_Reset = new DelegateCommand(ResetValue); OnMeasured = new DelegateCommand(HandleMeasuredData); } private void ResetValue(object obj) { CH1Value = 0; CH1Value = 0; CH2Value = 0; CH3Value = 0; _Device.Reset(); } private void HandleMeasuredData(object obj) { if (obj is double measValue) { CH1Value = measValue; } } private int _MeasureCountMax = 0; private int _MeasureCount = 0; private void StartStopAutoTransmit(object obj) { _MeasureCountMax = (obj is int count) ? count : 1; if (_MeasureCountMax <= 0) return; _MeasureCount = 0; _Device.StartStopAutoTransmit((obj is string strParam && strParam.ToUpper() == "TRUE"), OnMeasured); } private void Read(object obj) { if(_Device.MeasureAll(out List val) == E1.OK) { if(val.Count() > 1) { CH0Value = val[0]; CH1Value = val[1]; CH2Value = val[2]; CH3Value = val[3]; } } } private void SetZeroShift(object obj) { eChannel ch = eChannel.CH0; if (IsCh00) ch = eChannel.CH0; else if(IsCh01) ch = eChannel.CH1; else if (IsCh02) ch = eChannel.CH2; else if (IsCh03) ch = eChannel.CH3; _Device.SetZeroShift(ch); } private void SetZeroShiftReset(object obj) { eChannel ch = eChannel.CH0; if (IsCh00) ch = eChannel.CH0; else if (IsCh01) ch = eChannel.CH1; else if (IsCh02) ch = eChannel.CH2; else if (IsCh03) ch = eChannel.CH3; _Device.SetZeroShiftReset(ch); } } }