| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 | using Aitex.Core.RT.Fsm;using Aitex.Core.Utilities;using MECF.Framework.Common.Equipment;using MECF.Framework.RT.ModuleLibrary.VceModules;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Venus_RT.Devices.VCE;namespace Venus_RT.Modules.VCE{    #region 状态和消息    public enum VceSTATE    {        Init,//初始化        Idle,//空闲        Error,//错误        Homing,//home操作 对应HM        DoorOpenning,//开门操作 对应DC        DoorClosing,//关门操作 对应DO        Loading,//取cassette操作 包括开门关门 对应LOAD,        UnLoading,        Mapping,//扫片 对应MP 包括三种格式 hex binary 智能(只有智能模式可以判断复杂情况)        Goting,//指定槽到达窗口 对应 GC        Resetting,//重置        Unknown    }    public enum VceMSG    {        Home,        Error,        DoorOpen,        DoorClose,        Map,        Load,        UnLoad,        Reset,        Goto,        Abort    }    #endregion    public class VceEntity : Entity, IEntity    {        private ModuleName _modulename;        private readonly VceModuleBase _vce;        public VceEntity(ModuleName moduleName)        {            _modulename = moduleName;            _vce = new HongHuVce(25, moduleName);            InitFsmMap();        }        /// <summary>        /// 定义状态机的迁移表        /// </summary>        private void InitFsmMap()        {            fsm = new StateMachine<VceEntity>(_modulename.ToString(), (int)VceSTATE.Unknown, 50);            fsm.EnableRepeatedMsg(true);            AnyStateTransition(VceMSG.Error, fnError, VceSTATE.Error);            AnyStateTransition(VceMSG.Abort, fnAbort, VceSTATE.Idle);            //HOME init->homing idle->homing            Transition(VceSTATE.Init, VceMSG.Home, fnStartHome, VceSTATE.Homing);            Transition(VceSTATE.Idle, VceMSG.Home, fnStartHome, VceSTATE.Homing);            Transition(VceSTATE.Error, VceMSG.Home, fnStartHome, VceSTATE.Homing);            Transition(VceSTATE.Homing, FSM_MSG.TIMER, fnHomeTimeout, VceSTATE.Idle);            //Open Door 开门            Transition(VceSTATE.Idle, VceMSG.DoorOpen, fnStartOpenDoor, VceSTATE.DoorOpenning);            Transition(VceSTATE.DoorOpenning, FSM_MSG.TIMER, fnOpenDoorTimeout, VceSTATE.Idle);            //Close Door 关门            Transition(VceSTATE.Idle, VceMSG.DoorClose, fnStartCloseDoor, VceSTATE.DoorClosing);            Transition(VceSTATE.DoorClosing, FSM_MSG.TIMER, fnCloseDoorTimeout, VceSTATE.Idle);            //Map 扫片            Transition(VceSTATE.Idle, VceMSG.Map, fnStartMapping, VceSTATE.Mapping);            Transition(VceSTATE.Mapping, FSM_MSG.TIMER, fnMappingTimeout, VceSTATE.Idle);            //Load 取cassette            Transition(VceSTATE.Idle, VceMSG.Load, fnStartLoading, VceSTATE.Loading);            Transition(VceSTATE.Loading, FSM_MSG.TIMER, fnLoadingTimeout, VceSTATE.Idle);            //UnLoad 放cassette            Transition(VceSTATE.Idle, VceMSG.UnLoad, fnStartUnLoading, VceSTATE.UnLoading);            Transition(VceSTATE.UnLoading, FSM_MSG.TIMER, fnUnLoadingTimeout, VceSTATE.Idle);            //Goto 指定槽对准窗口            Transition(VceSTATE.Idle, VceMSG.Goto, fnStartGoto, VceSTATE.Goting);            Transition(VceSTATE.Goting, FSM_MSG.TIMER, fnGotingTimeout, VceSTATE.Idle);            //            EnumLoop<VceSTATE>.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });            EnumLoop<VceMSG>.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });            Running = true;        }        //急停        private bool fnAbort(object[] param)        {            throw new NotImplementedException();        }        //升降到槽位        private bool fnStartGoto(object[] param)        {            return _vce.Goto(Convert.ToInt32(param[0]));        }        private bool fnGotingTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnError(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartHome(object[] param)        {            return _vce.HomeALL();        }        private bool fnHomeTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartOpenDoor(object[] param)        {            return _vce.OpenDoor();        }        private bool fnOpenDoorTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartCloseDoor(object[] param)        {            return _vce.CloseDoor();        }        private bool fnCloseDoorTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartMapping(object[] param)        {            return _vce.Map();        }        private bool fnMappingTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartLoading(object[] param)        {            return _vce.Load();        }        private bool fnLoadingTimeout(object[] param)        {            throw new NotImplementedException();        }        private bool fnStartUnLoading(object[] param)        {            return _vce.UnLoad();        }        private bool fnUnLoadingTimeout(object[] param)        {            throw new NotImplementedException();        }        public bool Check(int msg, out string reason, params object[] args)        {            throw new NotImplementedException();        }    }}
 |