| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Threading;using System.Windows;using System.Windows.Threading;using Aitex.Core.RT.Log;using Aitex.Core.Util;using MECF.Framework.Common.DataCenter;using RTDefine = Aitex.Core.Common; namespace MECF.Framework.UI.Client.ClientBase{    public class ModuleDataMonitor    {        public Dictionary<string, ModuleInfo> _mapWaferDataModule = new Dictionary<string, ModuleInfo>();        public List<string> _lstWaferDataName = new List<string>();        private PeriodicJob _monitorThread;        public ModuleDataMonitor()        {            foreach (var moduleInfo in ModuleManager.ModuleInfos)            {                if (!string.IsNullOrEmpty(moduleInfo.Value.WaferDataName))                {                    _lstWaferDataName.Add(moduleInfo.Value.WaferDataName);                    _mapWaferDataModule[moduleInfo.Value.WaferDataName] = moduleInfo.Value;                }            }            _monitorThread = new PeriodicJob(500, OnTimer, "Monitor Module Data Thread", true);        }        private bool OnTimer()        {            try            {                Dictionary<string, object> data  = QueryDataClient.Instance.Service.PollData(_lstWaferDataName);                if (data != null && Application.Current != null)                {                    Application.Current.Dispatcher.Invoke(new Action(() =>                    {                        foreach (var waferData in data)                        {                            if (!_mapWaferDataModule.ContainsKey(waferData.Key))                                continue;                            RTDefine.WaferInfo[] wafers = waferData.Value as RTDefine.WaferInfo[];                            if (wafers == null)                                continue;                            ModuleInfo info = _mapWaferDataModule[waferData.Key];                            if (info.WaferManager.Wafers.Count == 0)                            {                                for (int i = 0; i < wafers.Length; i++)                                {                                    info.WaferManager.Wafers.Add(WaferInfoConverter(wafers[i], info.WaferModuleID, i));                                }                                if (info.IsWaferReverseDisplay)                                {                                     info.WaferManager.Wafers = new ObservableCollection<WaferInfo>(info.WaferManager.Wafers.Reverse());                                }                                continue;                            }                            if (wafers.Length == info.WaferManager.Wafers.Count)                            {                                int index;                                for (int i = 0; i < wafers.Length; i++)                                {                                    if (info.IsWaferReverseDisplay)                                        index = wafers.Length - i - 1;                                    else                                        index = i;                                    var convertedWafer = WaferInfoConverter(wafers[index], info.WaferModuleID, index);                                    info.WaferManager.Wafers[i].WaferStatus = convertedWafer.WaferStatus;                                    info.WaferManager.Wafers[i].WaferID = convertedWafer.WaferID;                                    info.WaferManager.Wafers[i].SourceName = convertedWafer.SourceName;                                    info.WaferManager.Wafers[i].WaferType = convertedWafer.WaferType;                                    info.WaferManager.Wafers[i].UseCount = convertedWafer.UseCount;                                    info.WaferManager.Wafers[i].UseTime = convertedWafer.UseTime;                                    info.WaferManager.Wafers[i].UseThick = convertedWafer.UseThick;                                    info.WaferManager.Wafers[i].Thick = convertedWafer.Thick;                                    info.WaferManager.Wafers[i].LotId = convertedWafer.LotId;                                    info.WaferManager.Wafers[i].ProcessJobID = convertedWafer.ProcessJobID;                                }                            }                        }                    }));                }            }            catch (Exception ex)            {                LOG.Error(ex.Message);            }            return true;        }        private WaferInfo WaferInfoConverter(RTDefine.WaferInfo awafer, string modid, int slotid)        {            WaferInfo wafer = new WaferInfo();            wafer.ModuleID = modid;            wafer.SlotID = slotid;            wafer.SlotIndex = slotid + 1;            wafer.WaferID = awafer.WaferID;            wafer.SourceName = awafer.WaferOrigin;            wafer.WaferStatus = WaferStatusConverter(awafer);            wafer.WaferType = awafer.WaferType;            wafer.UseCount = awafer.UseCount;            wafer.UseThick = awafer.UseThick;            wafer.Thick = awafer.Thick;            wafer.UseTime = awafer.UseTime;            wafer.LotId = awafer.LotId;            wafer.ProcessJobID = awafer.ProcessJobID;            return wafer;        }        //0: no wafer        //1:light blue  == idle no pj        //2:blue    = idle with pj        //3:cyan      = in process        //4:green = complete        //5:error  = error        //6:dummy           //7:warning  = has error        //8:partial processed        //9:abort        private int WaferStatusConverter(RTDefine.WaferInfo awafer)        {            if (awafer.Status == RTDefine.WaferStatus.Empty)                return 0;            if (awafer.Status == RTDefine.WaferStatus.Normal)            {                switch (awafer.ProcessState)                {                    case RTDefine.EnumWaferProcessStatus.InProcess: return 3;                    case RTDefine.EnumWaferProcessStatus.Completed: return awafer.HasError ? 5 :(awafer.HasWarning?7:4);                    case RTDefine.EnumWaferProcessStatus.Failed: return 5;                    case RTDefine.EnumWaferProcessStatus.Wait: return 3;                    case RTDefine.EnumWaferProcessStatus.Idle: return awafer.ProcessJob == null ? 1 : 2;                    case RTDefine.EnumWaferProcessStatus.Abort: return 9;                }            }            if (awafer.Status == RTDefine.WaferStatus.Dummy)            {                return 6;            }            return 5;        }     } }
 |