| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 | 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_EFEMSideDoorOpened"].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;            IO.DI["DI_FlipperSafetyToRobot"].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();        }    }}
 |