|
|
@@ -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()))
|