VceViewModel.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. using Aitex.Core.Util;
  2. using Aitex.Sorter.Common;
  3. using ControlzEx.Standard;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.OperationCenter;
  7. using OpenSEMI.ClientBase;
  8. using Prism.Commands;
  9. using Prism.Mvvm;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Collections.ObjectModel;
  13. using System.Drawing;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading;
  17. using System.Threading.Tasks;
  18. using System.Windows;
  19. using System.Windows.Controls;
  20. using System.Windows.Media.Animation;
  21. using System.Windows.Threading;
  22. using Venus_MainPages.Unity;
  23. using Venus_Themes.UserControls;
  24. namespace Venus_MainPages.ViewModels
  25. {
  26. public class VceViewModel : BindableBase
  27. {
  28. private double _PositionZ;//支撑底柱高度
  29. private double _TransformData;
  30. //private double m_PositionZ;
  31. //private Image VceWaferNames;
  32. private int _GotoSlot;
  33. private bool m_VCEDoorIsOpen;//是否开门
  34. private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
  35. private List<string> m_RtDataKeys = new List<string>();
  36. private bool m_VCEIsInstalled;
  37. //private bool m_isGotoLP;
  38. private int m_GoToSlotNumber;
  39. private int m_VCE1WaferCount;//wafer数量
  40. private int m_lstslot;
  41. private List<WaferInfo> m_VCE1ModuleInfo;
  42. //下拉框内容
  43. private List<SeTMModule> m_TMModules = new List<SeTMModule>();
  44. private SeTMModule m_PickSelectedModule;
  45. //下拉框关联内容
  46. private ObservableCollection<int> m_PickSoltItemsSource = new ObservableCollection<int>();
  47. //下拉框当前选择
  48. private int m_PickSoltSelectedIndex;
  49. #region 属性
  50. public double PositionZ
  51. {
  52. get { return _PositionZ; }
  53. set { SetProperty(ref _PositionZ, value); }
  54. }
  55. public double TransformData
  56. {
  57. get { return _TransformData; }
  58. set { SetProperty(ref _TransformData, value); }
  59. }
  60. public int CurrentSlot
  61. {
  62. get { return _GotoSlot; }
  63. set { SetProperty(ref _GotoSlot, value); }
  64. }
  65. public bool VceDoorIsOpen
  66. { get { return m_VCEDoorIsOpen; }
  67. set { SetProperty(ref m_VCEDoorIsOpen, value); }
  68. }
  69. public Dictionary<string, object> RtDataValues
  70. {
  71. get { return m_RtDataValues; }
  72. set { SetProperty(ref m_RtDataValues, value); }
  73. }
  74. public bool VCEIsInstalled
  75. {
  76. get { return m_VCEIsInstalled; }
  77. set
  78. {
  79. SetProperty(ref m_VCEIsInstalled, value);
  80. }
  81. }
  82. public int VCE1WaferCount
  83. {
  84. get { return m_VCE1WaferCount; }
  85. set
  86. {
  87. SetProperty(ref m_VCE1WaferCount, value);
  88. }
  89. }
  90. public int GoToSlotNumber { get => m_GoToSlotNumber; set => SetProperty(ref m_GoToSlotNumber, value); }
  91. public List<WaferInfo> VCE1ModuleInfo
  92. {
  93. get { return m_VCE1ModuleInfo; }
  94. set
  95. {
  96. SetProperty(ref m_VCE1ModuleInfo, value);
  97. }
  98. }
  99. //Module属性
  100. public SeTMModule PickSelectedModule
  101. {
  102. get { return m_PickSelectedModule; }
  103. set { SetProperty(ref m_PickSelectedModule, value); }
  104. }
  105. //下拉框内容
  106. public ObservableCollection<int> PickSoltItemsSource
  107. {
  108. get { return m_PickSoltItemsSource; }
  109. set { SetProperty(ref m_PickSoltItemsSource, value); }
  110. }
  111. public List<SeTMModule> TMModules
  112. {
  113. get { return m_TMModules; }
  114. set { SetProperty(ref m_TMModules, value); }
  115. }
  116. //下拉框选择
  117. public int PickSoltSelectedIndex
  118. {
  119. get { return m_PickSoltSelectedIndex; }
  120. set { SetProperty(ref m_PickSoltSelectedIndex, value); }
  121. }
  122. #endregion
  123. //构造函数
  124. public VceViewModel()
  125. {
  126. CurrentSlot = -1;
  127. GoToSlotNumber = 25;
  128. PositionZ = 430;
  129. string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  130. VCEIsInstalled = allModules.Contains("VCE1");
  131. TMModules.Add(SeTMModule.VCE1);
  132. for (int i = 1; i <= 25; i++)
  133. {
  134. PickSoltItemsSource.Add(i);
  135. }
  136. addDataKeys();
  137. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  138. VceDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  139. m_lstslot = -1;
  140. CurrentSlot = -1;
  141. DispatcherTimer timer = new DispatcherTimer();
  142. timer.Interval = TimeSpan.FromSeconds(0.1);
  143. timer.Tick += timer_Tick;
  144. timer.Start();
  145. }
  146. #region 命令
  147. //VCE Home
  148. private DelegateCommand<object> _VCEHome;
  149. public DelegateCommand<object> VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand<object>(vceHome));
  150. //扫片
  151. private DelegateCommand _VCEReadMap;
  152. public DelegateCommand VCEReadMap => _VCEReadMap ?? (_VCEReadMap = new DelegateCommand(vceReadMap));
  153. private DelegateCommand _VCELoadPrepare;
  154. public DelegateCommand VCELoadPrepare =>
  155. _VCELoadPrepare ?? (_VCELoadPrepare = new DelegateCommand(vceLoadPrepare));
  156. private DelegateCommand __VCELoad;
  157. public DelegateCommand VCELoad =>
  158. __VCELoad ?? (__VCELoad = new DelegateCommand(vceLoad));
  159. private DelegateCommand _VCEUnLoad;
  160. public DelegateCommand VCEUnLoad =>
  161. _VCEUnLoad ?? (_VCEUnLoad = new DelegateCommand(vceUnLoad));
  162. //开门
  163. private DelegateCommand<object> _OpenDoorCommand;
  164. public DelegateCommand<object> OpenDoorCommand =>
  165. _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand<object>(OnOpenDoor));
  166. //关门
  167. private DelegateCommand<object> _CloseDoorCommand;
  168. public DelegateCommand<object> CloseDoorCommand =>
  169. _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand<object>(OnCloseDoor));
  170. //对准槽
  171. private DelegateCommand<object> _GoToSlotCommand;
  172. public DelegateCommand<object> GoToSlotCommand =>
  173. _GoToSlotCommand ?? (_GoToSlotCommand = new DelegateCommand<object>(OnGoToSlot));
  174. //模块下拉框选择命令
  175. private DelegateCommand<object> _ModuleChangeCommand;
  176. public DelegateCommand<object> ModuleChangeCommand =>
  177. _ModuleChangeCommand ?? (_ModuleChangeCommand = new DelegateCommand<object>(OnModuleChange));
  178. //对准LP
  179. private DelegateCommand<object> _GoToLoadCommand;
  180. public DelegateCommand<object> GoToLoadCommand =>
  181. _GoToLoadCommand ?? (_GoToLoadCommand = new DelegateCommand<object>(OnGoToLoad));
  182. #endregion
  183. #region 命令方法
  184. private void vceHome(object obj)
  185. {
  186. InvokeClient.Instance.Service.DoOperation("VCE1.HOME");
  187. }
  188. private void vceReadMap()
  189. {
  190. InvokeClient.Instance.Service.DoOperation("VCE1.ReadMap");
  191. if (VCEIsInstalled == true)
  192. {
  193. VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"].WaferManager.Wafers;
  194. }
  195. }
  196. private void vceLoadPrepare()
  197. {
  198. InvokeClient.Instance.Service.DoOperation("VCE1.LoadPrepare");
  199. }
  200. private void vceLoad()
  201. {
  202. InvokeClient.Instance.Service.DoOperation("VCE1.SafeLoad");
  203. }
  204. private void vceUnLoad()
  205. {
  206. InvokeClient.Instance.Service.DoOperation("VCE1.SafeUnload");
  207. }
  208. private void OnOpenDoor(object obj)
  209. {
  210. TransformData = 100;
  211. //VceDoorIsOpen = true;
  212. InvokeClient.Instance.Service.DoOperation("VCE1.DoorOpen");
  213. }
  214. private void OnCloseDoor(object obj)
  215. {
  216. //VceDoorIsOpen = false;
  217. InvokeClient.Instance.Service.DoOperation("VCE1.DoorClose");
  218. }
  219. private void OnGoToLoad(object obj)
  220. {
  221. InvokeClient.Instance.Service.DoOperation("VCE1.GotoLP");
  222. //PositionZ = 435;
  223. CurrentSlot = -1;
  224. gotoSlot();
  225. }
  226. //模块选择根据obj选择下拉框内容
  227. private void OnModuleChange(object obj)
  228. {
  229. //var value = obj.ToString();
  230. //switch (value)
  231. //{
  232. // case "Pick":
  233. // PickSoltItemsSource.Clear();
  234. // for (int i = 1; i <= 25; i++)
  235. // {
  236. // PickSoltItemsSource.Add(i);
  237. // }
  238. // PickSoltSelectedIndex = 0;
  239. // break;
  240. //}
  241. }
  242. private void OnGoToSlot(object obj)
  243. {
  244. GoToSlotNumber = PickSoltItemsSource[PickSoltSelectedIndex];
  245. //CurrentSlot = GoToSlotNumber - 1;
  246. InvokeClient.Instance.Service.DoOperation("VCE1.Goto", GoToSlotNumber);
  247. gotoSlot();
  248. }
  249. private void gotoSlot()
  250. {
  251. if (CurrentSlot>=0)
  252. {
  253. //PositionZ = 430 - 7.5 * (25 - CurrentSlot);
  254. }
  255. else
  256. {
  257. PositionZ = 430;
  258. }
  259. }
  260. #endregion
  261. #region 私有方法
  262. private void timer_Tick(object sender, EventArgs e)
  263. {
  264. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  265. VceDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  266. CurrentSlot = CommonFunction.GetValue<int>(RtDataValues, "VCE1.CurrentSlot")-1;
  267. if (m_lstslot != CurrentSlot)
  268. {
  269. m_lstslot = CurrentSlot;
  270. }
  271. if (VCEIsInstalled == true)
  272. {
  273. VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"].WaferManager.Wafers;
  274. }
  275. }
  276. private void addDataKeys()
  277. {
  278. m_RtDataKeys.Add($"VCE1.VCEOutDoorClosed");
  279. //m_RtDataKeys.Add($"VCE1.GotoLP");
  280. m_RtDataKeys.Add($"VCE1.CurrentSlot");
  281. }
  282. #endregion
  283. }
  284. }