调试传盘流程
This commit is contained in:
parent
810a67b001
commit
f745f4a51e
|
@ -709,12 +709,12 @@ namespace SicModules.LLs
|
|||
|
||||
public override bool CheckTrayClamped()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _llDevice.CheckTrayClamped();
|
||||
}
|
||||
|
||||
public override bool CheckTrayUnClamped()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _llDevice.CheckTrayUnClamped();
|
||||
}
|
||||
|
||||
public override bool CheckWaferClamped()
|
||||
|
@ -724,15 +724,15 @@ namespace SicModules.LLs
|
|||
|
||||
public override bool CheckWaferUnClamped()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _llDevice.CheckWaferUnClamped();
|
||||
}
|
||||
public override bool CheckWaferPlaced()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _llDevice.CheckWaferPlaced();
|
||||
}
|
||||
public override bool CheckTrayPlaced()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
return _llDevice.CheckTrayPlaced();
|
||||
}
|
||||
|
||||
private bool PutOnline()
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
<TableSequenceFormat RecipeVersion="Sic">
|
||||
<Catalog Type="Position">
|
||||
<Item Name="Position" DisplayName="Position" InputType="ReadOnlySelection" >
|
||||
<Selection Name="PM1" DisplayName="PM1" Parameter="ProcessRecipe" />
|
||||
<Selection Name="PM2" DisplayName="PM2" Parameter="ProcessRecipe" />
|
||||
<Selection Name="Buffer" DisplayName="Buffer" Parameter="PurgeCount,PumpDelayTime" />
|
||||
<Selection Name="Aligner" DisplayName="Aligner" Parameter="" />
|
||||
<Selection Name="Load" DisplayName="Load" Parameter="PurgeCount,PumpDelayTime" />
|
||||
<Selection Name="UnLoad" DisplayName="UnLoad" Parameter="PurgeCount,PumpDelayTime,PurgeCountBeforeWaferPicking,PumpDelayTimeBeforeWaferPicking,PurgeCountAfterWaferPicking,PumpDelayTimeAfterWaferPicking,CoolingTime" />
|
||||
<Selection Name="PM1" DisplayName="PM1" Parameter="ProcessRecipe" />
|
||||
<Selection Name="PM2" DisplayName="PM2" Parameter="ProcessRecipe" />
|
||||
<Selection Name="Buffer" DisplayName="Buffer" Parameter="SetValue" />
|
||||
<Selection Name="Load" DisplayName="Load" Parameter="SetValue,PurgeCount,PumpDelayTime" />
|
||||
</Item>
|
||||
</Catalog>
|
||||
|
||||
|
@ -27,6 +25,9 @@
|
|||
<Selection Name="HeatByTime" DisplayName="HeatByTime"/>
|
||||
<Selection Name="CoolingByTime" DisplayName="CoolingByTime"/>
|
||||
</Item>
|
||||
<Item Name="Type" DisplayName="Type" InputType="ReadOnlySelection" >
|
||||
<Selection Name="CoolingByTime" DisplayName="CoolingByTime"/>
|
||||
</Item>
|
||||
<Item Name="SetValue" DisplayName="SetValue" InputType="NumInput" Min="0" Max="10000" />
|
||||
<Item Name="PurgeCount" DisplayName="PurgeCount" InputType="NumInput" Min="0" Max="1000" />
|
||||
<Item Name="PumpDelayTime" DisplayName="PumpDelayTime" InputType="NumInput" Min="0" Max="1000" />
|
||||
|
|
|
@ -18,7 +18,6 @@ using MECF.Framework.Common.SubstrateTrackings;
|
|||
using SicRT.Equipments.Schedulers;
|
||||
using SicRT.Modules.Schedulers;
|
||||
|
||||
|
||||
namespace SicRT.Modules
|
||||
{
|
||||
public partial class ManualAutoTransfer : SchedulerModuleFactory
|
||||
|
@ -64,9 +63,9 @@ namespace SicRT.Modules
|
|||
|
||||
private Dictionary<string, DateTime> _bufferWaferInfo = new();
|
||||
|
||||
Queue<Action> waferRobotActions = new() { };
|
||||
Queue<Action> trayRobotActions = new() { };
|
||||
Queue<Action> tmRobotActions = new() { };
|
||||
private Queue<Action> waferRobotActions = new() { };
|
||||
private Queue<Action> trayRobotActions = new() { };
|
||||
private Queue<Action> tmRobotActions = new() { };
|
||||
|
||||
private R_TRIG _updateAutoJobLocation = new(); //需要向数据库更新Wafer位置
|
||||
|
||||
|
@ -133,6 +132,7 @@ namespace SicRT.Modules
|
|||
tmRobotActions.Enqueue(MonitorTmRobotPMPickTask);
|
||||
tmRobotActions.Enqueue(MonitorTmRobotBufferPlaceTask);
|
||||
tmRobotActions.Enqueue(MonitorTmRobotBufferPickTask);
|
||||
|
||||
}
|
||||
|
||||
public bool HasJobRunning
|
||||
|
@ -140,7 +140,6 @@ namespace SicRT.Modules
|
|||
get { return _lstControlJobs.Count > 0; }
|
||||
}
|
||||
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
_tmRobot.ResetTask();
|
||||
|
@ -186,7 +185,6 @@ namespace SicRT.Modules
|
|||
_isCycleMode = SC.GetValue<bool>("System.IsCycleMode");
|
||||
_cycleSetPoint = _isCycleMode ? SC.GetValue<int>("System.CycleCount") : 0;
|
||||
|
||||
|
||||
_maxTrayCount = _lstPms.Count * 2;
|
||||
}
|
||||
|
||||
|
@ -418,7 +416,6 @@ namespace SicRT.Modules
|
|||
//JobDataRecorder.StartCJ(cj.InnerId.ToString(), carrier.InnerId.ToString(), cj.Name, cj.Module, cj.Module, totalWafer);
|
||||
JobDataRecorder.StartCJ(cj.InnerId.ToString(), null, cj.Name, cj.Module, cj.Module, totalWafer);
|
||||
|
||||
|
||||
//保存信息
|
||||
var waferInfo = WaferManager.Instance.GetWafer(ModuleName.LoadLock, 0);
|
||||
if (waferInfo != null)
|
||||
|
@ -519,7 +516,6 @@ namespace SicRT.Modules
|
|||
// }
|
||||
// }
|
||||
|
||||
|
||||
// currentIndex++;
|
||||
// if (sequence.Steps[currentIndex] == null || sequence.Steps[currentIndex].StepModules.Count <= 0 || sequence.Steps[currentIndex].StepModules.Any(pm => !ModuleHelper.IsPm(pm)))
|
||||
// {
|
||||
|
@ -599,7 +595,6 @@ namespace SicRT.Modules
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
if (_lstProcessJobs.Count <= 0) //判断上一步ProcessJob是否创建成功
|
||||
{
|
||||
EV.PostWarningLog(LogSource, $"process job is not exist");
|
||||
|
@ -614,7 +609,6 @@ namespace SicRT.Modules
|
|||
cj.LotWafers = new List<WaferInfoRt>();
|
||||
cj.SetState(EnumControlJobState.WaitingForStart);
|
||||
|
||||
|
||||
var totalWafer = 0;
|
||||
foreach (var pjName in pjIDs)
|
||||
{
|
||||
|
@ -625,7 +619,6 @@ namespace SicRT.Modules
|
|||
continue;
|
||||
}
|
||||
|
||||
|
||||
var slotWafers = new List<Tuple<ModuleName, int>>();
|
||||
foreach (var slotWafer in pj.SlotWafers)
|
||||
{
|
||||
|
@ -648,8 +641,6 @@ namespace SicRT.Modules
|
|||
|
||||
slotWafers.Add(Tuple.Create(ModuleHelper.Converter(module), slotWafer.Item2));
|
||||
|
||||
|
||||
|
||||
totalWafer++;
|
||||
}
|
||||
|
||||
|
@ -691,7 +682,6 @@ namespace SicRT.Modules
|
|||
var lstUnLoad = new List<int>();
|
||||
var lstPM = new List<int>();
|
||||
|
||||
|
||||
for (var i = 0; i < sequenceInfo.Steps.Count; i++)
|
||||
{
|
||||
if (sequenceInfo.Steps[i].StepModules.Count == 0)
|
||||
|
@ -754,8 +744,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var slotWafers = new List<Tuple<ModuleName, int>>();
|
||||
foreach (var slot in slotNumbers)
|
||||
{
|
||||
|
@ -989,7 +977,8 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion Job Management
|
||||
|
||||
/// <summary>
|
||||
/// Start Auto Transfer
|
||||
|
@ -1014,6 +1003,7 @@ namespace SicRT.Modules
|
|||
|
||||
public Result Monitor()
|
||||
{
|
||||
|
||||
var cjActive = _lstControlJobs.Find(x => x.State == EnumControlJobState.Executing);
|
||||
if (cjActive != null)
|
||||
{
|
||||
|
@ -1034,6 +1024,7 @@ namespace SicRT.Modules
|
|||
}
|
||||
|
||||
#region Job task
|
||||
|
||||
public Result MonitorJobTasks()
|
||||
{
|
||||
UpdateProcessJobStatus();
|
||||
|
@ -1087,7 +1078,6 @@ namespace SicRT.Modules
|
|||
{
|
||||
return ModuleName.CassAL;
|
||||
}
|
||||
|
||||
}
|
||||
return moduleFrom;
|
||||
}
|
||||
|
@ -1123,7 +1113,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1256,7 +1245,6 @@ namespace SicRT.Modules
|
|||
_cycledWafer = _cycledCount * countPerCycle + countProcessed;
|
||||
//StatsDataManager.Instance.SetValue(StatsNameTotalRunningWafer, _totalWaferWhenStart + _cycledWafer);
|
||||
|
||||
|
||||
if (allControlJobComplete)
|
||||
{
|
||||
_cycledCount++;
|
||||
|
@ -1282,7 +1270,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach (var cj in cjRemoveList)
|
||||
|
@ -1415,7 +1402,8 @@ namespace SicRT.Modules
|
|||
|
||||
return true;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion Job task
|
||||
|
||||
#region Module task
|
||||
|
||||
|
@ -1428,7 +1416,6 @@ namespace SicRT.Modules
|
|||
// || (_unload.IsInPumping && _load.IsInPumping))
|
||||
// EV.PostAlarmLog("Schedule", $"检测到 _load.IsInPumping :{_load.IsInPumping}, _unload.IsInPumping :{_unload.IsInPumping}, _tmRobot.IsInPumping :{_tmRobot.IsInPumping}");
|
||||
|
||||
|
||||
MonitorPMTask();
|
||||
MonitorBufferTask();
|
||||
|
||||
|
@ -1438,6 +1425,8 @@ namespace SicRT.Modules
|
|||
return Result.RUN;
|
||||
}
|
||||
|
||||
#region SIC多片机报错
|
||||
|
||||
private void MonitorBufferTask()
|
||||
{
|
||||
if (!_buffer.IsAvailable)
|
||||
|
@ -1459,10 +1448,7 @@ namespace SicRT.Modules
|
|||
}
|
||||
|
||||
var bufferSetValue = 0;
|
||||
if (!GetWaferSequenceNextValue(ModuleName.Buffer, i, "Type", out var strBufferType))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!GetWaferSequenceNextValue(ModuleName.Buffer, i, "SetValue", out var strBufferSetValue))
|
||||
{
|
||||
continue;
|
||||
|
@ -1472,88 +1458,33 @@ namespace SicRT.Modules
|
|||
continue;
|
||||
}
|
||||
|
||||
//分别判断冷却和加热方式温度是否达到
|
||||
if (strBufferType == "HeatByTemp")
|
||||
if (_bufferWaferInfo.ContainsKey(bufferWafer.WaferInnerID.ToString()))
|
||||
{
|
||||
if (_bufferWaferInfo.ContainsKey(bufferWafer.WaferInnerID.ToString()))
|
||||
{
|
||||
var dtStartTime = _bufferWaferInfo[bufferWafer.WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
var dtStartTime = _bufferWaferInfo[bufferWafer.WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
|
||||
//选择By温度5秒后再判断温度
|
||||
if (pastTime > 5)
|
||||
{
|
||||
if (_buffer.GetTemperature() >= bufferSetValue)
|
||||
bufferWafer.NextSequenceStep++;
|
||||
_bufferWaferInfo.Remove(bufferWafer.WaferInnerID.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
if (i == 0)
|
||||
{
|
||||
_bufferWaferInfo.Add(bufferWafer.WaferInnerID.ToString(), DateTime.Now);
|
||||
_timeBuffer1 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
_timeBuffer2 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 2)
|
||||
{
|
||||
_timeBuffer3 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
|
||||
if (pastTime > bufferSetValue)
|
||||
{
|
||||
bufferWafer.NextSequenceStep++;
|
||||
_bufferWaferInfo.Remove(bufferWafer.WaferInnerID.ToString());
|
||||
}
|
||||
}
|
||||
else if (strBufferType == "HeatByTime")
|
||||
else
|
||||
{
|
||||
if (_bufferWaferInfo.ContainsKey(bufferWafer.WaferInnerID.ToString()))
|
||||
{
|
||||
var dtStartTime = _bufferWaferInfo[bufferWafer.WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
_timeBuffer1 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
_timeBuffer2 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 2)
|
||||
{
|
||||
_timeBuffer3 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
|
||||
if (pastTime > bufferSetValue)
|
||||
{
|
||||
bufferWafer.NextSequenceStep++;
|
||||
_bufferWaferInfo.Remove(bufferWafer.WaferInnerID.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_bufferWaferInfo.Add(bufferWafer.WaferInnerID.ToString(), DateTime.Now);
|
||||
}
|
||||
}
|
||||
else if (strBufferType == "CoolingByTime")
|
||||
{
|
||||
if (_bufferWaferInfo.ContainsKey(bufferWafer.WaferInnerID.ToString()))
|
||||
{
|
||||
var dtStartTime = _bufferWaferInfo[bufferWafer.WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
|
||||
if (i == 0)
|
||||
{
|
||||
_timeBuffer1 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
_timeBuffer2 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
else if (i == 2)
|
||||
{
|
||||
_timeBuffer3 = pastTime > bufferSetValue ? 0 : (bufferSetValue - pastTime);
|
||||
}
|
||||
|
||||
if (pastTime > bufferSetValue)
|
||||
{
|
||||
bufferWafer.NextSequenceStep++;
|
||||
_bufferWaferInfo.Remove(bufferWafer.WaferInnerID.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_bufferWaferInfo.Add(bufferWafer.WaferInnerID.ToString(), DateTime.Now);
|
||||
}
|
||||
_bufferWaferInfo.Add(bufferWafer.WaferInnerID.ToString(), DateTime.Now);
|
||||
}
|
||||
|
||||
return;
|
||||
|
@ -1567,6 +1498,8 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
|
||||
#endregion SIC多片机报错
|
||||
|
||||
/// <summary>
|
||||
/// 检测到LL中的Wafer已完成Job。
|
||||
/// </summary>
|
||||
|
@ -1600,7 +1533,6 @@ namespace SicRT.Modules
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!_load.CheckWaferSequenceStepDone(0))
|
||||
{
|
||||
if (_load.CheckWaferNextStepIsThis(ModuleName.LoadLock, 0))
|
||||
|
@ -1615,11 +1547,7 @@ namespace SicRT.Modules
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!GetWaferSequenceNextValue(ModuleName.Load, 0, "Type", out var strType))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!GetWaferSequenceNextValue(ModuleName.Load, 0, "SetValue", out var strSetValue))
|
||||
{
|
||||
return;
|
||||
|
@ -1630,54 +1558,39 @@ namespace SicRT.Modules
|
|||
return;
|
||||
}
|
||||
|
||||
//Load腔没有测温
|
||||
//if (strType == "CoolingByTemp")
|
||||
//{
|
||||
// if (_load.GetTemperature() <= setValue)
|
||||
// {
|
||||
// _load.Purge(_load.GetWaferPurgeCount(0), _load.GetWaferPumpDelayTime(0));
|
||||
|
||||
// _load.Vent();
|
||||
|
||||
// _load.GetWaferInfo(0).NextSequenceStep++;
|
||||
// }
|
||||
//}
|
||||
if (strType == "CoolingByTime")
|
||||
if (_loadWaferInfo.ContainsKey(_load.GetWaferInfo(0).WaferInnerID.ToString()))
|
||||
{
|
||||
if (_loadWaferInfo.ContainsKey(_load.GetWaferInfo(0).WaferInnerID.ToString()))
|
||||
var dtStartTime = _loadWaferInfo[_load.GetWaferInfo(0).WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
|
||||
_timeLoad = pastTime > setValue ? 0 : (setValue - pastTime);
|
||||
|
||||
if (pastTime > setValue)
|
||||
{
|
||||
var dtStartTime = _loadWaferInfo[_load.GetWaferInfo(0).WaferInnerID.ToString()];
|
||||
var pastTime = (DateTime.Now - dtStartTime).TotalSeconds;
|
||||
|
||||
_timeLoad = pastTime > setValue ? 0 : (setValue - pastTime);
|
||||
|
||||
if (pastTime > setValue)
|
||||
if (!_load.CheckPurged())
|
||||
{
|
||||
if (!_load.CheckPurged())
|
||||
{
|
||||
_load.Purge(_load.GetWaferPurgeCount(0), _load.GetWaferPumpDelayTime(0));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
_load.ResetPurged();
|
||||
|
||||
_load.Vent();
|
||||
|
||||
_load.GetWaferInfo(0).NextSequenceStep++;
|
||||
|
||||
_loadWaferInfo.Remove(_load.GetWaferInfo(0).WaferInnerID.ToString());
|
||||
_load.Purge(_load.GetWaferPurgeCount(0), _load.GetWaferPumpDelayTime(0));
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_loadWaferInfo.Add(_load.GetWaferInfo(0).WaferInnerID.ToString(), DateTime.Now);
|
||||
|
||||
_load.ResetPurged();
|
||||
|
||||
_load.Vent();
|
||||
|
||||
_load.GetWaferInfo(0).NextSequenceStep++;
|
||||
|
||||
_loadWaferInfo.Remove(_load.GetWaferInfo(0).WaferInnerID.ToString());
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_loadWaferInfo.Add(_load.GetWaferInfo(0).WaferInnerID.ToString(), DateTime.Now);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!_load.IsReadyForPick(ModuleName.TMRobot, 0) && !_tmRobot.IsInPumping)
|
||||
|
@ -1710,7 +1623,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
private void MonitorPMTask()
|
||||
{
|
||||
//if (_pm1.FirstDetectTrayArrive(0))
|
||||
|
@ -1771,43 +1683,8 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
|
||||
private void MonitorTmRobotTask()
|
||||
{
|
||||
// TMRobot Idle或者Error时,清除被传盘对象的等待状态
|
||||
if (_tmRobot.CheckTaskDone())
|
||||
{
|
||||
foreach (var pm in _lstPms.Where(
|
||||
pm => pm.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone()))
|
||||
{
|
||||
pm.StopWaitTransfer(ModuleName.TMRobot);
|
||||
}
|
||||
|
||||
if (_buffer.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone())
|
||||
_buffer.StopWaitTransfer(ModuleName.TMRobot);
|
||||
|
||||
if (_load.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone())
|
||||
_load.StopWaitTransfer(ModuleName.TMRobot);
|
||||
|
||||
//if (_unload.IsWaitTransfer(ModuleName.TMRobot))
|
||||
// _unload.StopWaitTransfer(ModuleName.TMRobot);
|
||||
}
|
||||
|
||||
if (!_tmRobot.IsAvailable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_tmRobot.IsAvailable)
|
||||
return;
|
||||
|
||||
var act = tmRobotActions.Peek();
|
||||
act.Invoke();
|
||||
|
||||
tmRobotActions.Enqueue(tmRobotActions.Dequeue());
|
||||
}
|
||||
|
||||
|
||||
#region TmRobotTask
|
||||
|
||||
private void MonitorTmRobotLoadPlaceTask()
|
||||
{
|
||||
if (!_load.IsAvailable || !_tmRobot.IsAvailable)
|
||||
|
@ -1886,7 +1763,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void MonitorTmRobotBufferPlaceTask()
|
||||
|
@ -1948,7 +1824,41 @@ namespace SicRT.Modules
|
|||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void MonitorTmRobotTask()
|
||||
{
|
||||
// TMRobot Idle或者Error时,清除被传盘对象的等待状态
|
||||
if (_tmRobot.CheckTaskDone())
|
||||
{
|
||||
foreach (var pm in _lstPms.Where(
|
||||
pm => pm.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone()))
|
||||
{
|
||||
pm.StopWaitTransfer(ModuleName.TMRobot);
|
||||
}
|
||||
|
||||
if (_buffer.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone())
|
||||
_buffer.StopWaitTransfer(ModuleName.TMRobot);
|
||||
|
||||
if (_load.IsWaitTransfer(ModuleName.TMRobot) && _tmRobot.CheckTaskDone())
|
||||
_load.StopWaitTransfer(ModuleName.TMRobot);
|
||||
|
||||
//if (_unload.IsWaitTransfer(ModuleName.TMRobot))
|
||||
// _unload.StopWaitTransfer(ModuleName.TMRobot);
|
||||
}
|
||||
|
||||
if (!_tmRobot.IsAvailable)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_tmRobot.IsAvailable)
|
||||
return;
|
||||
|
||||
var act = tmRobotActions.Peek();
|
||||
act.Invoke();
|
||||
|
||||
tmRobotActions.Enqueue(tmRobotActions.Dequeue());
|
||||
}
|
||||
|
||||
private void MonitorTmRobotBufferPickTask()
|
||||
|
@ -2004,7 +1914,6 @@ namespace SicRT.Modules
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2052,7 +1961,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2087,7 +1995,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void MonitorTmRobotPMPlaceTask()
|
||||
|
@ -2125,7 +2032,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void MonitorTmRobotPMPickTask()
|
||||
|
@ -2184,13 +2090,12 @@ namespace SicRT.Modules
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#endregion TmRobotTask
|
||||
|
||||
#endregion
|
||||
#endregion Module task
|
||||
|
||||
#region Logic Check
|
||||
|
||||
|
@ -2339,7 +2244,6 @@ namespace SicRT.Modules
|
|||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
public bool CheckWaferProcessModuleIsAvailable(ModuleName waferModule, int waferSlot)
|
||||
|
@ -2399,7 +2303,6 @@ namespace SicRT.Modules
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
private SlotItem GetWaferInJobQueue()
|
||||
{
|
||||
var processingWafers = new List<Tuple<ModuleName, int>>();
|
||||
|
@ -2435,7 +2338,6 @@ namespace SicRT.Modules
|
|||
{
|
||||
return SortBySerialMode(processingWafers);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -2740,9 +2642,8 @@ namespace SicRT.Modules
|
|||
//}
|
||||
//return waferCount;
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#endregion Logic Check
|
||||
|
||||
#region Module error
|
||||
|
||||
|
@ -2767,7 +2668,6 @@ namespace SicRT.Modules
|
|||
|
||||
if (isModuleError && !_isModuleErrorPrevious)
|
||||
{
|
||||
|
||||
}
|
||||
else if (!isModuleError && _isModuleErrorPrevious)
|
||||
{
|
||||
|
@ -2891,7 +2791,6 @@ namespace SicRT.Modules
|
|||
reason = $"TmRobot have wafer!";
|
||||
EV.PostWarningLog(LogSource, reason);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (!_load.HasWafer(0))
|
||||
|
@ -2899,7 +2798,6 @@ namespace SicRT.Modules
|
|||
reason = $"Load have no wafer!";
|
||||
EV.PostWarningLog(LogSource, reason);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
if (!_load.HasTray(0))
|
||||
|
@ -2907,7 +2805,6 @@ namespace SicRT.Modules
|
|||
reason = $"Load have no Tray!";
|
||||
EV.PostWarningLog(LogSource, reason);
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -2952,7 +2849,6 @@ namespace SicRT.Modules
|
|||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion Module error
|
||||
}
|
||||
}
|
||||
}
|
|
@ -90,6 +90,8 @@ namespace SicRT.Modules.Schedulers
|
|||
return _cassetteBL;
|
||||
case ModuleName.LoadLock:
|
||||
return _load;
|
||||
case ModuleName.Load:
|
||||
return _load;
|
||||
case ModuleName.UnLoad:
|
||||
return _unload;
|
||||
case ModuleName.Aligner:
|
||||
|
|
|
@ -502,7 +502,7 @@ namespace SicSimulator.Instances
|
|||
{
|
||||
if (IO.AI[$"{pm}.AI_ActualPressure"].Value + 10 < IO.AO[$"{pm}.AO_SetpointPressure"].Value)
|
||||
{
|
||||
IO.AI[$"{pm}.AI_ActualPressure"].Value += 10;
|
||||
IO.AI[$"{pm}.AI_ActualPressure"].Value += 50;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -518,7 +518,7 @@ namespace SicSimulator.Instances
|
|||
{
|
||||
if (IO.AI[$"{pm}.AI_ActualPressure"].Value < 1200)
|
||||
{
|
||||
IO.AI[$"{pm}.AI_ActualPressure"].Value += 10;
|
||||
IO.AI[$"{pm}.AI_ActualPressure"].Value += 50;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
</unitControls:Door.RenderTransform>
|
||||
</unitControls:Door>
|
||||
<!-- Tray和晶圆 -->
|
||||
<Canvas Visibility="{Binding IsPM1Installed, Converter={StaticResource BoolVisibilityConverter}}">
|
||||
<Canvas Visibility="{Binding IsPM1Installed, Converter={StaticResource BoolVisibilityConverter}}">
|
||||
<Image
|
||||
Canvas.Left="248"
|
||||
Canvas.Top="182"
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
xmlns:controls="http://OpenSEMI.Ctrlib.com/presentation"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
|
||||
xmlns:lex="http://wpflocalizeextension.codeplex.com"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:micro="clr-namespace:Caliburn.Micro;assembly=MECF.Framework.UI.Client"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
xmlns:lex="http://wpflocalizeextension.codeplex.com"
|
||||
lex:LocalizeDictionary.DesignCulture="zh"
|
||||
lex:ResxLocalizationProvider.DefaultAssembly="Sicentury.Localization"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_overview">
|
||||
|
|
Loading…
Reference in New Issue