123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- using System;
- using System.Configuration;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Media;
- using Aitex.Core.Backend;
- using Aitex.Core.RT.IOCore;
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Util;
- using EfemSimulator.Device.SmartReaderSimulator;
- namespace EfemSimulator.SimulatorIo
- {
- public class SimulatorSystem : Singleton<SimulatorSystem>
- {
- private PeriodicJob _thread;
- Random _rd = new Random();
- private string VersionNo;
- public SimulatorSystem()
- {
- VersionNo = ConfigurationManager.AppSettings["VersionNumber"].ToString();
- }
- public void Initialize()
- {
- _thread = new PeriodicJob(100, OnMonitor, nameof(SimulatorSystem), false);
- //var smi1= new SmartReaderSimulator();
- //smi1.InitializeSimulator("COM6");
- //var smi2 = new SmartReaderSimulator();
- //smi2.InitializeSimulator("COM8");
- Singleton<SmartReaderSimulator>.Instance.InitializeSimulator("COM6");
- //Singleton<SmartReaderSimulator>.Instance.InitializeSimulator("COM8");
- switch (VersionNo)
- {
- case "006":
- SetDefaultValue1();
- break;
- default:
- SetDefaultValue();
- break;
- }
- _thread.Start();
- }
- /// <summary>
- /// 006 DefaultValue
- /// </summary>
- private void SetDefaultValue1()
- {
- IO.DI["DI_FFUAlarm"].Value = true;
- IO.DI["DI_CDAPressureSW"].Value = true;
- IO.DI["DI_VACPressureSW"].Value = true;
- IO.DI["DI_IONCDAPressureSW"].Value = true;
- IO.DI["DI_IONAlarmSignal"].Value = true;
- IO.DI["DI_EFEMSideDoorClosed"].Value = true;
- IO.DI["DI_RunMode"].Value = false;
- IO.DI["DI_EFEMPowerON"].Value = true;
- IO.DI["DI_PA/FLPDoorClosed"].Value = true;
- IO.DI["DI_PMASystemInterlock"].Value = true;
- IO.DI["DI_PMBSystemInterlock"].Value = true;
- IO.DI["DI_RobotEMSToEFEM"].Value = true;
- IO.DI["DI_RBNotExtendToLP1"].Value = true;
- IO.DI["DI_RBNotExtendToLP2"].Value = true;
- IO.DI["DI_SafeGratingSensorIN1"].Value = true;
- IO.DI["DI_LP1OperationStatus"].Value = true;
- IO.DI["DI_LP1FoupOpen"].Value = true;
- IO.DI["DI_LP1FoupPlacement"].Value = true;
- IO.DI["DI_LP1Ready"].Value = true;
- IO.DI["DI_LP1Presence"].Value = true;
- IO.DI["DI_LP2OperationStatus"].Value = true;
- IO.DI["DI_LP2FoupOpen"].Value = true;
- IO.DI["DI_LP2FoupPlacement"].Value = true;
- IO.DI["DI_LP2Ready"].Value = true;
- IO.DI["DI_LP2Presence"].Value = true;
- IO.DI["DI_FlipperTurnOverHorizontalSensor"].Value = true;
- IO.DI["DI_FlipperTurnOverMotorPosCompleted"].Value = true;
- IO.DI["DI_FlipperClampMotorPosCompleted"].Value = true;
- }
- private void SetDefaultValue()
- {
- IO.DI["DI_WaterLeakSW"].Value = true;
- IO.DI["DI_WaterFlowSW"].Value = true;
- IO.DI["DI_FFUalarm"].Value = true;
- IO.DI["DI_CDAPressureSW"].Value = true;
- IO.DI["DI_VACPressureSW"].Value = true;
- IO.DI["DI_IONCDAPressureSW"].Value = true;
- IO.DI["DI_IONAlarmSIGNAL"].Value = true;
- IO.DI["DI_EFEMSideDoorClosed"].Value = true;
- IO.DI["DI_MaintenanceMode"].Value = false;
- IO.DI["DI_EFEMPowerON"].Value = true;
-
- IO.DI["DI_PMASystemInterlock"].Value = true;
-
- // if (SC.GetStringValue("System.EFEMNUM") == "002")
- {
- IO.DI["DI_RobotEMStoEFEM"].Value = true;
- IO.DI["DI_RobotRemotetoEFEM(spareInterfaceIO)"].Value = false;
- IO.DI["DI_RBNotExtendSIMF1"].Value = true;
-
- }
- if (VersionNo != "005")
- {
- IO.DI["DI_EFEMCSTDoorClosed"].Value = true;
- IO.DI["DI_SMIF1PODOPEN"].Value = true;
- IO.DI["DI_SMIF1PODPRESENT"].Value = true;
- IO.DI["DI_SMIF1READY"].Value = true;
- IO.DI["DI_SMIF2PODOPEN"].Value = true;
- IO.DI["DI_SMIF2PODPRESENT"].Value = true;
- IO.DI["DI_SMIF2READY"].Value = true;
- IO.DI["DI_GratingSensorIN1"].Value = true;
- IO.DI["DI_PMBSystemInterlock"].Value = true;
- IO.DI["DI_RBNotExtendSIMF2"].Value = true;
-
- }
- else
- {
- IO.DI["DI_4InchCstPresence"].Value = true;
- IO.DI["DI_4InchCstProtrusion1"].Value = true;
- IO.DI["DI_6InchCstPresence"].Value = true;
- IO.DI["DI_6InchCstProtrusion1"].Value = true;
- IO.DI["DI_8InchCstPresence"].Value = true;
- IO.DI["DI_8InchCstProtrusion1"].Value = true;
- IO.DI["DI_CstDoorClosed"].Value = true;
- }
- //else
- //{
- // IO.DI["DI_RobotEMStoEFEM"].Value = false;
- // IO.DI["DI_RobotRemotetoEFEM(spareInterfaceIO)"].Value = true;
- //}
- //IO.DI["DI_CassetteDoorOpen"].Value = true;
- //IO.DI["DI_DoorOpen"].Value = true;
- ////IO.DI["DI_RobotFork1WaferOn"].Value = true;
- ////IO.DI["DI_PreAlignerWaferOn"].Value = true;
- ////IO.DI["DI_LoadlockWaferOn"].Value = true;
- //IO.DI["DI_RobotReady"].Value = true;
- //IO.DI["DI_RobotError"].Value = true;
- //IO.DI["DI_TeachingPendantInUse"].Value = true;
- // IO.DI["DI_Loadport1OperationStatus"].Value = true;
- //IO.DI["DI_Loadport2OperationStatus"].Value = true;
- // IO.DI["DI_Loadport3OperationStatus"].Value = true;
- // IO.DI["DI_Loadport4OperationStatus"].Value = true;
- //IO.DI["DI_FFU1Error"].Value = true;
- //IO.DI["DI_FFU2Error"].Value = true;
- //IO.DI["DI_IonizorError"].Value = true;
- //IO.DI["DI_CoolingWater1FlowError"].Value = true;
- //IO.DI["DI_AirPressureErrorForRobot"].Value = true;
- //IO.DI["DI_VaccumError"].Value = true;
- //IO.DI["DI_CoolingStage1DI1"].Value = true;
- //IO.DI["DI_CoolingStage1DI2"].Value = false;
- //IO.DI["DI_CoolingStage1DI3"].Value = false;
- //IO.DI["DI_CoolingStage1DI4"].Value = true;
- //IO.DI["DI_CoolingStage1DI5"].Value = true;
- //IO.DI["DI_CoolingStage1DI6"].Value = false;
- //IO.DI["DI_CoolingStage2DI1"].Value = false;
- //IO.DI["DI_CoolingStage2DI2"].Value = false;
- //IO.DI["DI_CoolingStage2DI3"].Value = true;
- //IO.DI["DI_CoolingStage2DI4"].Value = true;
- //IO.DI["DI_CoolingStage2DI5"].Value = true;
- //IO.DI["DI_CoolingStage2DI6"].Value = false;
- }
- private bool OnMonitor()
- {
- try
- {
- switch (VersionNo)
- {
- case "006":
- MonitorFlipper();
- break;
- default:
- MonitorPin();
- break;
- }
- }
- catch (Exception e)
- {
- LOG.Write(e);
- }
- return true;
- }
- private void MonitorPin()
- {
- SetCylinder("DO_CoolingBuffer1Inch3Up", "DO_CoolingBuffer1Inch3Down", "DI_CoolingBuffer1Inch3Up", "DI_CoolingBuffer1Inch3Down");
- SetCylinder("DO_CoolingBuffer1Inch4Up", "DO_CoolingBuffer1Inch4Down", "DI_CoolingBuffer1Inch4Up", "DI_CoolingBuffer1Inch4Down");
- SetCylinder("DO_CoolingBuffer1PinUp", "DO_CoolingBuffer1PinDown", "DI_CoolingBuffer1PinUp", "DI_CoolingBuffer1PinDown");
- if (VersionNo != "005")
- {
- SetCylinder("DO_CoolingBuffer2Inch3Up", "DO_CoolingBuffer2Inch3Down", "DI_CoolingBuffer2Inch3Up", "DI_CoolingBuffer2Inch3Down");
- SetCylinder("DO_CoolingBuffer2Inch4Up", "DO_CoolingBuffer2Inch4Down", "DI_CoolingBuffer2Inch4Up", "DI_CoolingBuffer2Inch4Down");
- SetCylinder("DO_CoolingBuffer2PinUp", "DO_CoolingBuffer2PinDown", "DI_CoolingBuffer2PinUp", "DI_CoolingBuffer2PinDown");
- SetCylinder("DO_Buffer3Inch3Up", "DO_Buffer3Inch3Down", "DI_Buffer3Inch3Up", "DI_Buffer3Inch3Down");
- SetCylinder("DO_Buffer3Inch4Up", "DO_Buffer3Inch4Down", "DI_Buffer3Inch4Up", "DI_Buffer3Inch4Down");
- SetCylinder("DO_Buffer3PinUp", "DO_Buffer3PinDown", "DI_Buffer3PinUp", "DI_Buffer3PinDown");
- SetCylinder("DO_Buffer4Inch3Up", "DO_Buffer4Inch3Down", "DI_Buffer4Inch3Up", "DI_Buffer4Inch3Down");
- SetCylinder("DO_Buffer4Inch4Up", "DO_Buffer4Inch4Down", "DI_Buffer4Inch4Up", "DI_Buffer4Inch4Down");
- SetCylinder("DO_Buffer4PinUp", "DO_Buffer4PinDown", "DI_Buffer4PinUp", "DI_Buffer4PinDown");
- }
- }
- private void SetCylinder(string do1, string do2, string di1, string di2)
- {
- if (IO.DO[do1].Value != IO.DO[do2].Value)
- {
- //if (IO.DI[di1].Value != IO.DO[do1].Value &&
- // IO.DI[di2].Value != IO.DO[do2].Value)
- //{
- Thread.Sleep(200);
- IO.DI[di1].Value = IO.DO[do1].Value;
- IO.DI[di2].Value = IO.DO[do2].Value;
- //}
- }
- }
- private void MonitorFlipper()
- {
- //Grip(Clamp)
- if (IO.DO["DO_FlipperClampStepMotionStart"].Value && !IO.DO["DO_FlipperClampMotorClose/Open"].Value)
- {
- Thread.Sleep(300);
- IO.DI["DI_FlipperClampClosedSensor"].Value = true;
- IO.DI["DI_FlipperClampOpenedSensor"].Value = false;
- }
- //UnGrip(UnClamp)
- else if (IO.DO["DO_FlipperClampStepMotionStart"].Value && IO.DO["DO_FlipperClampMotorClose/Open"].Value)
- {
- Thread.Sleep(300);
- IO.DI["DI_FlipperClampClosedSensor"].Value = false;
- IO.DI["DI_FlipperClampOpenedSensor"].Value = true;
- }
- //Turn Over to 180°
- if (IO.DO["DO_FlipperTurnOverStepMotionStart"].Value && IO.DO["DO_FlipperTurnOverMotor0/180"].Value)
- {
- Thread.Sleep(300);
- IO.DI["DI_FlipperTurnOverHorizontalSensor"].Value = true;
- IO.DI["DI_FlipperTurnOverOriginSensor"].Value = false;
- }
- //Turn Over to 0°
- else if (IO.DO["DO_FlipperTurnOverStepMotionStart"].Value && !IO.DO["DO_FlipperTurnOverMotor0/180"].Value)
- {
- Thread.Sleep(300);
- IO.DI["DI_FlipperTurnOverHorizontalSensor"].Value = true;
- IO.DI["DI_FlipperTurnOverOriginSensor"].Value = true;
- }
- }
- public void Terminate()
- {
- _thread.Stop();
- }
- }
- }
|