移除Sequence中Buffer槽位的限制。

AutoTransfer中的UnLoad任务新增Wafer判断,如果WaferRobot、Aligner或Load任意模组上有需要做工艺的Wafer,则不执行UnLoad任务。
This commit is contained in:
DESKTOP-GPE37UV\THINKAPD 2022-12-16 15:27:04 +08:00
parent 6cca130761
commit 8b9724541b
2 changed files with 18 additions and 12 deletions

View File

@ -42,6 +42,7 @@ namespace Mainframe.EFEMs
public WaferRobotModule WaferRobotModule { get; set; }
public TrayRobotModule TrayRobotModule { get; set; }
@ -264,7 +265,7 @@ namespace Mainframe.EFEMs
private bool FsmStartHome(object[] param)
{
return WaferRobotModule.Home(out _) && TrayRobotModule.Home(out _);
return WaferRobotModule.Home(out _) && TrayRobotModule.Home(out _);
}
private bool FsmMonitorHomeTask(object[] param)

View File

@ -655,11 +655,11 @@ namespace SicRT.Modules
return false;
}
if(sequence.Steps[currentIndex].StepParameter["SlotSelection"].ToString().Contains("3"))
/*if(sequence.Steps[currentIndex].StepParameter["SlotSelection"].ToString().Contains("3"))
{
reason = $"Invalid sequence {seqs[i]},{currentIndex + 1}st step the option '3' cannot be selected in parameter 'SlotSelection' of Buffer.";
return false;
}
}*/
if (!sequence.Steps[currentIndex].StepParameter.ContainsKey("BufferType") || !sequence.Steps[currentIndex].StepParameter["BufferType"].ToString().Contains("Heat"))
{
@ -1779,16 +1779,17 @@ namespace SicRT.Modules
_unload.ResetPurgedAndSeparatedStatus();
}
// 如果Load等着TMRobot来拿盘先保障Load
/*if ( _load.CheckWaferNeedProcess(0)
|| (GetWaferInJobQueue() != null && GetRunWaferCount() < _maxTrayCount)) // 还有盘要做工艺并且整个腔体里的盘数量不足_maxTrayCount则不要占用Pump2
return;*/
// 当Load有Wafer时并且Buffer或Cass还有可用的Tray时不要再占用Pump2. 优先保证给PM喂盘
if (_load.CheckWaferNeedProcess(0) && !CheckNoTrayAvailableInBufferAndCass())
// 当Load, Aligner, WaferRobot有Wafer时并且Buffer或Cass还有可用的Tray时不要再占用Pump2. 优先保证给PM喂盘
if (
(_load.CheckWaferNeedProcess(0) || _aligner.CheckWaferNeedProcess(0) || _waferRobot.CheckWaferNeedProcess(0))
&& !CheckNoTrayAvailableInBufferAndCass())
return;
if (!_unload.IsAvailable)
{
return;
}
// TM把Wafer和Tray放如UnLoad后先冷却再分离然后取Tray前Purge
if (_unload.HasWafer(0) && _unload.HasTray(0))
{
@ -1812,6 +1813,11 @@ namespace SicRT.Modules
}
}
if (!_unload.IsAvailable)
{
return;
}
if (_unload.HasTray(0)) // UnLoad有Tray先让TMRobot取Tray
{
if (_unload.CheckWaferTraySeparated())
@ -2838,7 +2844,6 @@ namespace SicRT.Modules
//place UnLoad没有Tray,Load没有Tray,Robot有Tray,Cassette或Aligner有任务未完成
bool canPlace = _load.NoTray(0)
&& _trayRobot.HasTrayAndNotExceedProcessCount(0)
&& _unload.NoTray(0)
&& _load.HasWafer(0)
&& (GetWaferInJobQueue() != null || (_aligner.HasWafer(0) && _aligner.CheckWaferNeedProcess(0)) || (_waferRobot.HasWafer(0) && _waferRobot.CheckWaferNeedProcess(0)) || (_load.HasWafer(0) && _load.CheckWaferNeedProcess(0)));
if (canPlace)