141 lines
4.9 KiB
C#
141 lines
4.9 KiB
C#
using Aurora;
|
|
using Aurora.Api;
|
|
using Aurora.Api.Devices;
|
|
using Aurora.View;
|
|
using AuroraDeviceCommon.Views;
|
|
using AuroraPowerMeter;
|
|
using AuroraUIComponent.Chart;
|
|
using Hermes;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Input;
|
|
using System.Windows.Threading;
|
|
|
|
namespace AuroraPowerMeter.Coherent
|
|
{
|
|
public class UCCoherentPowerMeterDeviceViewModel : BaseDeviceViewModel
|
|
{
|
|
public ICommand CMD_MeasurePower { get; }
|
|
|
|
private readonly DispatcherTimer MonitorTimer;
|
|
|
|
//2023.01.14 YDY 구교동 대리가 수정한부분 같음...파워 메터 포트 부분 수정 했다고 들음...
|
|
private string _CurrentPowerName;
|
|
public string CurrentPowerName { get => _CurrentPowerName; set => SetProperty(ref _CurrentPowerName, value); }
|
|
|
|
private string _CurrentPortNumber;
|
|
public string CurrentPortNumber { get => _CurrentPortNumber; set => SetProperty(ref _CurrentPortNumber, value); }
|
|
|
|
private string _CurrentState;
|
|
public string CurrentState { get => _CurrentState; set => SetProperty(ref _CurrentState, value); }
|
|
|
|
private double _CurrentPower;
|
|
public double CurrentPower { get => _CurrentPower; set => SetProperty(ref _CurrentPower, value); }
|
|
|
|
public UCLineChartViewModel PowerMeterChart { get; }
|
|
|
|
bool _ContinuesMeasure;
|
|
public bool ContinuesMeasure { get => _ContinuesMeasure; set => SetProperty(ref _ContinuesMeasure, value); }
|
|
public UCCoherentPowerMeterDeviceViewModel(IAuroraEnvironment aurora, Device powerMeter)
|
|
: base(aurora, powerMeter)
|
|
{
|
|
CMD_MeasurePower = new DelegateCommand(MeasurePW);
|
|
|
|
PowerMeterChart = new UCLineChartViewModel(aurora);
|
|
PowerMeterChart.SetChart("POWER", "", 8, 0);
|
|
PowerMeterChart.SetChartLine("Power", 6);
|
|
PowerMeterChart.SetChartLineRange(true, 1, 0, 10);
|
|
PowerMeterChart.InitChart();
|
|
|
|
CurrentPowerName = "";
|
|
CurrentPortNumber = "";
|
|
_CurrentState = string.Empty;
|
|
_CurrentPower = 0.0;
|
|
_ContinuesMeasure = false;
|
|
|
|
MonitorTimer = new DispatcherTimer();
|
|
MonitorTimer.Tick += OnMonitoring;
|
|
MonitorTimer.Interval = TimeSpan.FromMilliseconds(1000);
|
|
|
|
// 파워미터가 두개라 디바이스 인덱스 같은걸로 받는 이벤트 등록 나눠야할듯. 아직 어떤 디바이스가 붙을지 몰라 보류.
|
|
aurora.EventObservable.AsObservable(PowerMeterEvent.EVENT_ID_MEASURE_RESULT)
|
|
.Select(msg => (ValueTuple<string, double>)msg.Param)
|
|
.Where(msg => msg.Item1 == powerMeter.DeviceId)
|
|
.Subscribe(power => OnPowerMeasured(power.Item2));
|
|
}
|
|
|
|
protected override void VisibleChanged(object obj)
|
|
{
|
|
bool visible = (bool)obj;
|
|
if (visible) {
|
|
MonitorTimer.Start();
|
|
} else {
|
|
ContinuesMeasure = false;
|
|
MonitorTimer.Stop();
|
|
}
|
|
}
|
|
|
|
private void OnMonitoring(object sender, EventArgs e)
|
|
{
|
|
if (_Device.IsActivated) {
|
|
var powerMeter = _Device as PowerMeter;
|
|
|
|
CurrentPowerName = _Device.DeviceId;
|
|
var deviceConfig = Application.Current.AuroraEnv().DeviceManager.GetDeviceConfig(_Device.DeviceId) as PowerMeterConfig;
|
|
CurrentPortNumber = string.Format("{0}", (deviceConfig.ConnConfig as SerialConnConfig).PortNum);
|
|
|
|
if (ContinuesMeasure) {
|
|
CurrentState = "측정중";
|
|
} else {
|
|
CurrentState = "대기중";
|
|
}
|
|
|
|
if (ContinuesMeasure) {
|
|
GetMeasurePower(null);
|
|
}
|
|
return;
|
|
} else {
|
|
CurrentState = "연결안됨";
|
|
}
|
|
}
|
|
|
|
private void OnPowerMeasured(double _value)
|
|
{
|
|
Application.Current.Dispatcher.InvokeAsync(() => PowerMeterChart.AddPoint(_value));
|
|
}
|
|
|
|
private void MeasurePW(object obj)
|
|
{
|
|
if (!_Device.IsActivated) {
|
|
ContinuesMeasure = false;
|
|
return;
|
|
}
|
|
if (ContinuesMeasure) {
|
|
ContinuesMeasure = false;
|
|
} else {
|
|
ContinuesMeasure = true;
|
|
}
|
|
}
|
|
|
|
private void GetMeasurePower(object obj)
|
|
{
|
|
if (!_Device.IsActivated) {
|
|
ContinuesMeasure = false;
|
|
return;
|
|
}
|
|
|
|
var powerMeter = _Device as PowerMeter;
|
|
double power = 0.0;
|
|
if (powerMeter.Measure(out power) == E1.OK) {
|
|
CurrentPower = power;
|
|
PowerMeterChart.AddPoint(power);
|
|
}
|
|
}
|
|
}
|
|
}
|