| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | using Aitex.Core.RT.Device;using Aitex.Core.RT.Log;using Aitex.Core.Util;using MECF.Framework.Common.Device.Bases;using MECF.Framework.Common.Equipment;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using VirgoRT.Device.YASKAWA;using VirgoRT.Devices.EFEM;using VirgoRT.Modules;namespace VirgoRT.Devices{    class VirgoSingalLight : SignalLightBase    {        public MECF.Framework.Common.Device.Bases.LightType Type { get; set; }        public Efem EfemController { get; set; }        private F_TRIG _trigError = new F_TRIG();        private bool _isInit;        private TowerLightStatus _preState = TowerLightStatus.Unknown;        public VirgoSingalLight(string module, string name) : base(module, name)        {            _isInit = true;        }        protected override void SetOn()        {            SetLight(TowerLightStatus.On);        }        protected override void SetOff()        {            SetLight(TowerLightStatus.Off);        }        protected override void SetBlinking(bool token)        {            SetLight(TowerLightStatus.Blinking);        }        private bool SetSignalLight(MECF.Framework.Common.Device.Bases.LightType type, TowerLightStatus setpoint)        {            VirgoRT.LightType virgoType;            switch (type)            {                case MECF.Framework.Common.Device.Bases.LightType.Red:                    virgoType = LightType.RED;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Yellow:                    virgoType = LightType.YELLOW;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Green:                    virgoType = LightType.GREEN;                    break;                case MECF.Framework.Common.Device.Bases.LightType.White:                    virgoType = LightType.WHITE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Blue:                    virgoType = LightType.BLUE;                    break;                case MECF.Framework.Common.Device.Bases.LightType.Buzzer:                case MECF.Framework.Common.Device.Bases.LightType.Buzzer1:                    virgoType = LightType.BUZZER1;                    break;                default:                    virgoType = LightType.BUZZER1;                    break;            }            VirgoRT.LightStatus virgoSetpoint;            switch (setpoint)            {                case TowerLightStatus.Blinking:                    virgoSetpoint = LightStatus.BLINK;                    break;                case TowerLightStatus.On:                    virgoSetpoint = LightStatus.ON;                    break;                case TowerLightStatus.Off:                    virgoSetpoint = LightStatus.OFF;                    break;                default:                    virgoSetpoint = LightStatus.OFF;                    break;            }            EfemController.SetLamp(virgoType, virgoSetpoint);            return true;        }        private void SetLight(TowerLightStatus setpoint)        {            try            {                if (setpoint != _preState || _isInit)                {                    _trigError.CLK = SetSignalLight(Type, setpoint);                    if (_trigError.Q)                    {                        //EV.PostWarningLog(Module, $"Set {Type} signal light {setpoint} error, {reason}");                    }                    if (_trigError.M)                    {                        _isInit = false;                        _preState = setpoint;                    }                }            }            catch (Exception ex)            {                LOG.Write(ex);            }        }        public void ResetData()        {            _isInit = true;        }        public override void Reset()        {            _trigError.RST = true;            base.Reset();        }    }    public class VirgoSignalTower : SignalTowerBase    {        private Efem _efem;        private List<VirgoSingalLight> _lights = new List<VirgoSingalLight>();        public VirgoSignalTower(string module, string name) : base("", "")        {            base.Module = module;            base.Name = name;            base.Display = name;            base.DeviceID = "";        }        public override bool Initialize()        {            base.Initialize();            if (_efem == null)            {                _efem = Singleton<RouteManager>.Instance.EFEM.EfemDevice;            }            CustomSignalTower();            return true;        }        //重新连接EFEM之后,需要重置灯塔        public void ResetData()        {            foreach (var rorzeSingalLight in _lights)            {                rorzeSingalLight.ResetData();            }        }        public override SignalLightBase CreateLight(MECF.Framework.Common.Device.Bases.LightType type)        {            var light = new VirgoSingalLight(ModuleName.System.ToString(), $"SignalLight{type}")            { Type = type, EfemController = _efem };            _lights.Add(light);            return light;        }    }}
 |