| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 | using Aitex.Core.RT.Device;using Aitex.Core.RT.Event;using Aitex.Core.Util;using Aitex.Sorter.Common;namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts.TDK{    public class QueryStateHandler : IMsg    {        /// <summary>        /// / (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20)        /// (1) Equipment status 0 = Normal A = Recoverable error E = Fatal error        ///(5)Error code Error code(upper)        ///(6)Error code Error code(lower)        ///(7)Cassette presence 0 = None 1 = Normal position 2 = Error load        ///(8)FOUP clamp status 0 = Open 1 = Close? = Not defined        ///(11)Door position 0 = Open position 1 = Close position ? = Not defined        /// </summary>        public bool background { get; private set; }        public string deviceID { private get; set; }        private string _cmd = string.Empty;        public QueryStateHandler()        {            background = false;        }        public string package(params object[] args)        {            _cmd = QueryType.STATE.ToString();            return string.Format("GET:{0}", _cmd);        }        public string retry()        {            return string.Format("RFN:{0}", _cmd);        }        public bool unpackage(string type, string[] items)        {            if (!type.Equals("ACK"))                return false;            string state = items[1];            TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);            device.ErrorCode = state.Substring(4, 2);            if (state[0] != '0')            {                device.Error = true;                device.ErrorCode = state.Substring(4,2);                string error = Singleton<ErrorCode>.Instance.Code2Msg(device.ErrorCode);                EV.PostMessage(deviceID, EventEnum.DefaultWarning, string.Format("{0} has error, error is {1}", deviceID, error));            }            else            {                device.Error = false;             }                     device.SetCassetteState(getCassetteState(state[6]));              device.ClampState = getClampState(state[7]);         device.DoorState = getDoorState(state[10]);            string reason = string.Empty;                        device.OnStateUpdated();            return true;        }        public bool canhandle(string id)        {            return id.Equals(_cmd);        }        //(7) Cassette presence 0 = None 1 = Normal position 2 = Error load        private LoadportCassetteState getCassetteState(char x)        {            if (x == '0')                return LoadportCassetteState.None;            if (x == '1')                return LoadportCassetteState.Normal;            return LoadportCassetteState.Unknown;        }        //    (8) FOUP clamp status 0 = Open 1 = Close ? = Not defined        private FoupClampState getClampState(char x)        {            if (x == '0')                return FoupClampState.Open;            if (x == '1')                return FoupClampState.Close;            return FoupClampState.Unknown;        }        //(11) Door position 0 = Open position 1 = Close position ? = Not defined        private FoupDoorState getDoorState(char x)        {            if (x == '0')                return FoupDoorState.Open;            if (x == '1')                return FoupDoorState.Close;            return FoupDoorState.Unknown;        }    }    public class QueryIndicatorHandler : IMsg    {        public bool background { get; private set; }        public string deviceID { private get; set; }        private string _cmd = string.Empty;        public QueryIndicatorHandler()        {            background = false;        }        public string package(params object[] args)        {            _cmd = QueryType.LEDST.ToString();            return string.Format("GET:{0}", _cmd);        }        public string retry()        {            return string.Format("RFN:{0}", _cmd);        }        public bool unpackage(string type, string[] items)        {            if (!type.Equals("ACK"))                return false;            string state = items[1];            TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);            if (state.Length == 7)            {                device.IndicatiorPresence = getIndicatorState(state[0]);                device.IndicatiorPlacement = getIndicatorState(state[1]);                device.IndicatorAlarm = getIndicatorState(state[2]);                device.IndicatiorLoad = getIndicatorState(state[3]);                device.IndicatiorUnload = getIndicatorState(state[4]);                device.IndicatiorOpAccess = getIndicatorState(state[5]);                device.IndicatiorStatus1 = getIndicatorState(state[6]);            }            else            {                device.IndicatiorLoad = getIndicatorState(state[0]);                device.IndicatiorUnload = getIndicatorState(state[1]);                device.IndicatiorOpAccess = getIndicatorState(state[2]);                device.IndicatiorPresence = getIndicatorState(state[3]);                device.IndicatiorPlacement = getIndicatorState(state[4]);                device.IndicatorAlarm = getIndicatorState(state[5]);                device.IndicatiorStatus1 = getIndicatorState(state[6]);                device.IndicatiorStatus2 = getIndicatorState(state[7]);            }            return true;        }        public bool canhandle(string id)        {            return id.Equals(_cmd);        }        private IndicatorState getIndicatorState(char x)        {            if (x == '0')                return IndicatorState.OFF;            if (x == '1')                return IndicatorState.ON;            return IndicatorState.BLINK;        }    }        public class QueryWaferMappingHandler : IMsg    {        public bool background { get; private set; }        public string deviceID { private get; set; }        private string _cmd = string.Empty;        public QueryWaferMappingHandler()        {            background = false;        }        public string package(params object[] args)        {                    _cmd = QueryType.MAPRD.ToString();            return string.Format("GET:{0}", _cmd);        }        public string retry()        {            return string.Format("RFN:{0}", _cmd);        }        public bool unpackage(string type, string[] items)        {            if (!type.Equals("ACK"))                return false;            TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);            device.OnSlotMapRead(items[1]);            string reason = string.Empty;            device.QueryState(out reason);                    return true;        }        public bool canhandle(string id)        {            return id.Equals(_cmd);        }    }    /// <summary>    /// 查询FOSB模式是否激活    /// </summary>    public class QueryFOSBModeHandler : IMsg    {        public bool background { get; private set; }        public string deviceID { private get; set; }        private string _cmd = string.Empty;        public QueryFOSBModeHandler()        {            background = false;        }        public string package(params object[] args)        {            _cmd = QueryType.FSBxx.ToString();            return string.Format("GET:{0}", _cmd);        }        public string retry()        {            return string.Format("RFN:{0}", _cmd);        }        public bool unpackage(string type, string[] items)        {            if (!type.Equals("ACK"))                return false;            string modeState = items[1];            TDKLoadPort device = DEVICE.GetDevice<TDKLoadPort>(deviceID);            switch (modeState)            {                case "ON":                    device.IsFOSBMode = true;                    break;                case "OF":                    device.IsFOSBMode = false;                    break;                default:                    device.IsFOSBMode = false;                    break;            }            return true;        }                public bool canhandle(string id)        {            return id.Equals(_cmd);        }            }}
 |