SchedulerModule.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. using MECF.Framework.Common.Equipment;
  2. using MECF.Framework.Common.SubstrateTrackings;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Aitex.Core.RT.Device;
  9. using Aitex.Core.RT.Event;
  10. using Aitex.Core.RT.Log;
  11. using Aitex.Sorter.Common;
  12. using MECF.Framework.Common.Schedulers;
  13. using Aitex.Core.Common;
  14. using CyberX8_Core;
  15. using Aitex.Core.RT.Fsm;
  16. namespace CyberX8_RT.Schedulers
  17. {
  18. public class WaferMoveArgs : EventArgs
  19. {
  20. public ModuleName SrcModule
  21. {
  22. get; set;
  23. }
  24. public int SrcSlot
  25. {
  26. get; set;
  27. }
  28. public ModuleName DstModule
  29. {
  30. get; set;
  31. }
  32. public int DstSlot
  33. {
  34. get; set;
  35. }
  36. public WaferMoveArgs(ModuleName sourceModule, int sourceSlot, ModuleName dstModule, int dstSlot)
  37. {
  38. SrcModule = sourceModule;
  39. SrcSlot = sourceSlot;
  40. DstModule = dstModule;
  41. DstSlot = dstSlot;
  42. }
  43. }
  44. public class SchedulerModule
  45. {
  46. public enum TaskType
  47. {
  48. None,
  49. PrepareTransfer,
  50. Pick,
  51. Place,
  52. PickAndPlace,
  53. PostTransfer,
  54. Preprocess,
  55. Process,
  56. PostProcess,
  57. IdlePurgeProcess,
  58. IdleCleanProcess,
  59. PreJobProcess,
  60. CompleteJobProcess,
  61. OpenCover,
  62. CloseCover,
  63. Load,
  64. Unload,
  65. Align,
  66. TransferTarget,
  67. Cooling,
  68. Heating,
  69. Map,
  70. Goto,
  71. Flip,
  72. }
  73. public ModuleName Module
  74. {
  75. get { return ModuleHelper.Converter(_module); }
  76. }
  77. public virtual bool IsAvailable { get; }
  78. public virtual bool IsOnline { get; }
  79. public virtual bool IsIdle { get; }
  80. public virtual bool IsError { get; private set; }
  81. public int InTransferSlot
  82. {
  83. get
  84. {
  85. return _inTransferSlot;
  86. }
  87. }
  88. protected string _module;
  89. protected TaskType _task = TaskType.None;
  90. protected EnumTransferType _inTransferType;
  91. protected int _inTransferSlot;
  92. protected ModuleName _inProcessRobot;
  93. protected RState _state=RState.End;
  94. public Dictionary<int, long> WaferArriveTicks { get; set; }
  95. public EventHandler<WaferMoveArgs> EventWaferArrived;
  96. public EventHandler<WaferMoveArgs> EventWaferLeaved;
  97. public SchedulerModule(string module)
  98. {
  99. _module = module;
  100. WaferArriveTicks = new Dictionary<int, long>();
  101. WaferArriveTicks[3] = WaferArriveTicks[2] = WaferArriveTicks[1] = WaferArriveTicks[0] = DateTime.Now.Ticks;
  102. }
  103. protected void LogTaskStart(TaskType cmd, string message)
  104. {
  105. LOG.Write(eEvent.EV_SCHEDULER, ModuleName.System, $"Task start:{_module}, {cmd}, {message}");
  106. }
  107. protected void LogTaskDone(TaskType cmd, string message)
  108. {
  109. LOG.Write(eEvent.EV_SCHEDULER, ModuleName.System, $"Task done:{_module}, {cmd}, {message}");
  110. }
  111. public virtual void ResetTask()
  112. {
  113. _task = TaskType.None;
  114. _state=RState.End;
  115. }
  116. public virtual bool IsReadyForPick(ModuleName robot, int slot, Hand blade)
  117. {
  118. return true;
  119. }
  120. public virtual bool IsReadyForPlace(ModuleName robot, int slot, Hand blade)
  121. {
  122. return true;
  123. }
  124. public virtual bool Align(float time)
  125. {
  126. return true;
  127. }
  128. /// <summary>
  129. /// 检验前置条件
  130. /// </summary>
  131. /// <param name="sequenceIndex"></param>
  132. /// <param name="parameter"></param>
  133. /// <returns></returns>
  134. public virtual bool CheckPrecondition(List<SchedulerSequence> schedulerSequences,int sequenceIndex,object parameter,string materialId,ref string reason)
  135. {
  136. return true;
  137. }
  138. /// <summary>
  139. /// 执行
  140. /// </summary>
  141. /// <param name="parameter"></param>
  142. /// <returns></returns>
  143. public virtual bool RunProcess(object recipe,object parameter,List<SchedulerSyncModuleMessage> syncMessages)
  144. {
  145. return true;
  146. }
  147. /// <summary>
  148. /// 同步触发另外实体的动作
  149. /// </summary>
  150. /// <param name="moduleEntities"></param>
  151. protected virtual void SynchorinzeModuleMessages(List<SchedulerSyncModuleMessage> moduleMessages)
  152. {
  153. if (moduleMessages == null)
  154. {
  155. return;
  156. }
  157. foreach (SchedulerSyncModuleMessage moduleEntity in moduleMessages)
  158. {
  159. IModuleEntity entity = moduleEntity.ModuleEntity;
  160. entity.Invoke(moduleEntity.ModuleMsg);
  161. }
  162. }
  163. /// <summary>
  164. /// 监控执行
  165. /// </summary>
  166. /// <returns></returns>
  167. public virtual bool MonitorProcess(SchedulerSequence schedulerSequence, bool hasMatchWafer)
  168. {
  169. return true;
  170. }
  171. /// <summary>
  172. /// 获取可用资源
  173. /// </summary>
  174. /// <returns></returns>
  175. public virtual bool GetAvaibleMaterial(int sequenceIndex,object parameter)
  176. {
  177. return true;
  178. }
  179. }
  180. }