|
|
@@ -674,7 +674,7 @@ namespace FurnaceRT.Equipments.Jobs
|
|
|
continue;
|
|
|
|
|
|
if (tj.CarrierParas.Any(x => x.Stocker == carrier.InternalModuleName))
|
|
|
- {
|
|
|
+ {
|
|
|
var carrierPara = tj.CarrierParas.FirstOrDefault(x => x.Stocker == carrier.InternalModuleName);
|
|
|
if (carrierPara != null && _waferRobot.Map(fims.Module, carrierPara.WaferCount, carrierPara.SlotMap, carrierPara.IsCompareWithSlotMap, true, Hand.Blade1))
|
|
|
{
|
|
|
@@ -857,8 +857,16 @@ namespace FurnaceRT.Equipments.Jobs
|
|
|
_lstFIMSs.Any(x => x.IsAvailable && x.IsReadyForPlace(ModuleName.CarrierRobot, 0)) &&
|
|
|
!SC.GetValue<bool>("WaferRobot.BypassFIMSMap"))
|
|
|
{
|
|
|
+ //有job执行且在charging和discharge状态,先不执行mapping
|
|
|
+ if (DATA.Poll("Scheduler.CurrentProcessJob") is ProcessJobInfo job && job != null &&
|
|
|
+ (job.ProcessingState == EnumProcessingState.CoolingBeforeDischarge || job.ProcessingState == EnumProcessingState.Charging || job.ProcessingState == EnumProcessingState.Discharging
|
|
|
+ || (job.ProcessingState == EnumProcessingState.Processing && DATA.Poll("PM1.RemainTimeToEnterCooling") is double t && t <=SC.GetValue<double>("System.Scheduler.LoadMappingForecastTime"))))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (tj.CarrierParas.Any(x => x.Stocker == carrier.InternalModuleName))
|
|
|
{
|
|
|
+
|
|
|
stocker = st;
|
|
|
break;
|
|
|
}
|
|
|
@@ -910,10 +918,7 @@ namespace FurnaceRT.Equipments.Jobs
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //map正常完成或者FIMS不具备map条件
|
|
|
- if (stocker != null && ((carrier.IsMapped && carrier.IsMapOK) ||
|
|
|
- SC.GetValue<bool>("WaferRobot.BypassFIMSMap") ||
|
|
|
- !_lstFIMSs.Any(x => x.IsOnline && CarrierManager.Instance.CheckNoCarrier(x.Module, 0))))
|
|
|
+ if (stocker != null)
|
|
|
{
|
|
|
if (_carrierRobot.Place(stocker.Module, 0, Hand.Blade1))
|
|
|
{
|
|
|
@@ -1040,6 +1045,13 @@ namespace FurnaceRT.Equipments.Jobs
|
|
|
SchedulerFIMS fims = null;
|
|
|
foreach (var st in _lstFIMSs)
|
|
|
{
|
|
|
+ //有job执行且在charging和discharge状态,先不执行mapping
|
|
|
+ if (DATA.Poll("Scheduler.CurrentProcessJob") is ProcessJobInfo job && job!=null&&
|
|
|
+ (job.ProcessingState == EnumProcessingState.CoolingBeforeDischarge || job.ProcessingState == EnumProcessingState.Charging || job.ProcessingState == EnumProcessingState.Discharging
|
|
|
+ ||(job.ProcessingState == EnumProcessingState.Processing&&DATA.Poll("PM1.RemainTimeToEnterCooling") is double t && t <= SC.GetValue<double>("System.Scheduler.LoadMappingForecastTime"))))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (!st.IsAvailable || !st.IsReadyForPlace(ModuleName.CarrierRobot, 0))
|
|
|
continue;
|
|
|
var fimsDevice = DEVICE.GetDevice<IoFIMS>($"PM1.{st.Module}");
|