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.Equipment;
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 TransporterMotionViewModel : BindableBase
{
#region 常量
private const string MOTION_DATA = "MotionData";
#endregion
#region 内部变量
///
/// 增加
///
private double _incrementValue = 0.01;
///
/// RT查询key集合
///
private List _rtDataKeys = new List();
///
/// rt查询key数值字典
///
private Dictionary _rtDataValueDic = new Dictionary();
///
/// 定时器
///
private DispatcherTimer _timer;
#region Transporter2 Gantry
///
/// Transporter 2 Gantry moduleName
///
private string _transporter2GantryModuleName;
///
/// SwingA数据
///
private CommandMotionData _transporter2GantryMotionData;
#endregion
#region Transporter2 Elevator
///
/// Transporter2 Elevator moduleName
///
private string _transporter2ElevatorModuleName;
///
/// Transporter2 Elevator 数据
///
private CommandMotionData _transporter2ElevatorMotionData;
#endregion
#region Transporter1 Gantry
///
/// Transporter1 Gantry moduleName
///
private string _transporter1GantryModuleName;
///
/// Transporter1 Gantry数据
///
private CommandMotionData _transporter1GantryMotionData;
#endregion
#region Transporter1 Elevator
///
/// Transporter1 Elevator moduleName
///
private string _transporter1ElevatorModuleName;
///
/// TiltB数据
///
private CommandMotionData _transporter1ElevatorMotionData;
#endregion
#endregion
#region 属性
///
/// 步进
///
public double IncrementValue
{
get { return _incrementValue; }
set { SetProperty(ref _incrementValue, value); }
}
#region Transporter2 Gantry
///
/// Transporter2 Gantry ModuleName
///
public string Transporter2GantryModuleName { get { return _transporter2GantryModuleName; } set { SetProperty(ref _transporter2GantryModuleName, value); } }
///
/// Transporter2 Gantry 数据
///
public CommandMotionData Transporter2GantryMotionData { get { return _transporter2GantryMotionData; } set { SetProperty(ref _transporter2GantryMotionData, value); } }
#endregion
#region Transporter2 Elevator
///
/// Transporter2 Elevator ModuleName
///
public string Transporter2ElevatorModuleName { get { return _transporter2ElevatorModuleName; } set { SetProperty(ref _transporter2ElevatorModuleName, value); } }
///
/// Transporter2 Elevator 数据
///
public CommandMotionData Transporter2ElevatorMotionData { get { return _transporter2ElevatorMotionData; } set { SetProperty(ref _transporter2ElevatorMotionData, value); } }
#endregion
#region Transporter1 Gantry
///
/// Transporter1 Gantry ModuleName
///
public string Transporter1GantryModuleName { get { return _transporter1GantryModuleName; } set { SetProperty(ref _transporter1GantryModuleName, value); } }
///
/// Transporter1 Gantry 数据
///
public CommandMotionData Transporter1GantryMotionData { get { return _transporter1GantryMotionData; } set { SetProperty(ref _transporter1GantryMotionData, value); } }
#endregion
#region Transporter1 Elevator
///
/// Transporter1 Elevator ModuleName
///
public string Transporter1ElevatorModuleName { get { return _transporter1ElevatorModuleName; } set { SetProperty(ref _transporter1ElevatorModuleName, value); } }
///
/// TiltB 数据
///
public CommandMotionData Transporter1ElevatorMotionData { get { return _transporter1ElevatorMotionData; } set { SetProperty(ref _transporter1ElevatorMotionData, value); } }
#endregion
#endregion
///
/// 构造函数
///
public TransporterMotionViewModel()
{
}
///
/// 加载数据
///
public void LoadData(string systemName)
{
Transporter2GantryModuleName = $"{ModuleName.Transporter2}.Gantry";
Transporter2ElevatorModuleName = $"{ModuleName.Transporter2}.Elevator";
Transporter1GantryModuleName = $"{ModuleName.Transporter1}.Gantry";
Transporter1ElevatorModuleName = $"{ModuleName.Transporter1}.Elevator";
_rtDataKeys.Clear();
_rtDataKeys.Add($"{Transporter2GantryModuleName}.IsHomed");
_rtDataKeys.Add($"{Transporter2GantryModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{Transporter2GantryModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{Transporter2ElevatorModuleName}.IsHomed");
_rtDataKeys.Add($"{Transporter2ElevatorModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{Transporter2ElevatorModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{Transporter1GantryModuleName}.IsHomed");
_rtDataKeys.Add($"{Transporter1GantryModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{Transporter1GantryModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{Transporter1ElevatorModuleName}.IsHomed");
_rtDataKeys.Add($"{Transporter1ElevatorModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{Transporter1ElevatorModuleName}.{MOTION_DATA}");
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)
{
Transporter2GantryMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{Transporter2GantryModuleName}.{MOTION_DATA}");
Transporter2ElevatorMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{Transporter2ElevatorModuleName}.{MOTION_DATA}");
Transporter1GantryMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{Transporter1GantryModuleName}.{MOTION_DATA}");
Transporter1ElevatorMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{Transporter1ElevatorModuleName}.{MOTION_DATA}");
}
}
}
///
/// 隐藏
///
public void Hide()
{
if (_timer != null)
{
_timer.Stop();
}
}
}
}