| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- using Aitex.Core.Common.DeviceData;
 
- using Aitex.Core.RT.Device;
 
- using Aitex.Core.RT.Device.Unit;
 
- using Aitex.Core.RT.Event;
 
- using Aitex.Core.Util;
 
- using Aitex.Core.Utilities;
 
- using MECF.Framework.Common.Event;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Reflection;
 
- using MECF.Framework.Common.SubstrateTrackings;
 
- using Aitex.Core.Common;
 
- using FurnaceRT.Equipments.Systems;
 
- using Aitex.Core.RT.IOCore;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.RT.Core.IoProviders;
 
- using MECF.Framework.Common.Device.Bases;
 
- using FurnaceRT.Equipments.Boats;
 
- using IoHeater = FurnaceRT.Devices.IoHeater;
 
- using IoPressureMeter = FurnaceRT.Devices.IoPressureMeter;
 
- using FurnaceRT.Devices;
 
- using Aitex.Core.RT.Log;
 
- using FurnaceRT.Equipments.PMs.Devices;
 
- using Aitex.Core.RT.SCCore;
 
- namespace FurnaceRT.Equipments.PMs
 
- {
 
-     public partial class PMModule
 
-     {
 
-         enum N2PurgeMode
 
-         {
 
-             Auto,
 
-             Manual_N2Purge,
 
-             Manual_ATM,
 
-             Manual_Maintenance,
 
-             Auto_Check,
 
-         }
 
-         private Dictionary<string, Tuple<R_TRIG, List<Tuple<IoValve, bool>>>> _n2PurgeSequenceAction;
 
-         private Dictionary<string, Func<bool>> _n2PurgeSequenceStatus;
 
-         private N2PurgeMode _N2PurgeMode = N2PurgeMode.Auto;
 
-         private bool GetN2PurgeAIRTo20PPMStatus()
 
-         {
 
-             return ValveLABacksideDoorCylinderControl.DOOpen.Value;
 
-         }
 
-         private bool GetN2PurgeUnder20PPMStatus()
 
-         {
 
-             return ConcentrationO2.Value < 20;
 
-         }
 
-         private bool GetN2PurgeAIRStatus()
 
-         {
 
-             return ValveLABacksideDoorCylinderControl.DOClose.Value && (AlarmSignalFilterBox1DoorSwitch != null ? !AlarmSignalFilterBox1DoorSwitch.Value : false);
 
-         }
 
-         private bool GetN2PurgeDoorOpenStatus()
 
-         {
 
-             return ValveLABacksideDoorCylinderControl.DOClose.Value && (AlarmSignalFilterBox1DoorSwitch != null ? !AlarmSignalFilterBox1DoorSwitch.Value : false);
 
-         }
 
-         private bool GetN2PurgeFoup1Status()
 
-         {
 
-             return GetN2PurgeAIRTo20PPMStatus() && GetN2PurgeUnder20PPMStatus() && FIMS1.IsFoupExist && FIMS1.CollisionAvoidanceUpDownStatus == DeviceStatus.Down;
 
-         }
 
-         private bool GetN2PurgeFoup2Status()
 
-         {
 
-             return GetN2PurgeAIRTo20PPMStatus() && GetN2PurgeUnder20PPMStatus() && FIMS2.IsFoupExist && FIMS2.CollisionAvoidanceUpDownStatus == DeviceStatus.Down; ;
 
-         }
 
-         private void MonitorN2Purge()
 
-         {
 
-             if (_N2PurgeMode != N2PurgeMode.Auto)
 
-                 return;
 
-             if (_n2PurgeSequenceAction != null && _n2PurgeSequenceStatus != null)
 
-             {
 
-                 foreach (var key in _n2PurgeSequenceAction.Keys)
 
-                 {
 
-                     var value = _n2PurgeSequenceAction[key];
 
-                     value.Item1.CLK = _n2PurgeSequenceStatus[key].Invoke();
 
-                     if (value.Item1.Q && value.Item2 != null)
 
-                     {
 
-                         LOG.Write($"N2 purge sequence trig: {key}");
 
-                         //EV.PostWarningLog("System",$"N2 purge sequence trig: {key}");
 
-                         foreach (var valve in value.Item2)
 
-                         {
 
-                             if (valve.Item1.Status != valve.Item2)
 
-                                 valve.Item1.TurnValve(valve.Item2, out _);
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         public void SetN2PurgeLAO2CheckFirstEnable(bool isEable)
 
-         {
 
-             if (TrigN2PurgeLAO2CheckFirstEnable != null && TrigN2PurgeLAO2CheckFirstEnable.Value != isEable)
 
-                 TrigN2PurgeLAO2CheckFirstEnable.SetTrigger(isEable, out _);
 
-         }
 
-         public void SetN2PurgeFIMS1O2CheckEnable(ModuleName fims, bool isEable)
 
-         {
 
-             if (fims == ModuleName.FIMS1 && TrigN2PurgeFIMS1O2CheckEnable != null && TrigN2PurgeFIMS1O2CheckEnable.Value != isEable)
 
-                 TrigN2PurgeFIMS1O2CheckEnable.SetTrigger(isEable, out _);
 
-             if (fims == ModuleName.FIMS2 && TrigN2PurgeFIMS2O2CheckEnable != null && TrigN2PurgeFIMS2O2CheckEnable.Value != isEable)
 
-                 TrigN2PurgeFIMS2O2CheckEnable.SetTrigger(isEable, out _);
 
-         }
 
-         public void SetN2PurgeProcess(bool isEable)
 
-         {
 
-             if (TrigN2PurgeProcess != null && TrigN2PurgeProcess.Value != isEable)
 
-                 TrigN2PurgeProcess.SetTrigger(isEable, out _);
 
-         }
 
-         public void SetN2PurgeLAO2CheckSV(float value)
 
-         {
 
-             if (TrigN2PurgeLAO2CheckSV != null)
 
-                 TrigN2PurgeLAO2CheckSV?.SetAOTrigger(value, out _);
 
-         }
 
-         public void SetN2PurgeFOUPO2CheckSV(float value)
 
-         {
 
-             if (TrigN2PurgeFOUPO2CheckSV != null)
 
-                 TrigN2PurgeFOUPO2CheckSV?.SetAOTrigger(value, out _);
 
-         }
 
-         public void SetN2PurgeParameters()
 
-         {
 
-             if (SC.ContainsItem("PM1.N2Purge.TransferRoomArrivalWaitTime") && TrigN2PurgeLAO2CheckTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.TransferRoomArrivalWaitTime");
 
-                 TrigN2PurgeLAO2CheckTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.TransferRoomStableWaitTime") && TrigN2PurgeLAO2OverTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.TransferRoomStableWaitTime");
 
-                 TrigN2PurgeLAO2OverTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.FOUPOpenerArrivalWaitTime") && TrigN2PurgeFOUPO2CheckTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.FOUPOpenerArrivalWaitTime");
 
-                 TrigN2PurgeFOUPO2CheckTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.FOUPOpenerStableWaitTime") && TrigN2PurgeFOUPO2OverTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.FOUPOpenerStableWaitTime");
 
-                 TrigN2PurgeFOUPO2OverTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.O2DetectorTransferRoomToFOUPTime") && TrigN2PurgeExchangeLATOFOUPWaitTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.O2DetectorTransferRoomToFOUPTime");
 
-                 TrigN2PurgeExchangeLATOFOUPWaitTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.O2DetectorFOUPToTransferRoomTime") && TrigN2PurgeExchangeFOUPTOLAWaitTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.O2DetectorFOUPToTransferRoomTime");
 
-                 TrigN2PurgeExchangeFOUPTOLAWaitTime.SetAOTrigger(time, out _);
 
-             }
 
-             if (SC.ContainsItem("PM1.N2Purge.O2DetectorFOUPToFOUPTime") && TrigN2PurgeExchangeFOUPTOFOUPWaitTime != null)
 
-             {
 
-                 var time = (float)SC.GetValue<double>("PM1.N2Purge.O2DetectorFOUPToFOUPTime");
 
-                 TrigN2PurgeExchangeFOUPTOFOUPWaitTime.SetAOTrigger(time, out _);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |