123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824 |
- using System;
- using Aitex.Core.Common;
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.Event;
- using Aitex.Core.Util;
- using EFEM.RT.Tasks;
- using Aitex.Sorter.Common;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.SubstrateTrackings;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase;
- namespace EFEM.RT
- {
- [Flags]
- public enum ErrorCheckList1
- {
- VAC = 0x0001,
- AIR = 0x0002,
- STALL = 0x0004,
- TIMEOUT = 0x0008,
- LIMIT = 0x0010,
- SENSOR = 0x0020,
- POSITION = 0x0040,
- EMS = 0x0080,
- COMM = 0x0100,
- COMM2 = 0x0200,
- VACON = 0x0400,
- VACOFF = 0x0800,
- CLAMPON = 0x1000,
- CLAMPOF = 0x2000,
- };
- [Flags]
- public enum ErrorCheckList2
- {
- RRTWAF = 0x0001,
- CRSWAF = 0x0002,
- THICKWAF = 0x0004,
- THINWAF = 0x0008,
- DBLWAF = 0x0010,
- BAOWAF = 0x0020,
- COMMAND = 0x0040,
- PODNG = 0x0080, //Pod abnormal load error
- PODMISMATCH = 0x0100, //Pod type mismatch
- VAC_S = 0x0200, //Chucking sensor abnormal
- CLAMP_S = 0x0400, //Clamp sensor abnormal
- SAFTY = 0x0800, //Hand/finger pinch sensor reaction
- LOCKNG = 0x1000, //FOUP lock disabled
- UNLOCKNG = 0x2000, //FOUP unlock disabled
- L_KEY_LK = 0x4000, //Latch key lock failure
- L_KEY_UL = 0x8000, //Latch key unlock failure
- };
- [Flags]
- public enum ErrorCheckList3
- {
- MAP_S = 0x0001, //Mapping sensor abnormal
- MAP_S1 = 0x0002, //Mapping sensor preparation disabled
- MAP_S2 = 0x0004, //Mapping sensor containing disabled
- WAFLOST = 0x0008, //Wafer fall Disabled
- ALIGNNG = 0x0010, //Alignment failure
- DRIVER = 0x0020, //Driver abnormal
- DRPOWERDOWN = 0x0040, //Drive power off
- HARDWARE = 0x0080, //Hardware failure
- INTERNAL = 0x0100, // Internal error
- E84_TIMEOUTx = 0x0200, //E84 timeout
- E84_CS_VALID = 0x0400, //E84_CS_VALID E84CS_0, CS_1, VALIDerror
- READFAIL = 0x0800, //Reading error
- PODNG = 0x1000,
- PODMISMATCH = 0x2000,
- VAC_S = 0x4000,
- CLAMP_S = 0x8000,
- };
- public interface IPolicy
- {
- bool Check(string device, out string reason);
- }
- public class CheckImp
- {
- protected ErrorCheckList1 flag1 = 0;
- protected ErrorCheckList2 flag2 = 0;
- protected ErrorCheckList3 flag3 = 0;
- protected int LoadPortQuantity = DeviceDefineManager.Instance.GetValue<int>("LoadPortQuantity") ?? 0;
-
- protected int LoadLockQuantity = DeviceDefineManager.Instance.GetValue<int>("LoadLockQuantity") ?? 0;
- protected int BufferQuantity = DeviceDefineManager.Instance.GetValue<int>("BufferQuantity") ?? 0;
- protected bool AlignerInstalled = DeviceDefineManager.Instance.GetValue<bool>("AlignerInstalled") ?? false;
- protected bool CoolingBufferInstalled = DeviceDefineManager.Instance.GetValue<bool>("CoolingBufferInstalled") ?? false;
- protected bool RobotIsSingleArm = DeviceDefineManager.Instance.GetValue<bool>("RobotIsSingleArm") ?? false;
- protected bool MultiWaferSize = DeviceDefineManager.Instance.GetValue<bool>("MultiWaferSize") ?? false;
- public const string PARAM_NG = "PARAM_NG";
- protected int _token;
- public bool HasInfoMessage { get; set; }
- public CheckImp()
- {
- HasInfoMessage = true;
- }
- public bool CheckError(string device, out string reason)
- {
- reason = "UNDEFINITION";
- #region Check flag1
- if (flag1.HasFlag(ErrorCheckList1.VAC))
- {
- if (!Check<ABS.VacPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.AIR))
- {
- if (!Check<ABS.AirPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.STALL))
- {
- if (!Check<ABS.StallPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.LIMIT))
- {
- if (!Check<ABS.LIMITPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.SENSOR))
- {
- if (!Check<ABS.SENSORPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.POSITION))
- {
- if (!Check<ABS.POSITIONPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.EMS))
- {
- if (!Check<ABS.EMSPolicy>(device, out reason))
- {
- return false;
- }
- }
-
- if (flag1.HasFlag(ErrorCheckList1.COMM))
- {
- if (!Check<ABS.COMMPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.COMM2))
- {
- if (!Check<ABS.COMM2Policy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.VACON))
- {
- if (!Check<ABS.VACONPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.VACOFF))
- {
- if (!Check<ABS.VACOFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.CLAMPON))
- {
- if (!Check<ABS.CLAMPONPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag1.HasFlag(ErrorCheckList1.CLAMPOF))
- {
- if (!Check<ABS.CLAMPOFPolicy>(device, out reason))
- {
- return false;
- }
- }
- #endregion
- #region Check flag2
- if (flag2.HasFlag(ErrorCheckList2.RRTWAF))
- {
- if (!Check<ABS.PRTWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.CRSWAF))
- {
- if (!Check<ABS.CRSWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.THICKWAF))
- {
- if (!Check<ABS.THICKWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.THINWAF))
- {
- if (!Check<ABS.THINWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.DBLWAF))
- {
- if (!Check<ABS.DBLWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.BAOWAF))
- {
- if (!Check<ABS.BOWWAFPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.COMMAND))
- {
- if (!Check<ABS.COMMANDPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.PODNG))
- {
- if (!Check<ABS.PODNGPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.PODMISMATCH))
- {
- if (!Check<ABS.PODMISMATCHPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.VAC_S))
- {
- if (!Check<ABS.VAC_SPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.CLAMP_S))
- {
- if (!Check<ABS.CLAMP_SPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.SAFTY))
- {
- if (!Check<ABS.SAFTYPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.LOCKNG))
- {
- if (!Check<ABS.LOCKNGPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.UNLOCKNG))
- {
- if (!Check<ABS.UNLOCKNGPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.L_KEY_LK))
- {
- if (!Check<ABS.L_KEY_LKPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag2.HasFlag(ErrorCheckList2.L_KEY_UL))
- {
- if (!Check<ABS.L_KEY_ULPolicy>(device, out reason))
- {
- return false;
- }
- }
- #endregion
- #region Check flag3
- if (flag3.HasFlag(ErrorCheckList3.MAP_S))
- {
- if (!Check<ABS.MAP_SPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.MAP_S1))
- {
- if (!Check<ABS.MAP_S1Policy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.MAP_S2))
- {
- if (!Check<ABS.MAP_S2Policy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.WAFLOST))
- {
- if (!Check<ABS.WAFLOSTPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.ALIGNNG))
- {
- if (!Check<ABS.ALIGNNGPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.PODNG))
- {
- if (!Check<ABS.PODNGPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.PODMISMATCH))
- {
- if (!Check<ABS.PODMISMATCHPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.VAC_S))
- {
- if (!Check<ABS.VAC_SPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.CLAMP_S))
- {
- if (!Check<ABS.CLAMP_SPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.DRIVER))
- {
- if (!Check<ABS.DRIVERPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.DRPOWERDOWN))
- {
- if (!Check<ABS.DRPOWERDOWNPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.HARDWARE))
- {
- if (!Check<ABS.HARDWAREPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.INTERNAL))
- {
- if (!Check<ABS.INTERNALPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.E84_TIMEOUTx))
- {
- if (!Check<ABS.E84_TIMEOUTxPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.E84_CS_VALID))
- {
- if (!Check<ABS.E84_CS_VALIDPolicy>(device, out reason))
- {
- return false;
- }
- }
- if (flag3.HasFlag(ErrorCheckList3.READFAIL))
- {
- if (!Check<ABS.READFAILPolicy>(device, out reason))
- {
- return false;
- }
- }
- #endregion
- reason = "UNDEFINITION";
- return false;
- }
- public bool Check<T>(string device, out string reason) where T : class, IPolicy, new()
- {
- reason = string.Empty;
-
- return Singleton<T>.Instance.Check(device, out reason);
- }
- /// <summary>
- /// 指令参数
- /// </summary>
- /// <param name="args"></param>
- /// <returns></returns>
- protected string Args2Unit(string args)
- {
- string unit = string.Empty;
- if (string.IsNullOrEmpty(args) || args.StartsWith("ALL") || args.StartsWith("SYSTEM"))
- {
- unit = DeviceName.System;
- }
- else if (args.StartsWith("ROB"))
- {
- unit = DeviceName.Robot;
- }
- else if (args.StartsWith("ALIGN"))
- {
- if (this.AlignerInstalled)
- unit = DeviceName.Aligner;
- else if (this.CoolingBufferInstalled)
- {
- //if (args.EndsWith("ALIGN1") || args.EndsWith("ALIGN"))
- //{
- // unit = DeviceName.CoolingBuffer1;
- //}
- //else if (args.EndsWith("ALIGN2"))
- //{
- // unit = DeviceName.CoolingBuffer2;
- //}
- if (args.EndsWith("ALIGN1") || args.EndsWith("ALIGN"))
- {
- unit = DeviceName.CoolingBuffer1;
-
- }
- else if (args.EndsWith("ALIGN2"))
- {
- unit = DeviceName.CoolingBuffer2;
-
- }
- else if (args.EndsWith("ALIGN3"))
- {
- unit = DeviceName.Aligner1;
-
- }
- else if (args.EndsWith("ALIGN4"))
- {
- unit = DeviceName.Aligner2;
-
- }
- }
- }
- else if (args.Equals("P1") && LoadPortQuantity > 0)
- {
- unit = DeviceName.LP1;
- }
- else if (args.Equals("P2") && LoadPortQuantity > 1)
- {
- unit = DeviceName.LP2;
- }
- else if (args.Equals("P3") && LoadPortQuantity > 2)
- {
- unit = DeviceName.LP3;
- }
- else if (args.Equals("P4") && LoadPortQuantity > 3)
- {
- unit = DeviceName.LP4;
- }
- else if (args.Equals("P5") && LoadPortQuantity > 4)
- {
- unit = DeviceName.LP5;
- }
- else if (args.Equals("P6") && LoadPortQuantity > 5)
- {
- unit = DeviceName.LP6;
- }
- else if (args.Equals("P7") && LoadPortQuantity > 6)
- {
- unit = DeviceName.LP7;
- }
- else if (args.Equals("P8") && LoadPortQuantity > 7)
- {
- unit = DeviceName.LP8;
- }
- else if (args.Equals("P9") && LoadPortQuantity > 8)
- {
- unit = DeviceName.LP9;
- }
- else if (args.Equals("P10") && LoadPortQuantity > 9)
- {
- unit = DeviceName.LP10;
- }
- else if ( (args.Equals("LLA") || args.StartsWith("LLLA")) && LoadLockQuantity >0)
- {
- unit = DeviceName.LoadlockA;
- }
- else if ((args.Equals("LLB") || args.StartsWith("LLLB")) && LoadLockQuantity > 1)
- {
- unit = DeviceName.LoadlockB;
- }
- else if (args.Equals("LLC") && LoadLockQuantity > 2)
- {
- unit = DeviceName.LoadlockC;
- }
- else if (args.Equals("LLD") && LoadLockQuantity > 3)
- {
- unit = DeviceName.LoadlockD;
- }
- else if (args.Equals("STOWER"))
- {
- unit = DeviceName.SignalTower;
- }
- else if (args.Equals("BF1"))
- {
- unit = DeviceName.Buffer1;
- }
- else if (args.Equals("BF2"))
- {
- unit = DeviceName.Buffer2;
- }
- else if (args.Equals("BUFFER"))
- {
- unit = DeviceName.Buffer;
- }
- return unit;
- }
- protected bool ParseMoveTarget(string args, out ModuleName target, out int slot)
- {
- target = ModuleName.System;
- slot = 1;
- if (args.StartsWith("ALIGN"))
- {
-
- if (this.AlignerInstalled)
- {
- target = ModuleName.Aligner;
- slot = 1;
- }
- else if (this.CoolingBufferInstalled)
- {
- if (args.EndsWith("ALIGN1")|| args.EndsWith("ALIGN"))
- {
- target = ModuleName.CoolingBuffer1;
- slot = 1;
- }
- else if (args.EndsWith("ALIGN2"))
- {
- target = ModuleName.CoolingBuffer2;
- slot = 1;
- }
- else if (args.EndsWith("ALIGN3"))
- {
- target = ModuleName.Aligner1;
- slot = 1;
- }
- else if (args.EndsWith("ALIGN4"))
- {
- target = ModuleName.Aligner2;
- slot = 1;
- }
- }
- return true;
- }
- else if (args.StartsWith("P1") && LoadPortQuantity > 0)
- {
- target = ModuleName.LP1;
- if (int.TryParse(args.Replace("P1", ""), out slot))
- {
- return true;
- }
- }
- else if (args.StartsWith("P2") && LoadPortQuantity > 1)
- {
- target = ModuleName.LP2;
- if (int.TryParse(args.Replace("P2", ""), out slot))
- {
- return true;
- }
- }
- else if (args.StartsWith("P3") && LoadPortQuantity > 2)
- {
- target = ModuleName.LP3;
- if (int.TryParse(args.Replace("P3", ""), out slot))
- {
- return true;
- }
- }
- else if (args.StartsWith("P4") && LoadPortQuantity > 3)
- {
- target = ModuleName.LP4;
- if (int.TryParse(args.Replace("P4", ""), out slot))
- {
- return true;
- }
- }
- else if ((args.StartsWith("LLLA") || args.StartsWith("LLA")))
- {
- if(BufferQuantity == 0 && LoadLockQuantity > 0)
- target = ModuleName.LL1;
- if(LoadLockQuantity==0 && BufferQuantity>0)
- target = ModuleName.Buffer1;
- string temp = args.Replace("LLLA", "").Replace("LLA","");
- if (string.IsNullOrEmpty(temp))
- {
- slot = 1;
- return true;
- }
- else
- {
- if (int.TryParse(temp, out slot))
- return true;
- }
- }
- else if ((args.StartsWith("LLLB") || args.StartsWith("LLB")) )
- {
- if (BufferQuantity==0 && LoadLockQuantity > 1)
- target = ModuleName.LL2;
- if (LoadLockQuantity == 0 && BufferQuantity > 1)
- target = ModuleName.Buffer2;
- // target = ModuleName.LL2;
- string temp = args.Replace("LLLB", "").Replace("LLB", "");
- if (string.IsNullOrEmpty(temp))
- {
- slot = 1;
- return true;
- }
- else
- {
- if (int.TryParse(temp, out slot))
- return true;
- }
- }
- else if (args.StartsWith("BF1") && BufferQuantity > 0)
- {
- target = ModuleName.Buffer1;
- if (int.TryParse(args.Replace("BF1", ""), out slot))
- {
- return true;
- }
- }
- else if (args.StartsWith("BF2") && BufferQuantity > 1)
- {
- target = ModuleName.Buffer2;
- if (int.TryParse(args.Replace("BF2", ""), out slot))
- {
- return true;
- }
- }
- else if (args.StartsWith("BUFFER"))
- {
- target = ModuleName.Buffer;
- if (int.TryParse(args.Replace("BUFFER", ""), out slot))
- {
- return true;
- }
- }
- return false;
- }
- protected bool ParseMoveArm(string args, out Hand arm)
- {
- arm = Hand.Blade2;
- switch (args)
- {
- case "ARM1":
- arm = Hand.Blade2;
- break;
- case "ARM2":
- arm = Hand.Blade1;
- break;
- case "ARM3":
- arm = Hand.Both;
- break;
- default:
- return false;
- }
- if (RobotIsSingleArm)
- {
- if (arm != Hand.Blade1)
- return false;
- }
- return true;
- }
- protected bool CheckWaferSize(string waferSize, ModuleName target, int slot)
- {
- if (!Enum.TryParse<WaferSize>(waferSize, out WaferSize ws))
- {
- EV.PostWarningLog("EFEM", $"{waferSize} is not a valid size type");
- return false;
- }
- if (ModuleHelper.IsLoadPort(target))
- {
- LoadPortBaseDevice lp = DEVICE.GetDevice<LoadPortBaseDevice>(target.ToString());
- if (lp.GetCurrentWaferSize() != ws) //lp.CassetteState == LoadportCassetteState.Normal &&
- {
- EV.PostWarningLog("EFEM", $"{lp.GetCurrentWaferSize()} is not match target {ws}");
- return false;
- }
- }
- else
- {
- if (WaferManager.Instance.CheckHasWafer(target, slot))
- {
- if (WaferManager.Instance.GetWaferSize(target, slot) != ws)
- {
- EV.PostWarningLog("EFEM", $"{WaferManager.Instance.GetWaferSize(target, slot)} is not match target {ws}");
- return false;
- }
- }
- }
- return true;
- }
-
- protected bool CheckIsPort(string device)
- {
- return device==DeviceName.LP1 || device == DeviceName.LP2 || device == DeviceName.LP3 || device == DeviceName.LP4;
- }
- protected bool CheckIsTower(string device)
- {
- return device == DeviceName.SignalTower;
- }
- protected IServerModule GetEntity(string name)
- {
- IServerModule result = Singleton<EntityFactory>.Instance.GetEntity(name);
- if (result.Name == DeviceName.Aligner && !AlignerInstalled)
- return null;
- return result;
- }
- }
- }
|