using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Unit; using Aitex.Core.RT.Event; using Aitex.Sorter.Common; using Aitex.Sorter.RT.EFEMs.Servers; using MECF.Framework.Common.Device.Bases; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts; namespace Aitex.Sorter.RT.EFEMs.Tasks { public class SigoutTask : CheckImp, ITask { public SigoutTask() { HasInfoMessage = false; } public bool Execute(out string result, params string[] args) { string device = Args2Unit(args.Length > 0 ? args[0] : string.Empty); if (device == null) { result = PARAM_NG; return false; } if ( !CheckIsPort(device) && !CheckIsTower(device)) { result = PARAM_NG; return false; } if (args.Length < 3) { result = PARAM_NG; return false; } if (!Check(device, out result)) { return false; } if (!Check(device, out result)) { return false; } if (CheckIsTower(device)) { IoSignalTower tower = DEVICE.GetDevice(device); LightState state = LightState.Off; int interval = 5; if (args[2].Equals("ON")) { state = LightState.On; }else if (args[2].Equals("OFF")) { state = LightState.Off; }else if (args[2].StartsWith("BLINK")) { state = LightState.Blink; string cycle = args[2].Substring(5); if (string.IsNullOrEmpty(cycle) || !int.TryParse(cycle, out interval)) { result = PARAM_NG; return false; } if (interval < 1 || interval > 200) { result = PARAM_NG; return false; } //interval is x * 100 ms interval = interval * 100; } else { result = PARAM_NG; return false; } switch (args[1] ) { case "RED": tower.SetLight(LightType.Red, state, interval); break; case "YELLOW": tower.SetLight(LightType.Yellow, state, interval); break; case "GREEN": tower.SetLight(LightType.Green, state, interval); break; case "BLUE": tower.SetLight(LightType.Blue, state, interval); break; case "WHITE": //tower.SetLight(LightType.Blue, state, interval); break; case "BUZZER1": if (state != LightState.Off && state != LightState.On) { result = PARAM_NG; return false; } tower.SetLight(LightType.Buzzer, state); break; case "BUZZER2": if (state != LightState.Off && state != LightState.On) { result = PARAM_NG; return false; } if (state == LightState.On) state = LightState.Blink; tower.SetLight(LightType.Buzzer, state, interval); break; default: result = PARAM_NG; return false; } } if (CheckIsPort(device)) { LoadPort lp = DEVICE.GetDevice(device); IndicatorState state = IndicatorState.OFF; int interval = 500; if (args[2].Equals("ON")) { state = IndicatorState.ON; } else if (args[2].Equals("OFF")) { state = IndicatorState.OFF; } else if (args[2].StartsWith("BLINK")) { state = IndicatorState.BLINK; } else { result = PARAM_NG; return false; } //modify by tool,sequence // Load, Unload, Manual, Presence, Placement, Auto, Reserve, Alarm switch (args[1]) { case "LOAD": lp.SetIndicator(IndicatorType.Load, state); break; case "UNLOAD": lp.SetIndicator(IndicatorType.Unload, state); break; case "MANUAL": lp.SetIndicator(IndicatorType.Manual, state); break; case "ACCESS": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "CLAMP": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "DOCK": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "AUTO": lp.SetIndicator(IndicatorType.Auto, state); break; case "RESERVED": lp.SetIndicator(IndicatorType.Reserve, state); break; case "BUSY": lp.SetIndicator(IndicatorType.Busy, state); break; case "COMPLETE": lp.SetIndicator(IndicatorType.Complete, state); break; default: EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); result = PARAM_NG; return false; } } return true; } public bool? Monitor(out string result, params string[] args) { result = string.Empty; string device = Args2Unit(args.Length > 0 ? args[0] : string.Empty); if (CheckIsTower(device)) { return true; } LoadPort _lp = DEVICE.GetDevice(device); if (_lp.Error) { flag1 = ErrorCheckList1.VAC | ErrorCheckList1.AIR | ErrorCheckList1.STALL | ErrorCheckList1.LIMIT | ErrorCheckList1.SENSOR | ErrorCheckList1.POSITION | ErrorCheckList1.EMS | ErrorCheckList1.COMM | ErrorCheckList1.COMM2 | ErrorCheckList1.VACON | ErrorCheckList1.VACOFF | ErrorCheckList1.CLAMPON | ErrorCheckList1.CLAMPOF; flag2 = ErrorCheckList2.RRTWAF | ErrorCheckList2.CRSWAF | ErrorCheckList2.THICKWAF | ErrorCheckList2.THINWAF | ErrorCheckList2.DBLWAF | ErrorCheckList2.BAOWAF | ErrorCheckList2.COMMAND | ErrorCheckList2.PODNG | ErrorCheckList2.PODMISMATCH | ErrorCheckList2.VAC_S | ErrorCheckList2.CLAMP_S | ErrorCheckList2.SAFTY | ErrorCheckList2.LOCKNG | ErrorCheckList2.UNLOCKNG | ErrorCheckList2.L_KEY_LK | ErrorCheckList2.L_KEY_UL; flag3 = ErrorCheckList3.MAP_S | ErrorCheckList3.MAP_S1 | ErrorCheckList3.MAP_S2 | ErrorCheckList3.WAFLOST | ErrorCheckList3.ALIGNNG | ErrorCheckList3.DRIVER | ErrorCheckList3.DRPOWERDOWN | ErrorCheckList3.HARDWARE | ErrorCheckList3.INTERNAL | ErrorCheckList3.E84_TIMEOUTx | ErrorCheckList3.E84_CS_VALID | ErrorCheckList3.READFAIL; return CheckError(device, out result); } if (!_lp.IsBusy) { return true; } return null; } } }