CarrierConfigurationManager.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. using Aitex.Core.RT.Device;
  2. using Aitex.Core.Util;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using MECF.Framework.Common.CommonData.SorterDefines;
  9. using Aitex.Core.RT.SCCore;
  10. using Aitex.Core.Common;
  11. using Aitex.Core.RT.DataCenter;
  12. using Aitex.Core.RT.OperationCenter;
  13. using Aitex.Core.RT.Event;
  14. namespace MECF.Framework.Common.SubstrateTrackings
  15. {
  16. public class CarrierConfigurationManager : Singleton<CarrierConfigurationManager>
  17. {
  18. public CarrierConfigurationManager()
  19. {
  20. }
  21. private CarrierConfigurationItem[] _lstCarriers
  22. {
  23. get
  24. {
  25. List<CarrierConfigurationItem> lstitems = new List<CarrierConfigurationItem>();
  26. for (int i = 0; i < _carrierCount; i++)
  27. {
  28. var item = GetCarrierConfigItem(i);
  29. lstitems.Add(item);
  30. }
  31. return lstitems.ToArray();
  32. }
  33. }
  34. private int _carrierCount;
  35. public void Initialize(int count=16)
  36. {
  37. _carrierCount = count;
  38. DATA.Subscribe("CarrierConfigurationList", () => _lstCarriers);
  39. OP.Subscribe($"SetCarrierConfigurationItem", (string cmd, object[] param) =>
  40. {
  41. CarrierConfigurationItem item = new CarrierConfigurationItem()
  42. {
  43. Index = (int)param[0],
  44. CarrierName = (string)param[1],
  45. CarrierWaferSize = (int)param[2],
  46. CarrierSlotsNumber = (int)param[3],
  47. IsInfoPadAOn = (bool)param[4],
  48. IsInfoPadBOn = (bool)param[5],
  49. IsInfoPadCOn = (bool)param[6],
  50. IsInfoPadDOn = (bool)param[7],
  51. LP1StationName = param[8]==null ? "" :param[8].ToString(),
  52. LP2StationName = param[9] == null ? "" : param[9].ToString(),
  53. LP3StationName = param[10] == null ? "" : param[10].ToString(),
  54. LP4StationName = param[11] == null ? "" : param[11].ToString(),
  55. LP5StationName = param[12] == null ? "" : param[12].ToString(),
  56. LP6StationName = param[13] == null ? "" : param[13].ToString(),
  57. LP7StationName = param[14] == null ? "" : param[14].ToString(),
  58. LP8StationName = param[15] == null ? "" : param[15].ToString(),
  59. GetOffset = param[16] == null ? "" : param[16].ToString(),
  60. PutOffset = param[17] == null ? "" : param[17].ToString(),
  61. CIDReaderIndex = (int)param[18],
  62. CarrierFosbMode = (bool)param[19],
  63. NeedCheckIronDoorCarrier = (bool)param[20],
  64. KeepClampedAfterUnloadCarrier = (bool)param[21],
  65. DisableEvenSlot = (bool)param[22],
  66. DisableOddSlot = (bool)param[23],
  67. ThicknessLowLimit = (int)param[24],
  68. ThicknessHighLimit = (int)param[25],
  69. SlotPositionBaseLine = (int)param[26],
  70. SlotPitch = (int)param[27],
  71. WaferCenterDeviationLimit = (int)param[28],
  72. EnableDualTransfer = (bool)param[29],
  73. ForbidAccessAboveWafer = param.Length > 30 ? (bool)param[30] : true,
  74. MappedByRobot = param.Length > 31 ? (bool)param[31] : false,
  75. EnableCarrier = param.Length > 32 ? (bool)param[32] : true,
  76. LPRecipeNumber = param.Length > 33 ? (int)param[33] : 0,
  77. AccessPermitToCarrierIndex = param.Length > 34 ? (param[34] == null ? "" : param[34].ToString()) : "",
  78. }
  79. ;
  80. SetCarrierConfigItem(item);
  81. EV.PostInfoLog("System", $"Complete set carrier configuration item");
  82. return true;
  83. });
  84. }
  85. public CarrierConfigurationItem GetCarrierConfigItem(int index)
  86. {
  87. CarrierConfigurationItem item = new CarrierConfigurationItem()
  88. {
  89. Index = index,
  90. IsInfoPadAOn = (index & 8) == 8,
  91. IsInfoPadBOn = (index & 4) == 4,
  92. IsInfoPadCOn = (index & 2) == 2,
  93. IsInfoPadDOn = (index & 1) == 1,
  94. };
  95. if(SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierName"))
  96. item.CarrierName = SC.GetStringValue($"CarrierInfo.Carrier{index}.CarrierName");
  97. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.GetOffset"))
  98. item.GetOffset = SC.GetStringValue($"CarrierInfo.Carrier{index}.GetOffset");
  99. if(SC.ContainsItem($"CarrierInfo.Carrier{index}.PutOffset"))
  100. item.PutOffset = SC.GetStringValue($"CarrierInfo.Carrier{index}.PutOffset");
  101. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CIDReaderIndex"))
  102. item.CIDReaderIndex = SC.GetValue<int>($"CarrierInfo.Carrier{index}.CIDReaderIndex");
  103. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierFosbMode"))
  104. item.CarrierFosbMode = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.CarrierFosbMode");
  105. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierWaferSize"))
  106. item.CarrierWaferSize = SC.GetValue<int>($"CarrierInfo.Carrier{index}.CarrierWaferSize");
  107. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.NeedCheckIronDoorCarrier"))
  108. item.NeedCheckIronDoorCarrier = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.NeedCheckIronDoorCarrier");
  109. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.KeepClampedAfterUnloadCarrier"))
  110. item.KeepClampedAfterUnloadCarrier = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.KeepClampedAfterUnloadCarrier");
  111. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.DisableEvenSlot"))
  112. item.DisableEvenSlot = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.DisableEvenSlot");
  113. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.DisableOddSlot"))
  114. item.DisableOddSlot = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.DisableOddSlot");
  115. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierSlotsNumber"))
  116. item.CarrierSlotsNumber = SC.GetValue<int>($"CarrierInfo.Carrier{index}.CarrierSlotsNumber");
  117. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ThicknessLowLimit"))
  118. item.ThicknessLowLimit = SC.GetValue<int>($"CarrierInfo.Carrier{index}.ThicknessLowLimit");
  119. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ThicknessHighLimit"))
  120. item.ThicknessHighLimit = SC.GetValue<int>($"CarrierInfo.Carrier{index}.ThicknessHighLimit");
  121. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.SlotPositionBaseLine"))
  122. item.SlotPositionBaseLine = SC.GetValue<int>($"CarrierInfo.Carrier{index}.SlotPositionBaseLine");
  123. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.SlotPitch"))
  124. item.SlotPitch = SC.GetValue<int>($"CarrierInfo.Carrier{index}.SlotPitch");
  125. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.WaferCenterDeviationLimit"))
  126. item.WaferCenterDeviationLimit = SC.GetValue<int>($"CarrierInfo.Carrier{index}.WaferCenterDeviationLimit");
  127. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.EnableDualTransfer"))
  128. item.EnableDualTransfer = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.EnableDualTransfer");
  129. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ForbidAccessAboveWafer"))
  130. item.ForbidAccessAboveWafer = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.ForbidAccessAboveWafer");
  131. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP1Station"))
  132. item.LP1StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP1Station");
  133. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP2Station"))
  134. item.LP2StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP2Station");
  135. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP3Station"))
  136. item.LP3StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP3Station");
  137. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP4Station"))
  138. item.LP4StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP4Station");
  139. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP5Station"))
  140. item.LP5StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP5Station");
  141. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP6Station"))
  142. item.LP6StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP6Station");
  143. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP7Station"))
  144. item.LP7StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP7Station");
  145. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP8Station"))
  146. item.LP8StationName = SC.GetStringValue($"CarrierInfo.Carrier{index}.LP8Station");
  147. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.MappedByRobot"))
  148. item.MappedByRobot = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.MappedByRobot");
  149. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.EnableCarrier"))
  150. item.EnableCarrier = SC.GetValue<bool>($"CarrierInfo.Carrier{index}.EnableCarrier");
  151. else
  152. item.EnableCarrier = true;
  153. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LPRecipeNumber"))
  154. item.LPRecipeNumber = SC.GetValue<int>($"CarrierInfo.Carrier{index}.LPRecipeNumber");
  155. List<int> accessP = new List<int>();
  156. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.AccessPermitToCarrierIndex"))
  157. {
  158. item.AccessPermitToCarrierIndex = SC.GetStringValue($"CarrierInfo.Carrier{index}.AccessPermitToCarrierIndex");
  159. foreach(var strIndex in item.AccessPermitToCarrierIndex.Split(','))
  160. {
  161. if(int.TryParse(strIndex,out int nIndex))
  162. {
  163. if(!accessP.Contains(nIndex))
  164. accessP.Add(nIndex);
  165. }
  166. }
  167. item.Int_AccessPermitToCarrierIndex = accessP.ToArray();
  168. }
  169. else
  170. {
  171. item.AccessPermitToCarrierIndex = null; //Enable All
  172. for(int i=0;i<100;i++)
  173. {
  174. accessP.Add(i);
  175. }
  176. item.Int_AccessPermitToCarrierIndex = accessP.ToArray();
  177. }
  178. return item;
  179. }
  180. public bool SetCarrierConfigItem(CarrierConfigurationItem item)
  181. {
  182. int index = item.Index;
  183. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierName"))
  184. SC.SetItemValue($"CarrierInfo.Carrier{index}.CarrierName",item.CarrierName);
  185. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.GetOffset"))
  186. SC.SetItemValue($"CarrierInfo.Carrier{index}.GetOffset",item.GetOffset);
  187. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.PutOffset"))
  188. SC.SetItemValue($"CarrierInfo.Carrier{index}.PutOffset",item.PutOffset);
  189. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CIDReaderIndex"))
  190. SC.SetItemValue($"CarrierInfo.Carrier{index}.CIDReaderIndex",item.CIDReaderIndex);
  191. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierFosbMode"))
  192. SC.SetItemValue($"CarrierInfo.Carrier{index}.CarrierFosbMode",item.CarrierFosbMode);
  193. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierWaferSize"))
  194. SC.SetItemValue($"CarrierInfo.Carrier{index}.CarrierWaferSize",(int)item.CarrierWaferSize);
  195. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.NeedCheckIronDoorCarrier"))
  196. SC.SetItemValue($"CarrierInfo.Carrier{index}.NeedCheckIronDoorCarrier",item.NeedCheckIronDoorCarrier);
  197. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.KeepClampedAfterUnloadCarrier"))
  198. SC.SetItemValue($"CarrierInfo.Carrier{index}.KeepClampedAfterUnloadCarrier",item.KeepClampedAfterUnloadCarrier);
  199. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.DisableEvenSlot"))
  200. SC.SetItemValue($"CarrierInfo.Carrier{index}.DisableEvenSlot",item.DisableEvenSlot);
  201. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.DisableOddSlot"))
  202. SC.SetItemValue($"CarrierInfo.Carrier{index}.DisableOddSlot",item.DisableOddSlot);
  203. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.CarrierSlotsNumber"))
  204. SC.SetItemValue($"CarrierInfo.Carrier{index}.CarrierSlotsNumber",item.CarrierSlotsNumber);
  205. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ThicknessLowLimit"))
  206. SC.SetItemValue($"CarrierInfo.Carrier{index}.ThicknessLowLimit",item.ThicknessLowLimit);
  207. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ThicknessHighLimit"))
  208. SC.SetItemValue($"CarrierInfo.Carrier{index}.ThicknessHighLimit",item.ThicknessHighLimit);
  209. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.SlotPositionBaseLine"))
  210. SC.SetItemValue($"CarrierInfo.Carrier{index}.SlotPositionBaseLine", item.SlotPositionBaseLine) ;
  211. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.SlotPitch"))
  212. SC.SetItemValue($"CarrierInfo.Carrier{index}.SlotPitch",item.SlotPitch);
  213. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.WaferCenterDeviationLimit"))
  214. SC.SetItemValue($"CarrierInfo.Carrier{index}.WaferCenterDeviationLimit",item.WaferCenterDeviationLimit);
  215. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP1Station"))
  216. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP1Station",item.LP1StationName);
  217. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP2Station"))
  218. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP2Station", item.LP2StationName);
  219. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP3Station"))
  220. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP3Station", item.LP3StationName);
  221. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP4Station"))
  222. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP4Station", item.LP4StationName);
  223. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP5Station"))
  224. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP5Station", item.LP5StationName);
  225. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP6Station"))
  226. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP6Station", item.LP6StationName);
  227. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP7Station"))
  228. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP7Station", item.LP7StationName);
  229. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LP8Station"))
  230. SC.SetItemValue($"CarrierInfo.Carrier{index}.LP8Station", item.LP8StationName);
  231. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.EnableDualTransfer"))
  232. SC.SetItemValue($"CarrierInfo.Carrier{index}.EnableDualTransfer", item.EnableDualTransfer);
  233. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.ForbidAccessAboveWafer"))
  234. SC.SetItemValue($"CarrierInfo.Carrier{index}.ForbidAccessAboveWafer", item.ForbidAccessAboveWafer);
  235. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.MappedByRobot"))
  236. SC.SetItemValue($"CarrierInfo.Carrier{index}.MappedByRobot", item.MappedByRobot);
  237. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.EnableCarrier"))
  238. SC.SetItemValue($"CarrierInfo.Carrier{index}.EnableCarrier", item.EnableCarrier);
  239. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.LPRecipeNumber"))
  240. SC.SetItemValue($"CarrierInfo.Carrier{index}.LPRecipeNumber", item.LPRecipeNumber);
  241. if (SC.ContainsItem($"CarrierInfo.Carrier{index}.AccessPermitToCarrierIndex"))
  242. SC.SetItemValue($"CarrierInfo.Carrier{index}.AccessPermitToCarrierIndex", item.AccessPermitToCarrierIndex);
  243. return true;
  244. }
  245. }
  246. }