123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Text;
- using System.Threading.Tasks;
- using MECF.Framework.Common.Equipment;
- using VirgoRT.Scheduler;
- using MECF.Framework.Common.Schedulers;
- using MECF.Framework.Common.SubstrateTrackings;
- using Aitex.Core.RT.SCCore;
- namespace VirgoRT.Modules.Schedulers
- {
- public class SchedulerBuffer : SchedulerModule
- {
- private readonly int _MAX_SLOT = SC.GetValue<int>("EFEM.Buffer.SlotNumber");
- public override bool IsAvailable
- {
- get
- {
- return true;
- }
- }
- public SchedulerBuffer(ModuleName buffer) : base(buffer.ToString())
- {
- EventWaferArrived += WaferArrived;
- }
- private void WaferArrived(object sender, EventArgs e)
- {
- var eArgs = e as WaferMoveArgs;
- WaferArriveTicks[eArgs.DstSlot] = DateTime.Now.Ticks;
- }
- public override SlotItem GetReadyOutSlot()
- {
- double maxDelay = 0;
- SlotItem item = new SlotItem(ModuleName.System, -1);
- if (AutoTransfer_T.GetSystemInnerWaferCount() >= AutoTransfer_T.SystemInternalWaferCount)
- return item;
- for (int i = 0; i < _MAX_SLOT; i++)
- {
- var wafer = WaferManager.Instance.GetWafer(Module, i);
- if (wafer.IsEmpty || wafer.NextSequenceStep > wafer.ProcessJob.Sequence.Steps.Count) // wafer.NextSequenceStep already increased after wafer arrive
- continue;
- if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep - 1].StepParameter.ContainsKey("CoolingTime")) // parameter name may change
- continue;
- float stayTime;
- if (!float.TryParse((string)wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep - 1].StepParameter["CoolingTime"], out stayTime))
- continue;
- long elapsedTicks = DateTime.Now.Ticks - WaferArriveTicks[i];
- TimeSpan elapsedSpan = new TimeSpan(elapsedTicks);
- double delay = elapsedSpan.TotalSeconds - stayTime;
- if (delay > maxDelay)
- {
- maxDelay = delay;
- item.Module = Module;
- item.Slot = i;
- }
- }
- return item;
- }
- }
- }
|