using System; using Aitex.Core.Common; using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Unit; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using Aitex.Core.Util; using Aitex.Sorter.Common; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts; using SorterCommon; using Aitex.Sorter.RT.SorterCommonFrame.Devices; using Aitex.Sorter.RT.SorterCommonFrame.SorterJobControl; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.AlignersBase; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.LoadPortBase; using MECF.Framework.FA.Core.FAControl; using Aitex.Core.RT.Log; using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Flipper.FlipperBase; namespace Aitex.Sorter.RT.SorterCommonFrame.Routines { public class EfemInitRoutine : CommonRoutineSorter, IRoutine { private enum Home { DeviceReset, RobotClear, RobotHome, WaitingRobotHome, RobotSet, AlignClear, AlignerInit, WaitingAlignerInit, AlignerHome, WaitingAlignerHome, AlignerMoveUp, WaitingAlignerUp, TurnoverHome, WaitTurnoverHome, TurnOverTurnTo0, WaitTurnOverTurnTo0, TurnOverUngrip, WaitTurnOverUnGrip, LoadportAClear, LoadportAHome, WaitingLoadportAHome, LoadportBClear, LoadportBHome, WaitingLoadportBHome, LoadportCClear, LoadportCHome, WaitingLoadportCHome, LoadportDClear, LoadportDHome, WaitingLoadportDHome, LoadportEClear, LoadportEHome, WaitingLoadportEHome, LoadportFClear, LoadportFHome, WaitingLoadportFHome, LoadportGClear, LoadportGHome, WaitingLoadportGHome, LoadportHClear, LoadportHHome, WaitingLoadportHHome, LoadportIClear, LoadportIHome, WaitingLoadportIHome, LoadportJClear, LoadportJHome, WaitingLoadportJHome, } private int _timeoutTurnover = 0; private int _timeoutRobot = 0; private int _lpcount = 0; private int _timeoutaligner; public bool IsResetOnly { get; set; } public ModuleName InitModuleName { get; set; } public EfemInitRoutine(string module, string name) { Module = module; Name = name; _lpcount = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts().Length; } public bool Initalize() { Reset(); IsRoutineActive = false; return true; } public void Terminate() { } public Result Start(params object[] objs) { Name = "Init"; Reset(); _timeoutRobot = Robot.RobotCommandTimeout; _timeoutaligner = Aligner!=null?Aligner.TimeLimitAlignerHome:60; _timeoutTurnover = _ioTurnOver!=null? _ioTurnOver.TimelimitAction:60; EV.PostMessage(ModuleName.System.ToString(), EventEnum.HomeBegins, ModuleName.System.ToString()); Robot = DEVICE.GetDevice(DeviceName.Robot); _lpcount = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts().Length; if (_ioTurnOver != null) { if (_ioTurnOver.IsPlacement) { if (WaferManager.Instance.CheckNoWafer(ModuleName.TurnOverStation, 0)) WaferManager.Instance.CreateWafer(ModuleName.TurnOverStation, 0, WaferStatus.Normal); } } if(ModuleHelper.IsLoadPort(InitModuleName)) { var lp = DEVICE.GetDevice(InitModuleName.ToString()); if (lp == null) return Result.FAIL; } if (ModuleHelper.IsAligner(InitModuleName)) { var pa = DEVICE.GetDevice(InitModuleName.ToString()); if (pa == null) return Result.FAIL; } if (ModuleHelper.IsRobot(InitModuleName)) { var robot = DEVICE.GetDevice(InitModuleName.ToString()); if (robot == null) return Result.FAIL; } IsRoutineActive = true; return Result.RUN; } public Result Monitor() { if (!IsRoutineActive) return Result.DONE; var ret = MonitorRoutine(); if (ret == Result.FAIL) { Initalize(); IsRoutineActive = false; } if (ret == Result.DONE) { IsRoutineActive = false; } return ret; } private Result MonitorRoutine() { try { //RtDeviceReset((int)Home.DeviceReset, "Device Reset", 1, Notify, Stop); //if (ExecuteResult.Item1) //{ // if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; // if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; // if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; // if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; //} if (InitModuleName == ModuleName.System) { RtRobotReset((int)Home.RobotClear, Robot, _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtRobotHome((int)Home.RobotHome, Robot, _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } if (Aligner != null) { RtAlignerInit((int)Home.AlignerInit, Aligner, "Aligner initialize", _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_ioTurnOver != null) { RtTurnoverHome((int)Home.TurnoverHome, _ioTurnOver.TimelimitAction, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtTurnOverTurnBack((int)Home.TurnOverTurnTo0, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtWaitTurnOverTurnTo0((int)Home.WaitTurnOverTurnTo0, _ioTurnOver, _timeoutTurnover, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } if (!_ioTurnOver.IsPlacement) { RtTurnOverUnGripWafer((int)Home.WaitTurnOverUnGrip, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtWaitTurnOverUnGrip((int)Home.WaitTurnOverUnGrip, _ioTurnOver, _timeoutTurnover, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } } if (_lpcount > 0 && Singleton.Instance.FAloadports["LP1"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportAClear, DEVICE.GetDevice("LP1"), DEVICE.GetDevice("LP1").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportAHome, DEVICE.GetDevice("LP1"), DEVICE.GetDevice("LP1").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 1 && Singleton.Instance.FAloadports["LP2"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportBClear, DEVICE.GetDevice("LP2"), DEVICE.GetDevice("LP2").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportBHome, DEVICE.GetDevice("LP2"), DEVICE.GetDevice("LP2").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 2 && Singleton.Instance.FAloadports["LP3"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportCClear, DEVICE.GetDevice("LP3"), DEVICE.GetDevice("LP3").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportCHome, DEVICE.GetDevice("LP3"), DEVICE.GetDevice("LP3").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 3 && Singleton.Instance.FAloadports["LP4"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportDClear, DEVICE.GetDevice("LP4"), DEVICE.GetDevice("LP4").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportDHome, DEVICE.GetDevice("LP4"), DEVICE.GetDevice("LP4").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 4 && Singleton.Instance.FAloadports["LP5"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportEClear, DEVICE.GetDevice("LP5"), DEVICE.GetDevice("LP5").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportEHome, DEVICE.GetDevice("LP5"), DEVICE.GetDevice("LP5").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 5 && Singleton.Instance.FAloadports["LP6"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportFClear, DEVICE.GetDevice("LP6"), DEVICE.GetDevice("LP5").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportFHome, DEVICE.GetDevice("LP6"), DEVICE.GetDevice("LP6").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 6 && Singleton.Instance.FAloadports["LP7"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportGClear, DEVICE.GetDevice("LP7"), DEVICE.GetDevice("LP7").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportGHome, DEVICE.GetDevice("LP7"), DEVICE.GetDevice("LP7").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 7 && Singleton.Instance.FAloadports["LP8"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportHClear, DEVICE.GetDevice("LP8"), DEVICE.GetDevice("LP8").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportHHome, DEVICE.GetDevice("LP8"), DEVICE.GetDevice("LP8").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (_lpcount > 8 && Singleton.Instance.FAloadports["LP9"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportIClear, DEVICE.GetDevice("LP9"), DEVICE.GetDevice("LP9").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportIHome, DEVICE.GetDevice("LP9"), DEVICE.GetDevice("LP9").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } //WaitLoadportMotion((int)Home.WaitingLoadportIHome, DEVICE.GetDevice("LP9"), "LP9 Homing...", DEVICE.GetDevice("LP9").TimelimitHome, Notify, Stop); } if (_lpcount > 9 && Singleton.Instance.FAloadports["LP10"].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportHClear, DEVICE.GetDevice("LP10"), DEVICE.GetDevice("LP10").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportHHome, DEVICE.GetDevice("LP10"), DEVICE.GetDevice("LP10").TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if(ModuleHelper.IsLoadPort(InitModuleName)) { RtLoadportReset((int)Home.LoadportHClear, DEVICE.GetDevice(InitModuleName.ToString()), DEVICE.GetDevice(InitModuleName.ToString()).TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtLoadportInit((int)Home.LoadportHHome, DEVICE.GetDevice(InitModuleName.ToString()), DEVICE.GetDevice(InitModuleName.ToString()).TimelimitHome, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (ModuleHelper.IsAligner(InitModuleName)) { RtAlignerInit((int)Home.AlignerInit, Aligner, "Aligner initialize", _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } if (ModuleHelper.IsRobot(InitModuleName)) { RtRobotReset((int)Home.RobotClear, Robot, _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } RtRobotHome((int)Home.RobotHome, Robot, _timeoutRobot, Notify, Stop); if (ExecuteResult.Item1) { if (ExecuteResult.Item2 == Result.RUN) return Result.RUN; if (ExecuteResult.Item2 == Result.FAIL) return Result.FAIL; if (ExecuteResult.Item2 == Result.TIMEOUT) return Result.FAIL; if (ExecuteResult.Item2 == Result.DONE) return Result.RUN; } } EV.PostInfoLog("System", $"Complete home all routine."); IsRoutineActive = false; return Result.DONE; } catch (Exception ex) { LOG.Write(ex); EV.PostAlarmLog("System", "Initialize routine execute failed."); return Result.FAIL; } } public void RtTurnoverHome(int id, int time,Action notify, Action error) { string reason = string.Empty; Tuple ret = ExecuteAndWait(id, () => { notify("Turnover start homing"); return _ioTurnOver.ExecuteHome(out reason); }, () => { if (_ioTurnOver.IsReady) return Result.DONE; return Result.RUN; },time * 1000); if (ret.Item1) { if (ret.Item2 == Result.FAIL) { error($"Turnover home failed, due to turnover occurred error."); } else if (ret.Item2 == Result.TIMEOUT) //timeout { error($"Turnover home timeout, than {time} seconds."); } } } protected void RtDeviceReset(int id, string name, int time, Action notify, Action error) { var ret = Delay(id, () => { notify(string.Format("Device reset")); if (Singleton.Instance.SorterDeviceManagerCallBack != null) Singleton.Instance.SorterDeviceManagerCallBack.ResetDevices(); return true; }, time * 1000); if (ret.Item1) if (ret.Item2 == Result.FAIL) error("Device reset failed."); } #region aligner public void RtAlignerReset(int id, AlignerBaseDevice device, string name, int time, Action notify, Action error) { var ret = ExecuteAndWait(id, () => { notify(string.Format("{0} clear error", device.Name)); var reason = string.Empty; return device.AlignerReset(out _); }, () => { if (device.IsReady()) return Result.DONE; if (device.AlignerState == AlignerStateEnum.Error && !device.IsBusy) return Result.FAIL; return Result.RUN; }, time * 1000); if (ret.Item1) { if (ret.Item2 == Result.FAIL) { error(string.Format("{0} failed.", name)); } else if (ret.Item2 == Result.TIMEOUT) //timeout { error(string.Format("{0} timeout, than {1} seconds.", name, time)); } else { } } } public void RtAlignerInit(int id, AlignerBaseDevice device, string name, int time,Action notify, Action error) { var ret = ExecuteAndWait(id, () => { notify(string.Format("{0} Init", device.Name)); var reason = string.Empty; return device.Home(out reason); }, () => { if (device.IsReady()) return Result.DONE; if (device.AlignerState == AlignerStateEnum.Error && !device.IsBusy) return Result.FAIL; return Result.RUN; ; }); if (ret.Item1) { if (ret.Item2 == Result.FAIL) { error(string.Format("{0} failed.", name)); } else if (ret.Item2 == Result.TIMEOUT) //timeout { error(string.Format("{0} timeout, than {1} seconds.", name, time)); } else { } } } #endregion #region Loadport ///等待 Loadport #endregion } }