using Aitex.Core.RT.DataCenter;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using Aitex.Core.Utilities;
using MECF.Framework.Common.Beckhoff.AxisProvider;
using MECF.Framework.Common.Beckhoff.Station;
using MECF.Framework.Common.CommonData.PUF;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.Utilities;
using CyberX8_Core;
using CyberX8_MainPages.Unity;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Input;
using System.Windows.Threading;
namespace CyberX8_MainPages.ViewModels
{
public class PufServiceScreenViewModel : BindableBase
{
#region 常量
private const string MOTOR_POSITION = "MotorPosition";
private const string CHUCKA_VAC = "ChuckAVac";
private const string CHUCKB_VAC = "ChuckBVac";
private const string CHUCKA_RELEASE = "ChuckARelease";
private const string CHUCKB_RELEASE = "ChuckBRelease";
private const string DISTANCE_OFFSET1 = "DistanceOffset1";
private const string DISTANCE_OFFSET2 = "DistanceOffset2";
private const string DISTANCE_SENSOR1 = "DistanceSensor1";
private const string DISTANCE_SENSOR2 = "DistanceSensor2";
private const string CURRENT_STATION = "CurrentStation";
private const string CHUCKA_VACUUM_STATUS = "ChuckAVacuumStatus";
private const string CHUCKB_VACUUM_STATUS = "ChuckBVacuumStaus";
private const string IS_SWITCH_ON = "IsSwitchOn";
#endregion
#region 内部变量
#region flip
///
/// flip模块名称
///
private string _flipModuleName;
///
/// flip当前位置
///
private double _flipMotorPosition ;
///
/// flip是否正在工作
///
private bool _flipIsMotorOn;
///
/// Flip当前Station
///
private string _flipCurrentStation;
#endregion
#region rotation
///
/// rotation模块名称
///
private string _rotationModuleName;
///
/// rotation当前位置
///
private double _rotationMotorPosition;
///
/// rotation是否正在工作
///
private bool _rotationIsMotorOn;
///
/// Rotation当前Station
///
private string _rotationCurrentStation;
#endregion
#region Vertical
///
/// vertical模块名称
///
private string _verticalModuleName;
///
/// vertical当前位置
///
private double _verticalMotorPosition;
///
/// vertical是否正在工作
///
private bool _verticalIsMotorOn;
///
/// Vertical当前Station
///
private string _verticalCurrentStation;
#endregion
#region vacuum
private bool _vacuumA;
private double _vacuumAValue;
private string _vacuumAStatus;
private bool _vacuumB;
private double _vacuumBValue;
private string _vacuumBStatus;
#endregion
///
/// 查询后台数据集合
///
private List _rtDataKeys = new List();
///
/// rt查询key数值字典
///
private Dictionary _rtDataValueDic = new Dictionary();
///
/// 模块名称
///
private string _moduleName = "";
///
///
///
private PufDistanceData _distanceData=new PufDistanceData();
///
/// 定时器
///
private DispatcherTimer _timer;
#endregion
#region 属性
///
/// 模块名称
///
public string ModuleName
{
get { return _moduleName; }
set { SetProperty(ref _moduleName, value); }
}
#region Flip
///
/// Filp名称
///
public string FlipModuleName
{
get { return _flipModuleName; }
set { SetProperty(ref _flipModuleName, value); }
}
public double FlipMotionPosition
{
get { return _flipMotorPosition; }
set { SetProperty(ref _flipMotorPosition, value); }
}
public bool FlipIsMotorOn
{
get { return _flipIsMotorOn; }
set { SetProperty(ref _flipIsMotorOn, value); }
}
///
/// Flip当前位置
///
public string FlipCurrentStation
{
get { return _flipCurrentStation; }
set { SetProperty(ref _flipCurrentStation, value);}
}
#endregion
#region rotation
///
/// Filp名称
///
public string RotationModuleName
{
get { return _rotationModuleName; }
set { SetProperty(ref _rotationModuleName, value); }
}
public double RotationMotionPosition
{
get { return _rotationMotorPosition; }
set { SetProperty(ref _rotationMotorPosition, value); }
}
public bool RotationIsMotorOn
{
get { return _rotationIsMotorOn; }
set { SetProperty(ref _rotationIsMotorOn, value); }
}
///
/// Rotation当前位置
///
public string RotationCurrentStation
{
get { return _rotationCurrentStation; }
set { SetProperty(ref _rotationCurrentStation, value); }
}
#endregion
#region vertical
///
/// Filp名称
///
public string VerticalModuleName
{
get { return _verticalModuleName; }
set { SetProperty(ref _verticalModuleName, value); }
}
public double VerticalMotionPosition
{
get { return _verticalMotorPosition; }
set { SetProperty(ref _verticalMotorPosition, value); }
}
public bool VerticalIsMotorOn
{
get { return _verticalIsMotorOn; }
set { SetProperty(ref _verticalIsMotorOn, value); }
}
///
/// Vertical当前位置
///
public string VerticalCurrentStation
{
get { return _verticalCurrentStation; }
set { SetProperty(ref _verticalCurrentStation, value); }
}
#endregion
#region Vacuum
///
/// VacuumA
///
public bool VacuumA
{
get { return _vacuumA; }
set { SetProperty(ref _vacuumA, value);}
}
///
/// VacuumB
///
public bool VacuumB
{
get { return _vacuumB;}
set { SetProperty(ref _vacuumB, value); }
}
///
/// VacuumA数值
///
public double VacuumAValue
{
get { return _vacuumAValue; }
set { SetProperty(ref _vacuumAValue, value); }
}
///
/// VacuumA状态
///
public string VacuumAStatus
{
get { return _vacuumAStatus; }
set { SetProperty(ref _vacuumAStatus, value); }
}
///
/// VacuumB数值
///
public double VacuumBValue
{
get { return _vacuumBValue; }
set
{
SetProperty(ref _vacuumBValue, value);
}
}
///
/// VacuumB状态
///
public string VacuumBStatus
{
get { return _vacuumBStatus; }
set { SetProperty(ref _vacuumBStatus, value); }
}
public PufDistanceData DistanceData
{
get { return _distanceData; }
set { SetProperty(ref _distanceData, value);}
}
#endregion
#endregion
///
/// 构造函数
///
public PufServiceScreenViewModel()
{
}
///
/// 初始化查询数据集合
///
private void addDataKeys()
{
_rtDataKeys.Clear();
_rtDataKeys.Add($"{FlipModuleName}.{MOTOR_POSITION}");
_rtDataKeys.Add($"{FlipModuleName}.{IS_SWITCH_ON}");
_rtDataKeys.Add($"{FlipModuleName}.{CURRENT_STATION}");
_rtDataKeys.Add($"{RotationModuleName}.{MOTOR_POSITION}");
_rtDataKeys.Add($"{RotationModuleName}.{IS_SWITCH_ON}");
_rtDataKeys.Add($"{RotationModuleName}.{CURRENT_STATION}");
_rtDataKeys.Add($"{VerticalModuleName}.{MOTOR_POSITION}");
_rtDataKeys.Add($"{VerticalModuleName}.{IS_SWITCH_ON}");
_rtDataKeys.Add($"{VerticalModuleName}.{CURRENT_STATION}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKA_RELEASE}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKB_RELEASE}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKA_VAC}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKB_VAC}");
_rtDataKeys.Add($"{ModuleName}.{DISTANCE_OFFSET1}");
_rtDataKeys.Add($"{ModuleName}.{DISTANCE_OFFSET2}");
_rtDataKeys.Add($"{ModuleName}.{DISTANCE_SENSOR1}");
_rtDataKeys.Add($"{ModuleName}.{DISTANCE_SENSOR2}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKA_VACUUM_STATUS}");
_rtDataKeys.Add($"{ModuleName}.{CHUCKB_VACUUM_STATUS}");
}
///
/// 加载数据
///
public void LoadData(string system)
{
ModuleName = system;
FlipModuleName = $"{ModuleName}.Flip";
RotationModuleName = $"{ModuleName}.Rotation";
VerticalModuleName = $"{ModuleName}.Vertical";
addDataKeys();
if (_timer == null)
{
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromMilliseconds(200);
_timer.Tick += Timer_Tick;
}
_timer.Start();
}
///
/// 定时器执行
///
///
///
private void Timer_Tick(object sender, EventArgs e)
{
if (_rtDataKeys.Count != 0)
{
_rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
if (_rtDataValueDic != null)
{
FlipMotionPosition = CommonFunction.GetValue(_rtDataValueDic, $"{FlipModuleName}.{MOTOR_POSITION}");
FlipIsMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{FlipModuleName}.{IS_SWITCH_ON}");
FlipCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue(_rtDataValueDic, $"{FlipModuleName}.{CURRENT_STATION}"), FlipModuleName);
RotationMotionPosition = CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{MOTOR_POSITION}");
RotationIsMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{IS_SWITCH_ON}");
RotationCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{CURRENT_STATION}"), RotationModuleName);
VerticalMotionPosition = CommonFunction.GetValue(_rtDataValueDic, $"{VerticalModuleName}.{MOTOR_POSITION}");
VerticalIsMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{VerticalModuleName}.{IS_SWITCH_ON}");
VerticalCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue(_rtDataValueDic, $"{VerticalModuleName}.{CURRENT_STATION}"), VerticalModuleName);
VacuumA = !CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKA_RELEASE}");
VacuumB = !CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKB_RELEASE}");
VacuumAValue = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKA_VAC}");
VacuumBValue = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKB_VAC}");
VacuumAStatus = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKA_VACUUM_STATUS}");
VacuumBStatus = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCKB_VACUUM_STATUS}");
DistanceData.Offset1 = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{DISTANCE_OFFSET1}");
DistanceData.Offset2 = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{DISTANCE_OFFSET2}");
DistanceData.Distance1 = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{DISTANCE_SENSOR1}");
DistanceData.Distance2 = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{DISTANCE_SENSOR2}");
}
}
}
///
/// 隐藏
///
public void Hide()
{
if (_timer != null)
{
_timer.Stop();
}
}
}
}