EfemEntityEvent.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. using System;
  2. using System.Collections.Generic;
  3. using Aitex.Core.Common;
  4. using Aitex.Core.RT.Log;
  5. using Aitex.Core.Util;
  6. using Aitex.Sorter.Common;
  7. using MECF.Framework.Common.Equipment;
  8. using MECF.Framework.Common.SubstrateTrackings;
  9. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  10. namespace Aitex.Sorter.RT.EFEMs.Servers
  11. {
  12. public class EfemModuleStatus
  13. {
  14. private bool _isInitialized;
  15. public bool IsInitialized
  16. {
  17. get
  18. {
  19. return _isInitialized;
  20. }
  21. set
  22. {
  23. _isInitialized = value;
  24. TrigInitialized.CLK = value;
  25. }
  26. }
  27. public R_TRIG TrigInitialized { get; set; }
  28. public ModuleName Module { get; set; }
  29. public EfemModuleStatus(ModuleName module)
  30. {
  31. Module = module;
  32. TrigInitialized = new R_TRIG();
  33. }
  34. }
  35. public partial class EfemEntity
  36. {
  37. public IEfemEquipment EfemDevice
  38. {
  39. get
  40. {
  41. return _efemDevice;
  42. }
  43. }
  44. private Dictionary<string, uint> _eventData = new Dictionary<string, uint>();
  45. private Dictionary<string, Tuple<uint, uint>> _sigData = new Dictionary<string, Tuple<uint, uint>>();
  46. private IEfemEquipment _efemDevice;
  47. private Dictionary<ModuleName, EfemModuleStatus> _efemModuleStatus = new Dictionary<ModuleName, EfemModuleStatus>();
  48. public void SetEfemDevice(IEfemEquipment efemDevice)
  49. {
  50. _efemDevice = efemDevice;
  51. foreach (var module in _efemDevice.GetInstallModules())
  52. {
  53. _efemModuleStatus[module] = new EfemModuleStatus(module);
  54. }
  55. }
  56. public void SendMapEvent(LoadPort lp)
  57. {
  58. if (!((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.ALL))
  59. {
  60. LOG.Write("event all disabled.");
  61. return;
  62. }
  63. if ( !((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(
  64. EfemEventType.PORT))
  65. {
  66. LOG.Write("event lp disabled.");
  67. return;
  68. }
  69. WaferInfo[] wafers = WaferManager.Instance.GetWafers(ModuleHelper.Converter(lp.Name));
  70. string slot = "";
  71. for (int i = 0; i < 25; i++)
  72. {
  73. switch (wafers[i].Status)
  74. {
  75. case WaferStatus.Empty:
  76. slot += "0";
  77. break;
  78. case WaferStatus.Normal:
  79. slot += "1";
  80. break;
  81. case WaferStatus.Crossed:
  82. slot += "3";
  83. break;
  84. case WaferStatus.Double:
  85. slot += "7";
  86. break;
  87. case WaferStatus.Unknown:
  88. slot += "8";
  89. break;
  90. case WaferStatus.Dummy:
  91. slot += "4";
  92. break;
  93. }
  94. }
  95. var slotmap = slot;
  96. if (lp.Error)
  97. {
  98. slotmap = string.Empty;
  99. }
  100. string message = string.Format("EVT:MAPDT/{0}/{1}", ModuleName2ProtocolName(ModuleHelper.Converter(lp.Name)), slotmap);
  101. SendMessage(message);
  102. }
  103. public void SetInitialize(ModuleName module, bool initialized)
  104. {
  105. if (_efemModuleStatus.ContainsKey(module))
  106. {
  107. _efemModuleStatus[module].IsInitialized = initialized;
  108. }
  109. }
  110. private string ModuleName2ProtocolName(ModuleName module)
  111. {
  112. string protocol = "System";
  113. Dictionary<ModuleName, string> map = new Dictionary<ModuleName, string>()
  114. {
  115. {ModuleName.LP1, "P1"},{ModuleName.LP2,"P2"},{ModuleName.LP3,"P3"},{ModuleName.LP4,"P4"},
  116. {ModuleName.LL1,"LLA"},{ModuleName.LL2,"LLB"},
  117. };
  118. if (map.ContainsKey(module))
  119. protocol = map[module];
  120. return protocol;
  121. }
  122. private ModuleName ProtocolName2ModuleName(string protocol)
  123. {
  124. ModuleName module = ModuleName.System;
  125. Dictionary<string, ModuleName> map = new Dictionary<string, ModuleName>()
  126. {
  127. {"P1", ModuleName.LP1},{"P2", ModuleName.LP2},{"P3", ModuleName.LP3},{"P4", ModuleName.LP4},
  128. {"LLA", ModuleName.LL1},{"LLB", ModuleName.LL2},
  129. {"SYS", ModuleName.System},
  130. };
  131. if (map.ContainsKey(protocol))
  132. module = map[protocol];
  133. return module;
  134. }
  135. private void MonitorEvent()
  136. {
  137. if (_efemDevice.IsSigStatEventMode)
  138. {
  139. MonitorSigStatEvent();
  140. return;
  141. }
  142. MonitorReportEvent();
  143. }
  144. private void MonitorSigStatEvent()
  145. {
  146. bool allEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.ALL);
  147. if (!allEnable)
  148. return;
  149. bool lpEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.PORT);
  150. bool sysEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.SYSTEM);
  151. Dictionary<string, Tuple<uint,uint>> sigDatas = _efemDevice.GetSigStatData();
  152. if (sigDatas == null)
  153. return;
  154. foreach (var sigData in sigDatas)
  155. {
  156. if (sigData.Key.StartsWith("P") && !lpEnable)
  157. continue;
  158. if (sigData.Key.StartsWith(EfemParameter.SYS) && !sysEnable)
  159. continue;
  160. ModuleName module = ProtocolName2ModuleName(sigData.Key);
  161. if (!_efemModuleStatus[module].IsInitialized)
  162. continue;
  163. if (_efemModuleStatus[module].TrigInitialized.Q)
  164. {
  165. _efemModuleStatus[module].TrigInitialized.CLK = true;
  166. _sigData.Remove(sigData.Key);
  167. continue;
  168. }
  169. if (_sigData.ContainsKey(sigData.Key)
  170. && _sigData[sigData.Key].Item1 == sigData.Value.Item1
  171. && _sigData[sigData.Key].Item2 == sigData.Value.Item2)
  172. {
  173. continue;
  174. }
  175. _sigData[sigData.Key] = sigData.Value;
  176. SendMessage($"EVT:SIGSTAT/{sigData.Key}/{_sigData[sigData.Key].Item1:X8}/{_sigData[sigData.Key].Item2:X8}");
  177. }
  178. }
  179. private void MonitorReportEvent()
  180. {
  181. bool allEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.ALL);
  182. if (!allEnable)
  183. return;
  184. bool lpEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.PORT);
  185. bool sysEnable = ((SystemServerModule)EfemServerModule.Instance.GetModule(DeviceName.System)).IsEventEnabled(EfemEventType.SYSTEM);
  186. Dictionary<string, uint> evDatas = _efemDevice.GetEventData();
  187. foreach (var evData in evDatas)
  188. {
  189. if (evData.Key.StartsWith("P") && !lpEnable)
  190. continue;
  191. if (evData.Key.StartsWith(EfemParameter.SYS) && !sysEnable)
  192. continue;
  193. if (_eventData.ContainsKey(evData.Key) && _eventData[evData.Key] ==evData.Value)
  194. continue;
  195. _eventData[evData.Key] = evData.Value;
  196. SendMessage($"EVT:{evData.Key}/{evData.Value:X8}");
  197. }
  198. }
  199. public void SendSigStatEvent(ModuleName lL1)
  200. {
  201. }
  202. }
  203. }