123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- using Aitex.Core.Common;
- using Aitex.Core.RT.Event;
- using Aitex.Core.UI.Control;
- using Aitex.Core.Util;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.Jobs;
- using MECF.Framework.Common.SubstrateTrackings;
- using CyberX8_RT.Dispatch;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using MECF.Framework.Common.WaferHolder;
- namespace CyberX8_RT.Modules
- {
- public interface ISchedulerFACallback
- {
- void JobCreated(ControlJobInfo cj);
- void JobCreateFailed(string module, string lotID, string jobID,string reason);
- void JobStarted(ControlJobInfo cj);
- void JobStopped(ControlJobInfo cj);
- void JobPaused(ControlJobInfo cj);
- void JobResumed(ControlJobInfo cj);
- void JobFinished(ControlJobInfo cj);
- void JobWaferStart(ControlJobInfo cj, string sequenceId, int slotID);
- void JobWaferEnd(ControlJobInfo cj, string sequenceId,int slotID);
- void WaferShuttleJobStart(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo);
- void WaferShuttleJobEnd(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo);
- void WaferShuttleRecipeStart(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId);
- void WaferShuttleRecipeEnd(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId, int processTimeLength);
- void WaferShuttleRecipeFailed(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId);
- void SrdRecipeStart(ControlJobInfo cj, string sequenceId, string recipeId, string module, int slotID);
- void SrdRecipeEnd(ControlJobInfo cj, string sequenceId, string recipeId, string module, int slotID);
- void SrdRecipeFailed(ControlJobInfo cj, string sequenceId, string recipeId, string module, int slotID);
- }
- public class SchedulerFACallback : ISchedulerFACallback
- {
- private const string EventPortJobStarted = "PortJobStarted";
- private const string EventPortJobStopped = "PortJobStopped";
- private const string EventPortJobPaused = "PortJobPaused";
- private const string EventPortJobResumed = "PortJobResumed";
- private const string EventPortJobFinished = "PortJobFinished";
- private const string EventPortJobFailed = "PortJobFailed";
- private const string EventPortSequenceSelected = "PortPPSelected";
- private const string EventPortSequenceSelectFailed = "PortPPSelectFailed";
- private const string EventPortJobWaferStart = "PortJobWaferStart";
- private const string EventPortJobWaferEnd = "PortJobWaferEnd";
- private const string EventWaferShuttleJobStart = "WaferShuttleJobStart";
- private const string EventWaferShuttleJobEnd = "WaferShuttleJobEnd";
- private const string EventWaferShuttleRecipeStart = "WaferShuttleRecipeStart";
- private const string EventWaferShuttleRecipeEnd = "WaferShuttleRecipeEnd";
- private const string EventWaferShuttleRecipeFailed = "WaferShuttleRecipeFailed";
- private const string EventSRDRecipeStart = "SRDRecipeStart";
- private const string EventSRDRecipeEnd = "SRDRecipeEnd";
- private const string EventSRDRecipeFailed = "SRDRecipeFailed";
- public SchedulerFACallback()
- {
- EV.Subscribe(new EventItem("Event", EventPortJobStarted, EventPortJobStarted));
- EV.Subscribe(new EventItem("Event", EventPortJobStopped, EventPortJobStopped));
- EV.Subscribe(new EventItem("Event", EventPortJobPaused, EventPortJobPaused));
- EV.Subscribe(new EventItem("Event", EventPortJobResumed, EventPortJobResumed));
- EV.Subscribe(new EventItem("Event", EventPortJobFinished, EventPortJobFinished));
- EV.Subscribe(new EventItem("Event", EventPortJobFailed, EventPortJobFailed));
- EV.Subscribe(new EventItem("Event", EventPortSequenceSelected, EventPortSequenceSelected));
- EV.Subscribe(new EventItem("Event", EventPortSequenceSelectFailed, EventPortSequenceSelectFailed));
- EV.Subscribe(new EventItem("Event", EventPortJobWaferStart, EventPortJobWaferStart));
- EV.Subscribe(new EventItem("Event", EventPortJobWaferEnd, EventPortJobWaferEnd));
- EV.Subscribe(new EventItem("Event", EventWaferShuttleJobStart, EventWaferShuttleJobStart));
- EV.Subscribe(new EventItem("Event", EventWaferShuttleJobEnd, EventWaferShuttleJobEnd));
- EV.Subscribe(new EventItem("Event", EventWaferShuttleRecipeStart, EventWaferShuttleRecipeStart));
- EV.Subscribe(new EventItem("Event", EventWaferShuttleRecipeEnd, EventWaferShuttleRecipeEnd));
- EV.Subscribe(new EventItem("Event", EventWaferShuttleRecipeFailed, EventWaferShuttleRecipeFailed));
- EV.Subscribe(new EventItem("Event", EventSRDRecipeStart, EventSRDRecipeStart));
- EV.Subscribe(new EventItem("Event", EventSRDRecipeEnd, EventSRDRecipeEnd));
- EV.Subscribe(new EventItem("Event", EventSRDRecipeFailed, EventSRDRecipeFailed));
- }
- public void JobCreated(ControlJobInfo cj)
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortSequenceSelected, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() }
- });
- }
- public void JobCreateFailed(string module, string lotID, string jobID,string reason)
- {
- ModuleName moduleName = ModuleHelper.Converter(module);
- EV.Notify(EventPortSequenceSelectFailed, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, lotID},
- {DVIDName.JobID, jobID},
- {DVIDName.PortID, ((int)moduleName-ModuleName.LP1+1).ToString() },
- {DVIDName.Reason,reason}
- });
- }
- public void JobStarted(ControlJobInfo cj)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortJobStarted, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() }
- });
- }
- }
- public void JobStopped(ControlJobInfo cj)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortJobStopped, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() }
- });
- }
- }
- public void JobPaused(ControlJobInfo cj)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortJobPaused, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() }
- });
- }
- }
- public void JobResumed(ControlJobInfo cj)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortJobResumed, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() }
- });
- }
- }
- public void JobFinished(ControlJobInfo cj)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName module = ModuleHelper.Converter(cj.Module);
- int count = cj.LotWafers.Count;
- EV.Notify(EventPortJobFinished, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)module-ModuleName.LP1+1).ToString() },
- {DVIDName.ProcessedWaferCount, count.ToString() },
- });
- }
- }
- public void JobWaferStart(ControlJobInfo cj,string sequenceId, int slotID)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName moduleName = ModuleHelper.Converter(cj.Module);
- EV.Notify(EventPortJobWaferStart, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)moduleName-ModuleName.LP1+1).ToString() },
- {DVIDName.SlotID, (slotID+1).ToString() },
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- public void JobWaferEnd(ControlJobInfo cj,string sequenceId, int slotID)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- ModuleName moduleName = ModuleHelper.Converter(cj.Module);
- WaferInfo wafer = WaferManager.Instance.GetWafer(moduleName, slotID);
- EV.Notify(EventPortJobWaferEnd, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.PortID, ((int)moduleName-ModuleName.LP1+1).ToString() },
- {DVIDName.SlotID, (slotID+1).ToString() },
- {DVIDName.CarrierID, cj.CarrierID?.ToString()},
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.WaferProcessResult, (wafer.ProcessState == EnumWaferProcessStatus.Failed ? 0:1).ToString()}
- });
- }
- }
- /// <summary>
- /// WaferShuttle job启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferShuttleId"></param>
- /// <param name="location"></param>
- public void WaferShuttleJobStart(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventWaferShuttleJobStart, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.WaferShuttleId, waferHolderInfo.Id},
- {DVIDName.WaferShuttleWaferAId, waferHolderInfo.WaferAId},
- {DVIDName.WaferShuttleWaferBId, waferHolderInfo.WaferBId},
- {DVIDName.WaferShuttleLsAId, waferHolderInfo.CrsAId},
- {DVIDName.WaferShuttleLsBId, waferHolderInfo.CrsBId},
- {DVIDName.StationName, waferHolderInfo.CurrentLocation },
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// WaferShuttle job启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferShuttleId"></param>
- /// <param name="location"></param>
- public void WaferShuttleJobEnd(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventWaferShuttleJobEnd, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.WaferShuttleId, waferHolderInfo.Id},
- {DVIDName.WaferShuttleWaferAId, waferHolderInfo.WaferAId},
- {DVIDName.WaferShuttleWaferBId, waferHolderInfo.WaferBId},
- {DVIDName.WaferShuttleLsAId, waferHolderInfo.CrsAId},
- {DVIDName.WaferShuttleLsBId, waferHolderInfo.CrsBId},
- {DVIDName.StationName, waferHolderInfo.CurrentLocation },
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// WaferShuttle recipe启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferShuttleId"></param>
- /// <param name="location"></param>
- public void WaferShuttleRecipeStart(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventWaferShuttleRecipeStart, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.WaferShuttleId, waferHolderInfo.Id},
- {DVIDName.WaferShuttleWaferAId, waferHolderInfo.WaferAId},
- {DVIDName.WaferShuttleWaferBId, waferHolderInfo.WaferBId},
- {DVIDName.WaferShuttleLsAId, waferHolderInfo.CrsAId},
- {DVIDName.WaferShuttleLsBId, waferHolderInfo.CrsBId},
- {DVIDName.StationName, waferHolderInfo.CurrentLocation },
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// WaferShuttle recipe结束
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferShuttleId"></param>
- /// <param name="location"></param>
- public void WaferShuttleRecipeEnd(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId,int processTimeLength)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventWaferShuttleRecipeEnd, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.WaferShuttleId, waferHolderInfo.Id},
- {DVIDName.WaferShuttleWaferAId, waferHolderInfo.WaferAId},
- {DVIDName.WaferShuttleWaferBId, waferHolderInfo.WaferBId},
- {DVIDName.WaferShuttleLsAId, waferHolderInfo.CrsAId},
- {DVIDName.WaferShuttleLsBId, waferHolderInfo.CrsBId},
- {DVIDName.StationName, waferHolderInfo.CurrentLocation },
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()},
- {DVIDName.ProcessTimeLength,processTimeLength.ToString()}
- });
- }
- }
- /// <summary>
- /// WaferShuttle recipe启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferShuttleId"></param>
- /// <param name="location"></param>
- public void WaferShuttleRecipeFailed(ControlJobInfo cj, string sequenceId, WaferHolderInfo waferHolderInfo, string recipeId)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventWaferShuttleRecipeFailed, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.WaferShuttleId, waferHolderInfo.Id },
- {DVIDName.WaferShuttleId, waferHolderInfo.Id},
- {DVIDName.WaferShuttleWaferAId, waferHolderInfo.WaferAId},
- {DVIDName.WaferShuttleWaferBId, waferHolderInfo.WaferBId},
- {DVIDName.WaferShuttleLsAId, waferHolderInfo.CrsAId},
- {DVIDName.WaferShuttleLsBId, waferHolderInfo.CrsBId},
- {DVIDName.StationName, waferHolderInfo.CurrentLocation},
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// SRD Recipe启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferInfo"></param>
- /// <param name="recipeId"></param>
- public void SrdRecipeStart(ControlJobInfo cj,string sequenceId,string recipeId,string module, int slotID)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventSRDRecipeStart, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.StationName,module},
- {DVIDName.SlotID,slotID.ToString()},
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// SRD Recipe结束
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferInfo"></param>
- /// <param name="recipeId"></param>
- public void SrdRecipeEnd(ControlJobInfo cj, string sequenceId, string recipeId, string module, int slotID)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventSRDRecipeEnd, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.StationName,module},
- {DVIDName.SlotID,slotID.ToString()},
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- /// <summary>
- /// SRD Recipe启动
- /// </summary>
- /// <param name="cj"></param>
- /// <param name="sequenceId"></param>
- /// <param name="waferInfo"></param>
- /// <param name="recipeId"></param>
- public void SrdRecipeFailed(ControlJobInfo cj, string sequenceId, string recipeId, string module, int slotID)
- {
- if (FaJobManager.Instance.Contains(cj.Name))
- {
- EV.Notify(EventSRDRecipeFailed, new SerializableDictionary<string, string>()
- {
- {DVIDName.LotID, cj.LotName},
- {DVIDName.JobID, cj.Name},
- {DVIDName.StationName,module},
- {DVIDName.SlotID,slotID.ToString()},
- {DVIDName.SequenceID, sequenceId},
- {DVIDName.RecipeID, recipeId},
- {DVIDName.CarrierID, cj.CarrierID?.ToString()}
- });
- }
- }
- }
- }
|