RobotOffsetConfig.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using Aitex.Core.RT.DataCenter;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.RT.SCCore;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Aitex.Core.RT.Device;
  13. using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase;
  14. namespace Aitex.Sorter.RT.SorterCommonFrame.Modules
  15. {
  16. public class RobotOffsetConfig : Singleton<RobotOffsetConfig>
  17. {
  18. private string[] scPickOffsets = new string[]
  19. {
  20. "CarrierInfo.Get.Offset0",
  21. "CarrierInfo.Get.Offset1",
  22. "CarrierInfo.Get.Offset2",
  23. "CarrierInfo.Get.Offset3",
  24. "CarrierInfo.Get.Offset4",
  25. "CarrierInfo.Get.Offset5",
  26. "CarrierInfo.Get.Offset6",
  27. "CarrierInfo.Get.Offset7",
  28. "CarrierInfo.Get.Offset8",
  29. "CarrierInfo.Get.Offset9",
  30. "CarrierInfo.Get.Offset10",
  31. "CarrierInfo.Get.Offset11",
  32. "CarrierInfo.Get.Offset12",
  33. "CarrierInfo.Get.Offset13",
  34. "CarrierInfo.Get.Offset14",
  35. "CarrierInfo.Get.Offset15",
  36. "CarrierInfo.Get.Offset16",
  37. "CarrierInfo.Get.Offset17",
  38. "CarrierInfo.Get.Offset18",
  39. "CarrierInfo.Get.Offset19",
  40. "CarrierInfo.Get.Offset20",
  41. "CarrierInfo.Get.Offset21",
  42. "CarrierInfo.Get.Offset22",
  43. "CarrierInfo.Get.Offset23",
  44. "CarrierInfo.Get.Offset24",
  45. "CarrierInfo.Get.Offset25",
  46. "CarrierInfo.Get.Offset26",
  47. "CarrierInfo.Get.Offset27",
  48. "CarrierInfo.Get.Offset28",
  49. "CarrierInfo.Get.Offset29",
  50. "CarrierInfo.Get.Offset30",
  51. "CarrierInfo.Get.Offset31",
  52. "CarrierInfo.Get.Offset32",
  53. "CarrierInfo.Get.Offset33",
  54. "CarrierInfo.Get.Offset34",
  55. "CarrierInfo.Get.Offset35",
  56. "CarrierInfo.Get.Offset36",
  57. "CarrierInfo.Get.Offset37",
  58. "CarrierInfo.Get.Offset38",
  59. "CarrierInfo.Get.Offset39",
  60. "CarrierInfo.Get.Offset40",
  61. "CarrierInfo.Get.Offset41",
  62. "CarrierInfo.Get.Offset42",
  63. "CarrierInfo.Get.Offset43",
  64. "CarrierInfo.Get.Offset44",
  65. "CarrierInfo.Get.Offset45",
  66. "CarrierInfo.Get.Offset46",
  67. "CarrierInfo.Get.Offset47",
  68. "CarrierInfo.Get.Offset48",
  69. "CarrierInfo.Get.Offset49",
  70. "CarrierInfo.Get.Offset50",
  71. "CarrierInfo.Get.Offset51",
  72. "CarrierInfo.Get.Offset52",
  73. "CarrierInfo.Get.Offset53",
  74. "CarrierInfo.Get.Offset54",
  75. "CarrierInfo.Get.Offset55",
  76. "CarrierInfo.Get.Offset56",
  77. "CarrierInfo.Get.Offset57",
  78. "CarrierInfo.Get.Offset58",
  79. "CarrierInfo.Get.Offset59",
  80. "CarrierInfo.Get.Offset60",
  81. "CarrierInfo.Get.Offset61",
  82. "CarrierInfo.Get.Offset62",
  83. "CarrierInfo.Get.Offset63",
  84. "CarrierInfo.Get.Offset64",
  85. "CarrierInfo.Get.Offset65",
  86. "CarrierInfo.Get.Offset66",
  87. "CarrierInfo.Get.Offset67",
  88. "CarrierInfo.Get.Offset68",
  89. "CarrierInfo.Get.Offset69",
  90. "CarrierInfo.Get.Offset70",
  91. "CarrierInfo.Get.Offset71",
  92. "CarrierInfo.Get.Offset72",
  93. "CarrierInfo.Get.Offset73",
  94. "CarrierInfo.Get.Offset74",
  95. "CarrierInfo.Get.Offset75",
  96. "CarrierInfo.Get.Offset76",
  97. "CarrierInfo.Get.Offset77",
  98. "CarrierInfo.Get.Offset78",
  99. "CarrierInfo.Get.Offset79",
  100. "CarrierInfo.Get.Offset80",
  101. "CarrierInfo.Get.Offset81",
  102. "CarrierInfo.Get.Offset82",
  103. "CarrierInfo.Get.Offset83",
  104. "CarrierInfo.Get.Offset84",
  105. "CarrierInfo.Get.Offset85",
  106. "CarrierInfo.Get.Offset86",
  107. "CarrierInfo.Get.Offset87",
  108. "CarrierInfo.Get.Offset88",
  109. "CarrierInfo.Get.Offset89",
  110. "CarrierInfo.Get.Offset90",
  111. "CarrierInfo.Get.Offset91",
  112. "CarrierInfo.Get.Offset92",
  113. "CarrierInfo.Get.Offset93",
  114. "CarrierInfo.Get.Offset94",
  115. "CarrierInfo.Get.Offset95",
  116. "CarrierInfo.Get.Offset96",
  117. "CarrierInfo.Get.Offset97",
  118. "CarrierInfo.Get.Offset98",
  119. "CarrierInfo.Get.Offset99",
  120. "CarrierInfo.Get.Offset100",
  121. };
  122. private string[] scPlaceOffsets = new string[]
  123. {
  124. "CarrierInfo.Put.Offset0",
  125. "CarrierInfo.Put.Offset1",
  126. "CarrierInfo.Put.Offset2",
  127. "CarrierInfo.Put.Offset3",
  128. "CarrierInfo.Put.Offset4",
  129. "CarrierInfo.Put.Offset5",
  130. "CarrierInfo.Put.Offset6",
  131. "CarrierInfo.Put.Offset7",
  132. "CarrierInfo.Put.Offset8",
  133. "CarrierInfo.Put.Offset9",
  134. "CarrierInfo.Put.Offset10",
  135. "CarrierInfo.Put.Offset11",
  136. "CarrierInfo.Put.Offset12",
  137. "CarrierInfo.Put.Offset13",
  138. "CarrierInfo.Put.Offset14",
  139. "CarrierInfo.Put.Offset15",
  140. "CarrierInfo.Put.Offset16",
  141. "CarrierInfo.Put.Offset17",
  142. "CarrierInfo.Put.Offset18",
  143. "CarrierInfo.Put.Offset19",
  144. "CarrierInfo.Put.Offset20",
  145. "CarrierInfo.Put.Offset21",
  146. "CarrierInfo.Put.Offset22",
  147. "CarrierInfo.Put.Offset23",
  148. "CarrierInfo.Put.Offset24",
  149. "CarrierInfo.Put.Offset25",
  150. "CarrierInfo.Put.Offset26",
  151. "CarrierInfo.Put.Offset27",
  152. "CarrierInfo.Put.Offset28",
  153. "CarrierInfo.Put.Offset29",
  154. "CarrierInfo.Put.Offset30",
  155. "CarrierInfo.Put.Offset31",
  156. "CarrierInfo.Put.Offset32",
  157. "CarrierInfo.Put.Offset33",
  158. "CarrierInfo.Put.Offset34",
  159. "CarrierInfo.Put.Offset35",
  160. "CarrierInfo.Put.Offset36",
  161. "CarrierInfo.Put.Offset37",
  162. "CarrierInfo.Put.Offset38",
  163. "CarrierInfo.Put.Offset39",
  164. "CarrierInfo.Put.Offset40",
  165. "CarrierInfo.Put.Offset41",
  166. "CarrierInfo.Put.Offset42",
  167. "CarrierInfo.Put.Offset43",
  168. "CarrierInfo.Put.Offset44",
  169. "CarrierInfo.Put.Offset45",
  170. "CarrierInfo.Put.Offset46",
  171. "CarrierInfo.Put.Offset47",
  172. "CarrierInfo.Put.Offset48",
  173. "CarrierInfo.Put.Offset49",
  174. "CarrierInfo.Put.Offset50",
  175. "CarrierInfo.Put.Offset51",
  176. "CarrierInfo.Put.Offset52",
  177. "CarrierInfo.Put.Offset53",
  178. "CarrierInfo.Put.Offset54",
  179. "CarrierInfo.Put.Offset55",
  180. "CarrierInfo.Put.Offset56",
  181. "CarrierInfo.Put.Offset57",
  182. "CarrierInfo.Put.Offset58",
  183. "CarrierInfo.Put.Offset59",
  184. "CarrierInfo.Put.Offset60",
  185. "CarrierInfo.Put.Offset61",
  186. "CarrierInfo.Put.Offset62",
  187. "CarrierInfo.Put.Offset63",
  188. "CarrierInfo.Put.Offset64",
  189. "CarrierInfo.Put.Offset65",
  190. "CarrierInfo.Put.Offset66",
  191. "CarrierInfo.Put.Offset67",
  192. "CarrierInfo.Put.Offset68",
  193. "CarrierInfo.Put.Offset69",
  194. "CarrierInfo.Put.Offset70",
  195. "CarrierInfo.Put.Offset71",
  196. "CarrierInfo.Put.Offset72",
  197. "CarrierInfo.Put.Offset73",
  198. "CarrierInfo.Put.Offset74",
  199. "CarrierInfo.Put.Offset75",
  200. "CarrierInfo.Put.Offset76",
  201. "CarrierInfo.Put.Offset77",
  202. "CarrierInfo.Put.Offset78",
  203. "CarrierInfo.Put.Offset79",
  204. "CarrierInfo.Put.Offset80",
  205. "CarrierInfo.Put.Offset81",
  206. "CarrierInfo.Put.Offset82",
  207. "CarrierInfo.Put.Offset83",
  208. "CarrierInfo.Put.Offset84",
  209. "CarrierInfo.Put.Offset85",
  210. "CarrierInfo.Put.Offset86",
  211. "CarrierInfo.Put.Offset87",
  212. "CarrierInfo.Put.Offset88",
  213. "CarrierInfo.Put.Offset89",
  214. "CarrierInfo.Put.Offset90",
  215. "CarrierInfo.Put.Offset91",
  216. "CarrierInfo.Put.Offset92",
  217. "CarrierInfo.Put.Offset93",
  218. "CarrierInfo.Put.Offset94",
  219. "CarrierInfo.Put.Offset95",
  220. "CarrierInfo.Put.Offset96",
  221. "CarrierInfo.Put.Offset97",
  222. "CarrierInfo.Put.Offset98",
  223. "CarrierInfo.Put.Offset99",
  224. "CarrierInfo.Put.Offset100",
  225. };
  226. private Dictionary<string, Tuple<int, int, int>> _offsets = new Dictionary<string, Tuple<int, int, int>>();
  227. public bool GetPickOffset(ModuleName chamber, ref int x, ref int y, ref int z, out string reason)
  228. {
  229. x = 0;
  230. y = 0;
  231. z = 0;
  232. reason = "";
  233. if (chamber == ModuleName.Aligner || chamber == ModuleName.TurnOverStation)
  234. return true;
  235. if (!ModuleHelper.IsLoadPort(chamber))
  236. return true;
  237. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(chamber.ToString());
  238. if (lp == null) return true;
  239. int offsetindex = lp.InfoPadCarrierIndex;
  240. if (offsetindex < 0 || offsetindex >= scPlaceOffsets.Length) offsetindex = 0;
  241. string scNameType = scPickOffsets[offsetindex];
  242. if(SC.ContainsItem($"CarrierInfo.Carrier{offsetindex}.GetOffset"))
  243. {
  244. scNameType = $"CarrierInfo.Carrier{offsetindex}.GetOffset";
  245. }
  246. if (!SC.ContainsItem(scNameType))
  247. {
  248. reason = $"Not found {chamber} foup type system config item";
  249. return false;
  250. }
  251. string type = SC.GetStringValue(scNameType);
  252. if (string.IsNullOrEmpty(type.Trim()))
  253. {
  254. reason = $"{chamber} foup type system config can not be empty";
  255. return false;
  256. }
  257. string[] offs = type.Split(',');
  258. if (offs.Length < 3) return false;
  259. int value;
  260. if (!int.TryParse(offs[0], out value)) return false;
  261. x = value;
  262. if (!int.TryParse(offs[1], out value)) return false;
  263. y = value;
  264. if (!int.TryParse(offs[2], out value)) return false;
  265. z = value;
  266. return true;
  267. }
  268. public bool GetPlaceOffset(ModuleName chamber, ref int x, ref int y, ref int z, out string reason)
  269. {
  270. x = 0;
  271. y = 0;
  272. z = 0;
  273. reason = "";
  274. if (chamber == ModuleName.Aligner || chamber == ModuleName.TurnOverStation)
  275. return true;
  276. var lp = DEVICE.GetDevice<LoadPortBaseDevice>(chamber.ToString());
  277. if (lp == null) return true;
  278. int offsetindex = lp.InfoPadCarrierIndex;
  279. if (offsetindex < 0 || offsetindex>= scPlaceOffsets.Length) offsetindex = 0;
  280. string scNameType = scPlaceOffsets[offsetindex];
  281. if(SC.ContainsItem($"CarrierInfo.Carrier{offsetindex}.PutOffset"))
  282. {
  283. scNameType = $"CarrierInfo.Carrier{offsetindex}.PutOffset";
  284. }
  285. if (!SC.ContainsItem(scNameType))
  286. {
  287. reason = $"Not found {chamber} foup type system config item";
  288. return false;
  289. }
  290. string type = SC.GetStringValue(scNameType);
  291. if (string.IsNullOrEmpty(type.Trim()))
  292. {
  293. reason = $"{chamber} foup type system config can not be empty";
  294. return false;
  295. }
  296. string[] offs = type.Split(',');
  297. if (offs.Length < 3) return false;
  298. int value;
  299. if (!int.TryParse(offs[0], out value)) return false;
  300. x = value;
  301. if (!int.TryParse(offs[1], out value)) return false;
  302. y = value;
  303. if (!int.TryParse(offs[2], out value)) return false;
  304. z = value;
  305. return true;
  306. }
  307. }
  308. }