SimulatorSystem.cs 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using System;
  2. using System.Configuration;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. using Aitex.Core.RT.IOCore;
  6. using Aitex.Core.RT.Log;
  7. using Aitex.Core.RT.SCCore;
  8. using Aitex.Core.Util;
  9. using EfemSimulator.Device.SmartReaderSimulator;
  10. namespace EfemSimulator.SimulatorIo
  11. {
  12. public class SimulatorSystem : Singleton<SimulatorSystem>
  13. {
  14. private PeriodicJob _thread;
  15. Random _rd = new Random();
  16. private string VersionNo;
  17. public SimulatorSystem()
  18. {
  19. VersionNo = ConfigurationManager.AppSettings["VersionNumber"].ToString();
  20. }
  21. public void Initialize()
  22. {
  23. _thread = new PeriodicJob(100, OnMonitor, nameof(SimulatorSystem), true);
  24. //var smi1= new SmartReaderSimulator();
  25. //smi1.InitializeSimulator("COM6");
  26. //var smi2 = new SmartReaderSimulator();
  27. //smi2.InitializeSimulator("COM8");
  28. Singleton<SmartReaderSimulator>.Instance.InitializeSimulator("COM6");
  29. //Singleton<SmartReaderSimulator>.Instance.InitializeSimulator("COM8");
  30. SetDefaultValue();
  31. }
  32. private void SetDefaultValue()
  33. {
  34. IO.DI["DI_WaterLeakSW"].Value = true;
  35. IO.DI["DI_WaterFlowSW"].Value = true;
  36. IO.DI["DI_FFUalarm"].Value = true;
  37. IO.DI["DI_CDAPressureSW"].Value = true;
  38. IO.DI["DI_VACPressureSW"].Value = true;
  39. IO.DI["DI_IONCDAPressureSW"].Value = true;
  40. IO.DI["DI_IONAlarmSIGNAL"].Value = true;
  41. IO.DI["DI_EFEMSideDoorClosed"].Value = true;
  42. IO.DI["DI_MaintenanceMode"].Value = false;
  43. IO.DI["DI_EFEMPowerON"].Value = true;
  44. IO.DI["DI_PMASystemInterlock"].Value = true;
  45. // if (SC.GetStringValue("System.EFEMNUM") == "002")
  46. {
  47. IO.DI["DI_RobotEMStoEFEM"].Value = true;
  48. IO.DI["DI_RobotRemotetoEFEM(spareInterfaceIO)"].Value = false;
  49. IO.DI["DI_RBNotExtendSIMF1"].Value = true;
  50. }
  51. if (VersionNo != "005")
  52. {
  53. IO.DI["DI_EFEMCSTDoorClosed"].Value = true;
  54. IO.DI["DI_SMIF1PODOPEN"].Value = true;
  55. IO.DI["DI_SMIF1PODPRESENT"].Value = true;
  56. IO.DI["DI_SMIF1READY"].Value = true;
  57. IO.DI["DI_SMIF2PODOPEN"].Value = true;
  58. IO.DI["DI_SMIF2PODPRESENT"].Value = true;
  59. IO.DI["DI_SMIF2READY"].Value = true;
  60. IO.DI["DI_GratingSensorIN1"].Value = true;
  61. IO.DI["DI_PMBSystemInterlock"].Value = true;
  62. IO.DI["DI_RBNotExtendSIMF2"].Value = true;
  63. }
  64. else
  65. {
  66. IO.DI["DI_4InchCstPresence"].Value = true;
  67. IO.DI["DI_4InchCstProtrusion1"].Value = true;
  68. IO.DI["DI_6InchCstPresence"].Value = true;
  69. IO.DI["DI_6InchCstProtrusion1"].Value = true;
  70. IO.DI["DI_8InchCstPresence"].Value = true;
  71. IO.DI["DI_8InchCstProtrusion1"].Value = true;
  72. IO.DI["DI_CstDoorClosed"].Value = true;
  73. }
  74. //else
  75. //{
  76. // IO.DI["DI_RobotEMStoEFEM"].Value = false;
  77. // IO.DI["DI_RobotRemotetoEFEM(spareInterfaceIO)"].Value = true;
  78. //}
  79. //IO.DI["DI_CassetteDoorOpen"].Value = true;
  80. //IO.DI["DI_DoorOpen"].Value = true;
  81. ////IO.DI["DI_RobotFork1WaferOn"].Value = true;
  82. ////IO.DI["DI_PreAlignerWaferOn"].Value = true;
  83. ////IO.DI["DI_LoadlockWaferOn"].Value = true;
  84. //IO.DI["DI_RobotReady"].Value = true;
  85. //IO.DI["DI_RobotError"].Value = true;
  86. //IO.DI["DI_TeachingPendantInUse"].Value = true;
  87. // IO.DI["DI_Loadport1OperationStatus"].Value = true;
  88. //IO.DI["DI_Loadport2OperationStatus"].Value = true;
  89. // IO.DI["DI_Loadport3OperationStatus"].Value = true;
  90. // IO.DI["DI_Loadport4OperationStatus"].Value = true;
  91. //IO.DI["DI_FFU1Error"].Value = true;
  92. //IO.DI["DI_FFU2Error"].Value = true;
  93. //IO.DI["DI_IonizorError"].Value = true;
  94. //IO.DI["DI_CoolingWater1FlowError"].Value = true;
  95. //IO.DI["DI_AirPressureErrorForRobot"].Value = true;
  96. //IO.DI["DI_VaccumError"].Value = true;
  97. //IO.DI["DI_CoolingStage1DI1"].Value = true;
  98. //IO.DI["DI_CoolingStage1DI2"].Value = false;
  99. //IO.DI["DI_CoolingStage1DI3"].Value = false;
  100. //IO.DI["DI_CoolingStage1DI4"].Value = true;
  101. //IO.DI["DI_CoolingStage1DI5"].Value = true;
  102. //IO.DI["DI_CoolingStage1DI6"].Value = false;
  103. //IO.DI["DI_CoolingStage2DI1"].Value = false;
  104. //IO.DI["DI_CoolingStage2DI2"].Value = false;
  105. //IO.DI["DI_CoolingStage2DI3"].Value = true;
  106. //IO.DI["DI_CoolingStage2DI4"].Value = true;
  107. //IO.DI["DI_CoolingStage2DI5"].Value = true;
  108. //IO.DI["DI_CoolingStage2DI6"].Value = false;
  109. }
  110. private bool OnMonitor()
  111. {
  112. try
  113. {
  114. MonitorPin();
  115. }
  116. catch (Exception e)
  117. {
  118. LOG.Write(e);
  119. }
  120. return true;
  121. }
  122. private void MonitorPin()
  123. {
  124. SetCylinder("DO_CoolingBuffer1Inch3Up", "DO_CoolingBuffer1Inch3Down", "DI_CoolingBuffer1Inch3Up", "DI_CoolingBuffer1Inch3Down");
  125. SetCylinder("DO_CoolingBuffer1Inch4Up", "DO_CoolingBuffer1Inch4Down", "DI_CoolingBuffer1Inch4Up", "DI_CoolingBuffer1Inch4Down");
  126. SetCylinder("DO_CoolingBuffer1PinUp", "DO_CoolingBuffer1PinDown", "DI_CoolingBuffer1PinUp", "DI_CoolingBuffer1PinDown");
  127. if (VersionNo != "005")
  128. {
  129. SetCylinder("DO_CoolingBuffer2Inch3Up", "DO_CoolingBuffer2Inch3Down", "DI_CoolingBuffer2Inch3Up", "DI_CoolingBuffer2Inch3Down");
  130. SetCylinder("DO_CoolingBuffer2Inch4Up", "DO_CoolingBuffer2Inch4Down", "DI_CoolingBuffer2Inch4Up", "DI_CoolingBuffer2Inch4Down");
  131. SetCylinder("DO_CoolingBuffer2PinUp", "DO_CoolingBuffer2PinDown", "DI_CoolingBuffer2PinUp", "DI_CoolingBuffer2PinDown");
  132. SetCylinder("DO_Buffer3Inch3Up", "DO_Buffer3Inch3Down", "DI_Buffer3Inch3Up", "DI_Buffer3Inch3Down");
  133. SetCylinder("DO_Buffer3Inch4Up", "DO_Buffer3Inch4Down", "DI_Buffer3Inch4Up", "DI_Buffer3Inch4Down");
  134. SetCylinder("DO_Buffer3PinUp", "DO_Buffer3PinDown", "DI_Buffer3PinUp", "DI_Buffer3PinDown");
  135. SetCylinder("DO_Buffer4Inch3Up", "DO_Buffer4Inch3Down", "DI_Buffer4Inch3Up", "DI_Buffer4Inch3Down");
  136. SetCylinder("DO_Buffer4Inch4Up", "DO_Buffer4Inch4Down", "DI_Buffer4Inch4Up", "DI_Buffer4Inch4Down");
  137. SetCylinder("DO_Buffer4PinUp", "DO_Buffer4PinDown", "DI_Buffer4PinUp", "DI_Buffer4PinDown");
  138. }
  139. }
  140. private void SetCylinder(string do1, string do2, string di1, string di2)
  141. {
  142. if (IO.DO[do1].Value != IO.DO[do2].Value)
  143. {
  144. //if (IO.DI[di1].Value != IO.DO[do1].Value &&
  145. // IO.DI[di2].Value != IO.DO[do2].Value)
  146. //{
  147. Thread.Sleep(200);
  148. IO.DI[di1].Value = IO.DO[do1].Value;
  149. IO.DI[di2].Value = IO.DO[do2].Value;
  150. //}
  151. }
  152. }
  153. public void Terminate()
  154. {
  155. _thread.Stop();
  156. }
  157. }
  158. }