using Aitex.Core.Common; using Aitex.Core.UI.MVVM; using Aitex.Core.Util; using Aitex.Core.Utilities; using LiveCharts; 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_MainPages.Unity; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Timers; using System.Windows.Input; using System.Windows.Threading; namespace CyberX8_MainPages.ViewModels { public class LoaderMotionViewModel : BindableBase { #region 常量 private const string MOTION_DATA = "MotionData"; #endregion #region 内部变量 /// <summary> /// 模块名称 /// </summary> private string _module = ""; /// <summary> /// 增加 /// </summary> private double _incrementValue = 0.01; /// <summary> /// 定时器 /// </summary> private DispatcherTimer _timer; /// <summary> /// RT查询key集合 /// </summary> private List<string> _rtDataKeys = new List<string>(); /// <summary> /// rt查询key数值字典 /// </summary> private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>(); #region ShuttleA /// <summary> /// shuttleA moduleName /// </summary> private string _shuttleAModuleName; /// <summary> /// shuttleA数据 /// </summary> private CommandMotionData _shuttleAMotionData; #endregion #region shuttleB /// <summary> /// shuttleB moduleName /// </summary> private string _shuttleBModuleName; /// <summary> /// shuttleB数据 /// </summary> private CommandMotionData _shuttleBMotionData; #endregion #region TiltA /// <summary> /// TiltA moduleName /// </summary> private string _tiltAModuleName; /// <summary> /// TiltA数据 /// </summary> private CommandMotionData _tiltAMotionData; #endregion #region TiltB /// <summary> /// tiltB moduleName /// </summary> private string _tiltBModuleName; /// <summary> /// TiltB数据 /// </summary> private CommandMotionData _tiltBMotionData; #endregion #region CRSA /// <summary> /// CRSA moduleName /// </summary> private string _crsAModuleName; /// <summary> /// CRSA数据 /// </summary> private CommandMotionData _crsAMotionData; #endregion #region CRSB /// <summary> /// crsB moduleName /// </summary> private string _crsBModuleName; /// <summary> /// CRSB数据 /// </summary> private CommandMotionData _crsBMotionData; #endregion #region Rotation /// <summary> /// Rotation moduleName /// </summary> private string _rotationModuleName; /// <summary> /// Rotation数据 /// </summary> private CommandMotionData _rotationMotionData; #endregion #endregion #region 属性 /// <summary> /// 模块名称 /// </summary> public string Module { get { return _module; } set { SetProperty(ref _module, value); } } /// <summary> /// 步进 /// </summary> public double IncrementValue { get { return _incrementValue; } set { SetProperty(ref _incrementValue, value); } } #region shuttleA /// <summary> /// shuttleA ModuleName /// </summary> public string ShuttleAModuleName { get { return _shuttleAModuleName; } set { SetProperty(ref _shuttleAModuleName, value); } } /// <summary> /// shuttleA 数据 /// </summary> public CommandMotionData ShuttleAMotionData { get { return _shuttleAMotionData; } set { SetProperty(ref _shuttleAMotionData, value); } } #endregion #region shuttleB /// <summary> /// shuttleB ModuleName /// </summary> public string ShuttleBModuleName { get { return _shuttleBModuleName; } set { SetProperty(ref _shuttleBModuleName, value); } } /// <summary> /// shuttleB 数据 /// </summary> public CommandMotionData ShuttleBMotionData { get { return _shuttleBMotionData; } set { SetProperty(ref _shuttleBMotionData, value); } } #endregion #region TiltA /// <summary> /// TiltA ModuleName /// </summary> public string TiltAModuleName { get { return _tiltAModuleName; } set { SetProperty(ref _tiltAModuleName, value); } } /// <summary> /// TiltA 数据 /// </summary> public CommandMotionData TiltAMotionData { get { return _tiltAMotionData; } set { SetProperty(ref _tiltAMotionData, value); } } #endregion #region TiltB /// <summary> /// TiltB ModuleName /// </summary> public string TiltBModuleName { get { return _tiltBModuleName; } set { SetProperty(ref _tiltBModuleName, value); } } /// <summary> /// TiltB 数据 /// </summary> public CommandMotionData TiltBMotionData { get { return _tiltBMotionData; } set { SetProperty(ref _tiltBMotionData, value); } } #endregion #region CRSA /// <summary> /// CRSA ModuleName /// </summary> public string CRSAModuleName { get { return _crsAModuleName; } set { SetProperty(ref _crsAModuleName, value); } } /// <summary> /// CRSA 数据 /// </summary> public CommandMotionData CRSAMotionData { get { return _crsAMotionData; } set { SetProperty(ref _crsAMotionData, value); } } #endregion #region CRSB /// <summary> /// CRSB ModuleName /// </summary> public string CRSBModuleName { get { return _crsBModuleName; } set { SetProperty(ref _crsBModuleName, value); } } /// <summary> /// CRSB 数据 /// </summary> public CommandMotionData CRSBMotionData { get { return _crsBMotionData; } set { SetProperty(ref _crsBMotionData, value); } } #endregion #region Rotation /// <summary> /// Rotation ModuleName /// </summary> public string RotationModuleName { get { return _rotationModuleName; } set { SetProperty(ref _rotationModuleName, value); } } /// <summary> /// Rotation 数据 /// </summary> public CommandMotionData RotationMotionData { get { return _rotationMotionData; } set { SetProperty(ref _rotationMotionData, value); } } #endregion #endregion /// <summary> /// 构造函数 /// </summary> public LoaderMotionViewModel() { } /// <summary> /// 加载数据 /// </summary> public void LoadData(string systemName) { Module = systemName; ShuttleAModuleName = $"{Module}.ShuttleA"; ShuttleBModuleName = $"{Module}.ShuttleB"; TiltAModuleName = $"{Module}.TiltA"; TiltBModuleName = $"{Module}.TiltB"; CRSAModuleName = $"{Module}.LSA"; CRSBModuleName = $"{Module}.LSB"; RotationModuleName = $"{Module}.Rotation"; _rtDataKeys.Clear(); _rtDataKeys.Add($"{ShuttleAModuleName}.IsHomed"); _rtDataKeys.Add($"{ShuttleAModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{ShuttleAModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{ShuttleBModuleName}.IsHomed"); _rtDataKeys.Add($"{ShuttleBModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{ShuttleBModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{TiltAModuleName}.IsHomed"); _rtDataKeys.Add($"{TiltAModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{TiltAModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{TiltBModuleName}.IsHomed"); _rtDataKeys.Add($"{TiltBModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{TiltBModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{CRSAModuleName}.IsHomed"); _rtDataKeys.Add($"{CRSAModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{CRSAModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{CRSBModuleName}.IsHomed"); _rtDataKeys.Add($"{CRSBModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{CRSBModuleName}.{MOTION_DATA}"); _rtDataKeys.Add($"{RotationModuleName}.IsHomed"); _rtDataKeys.Add($"{RotationModuleName}.IsSwitchOn"); _rtDataKeys.Add($"{RotationModuleName}.{MOTION_DATA}"); if (_timer == null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(100); _timer.Tick += Timer_Tick; ; } _timer.Start(); } /// <summary> /// 定时器执行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Timer_Tick(object sender, EventArgs e) { if (_rtDataKeys.Count != 0) { _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys); if (_rtDataValueDic != null) { ShuttleAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleAModuleName}.{MOTION_DATA}"); ShuttleBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleBModuleName}.{MOTION_DATA}"); TiltAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltAModuleName}.{MOTION_DATA}"); TiltBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltBModuleName}.{MOTION_DATA}"); CRSAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSAModuleName}.{MOTION_DATA}"); CRSBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSBModuleName}.{MOTION_DATA}"); RotationMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}"); } } } /// <summary> /// 隐藏 /// </summary> public void Hide() { if (_timer != null) { _timer.Stop(); } } } }