using Aitex.Core.RT.ConfigCenter; using Aitex.Core.Util; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.Device.LinMot; using MECF.Framework.Common.Utilities; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; using System.Windows.Threading; namespace CyberX8_MainPages.ViewModels { public class LinMotOtherViewModel : BindableBase { #region 常量 private const string LINMOT_DEVICELIST = "LinMotDeviceList"; /// <summary> /// 控制字 /// </summary> private const string STATUS_WORD = "StatusWord"; /// <summary> /// 方向 /// </summary> private const string DIRECTION = "Direction"; /// <summary> /// 位置 /// </summary> private const string POSITION = "Position"; /// <summary> /// 当前Scan数 /// </summary> private const string SCAN_COUNT = "ScanCount"; #endregion #region 内部变量 /// <summary> /// 查询后台数据集合 /// </summary> private List<string> _rtDataKeys = new List<string>(); /// <summary> /// 查询后台的数据 /// </summary> private Dictionary<string, object> _rtDataValues; /// <summary> /// 定时器 /// </summary> private DispatcherTimer _timer; /// <summary> /// LinMot设备配置 /// </summary> private LinmotDeviceConfig _linMotDeviceConfig; private string _module; #endregion #region 属性 /// <summary> /// 模块名称 /// </summary> public string Module { get { return _module; } set { SetProperty(ref _module, value); } } /// <summary> /// LinMot设备配置 /// </summary> public LinmotDeviceConfig LinmotDeviceConfig { get { return _linMotDeviceConfig; } set { SetProperty(ref _linMotDeviceConfig, value); } } #endregion /// <summary> /// 构造函数 /// </summary> public LinMotOtherViewModel() { } /// <summary> /// 加载数据 /// </summary> public void LoadData(string systemName) { Module = systemName; List<string> lst = new List<string>(); lst.Add($"{Module}.{LINMOT_DEVICELIST}"); _rtDataValues = QueryDataClient.Instance.Service.PollData(lst); if (_rtDataValues != null) { LinmotDeviceConfig = CommonFunction.GetValue<LinmotDeviceConfig>(_rtDataValues, $"{Module}.{LINMOT_DEVICELIST}"); InitiRtDataKeys(); } if(_timer==null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(500); _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) { _rtDataValues = QueryDataClient.Instance.Service.PollData(_rtDataKeys); if (_rtDataValues != null && _rtDataValues.Count != 0) { foreach (LinMotDevice item in LinmotDeviceConfig.LinmotDevices) { item.StatusWord = CommonFunction.GetValue<short>(_rtDataValues, $"{item.Name}.{STATUS_WORD}"); item.Direction = CommonFunction.GetValue<string>(_rtDataValues, $"{item.Name}.{DIRECTION}"); item.Position = CommonFunction.GetValue<double>(_rtDataValues, $"{item.Name}.{POSITION}"); item.ScanCount = CommonFunction.GetValue<int>(_rtDataValues, $"{item.Name}.{SCAN_COUNT}"); item.IsConnected = CommonFunction.GetValue<bool>(_rtDataValues, $"{item.Name}.IsConnectd"); item.LinMotDeviceData = CommonFunction.GetValue<LinMotDeviceData>(_rtDataValues, $"{item.Name}.LinmotDeviceData"); item.LinMotDeviceData.UpMaxDeceleration = item.LinMotDeviceData.UpMaxDeceleration / 1000; item.LinMotDeviceData.UpMaxAcceleration = item.LinMotDeviceData.UpMaxAcceleration / 1000; item.LinMotDeviceData.DownMaxAcceleration = item.LinMotDeviceData.DownMaxAcceleration / 1000; item.LinMotDeviceData.DownMaxDeceleration = item.LinMotDeviceData.DownMaxDeceleration / 1000; item.LinMotDeviceData.DownMaxSpeed = item.LinMotDeviceData.DownMaxSpeed / 1000; item.LinMotDeviceData.UpMaxSpeed = item.LinMotDeviceData.UpMaxSpeed / 1000; } } } } /// <summary> /// 隐藏 /// </summary> public void Hide() { if (_timer != null) { _timer.Stop(); } } /// <summary> /// 初始化查询Key /// </summary> private void InitiRtDataKeys() { _rtDataKeys.Clear(); if (LinmotDeviceConfig != null) { foreach (LinMotDevice item in LinmotDeviceConfig.LinmotDevices) { _rtDataKeys.Add($"{item.Name}.{STATUS_WORD}"); _rtDataKeys.Add($"{item.Name}.{DIRECTION}"); _rtDataKeys.Add($"{item.Name}.{POSITION}"); _rtDataKeys.Add($"{item.Name}.{SCAN_COUNT}"); _rtDataKeys.Add($"{item.Name}.IsConnectd"); _rtDataKeys.Add($"{item.Name}.LinmotDeviceData"); } } } } }