using Aitex.Core.UI.MVVM; using Aitex.Core.Util; using Aitex.Core.Utilities; using ExcelLibrary.BinaryFileFormat; using MECF.Framework.Common.Beckhoff.AxisProvider; using MECF.Framework.Common.Beckhoff.IOAxis; 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.Model; 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 PufMotionViewModel : BindableBase { #region 常量 private const string MOTION_DATA = "MotionData"; #endregion #region 内部变量 #region flip /// /// flip模块名称 /// private string _flipModuleName; /// /// 数据 /// private CommandMotionData _flipMotionData; #endregion #region rotation /// /// rotation模块名称 /// private string _rotationModuleName; /// /// /// private CommandMotionData _rotationMotionData; #endregion #region Vertical /// /// vertical模块名称 /// private string _verticalModuleName; /// /// /// private CommandMotionData _verticalMotionData; #endregion /// /// 模块名称 /// private string _module = ""; /// /// 增加 /// private double _incrementValue = 0.01; /// /// /// private PufDistanceData _distanceData; /// /// 定时器 /// DispatcherTimer _timer; /// /// RT查询key集合 /// private List _rtDataKeys = new List(); /// /// rt查询key数值字典 /// private Dictionary _rtDataValueDic = new Dictionary(); #endregion #region 属性 #region Flip /// /// Filp名称 /// public string FlipModuleName { get { return _flipModuleName; } set { SetProperty(ref _flipModuleName, value); } } /// /// /// public CommandMotionData FlipMotionData { get { return _flipMotionData; } set { SetProperty(ref _flipMotionData, value); } } #endregion #region Rotation /// /// Rotate名称 /// public string RotationModuleName { get { return _rotationModuleName; } set { SetProperty(ref _rotationModuleName, value); } } public CommandMotionData RotationMotionData { get { return _rotationMotionData; } set { SetProperty(ref _rotationMotionData, value); } } #endregion #region Vertical /// /// Vertical名称 /// public string VerticalModuleName { get { return _verticalModuleName; } set { SetProperty(ref _verticalModuleName, value); } } /// /// /// public CommandMotionData VerticalMotionData { get { return _verticalMotionData; } set { SetProperty(ref _verticalMotionData, value); } } #endregion /// /// 模块名称 /// public string Module { get { return _module; } set { SetProperty(ref _module, value); } } /// /// 步进 /// public double IncrementValue { get { return _incrementValue; } set { SetProperty(ref _incrementValue, value); } } public PufDistanceData DistanceData { get { return _distanceData; } set { SetProperty(ref _distanceData, value); } } #endregion /// /// 构造函数 /// public PufMotionViewModel() { IncrementValue = (double)QueryDataClient.Instance.Service.GetConfig("System.Increment"); FlipMotionData = new CommandMotionData(); RotationMotionData = new CommandMotionData(); VerticalMotionData = new CommandMotionData(); } /// /// 加载数据 /// public void LoadData(string systemName) { Module = systemName; FlipModuleName = $"{Module}.Flip"; RotationModuleName = $"{Module}.Rotation"; VerticalModuleName = $"{Module}.Vertical"; _rtDataKeys.Clear(); _rtDataKeys.Add($"{FlipModuleName}.IsHomed"); _rtDataKeys.Add($"{FlipModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{FlipModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{RotationModuleName}.IsHomed"); _rtDataKeys.Add($"{RotationModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{RotationModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{VerticalModuleName}.IsHomed"); _rtDataKeys.Add($"{VerticalModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{VerticalModuleName}.{MOTION_DATA}"); if (_timer == null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(100); _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) { FlipMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{FlipModuleName}.{MOTION_DATA}"); RotationMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}"); VerticalMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{VerticalModuleName}.{MOTION_DATA}"); } } } /// /// 隐藏 /// public void Hide() { _timer.Stop(); } } }