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