123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- 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集合
- /// </summary>
- private List<string> _rtDataKeys = new List<string>();
- /// <summary>
- /// rt查询key数值字典
- /// </summary>
- private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();
- /// <summary>
- /// 定时器
- /// </summary>
- 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<string> _loaderPositionList;
- private string _loaderFromSelectedItem;
- private string _loaderToSelectedItem;
- /// <summary>
- /// 模块Homed状态
- /// </summary>
- 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<string> _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<string> 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); } }
- /// <summary>
- /// Loader Homed状态
- /// </summary>
- 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<string> 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); } }
- /// <summary>
- /// Process Homed状态
- /// </summary>
- public bool ProcessTransporterIsHomed { get { return _processTransporterIsHomed; } set { SetProperty(ref _processTransporterIsHomed, value); } }
- #endregion
- #endregion
- #region 指令
- #endregion
- /// <summary>
- /// 构造函数
- /// </summary>
- public TransporterViewModel()
- {
- LoaderPositionList = new List<string>();
- ProcessPositionList = new List<string>();
- }
- /// <summary>
- /// 加载数据
- /// </summary>
- 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<TransporterData>(_rtDataValueDic, $"{ModuleName.Transporter2}.{TRANSPORTER_DATA}");
- LoaderGantryMotorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_SWITCH_ON}");
- LoaderGantryHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_HOMED}");
- LoaderElevatorMotorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_SWITCH_ON}");
- LoaderElevatorHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_HOMED}");
- LoaderGantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Gantry.{IS_MOVING}");
- LoaderElevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_MOVING}");
- LoaderTransporterIsHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.{IS_HOMED}");
- LoaderBarcode = CommonFunction.GetValue<string>(_rtDataValueDic, $"{LoaderBarcodeReaderDeviceName}.BarcodeValue");
- ProcessTransporterData = CommonFunction.GetValue<TransporterData>(_rtDataValueDic, $"{ModuleName.Transporter1}.{TRANSPORTER_DATA}");
- ProcessGantryMotorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_SWITCH_ON}");
- ProcessGantryHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_HOMED}");
- ProcessElevatorMotorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_SWITCH_ON}");
- ProcessElevatorHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_HOMED}");
- ProcessGantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_MOVING}");
- ProcessElevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_MOVING}");
- ProcessTransporterIsHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.{IS_HOMED}");
- ProcessBarcode = CommonFunction.GetValue<string>(_rtDataValueDic, $"{ProcessBarcodeReaderDeviceName}.BarcodeValue");
- string loaderElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.CurrentStation"), $"{ModuleName.Transporter2}.Elevator");
- LoaderElevatorIsInUpPlace = "UP".Equals(loaderElevatorStation) ? true : false;
- string processElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.CurrentStation"), $"{ModuleName.Transporter1}.Elevator");
- ProcessElevatorIsInUpPlace = "UP".Equals(processElevatorStation) ? true : false;
- }
- }
- }
- /// <summary>
- /// 隐藏
- /// </summary>
- public void Hide()
- {
- if (_timer != null)
- {
- _timer.Stop();
- }
- }
- /// <summary>
- /// 加载Layout
- /// </summary>
- private void LoadLayout()
- {
- _rtDataKeys.Clear();
- _rtDataKeys.Add("System.Layout");
- _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
- if (_rtDataValueDic != null)
- {
- _processLayout = CommonFunction.GetValue<ProcessLayout>(_rtDataValueDic, "System.Layout");
- }
- }
- /// <summary>
- /// 加载Loader Transfer位置集合
- /// </summary>
- 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<string> lst=GetCellItemsByRange(startCellId, endCellId,_processLayout.Items);
- LoaderPositionList.AddRange(lst);
- }
- }
- /// <summary>
- /// 加载Process Transfer位置集合
- /// </summary>
- 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<string> lst = GetCellItemsByRange(startCellId, endCellId, _processLayout.Items);
- ProcessPositionList.AddRange(lst);
- }
- }
- /// <summary>
- /// 获取指定范围的单元项集合
- /// </summary>
- /// <param name="startCellId"></param>
- /// <param name="endCellId"></param>
- /// <param name="items"></param>
- /// <returns></returns>
- private List<string> GetCellItemsByRange(int startCellId,int endCellId,List<ProcessLayoutCellItem> items)
- {
- List<string> lst = new List<string>();
- foreach(ProcessLayoutCellItem item in items)
- {
- if(item.CellId>=startCellId&&item.CellId<=endCellId)
- {
- if (!string.IsNullOrEmpty(item.ModuleName))
- {
- lst.Add(item.ModuleName);
- }
- }
- }
- return lst;
- }
- /// <summary>
- /// 初始化Keys
- /// </summary>
- private void InitialKeys()
- {
- _rtDataKeys.Clear();
- List<string> lst = new List<string>();
- lst.Add($"{ModuleName.Transporter1}.BarcodeReader");
- lst.Add($"{ModuleName.Transporter2}.BarcodeReader");
- _rtDataValueDic = QueryDataClient.Instance.Service.PollData(lst);
- if (_rtDataValueDic != null)
- {
- LoaderBarcodeReaderDeviceName = CommonFunction.GetValue<string>(_rtDataValueDic, $"{ModuleName.Transporter2}.BarcodeReader");
- ProcessBarcodeReaderDeviceName = CommonFunction.GetValue<string>(_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}");
- }
- }
- }
|