VceEntity.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.Utilities;
  3. using MECF.Framework.Common.Equipment;
  4. using MECF.Framework.RT.ModuleLibrary.VceModules;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Venus_RT.Devices.VCE;
  11. namespace Venus_RT.Modules.VCE
  12. {
  13. #region 状态和消息
  14. public enum VceSTATE
  15. {
  16. Init,//初始化
  17. Idle,//空闲
  18. Error,//错误
  19. Homing,//home操作 对应HM
  20. DoorOpenning,//开门操作 对应DC
  21. DoorClosing,//关门操作 对应DO
  22. Loading,//取cassette操作 包括开门关门 对应LOAD,
  23. UnLoading,
  24. Mapping,//扫片 对应MP 包括三种格式 hex binary 智能(只有智能模式可以判断复杂情况)
  25. Goting,//指定槽到达窗口 对应 GC
  26. Resetting,//重置
  27. Unknown
  28. }
  29. public enum VceMSG
  30. {
  31. Home,
  32. Error,
  33. DoorOpen,
  34. DoorClose,
  35. Map,
  36. Load,
  37. UnLoad,
  38. Reset,
  39. Goto,
  40. Abort
  41. }
  42. #endregion
  43. public class VceEntity : Entity, IEntity
  44. {
  45. private ModuleName _modulename;
  46. private readonly VceModuleBase _vce;
  47. public VceEntity(ModuleName moduleName)
  48. {
  49. _modulename = moduleName;
  50. _vce = new HongHuVce(25, moduleName);
  51. InitFsmMap();
  52. }
  53. /// <summary>
  54. /// 定义状态机的迁移表
  55. /// </summary>
  56. private void InitFsmMap()
  57. {
  58. fsm = new StateMachine<VceEntity>(_modulename.ToString(), (int)VceSTATE.Unknown, 50);
  59. fsm.EnableRepeatedMsg(true);
  60. AnyStateTransition(VceMSG.Error, fnError, VceSTATE.Error);
  61. AnyStateTransition(VceMSG.Abort, fnAbort, VceSTATE.Idle);
  62. //HOME init->homing idle->homing
  63. Transition(VceSTATE.Init, VceMSG.Home, fnStartHome, VceSTATE.Homing);
  64. Transition(VceSTATE.Idle, VceMSG.Home, fnStartHome, VceSTATE.Homing);
  65. Transition(VceSTATE.Error, VceMSG.Home, fnStartHome, VceSTATE.Homing);
  66. Transition(VceSTATE.Homing, FSM_MSG.TIMER, fnHomeTimeout, VceSTATE.Idle);
  67. //Open Door 开门
  68. Transition(VceSTATE.Idle, VceMSG.DoorOpen, fnStartOpenDoor, VceSTATE.DoorOpenning);
  69. Transition(VceSTATE.DoorOpenning, FSM_MSG.TIMER, fnOpenDoorTimeout, VceSTATE.Idle);
  70. //Close Door 关门
  71. Transition(VceSTATE.Idle, VceMSG.DoorClose, fnStartCloseDoor, VceSTATE.DoorClosing);
  72. Transition(VceSTATE.DoorClosing, FSM_MSG.TIMER, fnCloseDoorTimeout, VceSTATE.Idle);
  73. //Map 扫片
  74. Transition(VceSTATE.Idle, VceMSG.Map, fnStartMapping, VceSTATE.Mapping);
  75. Transition(VceSTATE.Mapping, FSM_MSG.TIMER, fnMappingTimeout, VceSTATE.Idle);
  76. //Load 取cassette
  77. Transition(VceSTATE.Idle, VceMSG.Load, fnStartLoading, VceSTATE.Loading);
  78. Transition(VceSTATE.Loading, FSM_MSG.TIMER, fnLoadingTimeout, VceSTATE.Idle);
  79. //UnLoad 放cassette
  80. Transition(VceSTATE.Idle, VceMSG.UnLoad, fnStartUnLoading, VceSTATE.UnLoading);
  81. Transition(VceSTATE.UnLoading, FSM_MSG.TIMER, fnUnLoadingTimeout, VceSTATE.Idle);
  82. //Goto 指定槽对准窗口
  83. Transition(VceSTATE.Idle, VceMSG.Goto, fnStartGoto, VceSTATE.Goting);
  84. Transition(VceSTATE.Goting, FSM_MSG.TIMER, fnGotingTimeout, VceSTATE.Idle);
  85. //
  86. EnumLoop<VceSTATE>.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });
  87. EnumLoop<VceMSG>.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });
  88. Running = true;
  89. }
  90. //急停
  91. private bool fnAbort(object[] param)
  92. {
  93. throw new NotImplementedException();
  94. }
  95. //升降到槽位
  96. private bool fnStartGoto(object[] param)
  97. {
  98. return _vce.Goto(Convert.ToInt32(param[0]));
  99. }
  100. private bool fnGotingTimeout(object[] param)
  101. {
  102. throw new NotImplementedException();
  103. }
  104. private bool fnError(object[] param)
  105. {
  106. throw new NotImplementedException();
  107. }
  108. private bool fnStartHome(object[] param)
  109. {
  110. return _vce.HomeALL();
  111. }
  112. private bool fnHomeTimeout(object[] param)
  113. {
  114. throw new NotImplementedException();
  115. }
  116. private bool fnStartOpenDoor(object[] param)
  117. {
  118. return _vce.OpenDoor();
  119. }
  120. private bool fnOpenDoorTimeout(object[] param)
  121. {
  122. throw new NotImplementedException();
  123. }
  124. private bool fnStartCloseDoor(object[] param)
  125. {
  126. return _vce.CloseDoor();
  127. }
  128. private bool fnCloseDoorTimeout(object[] param)
  129. {
  130. throw new NotImplementedException();
  131. }
  132. private bool fnStartMapping(object[] param)
  133. {
  134. return _vce.Map();
  135. }
  136. private bool fnMappingTimeout(object[] param)
  137. {
  138. throw new NotImplementedException();
  139. }
  140. private bool fnStartLoading(object[] param)
  141. {
  142. return _vce.Load();
  143. }
  144. private bool fnLoadingTimeout(object[] param)
  145. {
  146. throw new NotImplementedException();
  147. }
  148. private bool fnStartUnLoading(object[] param)
  149. {
  150. return _vce.UnLoad();
  151. }
  152. private bool fnUnLoadingTimeout(object[] param)
  153. {
  154. throw new NotImplementedException();
  155. }
  156. public bool Check(int msg, out string reason, params object[] args)
  157. {
  158. throw new NotImplementedException();
  159. }
  160. }
  161. }