Sic01/Modules/SicPM/Devices/IoSignalTower.cs

141 lines
4.1 KiB
C#
Raw Permalink Normal View History

2023-01-16 11:14:35 +08:00
using Aitex.Core.RT.Event;
using Aitex.Core.RT.IOCore;
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 System.Xml;
namespace SicPM.Devices
{
class IoSingalLight : SignalLightBase
{
public LightType Type { get; set; }
private F_TRIG _trigError = new F_TRIG();
public DOAccessor LightDO { get; set; }
public IoSingalLight(string module, string name) : base(module, name)
{
}
protected override void SetOn()
{
SetLight(TowerLightStatus.On);
}
protected override void SetOff()
{
SetLight(TowerLightStatus.Off);
}
protected override void SetBlinking(bool token)
{
SetLight(TowerLightStatus.Blinking);
}
private void SetLight(TowerLightStatus setpoint)
{
try
{
_trigError.CLK = LightDO.SetValue(setpoint == TowerLightStatus.On ? true : false, out string reason); ;
if (_trigError.Q)
{
EV.PostWarningLog(Module, $"Set {Type} signal light {setpoint} error, {reason}");
}
}
catch (Exception ex)
{
LOG.Write(ex);
}
}
public override void Reset()
{
_trigError.RST = true;
base.Reset();
}
}
public class IoSignalTower : SignalTowerBase
{
private Dictionary<LightType, DOAccessor> _lightDoDic;
public IoSignalTower(string module, XmlElement node, string ioModule = "") : base(module, module)
{
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");
_lightDoDic = new Dictionary<LightType, DOAccessor>();
DOAccessor doRed = ParseDoNode("doRed", node, ioModule);
if (doRed != null)
{
_lightDoDic.Add(LightType.Red, doRed);
}
DOAccessor doYellow = ParseDoNode("doYellow", node, ioModule);
if (doYellow != null)
{
_lightDoDic.Add(LightType.Yellow, doYellow);
}
DOAccessor doGreen = ParseDoNode("doGreen", node, ioModule);
if (doGreen != null)
{
_lightDoDic.Add(LightType.Green, doGreen);
}
DOAccessor doBlue = ParseDoNode("doBlue", node, ioModule);
if (doBlue != null)
{
_lightDoDic.Add(LightType.Blue, doBlue);
}
DOAccessor doWhite = ParseDoNode("doWhite", node, ioModule);
if (doWhite != null)
{
_lightDoDic.Add(LightType.White, doWhite);
}
DOAccessor doBuzzer = ParseDoNode("doBuzzer", node, ioModule);
if (doBuzzer != null)
{
_lightDoDic.Add(LightType.Buzzer, doBuzzer);
}
DOAccessor doBuzzer1 = ParseDoNode("doBuzzer1", node, ioModule);
if (doBuzzer1 != null)
{
_lightDoDic.Add(LightType.Buzzer1, doBuzzer1);
}
DOAccessor doBuzzer2 = ParseDoNode("doBuzzer2", node, ioModule);
if (doBuzzer2 != null)
{
_lightDoDic.Add(LightType.Buzzer2, doBuzzer2);
}
}
public override bool Initialize()
{
return base.Initialize();
}
public override SignalLightBase CreateLight(LightType type)
{
if (!_lightDoDic.ContainsKey(type))
{
return null;
}
return new IoSingalLight(ModuleName.System.ToString(), $"SignalLight{type}") { Type = type, LightDO = _lightDoDic[type] };
}
}
}