2026-06-05 13:44:39 +09:00

139 lines
4.4 KiB
C#

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<double> 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);
}
}
}