using MECF.Framework.Common.CommonData.Transporter; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.Layout; using MECF.Framework.Common.ToolLayout; using MECF.Framework.Common.Utilities; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Timers; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; namespace CyberX8_MainPages.ViewModels { public class TransporterViewModel : BindableBase { #region 常量 private const string TRANSPORTER_DATA = "TransporterData"; private const string IS_SWITCH_ON = "IsSwitchOn"; private const string IS_HOMED = "IsHomed"; private const string IS_MOVING = "IsMoving"; #endregion #region 内部变量 private ProcessLayout _processLayout; /// RT查询key集合 /// private List _rtDataKeys = new List(); /// /// rt查询key数值字典 /// private Dictionary _rtDataValueDic = new Dictionary(); /// /// 定时器 /// private DispatcherTimer _timer; #region Loader Transporter private TransporterData _loaderTransporterData; private string _loaderbarcodeReaderDeviceName; private bool _loaderGantryMotorOn; private bool _loaderElevatorMotorOn; private bool _loaderGantryHomed; private bool _loaderElevatorHomed; private bool _loaderGantryMoving; private bool _loaderElevatorMoving; private bool _loaderElevatorInUpPlace; private string _loaderBarcode; private List _loaderPositionList; private string _loaderFromSelectedItem; private string _loaderToSelectedItem; /// /// 模块Homed状态 /// private bool _loaderTransporterIsHomed; #endregion #region Process Transporter private TransporterData _processTransporterData; private string _processbarcodeReaderDeviceName; private bool _processGantryMotorOn; private bool _processElevatorMotorOn; private bool _processGantryHomed; private bool _processElevatorHomed; private bool _processGantryMoving; private bool _processElevatorMoving; private bool _processElevatorInUpPlace; private string _processBarcode; private List _processPositionList; private string _processFromSelectedItem; private string _processToSelectedItem; private bool _processTransporterIsHomed; #endregion #endregion #region 属性 #region Loader Transporter public string LoaderBarcodeReaderDeviceName { get { return _loaderbarcodeReaderDeviceName; } set { SetProperty(ref _loaderbarcodeReaderDeviceName, value); } } public TransporterData LoaderTransporterData { get { return _loaderTransporterData; } set { SetProperty(ref _loaderTransporterData, value); } } public bool LoaderGantryMotorOn { get { return _loaderGantryMotorOn; } set { SetProperty(ref _loaderGantryMotorOn,value); } } public bool LoaderElevatorMotorOn { get { return _loaderElevatorMotorOn; } set { SetProperty(ref _loaderElevatorMotorOn,value); } } public bool LoaderGantryHomed { get { return _loaderGantryHomed; } set { SetProperty(ref _loaderGantryHomed,value); } } public bool LoaderElevatorHomed { get { return _loaderElevatorHomed; } set { SetProperty(ref _loaderElevatorHomed,value); } } public bool LoaderGantryMoving { get { return _loaderGantryMoving; } set { SetProperty(ref _loaderGantryMoving, value); } } public bool LoaderElevatorMoving { get { return _loaderElevatorMoving; } set { SetProperty(ref _loaderElevatorMoving,value); } } public bool LoaderElevatorIsInUpPlace { get { return _loaderElevatorInUpPlace; } set { SetProperty(ref _loaderElevatorInUpPlace, value); } } public string LoaderBarcode { get { return _loaderBarcode; } set { SetProperty(ref _loaderBarcode, value); } } public List LoaderPositionList { get { return _loaderPositionList; } set { SetProperty(ref _loaderPositionList, value); } } public string LoaderFromSelectedItem { get { return _loaderFromSelectedItem; } set { SetProperty(ref _loaderFromSelectedItem, value); } } public string LoaderToSelectedItem { get { return _loaderToSelectedItem; } set { SetProperty(ref _loaderToSelectedItem, value); } } /// /// Loader Homed状态 /// public bool LoaderTransporterIsHomed { get { return _loaderTransporterIsHomed; } set { SetProperty(ref _loaderTransporterIsHomed, value); } } #endregion #region Process Transporter public string ProcessBarcodeReaderDeviceName { get { return _processbarcodeReaderDeviceName; } set { SetProperty(ref _processbarcodeReaderDeviceName, value); } } public TransporterData ProcessTransporterData { get { return _processTransporterData; } set { SetProperty(ref _processTransporterData, value); } } public bool ProcessGantryMotorOn { get { return _processGantryMotorOn; } set { SetProperty(ref _processGantryMotorOn, value); } } public bool ProcessElevatorMotorOn { get { return _processElevatorMotorOn; } set { SetProperty(ref _processElevatorMotorOn, value); } } public bool ProcessGantryHomed { get { return _processGantryHomed; } set { SetProperty(ref _processGantryHomed, value); } } public bool ProcessElevatorHomed { get { return _processElevatorHomed; } set { SetProperty(ref _processElevatorHomed, value); } } public bool ProcessGantryMoving { get { return _processGantryMoving; } set { SetProperty(ref _processGantryMoving, value); } } public bool ProcessElevatorIsInUpPlace { get { return _processElevatorInUpPlace; } set { SetProperty(ref _processElevatorInUpPlace, value); } } public bool ProcessElevatorMoving { get { return _processElevatorMoving; } set { SetProperty(ref _processElevatorMoving, value); } } public string ProcessBarcode { get { return _processBarcode; } set { SetProperty(ref _processBarcode, value); } } public List ProcessPositionList { get { return _processPositionList; } set { SetProperty(ref _processPositionList, value); } } public string ProcessFromSelectedItem { get { return _processFromSelectedItem; } set { SetProperty(ref _processFromSelectedItem, value); } } public string ProcessToSelectedItem { get { return _processToSelectedItem; } set { SetProperty(ref _processToSelectedItem, value); } } /// /// Process Homed状态 /// public bool ProcessTransporterIsHomed { get { return _processTransporterIsHomed; } set { SetProperty(ref _processTransporterIsHomed, value); } } #endregion #endregion #region 指令 #endregion /// /// 构造函数 /// public TransporterViewModel() { LoaderPositionList = new List(); ProcessPositionList = new List(); } /// /// 加载数据 /// public void LoadData(string system) { LoadLayout(); LoadLoaderTransferPositionList(); LoadProcessTransferPositionList(); if (_timer == null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(200); _timer.Tick += Timer_Tick; ; } InitialKeys(); _timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { if (_rtDataKeys.Count != 0) { _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys); if (_rtDataValueDic != null) { LoaderTransporterData = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.{TRANSPORTER_DATA}"); LoaderGantryMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_SWITCH_ON}"); LoaderGantryHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_HOMED}"); LoaderElevatorMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_SWITCH_ON}"); LoaderElevatorHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_HOMED}"); LoaderGantryMoving = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_MOVING}"); LoaderElevatorMoving = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_MOVING}"); LoaderTransporterIsHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.{IS_HOMED}"); LoaderBarcode = CommonFunction.GetValue(_rtDataValueDic, $"{LoaderBarcodeReaderDeviceName}.BarcodeValue"); ProcessTransporterData = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.{TRANSPORTER_DATA}"); ProcessGantryMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_SWITCH_ON}"); ProcessGantryHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_HOMED}"); ProcessElevatorMotorOn = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_SWITCH_ON}"); ProcessElevatorHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_HOMED}"); ProcessGantryMoving = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_MOVING}"); ProcessElevatorMoving = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_MOVING}"); ProcessTransporterIsHomed = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.{IS_HOMED}"); ProcessBarcode = CommonFunction.GetValue(_rtDataValueDic, $"{ProcessBarcodeReaderDeviceName}.BarcodeValue"); string loaderElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.CurrentStation"), $"{ModuleName.Transporter2}.Elevator"); LoaderElevatorIsInUpPlace = "UP".Equals(loaderElevatorStation) ? true : false; string processElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.CurrentStation"), $"{ModuleName.Transporter1}.Elevator"); ProcessElevatorIsInUpPlace = "UP".Equals(processElevatorStation) ? true : false; } } } /// /// 隐藏 /// public void Hide() { if (_timer != null) { _timer.Stop(); } } /// /// 加载Layout /// private void LoadLayout() { _rtDataKeys.Clear(); _rtDataKeys.Add("System.Layout"); _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys); if (_rtDataValueDic != null) { _processLayout = CommonFunction.GetValue(_rtDataValueDic, "System.Layout"); } } /// /// 加载Loader Transfer位置集合 /// private void LoadLoaderTransferPositionList() { int startCellId = (int)QueryDataClient.Instance.Service.GetConfig($"Transporter.{ModuleName.Transporter2}.StartCellId"); int endCellId = (int)QueryDataClient.Instance.Service.GetConfig($"Transporter.{ModuleName.Transporter2}.EndCellId"); if (_processLayout != null && LoaderPositionList.Count == 0) { List lst=GetCellItemsByRange(startCellId, endCellId,_processLayout.Items); LoaderPositionList.AddRange(lst); } } /// /// 加载Process Transfer位置集合 /// private void LoadProcessTransferPositionList() { int startCellId = (int)QueryDataClient.Instance.Service.GetConfig($"Transporter.{ModuleName.Transporter1}.StartCellId"); int endCellId = (int)QueryDataClient.Instance.Service.GetConfig($"Transporter.{ModuleName.Transporter1}.EndCellId"); if (_processLayout != null && ProcessPositionList.Count == 0) { List lst = GetCellItemsByRange(startCellId, endCellId, _processLayout.Items); ProcessPositionList.AddRange(lst); } } /// /// 获取指定范围的单元项集合 /// /// /// /// /// private List GetCellItemsByRange(int startCellId,int endCellId,List items) { List lst = new List(); foreach(ProcessLayoutCellItem item in items) { if(item.CellId>=startCellId&&item.CellId<=endCellId) { if (!string.IsNullOrEmpty(item.ModuleName)) { lst.Add(item.ModuleName); } } } return lst; } /// /// 初始化Keys /// private void InitialKeys() { _rtDataKeys.Clear(); List lst = new List(); lst.Add($"{ModuleName.Transporter1}.BarcodeReader"); lst.Add($"{ModuleName.Transporter2}.BarcodeReader"); _rtDataValueDic = QueryDataClient.Instance.Service.PollData(lst); if (_rtDataValueDic != null) { LoaderBarcodeReaderDeviceName = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter2}.BarcodeReader"); ProcessBarcodeReaderDeviceName = CommonFunction.GetValue(_rtDataValueDic, $"{ModuleName.Transporter1}.BarcodeReader"); if (!string.IsNullOrEmpty(LoaderBarcodeReaderDeviceName)) { _rtDataKeys.Add($"{LoaderBarcodeReaderDeviceName}.BarcodeValue"); } if (!string.IsNullOrEmpty(ProcessBarcodeReaderDeviceName)) { _rtDataKeys.Add($"{ProcessBarcodeReaderDeviceName}.BarcodeValue"); } } _rtDataKeys.Add($"{ModuleName.Transporter1}.{TRANSPORTER_DATA}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Gantry.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.CurrentStation"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Gantry.{IS_SWITCH_ON}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{IS_SWITCH_ON}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Gantry.{IS_MOVING}"); _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{IS_MOVING}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.{TRANSPORTER_DATA}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Gantry.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.{IS_HOMED}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Gantry.{IS_SWITCH_ON}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.{IS_SWITCH_ON}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.CurrentStation"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Gantry.{IS_MOVING}"); _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.{IS_MOVING}"); } } }