| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | using Aitex.Core.Common;using Aitex.Core.RT.Log;using Aitex.Core.RT.Routine;using Aitex.Sorter.Common;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.Schedulers;using MECF.Framework.Common.SubstrateTrackings;using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks;using Venus_Core;using Venus_RT.Devices.EFEM;namespace Venus_RT.Modules.EFEM{    public class EFEMAlignRoutine : ModuleRoutineBase, IRoutine    {        private enum AlignStep        {            WaitIdle,            Rotate,            End        }        private int _moveTimeout = 20 * 1000;        EfemBase _efem;        private double angle = 25;        private WaferSize ws = WaferSize.WS12;        public EFEMAlignRoutine(EfemBase efem) : base(ModuleName.Aligner1)        {            _efem = efem;        }        public RState Start(params object[] objs)        {            if (!_efem.IsHomed)            {                LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"EFEM is not homed, please home it first");                return RState.Failed;            }            if (objs.Length >= 3)            {                try                {                    angle = Convert.ToDouble(objs[2]);                }                catch (Exception ex)                {                    LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"ALIAN PARAMETER IS ILLEGAL ");                }                           }            if (!WaferManager.Instance.CheckHasWafer(ModuleName.Aligner1, 0))            {                LOG.Write(eEvent.ERR_EFEM_ROBOT, Module, $"Efem PreAligner not have wafer, cannot do the align action");                return RState.Failed;            }            else            {                Trace.WriteLine("开始Align");                return Runner.Start(Module,$"PreAligner Start align");            }        }        public RState Monitor()        {            Runner.Wait((int)AlignStep.WaitIdle,    WaitEFEMIdle,                0)                .Run((int)AlignStep.Rotate,         fnalign     ,CheckAlignDone, _moveTimeout)                .End((int)AlignStep.End,            ActionDone,                  0);            return Runner.Status;        }        private bool fnalign()        {            return _efem.Align(Module,angle,0,ws);        }        private bool CheckAlignDone()        {            if (_efem.Status == RState.End)            {                return true;            }            else if (_efem.Status != RState.Running)            {                LOG.Write(eEvent.ERR_EFEM_COMMON_FAILED, Module, $"Efem PreAligner align failed: {_efem.Status}");                return true;            }            return false;        }        private bool ActionDone()        {            return true;        }        private bool WaitEFEMIdle()        {            return _efem.Status == RState.End;        }        public void Abort()        {            throw new NotImplementedException();        }    }}
 |