WaferRobotViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. using Caliburn.Micro;
  2. using Caliburn.Micro.Core;
  3. using Aitex.Core.Common.DeviceData;
  4. using Aitex.Core.UI.ControlDataContext;
  5. using Aitex.Core.Util;
  6. using MECF.Framework.Common.DataCenter;
  7. using MECF.Framework.Common.OperationCenter;
  8. using MECF.Framework.UI.Client.ClientBase;
  9. using FurnaceUI.Models;
  10. using FurnaceUI.Views.Editors;
  11. using System.Collections.ObjectModel;
  12. using System.Collections.Generic;
  13. using System.Threading.Tasks;
  14. using System.Reflection;
  15. using System;
  16. using Aitex.Core.RT.Log;
  17. using System.Linq;
  18. using System.Windows;
  19. using MECF.Framework.Common.SubstrateTrackings;
  20. using MECF.Framework.Common.Equipment;
  21. using System.Text.RegularExpressions;
  22. using OpenSEMI.ClientBase;
  23. using MECF.Framework.Common.Jobs;
  24. namespace FurnaceUI.Views.Maintenances
  25. {
  26. public class WaferRobotViewModel : FurnaceUIViewModelBase
  27. {
  28. public bool IsPermission { get => this.Permission == 3; }
  29. [Subscription("WaferRobot.Status")]
  30. public string WaferRobotStatus { get; set; }
  31. [Subscription("Rt.Status")]
  32. public string RtStatus { get; set; }
  33. public bool IsSelectButtonEnable => IsSystemStaus;
  34. [Subscription("Scheduler.ControlJobList")]
  35. public List<ControlJobInfo> ControlJobs
  36. {
  37. get;
  38. set;
  39. }
  40. public bool IsSystemStaus
  41. {
  42. get
  43. {
  44. if (ControlJobs != null && ControlJobs.Count > 0)
  45. {
  46. return ControlJobs.FirstOrDefault().State == EnumControlJobState.Paused;
  47. }
  48. return (RtStatus != "AutoRunning");
  49. }
  50. set { }
  51. }
  52. [Subscription("WaferRobot.IsOnline")]
  53. public bool WaferRobotIsOnline { get; set; }
  54. public bool IsWaferRobotOfflineButtonEnable => WaferRobotIsOnline;
  55. public bool IsWaferRobotOnlineButtonEnable => !WaferRobotIsOnline;
  56. #region test TMRobot
  57. private List<int> _slotsTMRobot = new List<int>() { 170, 25, 25 };
  58. private List<string> _modulesTMRobot = new List<string>() { "Boat", "FIMS1", "FIMS2" };
  59. private List<string> _bladesTMRobot = new List<string>() { "Single", "Multiple" };
  60. private string _pickSelectedModuleTMRobot;
  61. public string PickSelectedModuleTMRobot
  62. {
  63. get { return _pickSelectedModuleTMRobot; }
  64. set
  65. {
  66. _pickSelectedModuleTMRobot = value;
  67. PickSlotsTMRobot = GetSlotsByModuleTMRobot(_pickSelectedModuleTMRobot);
  68. PickSelectedSlotTMRobot = 1;
  69. NotifyOfPropertyChange("PickSelectedModuleTMRobot");
  70. }
  71. }
  72. private int _pickSelectedSlotTMRobot;
  73. public int PickSelectedSlotTMRobot
  74. {
  75. get { return _pickSelectedSlotTMRobot; }
  76. set { _pickSelectedSlotTMRobot = value; NotifyOfPropertyChange("PickSelectedSlotTMRobot"); }
  77. }
  78. private string _pickSelectedBladeTMRobot;
  79. public string PickSelectedBladeTMRobot
  80. {
  81. get { return _pickSelectedBladeTMRobot; }
  82. set { _pickSelectedBladeTMRobot = value; NotifyOfPropertyChange("PickSelectedBladeTMRobot"); }
  83. }
  84. private List<int> _pickSlotsTMRobot;
  85. public List<int> PickSlotsTMRobot
  86. {
  87. get { return _pickSlotsTMRobot; }
  88. set { _pickSlotsTMRobot = value; NotifyOfPropertyChange("PickSlotsTMRobot"); }
  89. }
  90. private string _placeSelectedModuleTMRobot;
  91. public string PlaceSelectedModuleTMRobot
  92. {
  93. get { return _placeSelectedModuleTMRobot; }
  94. set
  95. {
  96. _placeSelectedModuleTMRobot = value;
  97. PlaceSlotsTMRobot = GetSlotsByModuleTMRobot(_placeSelectedModuleTMRobot);
  98. PlaceSelectedSlotTMRobot = 1;
  99. NotifyOfPropertyChange("PlaceSelectedModuleTMRobot");
  100. }
  101. }
  102. private int _placeSelectedSlotTMRobot;
  103. public int PlaceSelectedSlotTMRobot
  104. {
  105. get { return _placeSelectedSlotTMRobot; }
  106. set { _placeSelectedSlotTMRobot = value; NotifyOfPropertyChange("PlaceSelectedSlotTMRobot"); }
  107. }
  108. private string _placeSelectedBladeTMRobot;
  109. public string PlaceSelectedBladeTMRobot
  110. {
  111. get { return _placeSelectedBladeTMRobot; }
  112. set { _placeSelectedBladeTMRobot = value; NotifyOfPropertyChange("PlaceSelectedBladeTMRobot"); }
  113. }
  114. private List<int> _placeSlotsTMRobot;
  115. public List<int> PlaceSlotsTMRobot
  116. {
  117. get { return _placeSlotsTMRobot; }
  118. set { _placeSlotsTMRobot = value; NotifyOfPropertyChange("PlaceSlotsTMRobot"); }
  119. }
  120. public List<string> ModulesTMRobot
  121. {
  122. get { return _modulesTMRobot; }
  123. set { _modulesTMRobot = value; NotifyOfPropertyChange("ModulesTMRobot"); }
  124. }
  125. public List<string> BladesTMRobot
  126. {
  127. get { return _bladesTMRobot; }
  128. set { _bladesTMRobot = value; NotifyOfPropertyChange("BladesTMRobot"); }
  129. }
  130. private string _swapFromSelectedModuleTMRobot;
  131. public string SwapFromSelectedModuleTMRobot
  132. {
  133. get { return _swapFromSelectedModuleTMRobot; }
  134. set
  135. {
  136. _swapFromSelectedModuleTMRobot = value;
  137. SwapFromSlotsTMRobot = GetSlotsByModuleTMRobot(_swapFromSelectedModuleTMRobot);
  138. SwapFromSelectedSlotTMRobot = 1;
  139. NotifyOfPropertyChange("SwapFromSelectedModuleTMRobot");
  140. }
  141. }
  142. private int _swapFromSelectedSlotTMRobot;
  143. public int SwapFromSelectedSlotTMRobot
  144. {
  145. get { return _swapFromSelectedSlotTMRobot; }
  146. set { _swapFromSelectedSlotTMRobot = value; NotifyOfPropertyChange("SwapFromSelectedSlotTMRobot"); }
  147. }
  148. private string _swapSelectedBladeTMRobot;
  149. public string SwapSelectedBladeTMRobot
  150. {
  151. get { return _swapSelectedBladeTMRobot; }
  152. set { _swapSelectedBladeTMRobot = value; NotifyOfPropertyChange("SwapSelectedBladeTMRobot"); }
  153. }
  154. private List<int> _swapFromSlotsTMRobot;
  155. public List<int> SwapFromSlotsTMRobot
  156. {
  157. get { return _swapFromSlotsTMRobot; }
  158. set { _swapFromSlotsTMRobot = value; NotifyOfPropertyChange("SwapFromSlotsTMRobot"); }
  159. }
  160. private string _swapToSelectedModuleTMRobot;
  161. public string SwapToSelectedModuleTMRobot
  162. {
  163. get { return _swapToSelectedModuleTMRobot; }
  164. set
  165. {
  166. _swapToSelectedModuleTMRobot = value;
  167. SwapToSlotsTMRobot = GetSlotsByModuleTMRobot(_swapToSelectedModuleTMRobot);
  168. SwapToSelectedSlotTMRobot = 1;
  169. NotifyOfPropertyChange("SwapToSelectedModuleTMRobot");
  170. }
  171. }
  172. private int _swapToSelectedSlotTMRobot;
  173. public int SwapToSelectedSlotTMRobot
  174. {
  175. get { return _swapToSelectedSlotTMRobot; }
  176. set { _swapToSelectedSlotTMRobot = value; NotifyOfPropertyChange("SwapToSelectedSlotTMRobot"); }
  177. }
  178. private List<int> _swapToSlotsTMRobot;
  179. public List<int> SwapToSlotsTMRobot
  180. {
  181. get { return _swapToSlotsTMRobot; }
  182. set { _swapToSlotsTMRobot = value; NotifyOfPropertyChange("SwapToSlotsTMRobot"); }
  183. }
  184. private WaferInfo _robotWafer1;
  185. public WaferInfo RobotWafer1
  186. {
  187. get { return _robotWafer1; }
  188. set
  189. {
  190. _robotWafer1 = value;
  191. NotifyOfPropertyChange("RobotWafer1");
  192. }
  193. }
  194. private string _mappingSelectedModuleTMRobot;
  195. public string MappingSelectedModuleTMRobot
  196. {
  197. get { return _mappingSelectedModuleTMRobot; }
  198. set
  199. {
  200. _mappingSelectedModuleTMRobot = value;
  201. NotifyOfPropertyChange("MappingSelectedModuleTMRobot");
  202. }
  203. }
  204. #endregion
  205. public WaferRobotViewModel()
  206. {
  207. _slotsTMRobot = new List<int>();
  208. _slotsTMRobot.Add((int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount"));
  209. _slotsTMRobot.Add((int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"));
  210. _slotsTMRobot.Add((int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"));
  211. }
  212. private List<int> GetSlotsByModuleTMRobot(string module)
  213. {
  214. List<int> slots = new List<int>();
  215. int i = _modulesTMRobot.IndexOf(module);
  216. int num = 0;
  217. if (i >= 0 && i < _slotsTMRobot.Count)
  218. num = _slotsTMRobot[i];
  219. int j = 0;
  220. while (j < num)
  221. {
  222. slots.Add(j + 1);
  223. j++;
  224. }
  225. return slots;
  226. }
  227. public void Home()
  228. {
  229. if (!DialogBox.Confirm("Are you sure want to Home?"))
  230. return;
  231. InvokeClient.Instance.Service.DoOperation("WaferRobot.Home");
  232. }
  233. public void TMRobot_Pick()
  234. {
  235. if (!DialogBox.Confirm("Are you sure want to Pick?"))
  236. return;
  237. var module = PickSelectedModuleTMRobot.Replace("Boat", "PM1");
  238. if (DialogBox.Confirm($"Are you sure you want to Pick Wafer?"))
  239. {
  240. InvokeClient.Instance.Service.DoOperation($"WaferRobot.Pick", module, PickSelectedSlotTMRobot - 1, PickSelectedBladeTMRobot == "Single" ? 0 : (PickSelectedBladeTMRobot == "Blade2" ? 1 : 2));
  241. }
  242. }
  243. public void TMRobot_Place()
  244. {
  245. if (!DialogBox.Confirm("Are you sure want to Pick?"))
  246. return;
  247. var module = PlaceSelectedModuleTMRobot.Replace("Boat", "PM1");
  248. InvokeClient.Instance.Service.DoOperation($"WaferRobot.Place", module, PlaceSelectedSlotTMRobot - 1, PlaceSelectedBladeTMRobot == "Single" ? 0 : (PlaceSelectedBladeTMRobot == "Blade2" ? 1 : 2));
  249. }
  250. public void TMRobot_Mapping()
  251. {
  252. if (!DialogBox.Confirm($"Are you sure you want to Mapping Wafer?"))
  253. return;
  254. var module = MappingSelectedModuleTMRobot.Replace("Boat", "PM1");
  255. string mappingSlot = string.Empty;
  256. var wafers = ModuleManager.ModuleInfos[module].WaferManager.Wafers;
  257. if (wafers != null)
  258. {
  259. for (int i = wafers.Count - 1; i >= 0; i--)
  260. {
  261. if (wafers[i].WaferStatus != 0)
  262. mappingSlot += "1";
  263. else
  264. mappingSlot += "0";
  265. }
  266. }
  267. InvokeClient.Instance.Service.DoOperation($"WaferRobot.Mapping", module, mappingSlot.Length == 0 ? 0 : Regex.Matches(mappingSlot, "1").Count, 0, mappingSlot, true, true);
  268. }
  269. public void WaferRobot_Swap()
  270. {
  271. if (!DialogBox.Confirm("Are you sure want to Swap?"))
  272. return;
  273. var fromModule = SwapFromSelectedModuleTMRobot.Replace("Boat", "PM1"); ;
  274. var toModule = SwapToSelectedModuleTMRobot.Replace("Boat", "PM1"); ;
  275. InvokeClient.Instance.Service.DoOperation($"WaferRobot.Swap", fromModule, toModule, SwapFromSelectedSlotTMRobot - 1, SwapToSelectedSlotTMRobot - 1,
  276. SwapSelectedBladeTMRobot == "Single" ? 0 : (SwapSelectedBladeTMRobot == "Blade2" ? 1 : 2));
  277. }
  278. public void SetOnline(object target)
  279. {
  280. if (!DialogBox.Confirm($"Are you sure want to {target} Online?"))
  281. return;
  282. InvokeClient.Instance.Service.DoOperation($"{target}.SetOnline");
  283. }
  284. public void SetOffline(object target)
  285. {
  286. if (!DialogBox.Confirm($"Are you sure want to {target} Offline?"))
  287. return;
  288. InvokeClient.Instance.Service.DoOperation($"{target}.SetOffline");
  289. }
  290. public void ClosedCmd()
  291. {
  292. (GetView() as Window).Close();
  293. }
  294. }
  295. }