using Aitex.Core.RT.Log; using Aitex.Core.Util; using MECF.Framework.Common.Device.Bases; using CyberX8_RT.Devices.EFEM; using CyberX8_RT.Modules; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Devices.SignalLight { public class SunWaySignalLight : SignalLightBase { public MECF.Framework.Common.Device.Bases.LightType Type { get; set; } public EfemBase EfemController { get; set; } private F_TRIG _trigError = new F_TRIG(); private bool _isInit; private TowerLightStatus _preState = TowerLightStatus.Unknown; //IoSignalTower _SignalTower; public SunWaySignalLight(string module, string name, EfemBase _efem) : base(module, name) { _isInit = true; EfemController = _efem; } 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) { if(EfemController==null) { return false; } LightType lightType; switch (type) { case MECF.Framework.Common.Device.Bases.LightType.Red: lightType = LightType.RED; break; case MECF.Framework.Common.Device.Bases.LightType.Yellow: lightType = LightType.YELLOW; break; case MECF.Framework.Common.Device.Bases.LightType.Green: lightType = LightType.GREEN; break; case MECF.Framework.Common.Device.Bases.LightType.White: lightType = LightType.WHITE; break; case MECF.Framework.Common.Device.Bases.LightType.Blue: lightType = LightType.BLUE; break; case MECF.Framework.Common.Device.Bases.LightType.Buzzer: case MECF.Framework.Common.Device.Bases.LightType.Buzzer1: lightType = LightType.BUZZER1; break; default: lightType = LightType.BUZZER1; break; } LightStatus lightSetpoint; switch (setpoint) { case TowerLightStatus.Blinking: lightSetpoint = LightStatus.BLINK; //lightState = LightState.Blink; break; case TowerLightStatus.On: lightSetpoint = LightStatus.ON; break; case TowerLightStatus.Off: lightSetpoint = LightStatus.OFF; break; default: lightSetpoint = LightStatus.OFF; break; } return EfemController.SetLamp(lightType, lightSetpoint); } 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.WriteExeption(ex); } } public void ResetData() { _isInit = true; } public override void Reset() { _trigError.RST = true; base.Reset(); } } }