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 { class SetLedTask : CheckImp, ITask { public SetLedTask() { } 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) && !CheckIsShorn(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 (!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 = 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.White, 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; 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; } switch (args[1]) { case "LOAD": lp.SetIndicator(IndicatorType.Load, state); break; case "UNLOAD": lp.SetIndicator(IndicatorType.Unload, state); break; case "MANUAL MODE": 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 "PRESENCE": lp.SetIndicator(IndicatorType.Presence, state); break; case "PLACEMENT": lp.SetIndicator(IndicatorType.Placement, state); break; case "ERROR": lp.SetIndicator(IndicatorType.Error, state); break; case "ACCESS SW": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; default: EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); result = PARAM_NG; return false; } } if(CheckIsShorn(device))//SHORN { switch (args[1]) { case "MELODY1": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "MELODY2": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "MELODY3": EV.PostWarningLog("Server", $"Not supported indicator {args[1]}"); break; case "MELODY4": //lp.SetIndicator(IndicatorType.Auto, 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) || CheckIsShorn(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; } } }