YaskawaSrAlignerWithPositioner.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. using Aitex.Core.Common;
  2. using Aitex.Core.RT.Device.Unit;
  3. using MECF.Framework.Common.SubstrateTrackings;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.YaskawaSR100Aligner
  10. {
  11. public class YaskawaSrAlignerWithPositioner : YaskawaAligner.YaskawaAligner
  12. {
  13. public YaskawaSrAlignerWithPositioner(string module, string name, string scRoot, IoSensor[] dis, IoTrigger[] dos, int alignerType = 0)
  14. :base(module,name,scRoot,dis,dos,alignerType)
  15. {
  16. _diAlignerOnWS8 = dis[4];
  17. _diAlginerOnWS12 = dis[5];
  18. _diOcrOnWS8 = dis[6];
  19. _diOcrOnWS12 = dis[7];
  20. _doAlignerToWS8 = dos[1];
  21. _doAlignerToWS12 = dos[2];
  22. _doOcrToWS8 = dos[3];
  23. _doOcrToWS12 = dos[4];
  24. }
  25. private IoSensor _diAlignerOnWS8;
  26. private IoSensor _diAlginerOnWS12;
  27. private IoSensor _diOcrOnWS8;
  28. private IoSensor _diOcrOnWS12;
  29. private IoTrigger _doAlignerToWS8;
  30. private IoTrigger _doAlignerToWS12;
  31. private IoTrigger _doOcrToWS8;
  32. private IoTrigger _doOcrToWS12;
  33. private DateTime _dtActionStart;
  34. protected override bool fStartSetParameters(object[] param)
  35. {
  36. _dtActionStart = DateTime.Now;
  37. _currentSetParameter = param[0].ToString();
  38. switch (_currentSetParameter)
  39. {
  40. case "WaferSize":
  41. //if (GetWaferState() != RobotArmWaferStateEnum.Absent)
  42. //{
  43. // EV.PostAlarmLog("System", "Can't set wafersize when wafer is not absent");
  44. // return false;
  45. //}
  46. _currentSetWaferSize = (WaferSize)param[1];
  47. if (WaferManager.Instance.CheckHasWafer(RobotModuleName, 0))
  48. {
  49. WaferManager.Instance.UpdateWaferSize(RobotModuleName, 0, _currentSetWaferSize);
  50. }
  51. switch (_currentSetWaferSize)
  52. {
  53. case WaferSize.WS12:
  54. _doAlignerToWS12.SetTrigger(true, out _);
  55. _doAlignerToWS8.SetTrigger(false, out _);
  56. _doOcrToWS12.SetTrigger(true, out _);
  57. _doOcrToWS8.SetTrigger(false, out _);
  58. break;
  59. case WaferSize.WS8:
  60. _doAlignerToWS12.SetTrigger(false, out _);
  61. _doAlignerToWS8.SetTrigger(true, out _);
  62. _doOcrToWS12.SetTrigger(false, out _);
  63. _doOcrToWS8.SetTrigger(true, out _);
  64. break;
  65. default:
  66. break;
  67. }
  68. break;
  69. }
  70. return true;
  71. }
  72. private string _currentSetParameter;
  73. private WaferSize _currentSetWaferSize = WaferSize.WS0;
  74. protected override bool fMonitorSetParamter(object[] param)
  75. {
  76. IsBusy = false;
  77. if (DateTime.Now - _dtActionStart > TimeSpan.FromSeconds(TimeLimitAlignerHome))
  78. OnError("Set parameter timeout");
  79. switch (_currentSetParameter)
  80. {
  81. case "WaferSize":
  82. switch (_currentSetWaferSize)
  83. {
  84. case WaferSize.WS8:
  85. return !_diAlginerOnWS12.Value && _diAlignerOnWS8.Value &&
  86. !_diOcrOnWS12.Value && _diOcrOnWS8.Value;
  87. case WaferSize.WS12:
  88. return _diAlginerOnWS12.Value && !_diAlignerOnWS8.Value &&
  89. _diOcrOnWS12.Value && !_diOcrOnWS8.Value;
  90. default:
  91. return true;
  92. }
  93. default:
  94. return true;
  95. }
  96. }
  97. public override bool IsNeedChangeWaferSize(WaferSize wz)
  98. {
  99. switch(wz)
  100. {
  101. case WaferSize.WS12:
  102. return !(_diAlginerOnWS12.Value && !_diAlignerOnWS8.Value &&
  103. _diOcrOnWS12.Value && !_diOcrOnWS8.Value &&
  104. _doAlignerToWS12.Value && !_doAlignerToWS8.Value &&
  105. _doOcrToWS12.Value && !_doOcrToWS8.Value);
  106. case WaferSize.WS8:
  107. return !(!_diAlginerOnWS12.Value && _diAlignerOnWS8.Value &&
  108. !_diOcrOnWS12.Value && _diOcrOnWS8.Value &&
  109. !_doOcrToWS12.Value && _doOcrToWS8.Value &&
  110. !_doAlignerToWS12.Value && _doAlignerToWS8.Value);
  111. default:
  112. return true;
  113. }
  114. }
  115. public override WaferSize GetCurrentWaferSize()
  116. {
  117. if (WaferManager.Instance.CheckHasWafer(RobotModuleName, 0))
  118. return WaferManager.Instance.GetWaferSize(RobotModuleName, 0);
  119. if (_diAlginerOnWS12.Value && !_diAlignerOnWS8.Value &&
  120. _diOcrOnWS12.Value && !_diOcrOnWS8.Value &&
  121. _doAlignerToWS12.Value && !_doAlignerToWS8.Value &&
  122. _doOcrToWS12.Value && !_doOcrToWS8.Value)
  123. return WaferSize.WS12;
  124. if (!_diAlginerOnWS12.Value && _diAlignerOnWS8.Value &&
  125. !_diOcrOnWS12.Value && _diOcrOnWS8.Value &&
  126. !_doOcrToWS12.Value && _doOcrToWS8.Value &&
  127. !_doAlignerToWS12.Value && _doAlignerToWS8.Value)
  128. return WaferSize.WS8;
  129. return WaferSize.WS0;
  130. }
  131. }
  132. }