Browse Source

fix fims 开门添加runing互斥判定

jiangjy 1 month ago
parent
commit
5b059b0ad5

+ 30 - 3
Furnace/FurnaceRT/Equipments/Jobs/AutoTransfer.cs

@@ -1685,6 +1685,9 @@ namespace FurnaceRT.Equipments.Jobs
             if (pj == null || pj.IsEmptyLayout)
                 return;
 
+            var fims1Device = DEVICE.GetDevice<IoFIMS>($"PM1.FIMS1");
+            var fims2Device = DEVICE.GetDevice<IoFIMS>($"PM1.FIMS2");
+
             //load
             if (pj.ProcessingState == EnumProcessingState.Charging)
             {
@@ -1693,7 +1696,16 @@ namespace FurnaceRT.Equipments.Jobs
                     if (!st.IsAvailable || !CarrierManager.Instance.CheckHasCarrier(st.Module, 0))
                         continue;
 
+                    if (!SC.GetValue<bool>("System.IsSimulatorMode"))
+                    {
+                        if (st.Module == ModuleName.FIMS1 && fims2Device.IsRunning)
+                            continue;
+
+                        if (st.Module == ModuleName.FIMS2 && fims1Device.IsRunning)
+                            continue;
+                    }
                     var fimsDevice = DEVICE.GetDevice<IoFIMS>($"PM1.{st.Module}");
+
                     if (!CheckCarrierCanPickFromFIMS(st.Module) && !fimsDevice.IsLoadCompleted)
                     {
                         var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
@@ -1705,7 +1717,7 @@ namespace FurnaceRT.Equipments.Jobs
                         {
 
                             _fimsCheckOxDensityDict[st.Module.ToString()].Item1.CheckInterval = 1;
-                            _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferChargeLAO2CheckSV));
+                            _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferChargeLAO2CheckSV) && pm.CheckIsLASide());
                             if (_fimsCheckOxDensityDict[st.Module.ToString()].Item1.Trig)
                             {
                                 if (st.Load(CheckFimsIsNeedOxygenPressure, N2PurgeModeEnum.WaferCharge.ToString()))
@@ -1747,6 +1759,14 @@ namespace FurnaceRT.Equipments.Jobs
                     var wafers = WaferManager.Instance.GetWafers(st.Module);
                     if (wafers != null)
                     {
+                        if (!SC.GetValue<bool>("System.IsSimulatorMode"))
+                        {
+                            if (st.Module == ModuleName.FIMS1 && fims2Device.IsRunning)
+                                continue;
+
+                            if (st.Module == ModuleName.FIMS2 && fims1Device.IsRunning)
+                                continue;
+                        }
                         if (CheckCarrierNoHasEmptySlot(st.Module) && !fimsDevice.IsLoadCompleted)
                         {
                             var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
@@ -1758,7 +1778,7 @@ namespace FurnaceRT.Equipments.Jobs
                             if (isCheckO2)
                             {
                                 _fimsCheckOxDensityDict[st.Module.ToString()].Item1.CheckInterval = 1;
-                                _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferDisChargeLAO2CheckSV));
+                                _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferDisChargeLAO2CheckSV) && pm.CheckIsLASide());
                                 if (_fimsCheckOxDensityDict[st.Module.ToString()].Item1.Trig)
                                 {
                                     if (st.Load(CheckFimsIsNeedOxygenPressure, N2PurgeModeEnum.WaferDisCharge.ToString()))
@@ -1794,7 +1814,14 @@ namespace FurnaceRT.Equipments.Jobs
                     var carrier = CarrierManager.Instance.GetCarrier(st.Module, 0);
                     if (carrier != null)
                     {
+                        if (!SC.GetValue<bool>("System.IsSimulatorMode"))
+                        {
+                            if (st.Module == ModuleName.FIMS1 && fims2Device.IsRunning)
+                                continue;
 
+                            if (st.Module == ModuleName.FIMS2 && fims1Device.IsRunning)
+                                continue;
+                        }
                         if (!CheckCarrierCanPickFromFIMSInDischarge(carrier.InternalModuleName) && !fimsDevice.IsLoadCompleted)
                         {
                             var pm = (Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule);
@@ -1805,7 +1832,7 @@ namespace FurnaceRT.Equipments.Jobs
                             if (isCheckO2)
                             {
                                 _fimsCheckOxDensityDict[st.Module.ToString()].Item1.CheckInterval = 1;
-                                _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferDisChargeLAO2CheckSV));
+                                _fimsCheckOxDensityDict[st.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(waferDisChargeLAO2CheckSV) && pm.CheckIsLASide());
                                 if (_fimsCheckOxDensityDict[st.Module.ToString()].Item1.Trig)
                                 {
                                     if (st.Load(CheckFimsIsNeedOxygenPressure, N2PurgeModeEnum.WaferDisCharge.ToString()))

+ 11 - 1
Furnace/FurnaceRT/Equipments/Jobs/TransferJob.cs

@@ -586,12 +586,22 @@ namespace FurnaceRT.Equipments.Jobs
                                 var foupEnterFIMSN2purgeConfig = pm.GetFoupEnterFIMSN2purgeConfig();
                                 var foupEnterLAO2CheckSV = pm.GetFoupEnterLAO2CheckSV();
                                 var lACurrectN2purgeMode = pm.GetLACurrectN2purgeMode();
+                                if (!SC.GetValue<bool>("System.IsSimulatorMode"))
+                                {
 
+                                    var fims1Device = DEVICE.GetDevice<IoFIMS>($"PM1.FIMS1");
+                                    var fims2Device = DEVICE.GetDevice<IoFIMS>($"PM1.FIMS2");
+                                    if (fims.Module == ModuleName.FIMS1 && fims2Device.IsRunning)
+                                        continue;
+
+                                    if (fims.Module == ModuleName.FIMS2 && fims1Device.IsRunning)
+                                        continue;
+                                }
                                 var CheckFimsIsNeedOxygenPressure = pm.CheckFimsIsNeedOxygenPressure(foupEnterFIMSN2purgeConfig, "", out var isCheckO2, false);
                                 if (isCheckO2)
                                 {
                                     tj.FimsCheckOxDensityDict[fims.Module.ToString()].Item1.CheckInterval = 1;
-                                    tj.FimsCheckOxDensityDict[fims.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(foupEnterLAO2CheckSV));
+                                    tj.FimsCheckOxDensityDict[fims.Module.ToString()].Item1.Monitor(pm.GetN2PurgeUnder20PPMStatus(foupEnterLAO2CheckSV) && pm.CheckIsLASide());
                                     if (tj.FimsCheckOxDensityDict[fims.Module.ToString()].Item1.Trig)
                                     {
                                         if (fims.Load(CheckFimsIsNeedOxygenPressure, N2PurgeModeEnum.FoupEnter.ToString()))