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"; private const string CHUCK = "Chuck"; private const string SIDEA_CHUCK_OUT = "SideAChuckOut"; private const string SIDEA_CHUCK_IN = "SideAChuckIn"; private const string SIDEB_CHUCK_OUT = "SideBChuckOut"; private const string SIDEB_CHUCK_IN = "SideBChuckIn"; #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 vacuum private bool _vacuumA; private double _vacuumAValue; private string _vacuumAStatus; private bool _vacuumB; private double _vacuumBValue; private string _vacuumBStatus; #endregion #region Chuck private bool _chuck; private bool _sideAChuckOut; private bool _sideBChuckOut; private bool _sideAChuckIn; private bool _sideBChuckIn; #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 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 #region Chuck public bool Chuck { get { return _chuck; } set { SetProperty(ref _chuck, value); } } public bool SideAChuckOut { get { return _sideAChuckOut; } set { SetProperty(ref _sideAChuckOut, value); } } public bool SideBChuckOut { get { return _sideBChuckOut; } set { SetProperty(ref _sideBChuckOut, value); } } public bool SideAChuckIn { get { return _sideAChuckIn; } set { SetProperty(ref _sideAChuckIn,value); } } public bool SideBChuckIn { get { return _sideBChuckIn; } set {SetProperty(ref _sideBChuckIn, 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($"{ModuleName}.{CHUCKA_RELEASE}"); _rtDataKeys.Add($"{ModuleName}.{CHUCKB_RELEASE}"); _rtDataKeys.Add($"{ModuleName}.{CHUCKA_VAC}"); _rtDataKeys.Add($"{ModuleName}.{CHUCKB_VAC}"); _rtDataKeys.Add($"{ModuleName}.{CHUCK}"); _rtDataKeys.Add($"{ModuleName}.{SIDEA_CHUCK_IN}"); _rtDataKeys.Add($"{ModuleName}.{SIDEB_CHUCK_IN}"); _rtDataKeys.Add($"{ModuleName}.{SIDEA_CHUCK_OUT}"); _rtDataKeys.Add($"{ModuleName}.{SIDEB_CHUCK_OUT}"); _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"; 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); 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}"); Chuck = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{CHUCK}"); SideAChuckIn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{SIDEA_CHUCK_IN}"); SideAChuckOut= CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{SIDEA_CHUCK_OUT}"); SideBChuckIn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{SIDEB_CHUCK_IN}"); SideBChuckOut = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName}.{SIDEB_CHUCK_OUT}"); } } } /// /// 隐藏 /// public void Hide() { if (_timer != null) { _timer.Stop(); } } } }