| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 | using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Device;using Aitex.Core.RT.IOCore;using Aitex.Core.RT.OperationCenter;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;namespace FurnaceRT.Devices{    public class IoFIMS : BaseDevice, IDevice    {        private DIAccessor _diLoadComplete;        private DIAccessor _diUnloadComplete;        private DIAccessor _diHomeComplete;        private DIAccessor _diRunning;        private DIAccessor _diAutoManual;        private DIAccessor _diUndock;        private DIAccessor _diDock;        private DIAccessor _diExist;        private DIAccessor _diSeal;        private DIAccessor _diRelease;        private DIAccessor _diDoorOpen;        private DIAccessor _diDoorClose;        private DIAccessor _diLatchOn;        private DIAccessor _diLatchOff;        private DIAccessor _diCollisionAvoidanceDown;        private DIAccessor _diCollisionAvoidanceUp;        private DIAccessor _diN2PurgeValveClosed;        private DIAccessor _diN2PurgeValveOpened;        private DIAccessor _diFOUPVacuumSuckingOK;        private DIAccessor _diFOUPVacuumSuckingAlarm;        private DIAccessor _diWaferOnRobot;        private DIAccessor _diWaferRobotEX1AxisHomePosition;        private DIAccessor _diWaferRobotEX2AxisHomePosition;        private DOAccessor _doLoad;        private DOAccessor _doUnload;        private DOAccessor _doHome;        private DOAccessor _doAlarmReset;        private DOAccessor _doAutoManual;        private DOAccessor _doUndock;        private DOAccessor _doDock;        private DOAccessor _doSeal;        private DOAccessor _doRelease;        private DOAccessor _doDoorOpen;        private DOAccessor _doDoorClose;        private DOAccessor _doLatch1On;        private DOAccessor _doLatch2On;        private DOAccessor _doLatch1Off;        private DOAccessor _doLatch2Off;        private DOAccessor _doCollisionAvoidanceDown;        private DOAccessor _doCollisionAvoidanceUp;        private DOAccessor _doN2PurgeValveOpen;        private DOAccessor _doN2PurgeValveClose;        private DOAccessor _doVaccumValveOpen;        private DOAccessor _doVaccumValveClose;        public DeviceStatus DockUndockStatus        {            get            {                if (_diDock != null && _diUndock != null && _diDock.Value && !_diUndock.Value)                    return DeviceStatus.Dock;                if (_diDock != null && _diUndock != null && !_diDock.Value && _diUndock.Value)                    return DeviceStatus.Undock;                return DeviceStatus.Unknown;            }        }        public DeviceStatus SealReleaseStatus        {            get            {                if (_diSeal != null && _diRelease != null && _diSeal.Value && !_diRelease.Value)                    return DeviceStatus.Seal;                if (_diSeal != null && _diRelease != null && !_diSeal.Value && _diRelease.Value)                    return DeviceStatus.Release;                return DeviceStatus.Unknown;            }        }        public DeviceStatus DoorOpenCloseStatus        {            get            {                if (_diDoorOpen != null && _diDoorClose != null && _diDoorOpen.Value && !_diDoorClose.Value)                    return DeviceStatus.Open;                                if (_diDoorOpen != null && _diDoorClose != null && !_diDoorOpen.Value && _diDoorClose.Value)                    return DeviceStatus.Close;                return DeviceStatus.Unknown;            }        }        public DeviceStatus LatchOnOffStatus        {            get            {                if (_diLatchOn != null && _diLatchOff != null && _diLatchOn.Value && !_diLatchOff.Value)                    return DeviceStatus.On;                                if (_diLatchOn != null && _diLatchOff != null && !_diLatchOn.Value && _diLatchOff.Value)                    return DeviceStatus.Off;                return DeviceStatus.Unknown;            }        }        public DeviceStatus CollisionAvoidanceUpDownStatus        {            get            {                if (_diCollisionAvoidanceUp != null && _diCollisionAvoidanceDown != null &&                     _diCollisionAvoidanceUp.Value && !_diCollisionAvoidanceDown.Value)                    return DeviceStatus.Up;                                if (_diCollisionAvoidanceUp != null && _diCollisionAvoidanceDown != null &&                     !_diCollisionAvoidanceUp.Value && _diCollisionAvoidanceDown.Value)                    return DeviceStatus.Down;                return DeviceStatus.Unknown;            }        }        public DeviceStatus N2PurgeValveOpenCloseStatus        {            get            {                if (_diN2PurgeValveOpened != null && _diN2PurgeValveClosed != null &&                    _diN2PurgeValveOpened.Value && !_diN2PurgeValveClosed.Value)                    return DeviceStatus.Open;                                if (_diN2PurgeValveOpened != null && _diN2PurgeValveClosed != null &&                     !_diN2PurgeValveOpened.Value && _diN2PurgeValveClosed.Value)                    return DeviceStatus.Close;                return DeviceStatus.Unknown;            }        }        public DeviceStatus VaccumValveOpenCloseStatus        {            get            {                if (_doVaccumValveOpen != null && _doVaccumValveClose != null &&                    _doVaccumValveOpen.Value && !_doVaccumValveClose.Value)                    return DeviceStatus.Open;                                if (_doVaccumValveOpen != null && _doVaccumValveClose != null &&                     !_doVaccumValveOpen.Value && _doVaccumValveClose.Value)                    return DeviceStatus.Close;                return DeviceStatus.Unknown;            }        }        public bool IsPLCLoadCompleted => _diLoadComplete == null ? false : _diLoadComplete.Value;        public bool IsPLCUnloadCompleted => _diUnloadComplete == null ? false : _diUnloadComplete.Value;        public bool IsPLCInitCompleted => _diHomeComplete == null ? false : _diHomeComplete.Value;        public bool IsRunning => _diRunning == null ? false : _diRunning.Value;        public bool IsFoupExist => _diExist == null ? false : _diExist.Value;        public bool IsWaferOnRobot => _diWaferOnRobot == null ? false : _diWaferOnRobot.Value;        public bool IsWaferRobotEX1AxisHomePosition => _diWaferRobotEX1AxisHomePosition == null ? false : _diWaferRobotEX1AxisHomePosition.Value;        public bool IsWaferRobotEX2AxisHomePosition => _diWaferRobotEX2AxisHomePosition == null ? false : _diWaferRobotEX2AxisHomePosition.Value;        public bool IsLoadCompleted { get; set; }        public bool IsUnloadCompleted { get; set; }        public bool IsInitCompleted { get; set; }        public bool IsBusy { get; set; }        public bool IsPause { get; set; }        public IoFIMS(string module, XmlElement node, string ioModule = "")        {            base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");            base.Name = node.GetAttribute("id");            base.Display = node.GetAttribute("display");            base.DeviceID = node.GetAttribute("schematicId");            _diLoadComplete = ParseDiNode("diLoadComplete", node, ioModule);            _diUnloadComplete = ParseDiNode("diUnloadComplete", node, ioModule);            _diHomeComplete = ParseDiNode("diHomeComplete", node, ioModule);            _diRunning = ParseDiNode("diRunning", node, ioModule);            _diAutoManual = ParseDiNode("diAutoManual", node, ioModule);            _diDock = ParseDiNode("diDock", node, ioModule);            _diUndock = ParseDiNode("diUndock", node, ioModule);            _diExist = ParseDiNode("diExist", node, ioModule);            _diSeal = ParseDiNode("diSeal", node, ioModule);            _diRelease = ParseDiNode("diRelease", node, ioModule);            _diDoorOpen = ParseDiNode("diDoorOpen", node, ioModule);            _diDoorClose = ParseDiNode("diDoorClose", node, ioModule);            _diLatchOn = ParseDiNode("diLatchOn", node, ioModule);            _diLatchOff = ParseDiNode("diLatchOff", node, ioModule);            _diCollisionAvoidanceDown = ParseDiNode("diCollisionAvoidanceDown", node, ioModule);            _diCollisionAvoidanceUp= ParseDiNode("diCollisionAvoidanceUp", node, ioModule);            _diN2PurgeValveClosed = ParseDiNode("diN2PurgeValveClosed", node, ioModule);            _diN2PurgeValveOpened = ParseDiNode("diN2PurgeValveOpened", node, ioModule);            _diFOUPVacuumSuckingOK = ParseDiNode("diFOUPVacuumSuckingOK", node, ioModule);            _diFOUPVacuumSuckingAlarm = ParseDiNode("diFOUPVacuumSuckingAlarm", node, ioModule);            _diWaferOnRobot = ParseDiNode("diWaferOnRobot", node, ioModule);            _diWaferRobotEX1AxisHomePosition = ParseDiNode("diWaferRobotEX1AxisHomePosition", node, ioModule);            _diWaferRobotEX2AxisHomePosition = ParseDiNode("diWaferRobotEX2AxisHomePosition", node, ioModule);            _doLoad = ParseDoNode("doLoad", node, ioModule);            _doUnload = ParseDoNode("doUnload", node, ioModule);            _doHome = ParseDoNode("doHome", node, ioModule);            _doAlarmReset = ParseDoNode("doAlarmReset", node, ioModule);            _doAutoManual = ParseDoNode("doAutoManual", node, ioModule);            _doDock = ParseDoNode("doDock", node, ioModule);            _doUndock = ParseDoNode("doUndock", node, ioModule);            _doSeal = ParseDoNode("doSeal", node, ioModule);            _doRelease = ParseDoNode("doRelease", node, ioModule);            _doDoorOpen = ParseDoNode("doDoorOpen", node, ioModule);            _doDoorClose = ParseDoNode("doDoorClose", node, ioModule);            _doLatch1On = ParseDoNode("doLatch1On", node, ioModule);            _doLatch2On = ParseDoNode("doLatch2On", node, ioModule);            _doLatch1Off = ParseDoNode("doLatch1Off", node, ioModule);            _doLatch2Off = ParseDoNode("doLatch2Off", node, ioModule);            _doCollisionAvoidanceDown = ParseDoNode("doCollisionAvoidanceDown", node, ioModule);            _doCollisionAvoidanceUp = ParseDoNode("doCollisionAvoidanceUp", node, ioModule);            _doN2PurgeValveOpen = ParseDoNode("doN2PurgeValveOpen", node, ioModule);            _doN2PurgeValveClose = ParseDoNode("doN2PurgeValveClose", node, ioModule);            _doVaccumValveOpen = ParseDoNode("doVaccumValveOpen", node, ioModule);            _doVaccumValveClose = ParseDoNode("doVaccumValveClose", node, ioModule);        }        public bool Initialize()        {            DATA.Subscribe($"{Module}.{Name}.DockUndockStatus", () => DockUndockStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.SealReleaseStatus", () => SealReleaseStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.DoorOpenCloseStatus", () => DoorOpenCloseStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.LatchOnOffStatus", () => LatchOnOffStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.CollisionAvoidanceUpDownStatus", () => CollisionAvoidanceUpDownStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.N2PurgeValveOpenCloseStatus", () => N2PurgeValveOpenCloseStatus.ToString());            DATA.Subscribe($"{Module}.{Name}.VaccumValveOpenCloseStatus", () => VaccumValveOpenCloseStatus.ToString());            OP.Subscribe($"{Module}.{Name}.SetDockUndock", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isDock);                SetDockUndock(isDock);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetSealRelease", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isSeal);                SetSealRelease(isSeal);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetDoorOpenClose", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isOpen);                SetDoorOpenClose(isOpen);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetLatchOnOff", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isOn);                SetLatchOnOff(isOn);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetCollisionAvoidanceUpDown", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isUp);                SetCollisionAvoidanceUpDown(isUp);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetN2PurgeValveOpenClose", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isOpen);                SetN2PurgeValveOpenClose(isOpen);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetVaccumValveOpen", (string cmd, object[] param) =>            {                bool.TryParse(param[0].ToString(), out bool isOpen);                SetVaccumValveOpen(isOpen);                return true;            });            OP.Subscribe($"{Module}.{Name}.SetAlarmReset", (string cmd, object[] param) =>            {                SetAlarmReset();                return true;            });            return true;        }        public void Monitor()        {                   }        public void Reset()        {                   }        public void Terminate()        {        }        private bool SetDockUndock(bool isDock)        {            if (isDock)            {                _doUndock.Value = false;                _doDock.Value = true;            }            else            {                _doDock.Value = false;                _doUndock.Value = true;            }            return true;        }        private bool SetSealRelease(bool isSeal)        {            if (isSeal)            {                _doRelease.Value = false;                _doSeal.Value = true;            }            else            {                _doSeal.Value = false;                _doRelease.Value = true;            }            return true;        }        private bool SetDoorOpenClose(bool isOpen)        {            if (isOpen)            {                _doDoorClose.Value = false;                _doDoorOpen.Value = true;            }            else            {                _doDoorOpen.Value = false;                _doDoorClose.Value = true;            }            return true;        }        private bool SetLatchOnOff(bool isOn)        {            if (isOn)            {                _doLatch1Off.Value = false;                _doLatch2Off.Value = false;                _doLatch1On.Value = true;                _doLatch2On.Value = true;            }            else            {                _doLatch1On.Value = false;                _doLatch2On.Value = false;                _doLatch1Off.Value = true;                _doLatch2Off.Value = true;            }            return true;        }        private bool SetCollisionAvoidanceUpDown(bool isUp)        {            if (isUp)            {                _doCollisionAvoidanceDown.Value = false;                _doCollisionAvoidanceUp.Value = true;            }            else            {                _doCollisionAvoidanceUp.Value = false;                _doCollisionAvoidanceDown.Value = true;            }            return true;        }        private bool SetN2PurgeValveOpenClose(bool isOpen)        {            if (isOpen)            {                _doN2PurgeValveClose.Value = false;                _doN2PurgeValveOpen.Value = true;            }            else            {                _doN2PurgeValveOpen.Value = false;                _doN2PurgeValveClose.Value = true;            }            return true;        }        private bool SetVaccumValveOpen(bool isOpen)        {            if (isOpen)            {                _doVaccumValveClose.Value = false;                _doVaccumValveOpen.Value = true;            }            else            {                _doVaccumValveOpen.Value = false;                _doVaccumValveClose.Value = true;            }            return true;        }        public void SetAlarmReset()        {            _doAlarmReset.SetPulseValue(true, 1000);        }        public bool Unload(out string reason)        {            reason = "";            _doLoad.SetValue(false, out reason);            _doHome.SetValue(false, out reason);            _doUnload.SetValue(true, out reason);            return true;        }        public bool Load(out string reason)        {            reason = "";            _doUnload.SetValue(false, out reason);            _doHome.SetValue(false, out reason);            _doLoad.SetValue(true, out reason);            return true;        }        public bool Init(out string reason)        {            reason = "";            _doLoad.SetValue(false, out reason);            _doUnload.SetValue(false, out reason);            _doHome.SetValue(true, out reason);            return true;        }        public bool Stop()        {            var reason = "";            _doLoad.SetValue(false, out reason);            _doUnload.SetValue(false, out reason);            _doHome.SetValue(false, out reason);            return true;        }        public void SetPauseResume(bool isPause)        {            IsPause = isPause;        }    }}
 |