CassetteModifyViewModel.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. using Aitex.Core.Common;
  2. using Aitex.Core.Util;
  3. using Caliburn.Micro.Core;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.OperationCenter;
  6. using MECF.Framework.UI.Client.ClientBase;
  7. using OpenSEMI.ClientBase;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Collections.ObjectModel;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows;
  15. using FurnaceUI.Models;
  16. using MECF.Framework.Common.SubstrateTrackings;
  17. namespace FurnaceUI.Views.Operations
  18. {
  19. public class CassetteModifyViewModel : FurnaceUIViewModelBase
  20. {
  21. #region"订阅"
  22. [Subscription("Stocker1.Carrier")]
  23. public CarrierInfo Stocker1CarrierData { get; set; }
  24. [Subscription("Stocker2.Carrier")]
  25. public CarrierInfo Stocker2CarrierData { get; set; }
  26. [Subscription("Stocker3.Carrier")]
  27. public CarrierInfo Stocker3CarrierData { get; set; }
  28. [Subscription("Stocker4.Carrier")]
  29. public CarrierInfo Stocker4CarrierData { get; set; }
  30. [Subscription("Stocker5.Carrier")]
  31. public CarrierInfo Stocker5CarrierData { get; set; }
  32. [Subscription("Stocker6.Carrier")]
  33. public CarrierInfo Stocker6CarrierData { get; set; }
  34. [Subscription("Stocker7.Carrier")]
  35. public CarrierInfo Stocker7CarrierData { get; set; }
  36. [Subscription("Stocker8.Carrier")]
  37. public CarrierInfo Stocker8CarrierData { get; set; }
  38. [Subscription("Stocker9.Carrier")]
  39. public CarrierInfo Stocker9CarrierData { get; set; }
  40. [Subscription("Stocker10.Carrier")]
  41. public CarrierInfo Stocker10CarrierData { get; set; }
  42. [Subscription("Stocker11.Carrier")]
  43. public CarrierInfo Stocker11CarrierData { get; set; }
  44. [Subscription("Stocker12.Carrier")]
  45. public CarrierInfo Stocker12CarrierData { get; set; }
  46. [Subscription("Stocker13.Carrier")]
  47. public CarrierInfo Stocker13CarrierData { get; set; }
  48. [Subscription("Stocker14.Carrier")]
  49. public CarrierInfo Stocker14CarrierData { get; set; }
  50. [Subscription("Stocker15.Carrier")]
  51. public CarrierInfo Stocker15CarrierData { get; set; }
  52. [Subscription("Stocker16.Carrier")]
  53. public CarrierInfo Stocker16CarrierData { get; set; }
  54. [Subscription("Stocker17.Carrier")]
  55. public CarrierInfo Stocker17CarrierData { get; set; }
  56. [Subscription("Stocker18.Carrier")]
  57. public CarrierInfo Stocker18CarrierData { get; set; }
  58. [Subscription("FIMS1.Carrier")]
  59. public CarrierInfo FIMS1CarrierData { get; set; }
  60. [Subscription("FIMS2.Carrier")]
  61. public CarrierInfo FIMS2CarrierData { get; set; }
  62. [Subscription("LP1.Carrier")]
  63. public CarrierInfo LP1CarrierData { get; set; }
  64. [Subscription("LP2.Carrier")]
  65. public CarrierInfo LP2CarrierData { get; set; }
  66. [Subscription("LP3.Carrier")]
  67. public CarrierInfo LP3CarrierData { get; set; }
  68. [Subscription("LP4.Carrier")]
  69. public CarrierInfo LP4CarrierData { get; set; }
  70. [Subscription("CarrierRobot.Carrier")]
  71. public CarrierInfo CassetteRobotCarrierData { get; set; }
  72. #endregion
  73. public CassetteModifyViewModel(string module)
  74. {
  75. ModuleName = module;
  76. for (int i = 1; i <= 21; i++)
  77. {
  78. OriginModuleItems.Add($"Stocker{i}");
  79. }
  80. for (int i = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"); i > 0; i--)
  81. {
  82. CassetteWaferInfoItems.Add(new WaferInfoItem() { SlotID = i });
  83. }
  84. }
  85. public string ModuleName { set; get; }
  86. public List<string> OriginModuleItems { get; set; } = new List<string>();
  87. private int? _cassetteSlot = 1;
  88. public int? CassetteSlot
  89. {
  90. get => _cassetteSlot;
  91. set
  92. {
  93. _cassetteSlot = value;
  94. NotifyOfPropertyChange(nameof(CassetteSlot));
  95. }
  96. }
  97. private string _originSelectModule = "Stocker1";
  98. public string OriginSelectModule
  99. {
  100. get => _originSelectModule;
  101. set
  102. {
  103. _originSelectModule = value;
  104. NotifyOfPropertyChange(nameof(OriginSelectModule));
  105. }
  106. }
  107. private int? _originSlot = 1;
  108. public int? OriginSlot
  109. {
  110. get => _originSlot;
  111. set
  112. {
  113. _originSlot = value;
  114. NotifyOfPropertyChange(nameof(OriginSlot));
  115. }
  116. }
  117. public bool SDIsChecked { get; set; } = true;
  118. public bool EDIsChecked { get; set; }
  119. public bool PIsChecked { get; set; }
  120. public bool M1IsChecked { get; set; }
  121. public bool M2IsChecked { get; set; }
  122. public bool TIsChecked { get; set; }
  123. public bool XDIsChecked { get; set; }
  124. [Subscription("Stocker1.CassettePresent")]
  125. public bool IsCassettePresent { get; set; }
  126. [Subscription("Rt.Status")]
  127. public string RtStatus { get; set; }
  128. [Subscription("PM1.Status")]
  129. public string PM1Status { get; set; }
  130. public bool IsCassetteModifyEnabled
  131. {
  132. get
  133. {
  134. return (PM1Status == "Init" || PM1Status == "Idle" || PM1Status == "Error") && (RtStatus == "Init" || RtStatus == "Idle" || RtStatus == "Error");
  135. }
  136. }
  137. private ObservableCollection<WaferInfoItem> _cassetteWaferInfoItems = new ObservableCollection<WaferInfoItem>();
  138. public ObservableCollection<WaferInfoItem> CassetteWaferInfoItems
  139. {
  140. get => _cassetteWaferInfoItems;
  141. set
  142. {
  143. _cassetteWaferInfoItems = value;
  144. NotifyOfPropertyChange(nameof(CassetteWaferInfoItems));
  145. }
  146. }
  147. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  148. {
  149. RefreshCassetteDataTask();
  150. }
  151. private void RefreshCassetteDataTask()
  152. {
  153. var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers;
  154. if (wafers != null)
  155. {
  156. for (int i = 0; i < wafers.Count; i++)
  157. {
  158. if (wafers[i].WaferStatus != 0)
  159. {
  160. CassetteWaferInfoItems[i].ModuleID = wafers[i].ModuleID;
  161. CassetteWaferInfoItems[i].SourceName = wafers[i].SourceName;
  162. CassetteWaferInfoItems[i].WaferStatus = wafers[i].WaferStatus;
  163. CassetteWaferInfoItems[i].WaferType = wafers[i].WaferType.ToString();
  164. CassetteWaferInfoItems[i].UseCount = wafers[i].UseCount.ToString();
  165. CassetteWaferInfoItems[i].UseTime = wafers[i].UseTime.ToString();
  166. CassetteWaferInfoItems[i].UseThick = wafers[i].UseThick.ToString();
  167. }
  168. else
  169. {
  170. CassetteWaferInfoItems[i].ModuleID = "";
  171. CassetteWaferInfoItems[i].SourceName = "";
  172. CassetteWaferInfoItems[i].WaferStatus = 0;
  173. CassetteWaferInfoItems[i].WaferType = "";
  174. CassetteWaferInfoItems[i].UseCount = "";
  175. CassetteWaferInfoItems[i].UseTime = "";
  176. CassetteWaferInfoItems[i].UseThick = "";
  177. }
  178. }
  179. }
  180. }
  181. public void CreateWafer()
  182. {
  183. WaferType waferType = WaferType.None;
  184. if (SDIsChecked)
  185. waferType = WaferType.SD;
  186. else if (EDIsChecked)
  187. waferType = WaferType.ED;
  188. else if (PIsChecked)
  189. waferType = WaferType.P;
  190. else if (M1IsChecked)
  191. waferType = WaferType.M1;
  192. else if (M2IsChecked)
  193. waferType = WaferType.M2;
  194. else if (XDIsChecked)
  195. waferType = WaferType.XD;
  196. else if (TIsChecked)
  197. waferType = WaferType.T;
  198. if (CassetteSlot < 1 || CassetteSlot > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"))
  199. {
  200. DialogBox.ShowWarning($"CassetteSlot input error,can not create,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")}");
  201. return;
  202. }
  203. if (OriginSlot < 1 || OriginSlot > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"))
  204. {
  205. DialogBox.ShowWarning($"OriginSlot input error,can not create,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")}");
  206. return;
  207. }
  208. CarrierInfo carrierInfo = null;
  209. switch (ModuleName)
  210. {
  211. case "FIMS1":
  212. if (!(FIMS1CarrierData != null && FIMS1CarrierData.Status == CarrierStatus.Normal))
  213. {
  214. carrierInfo = FIMS1CarrierData;
  215. }
  216. break;
  217. case "FIMS2":
  218. if (!(FIMS2CarrierData != null && FIMS2CarrierData.Status == CarrierStatus.Normal))
  219. {
  220. carrierInfo = FIMS2CarrierData;
  221. }
  222. break;
  223. case "CarrierRobot":
  224. if (!(CassetteRobotCarrierData != null && CassetteRobotCarrierData.Status == CarrierStatus.Normal))
  225. {
  226. carrierInfo = CassetteRobotCarrierData;
  227. }
  228. break;
  229. default:
  230. carrierInfo = new CarrierInfo(1);
  231. break;
  232. }
  233. if (carrierInfo != null)
  234. {
  235. DialogBox.ShowWarning($"{ModuleName} Carrier is null!");
  236. return;
  237. }
  238. InvokeClient.Instance.Service.DoOperation("CreateWafer", $"{ModuleName}", CassetteSlot-1, waferType.ToString(), OriginSelectModule, OriginSlot-1);
  239. }
  240. public void DeleteWafer()
  241. {
  242. if (CassetteSlot < 1 || CassetteSlot > (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount"))
  243. {
  244. DialogBox.ShowWarning($"CassetteSlot input error,can not delete,input range 1 to {(int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount")}");
  245. return;
  246. }
  247. InvokeClient.Instance.Service.DoOperation("DeleteWafer", $"{ModuleName}", CassetteSlot - 1);
  248. }
  249. public void CassetteClose()
  250. {
  251. ((Window)GetView()).DialogResult = false;
  252. }
  253. }
  254. public class WaferInfoItem : PropertyChangedBase
  255. {
  256. private int _slotID;
  257. public int SlotID
  258. {
  259. get => _slotID;
  260. set
  261. {
  262. _slotID = value;
  263. NotifyOfPropertyChange(nameof(SlotID));
  264. }
  265. }
  266. private string _moduleID;
  267. public string ModuleID
  268. {
  269. get => _moduleID;
  270. set
  271. {
  272. _moduleID = value;
  273. NotifyOfPropertyChange(nameof(ModuleID));
  274. }
  275. }
  276. private string _sourceName;
  277. public string SourceName
  278. {
  279. get => _sourceName;
  280. set
  281. {
  282. _sourceName = value;
  283. NotifyOfPropertyChange(nameof(SourceName));
  284. }
  285. }
  286. private int _waferStatus = 0; // WaferStatus.Empty;
  287. public int WaferStatus
  288. {
  289. get => _waferStatus;
  290. set
  291. {
  292. _waferStatus = value;
  293. NotifyOfPropertyChange("WaferStatus");
  294. }
  295. }
  296. private string waferType;
  297. public string WaferType
  298. {
  299. get
  300. { return waferType; }
  301. set
  302. {
  303. waferType = value;
  304. NotifyOfPropertyChange("WaferType");
  305. }
  306. }
  307. private string useCount;
  308. public string UseCount
  309. {
  310. get
  311. { return useCount; }
  312. set
  313. {
  314. useCount = value;
  315. NotifyOfPropertyChange("UseCount");
  316. }
  317. }
  318. private string useTime;
  319. public string UseTime
  320. {
  321. get
  322. { return useTime; }
  323. set
  324. {
  325. useTime = value;
  326. NotifyOfPropertyChange("UseTime");
  327. }
  328. }
  329. private string useThick;
  330. public string UseThick
  331. {
  332. get
  333. { return useThick; }
  334. set
  335. {
  336. useThick = value;
  337. NotifyOfPropertyChange("UseThick");
  338. }
  339. }
  340. private string bgColor;
  341. public string BgColor
  342. {
  343. get { return bgColor; }
  344. set
  345. {
  346. bgColor = value;
  347. NotifyOfPropertyChange("BgColor");
  348. }
  349. }
  350. /// <summary>
  351. /// 记录对象是否进行过增删或者数据变动
  352. /// </summary>
  353. public bool IsChanged { get; set; }
  354. private ScanResult _mappingResult;
  355. /// <summary>
  356. /// mapping结果
  357. /// </summary>
  358. public ScanResult MappingResult
  359. {
  360. get { return _mappingResult; }
  361. set
  362. {
  363. if (_mappingResult != value)
  364. {
  365. _mappingResult = value;
  366. NotifyOfPropertyChange(nameof(MappingResult));
  367. }
  368. }
  369. }
  370. }
  371. }