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";
///
/// 控制字
///
private const string STATUS_WORD = "StatusWord";
///
/// 方向
///
private const string DIRECTION = "Direction";
///
/// 位置
///
private const string POSITION = "Position";
///
/// 当前Scan数
///
private const string SCAN_COUNT = "ScanCount";
#endregion
#region 内部变量
///
/// 查询后台数据集合
///
private List _rtDataKeys = new List();
///
/// 查询后台的数据
///
private Dictionary _rtDataValues;
///
/// 定时器
///
private DispatcherTimer _timer;
///
/// LinMot设备配置
///
private LinmotDeviceConfig _linMotDeviceConfig;
private string _module;
#endregion
#region 属性
///
/// 模块名称
///
public string Module { get { return _module; } set { SetProperty(ref _module, value); } }
///
/// LinMot设备配置
///
public LinmotDeviceConfig LinmotDeviceConfig { get { return _linMotDeviceConfig; } set { SetProperty(ref _linMotDeviceConfig, value); } }
#endregion
///
/// 构造函数
///
public LinMotOtherViewModel()
{
}
///
/// 加载数据
///
public void LoadData(string systemName)
{
Module = systemName;
List lst = new List();
lst.Add($"{Module}.{LINMOT_DEVICELIST}");
_rtDataValues = QueryDataClient.Instance.Service.PollData(lst);
if (_rtDataValues != null)
{
LinmotDeviceConfig = CommonFunction.GetValue(_rtDataValues, $"{Module}.{LINMOT_DEVICELIST}");
InitiRtDataKeys();
}
if(_timer==null)
{
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromMilliseconds(500);
_timer.Tick += Timer_Tick;
}
_timer.Start();
}
///
/// 定时器
///
///
///
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(_rtDataValues, $"{item.Name}.{STATUS_WORD}");
item.Direction = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{DIRECTION}");
item.Position = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{POSITION}");
item.ScanCount = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{SCAN_COUNT}");
item.IsConnected = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.IsConnectd");
item.LinMotDeviceData = CommonFunction.GetValue(_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;
}
}
}
}
///
/// 隐藏
///
public void Hide()
{
if (_timer != null)
{
_timer.Stop();
}
}
///
/// 初始化查询Key
///
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");
}
}
}
}
}