| 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;
 
-         }
 
-  
 
-     }
 
-  
 
- }
 
 
  |