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 InitRoutine4LP : 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, LoadportClear=100, LoadportHome=200, LoadportHomeComplete=300, } private int _lpcount = 0; public InitRoutine4LP(string module, string name) { Module = module; Name = name; _lpcount = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts().Length; } public bool Initalize() { return true; } public void Terminate() { } public Result Start(params object[] objs) { Name = "Init"; Reset(); 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); } } IsRoutineActive = true; return Result.RUN; } public Result Monitor() { if (!IsRoutineActive) return Result.DONE; var ret = MonitorRoutine(); if (ret == Result.FAIL) { 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; } RtRobotReset((int)Home.RobotClear, Robot, Robot.RobotCommandTimeout, 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, Robot.RobotCommandTimeout, 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", Aligner.TimeLimitAlignerHome, 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, _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; } 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, _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; } } } for (int i = 0; i < _lpcount; i++) { var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i]; if (Singleton.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportReset((int)Home.LoadportClear + i, lp, lp.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; } } } for (int i = 0; i < _lpcount; i++) { var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i]; if (Singleton.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportExecuteInit((int)Home.LoadportHome + i, lp, lp.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; } } } for (int i = 0; i < _lpcount; i++) { var lp = SorterJobManager.Instance.SorterDeviceManagerCallBack.GetAllLoadPorts()[i]; if (Singleton.Instance.FAloadports[lp.LPModuleName.ToString()].GetTransferState() != LPTransferState.OUT_OF_SERVICE) { RtLoadportWaitReady((int)Home.LoadportHomeComplete + i, lp, lp.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 > 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; } 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 } }