FurnaceSignalTower.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using Aitex.Core.RT.Event;
  2. using Aitex.Core.RT.IOCore;
  3. using Aitex.Core.RT.Log;
  4. using Aitex.Core.Util;
  5. using MECF.Framework.Common.Device.Bases;
  6. using MECF.Framework.Common.Equipment;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Xml;
  13. namespace FurnaceRT.Equipments.Systems
  14. {
  15. public class FurnaceSingalLight : SignalLightBase
  16. {
  17. public LightType Type { get; set; }
  18. private F_TRIG _trigError = new F_TRIG();
  19. public DOAccessor LightDO { get; set; }
  20. public DOAccessor LightDOFlash { get; set; }
  21. public FurnaceSingalLight(string module, string name) : base(module, name)
  22. {
  23. }
  24. public FurnaceSingalLight(string module, XmlElement node, string ioModule = "") : base(module, module)
  25. {
  26. base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
  27. base.Name = node.GetAttribute("id");
  28. base.Display = node.GetAttribute("display");
  29. base.DeviceID = node.GetAttribute("schematicId");
  30. LightDO = ParseDoNode("doLight", node, ioModule);
  31. LightDOFlash = ParseDoNode("doFlashLight", node, ioModule);
  32. }
  33. protected override void SetOn()
  34. {
  35. SetLight(TowerLightStatus.On);
  36. }
  37. protected override void SetOff()
  38. {
  39. SetLight(TowerLightStatus.Off);
  40. }
  41. protected override void SetBlinking(bool token)
  42. {
  43. SetLight(TowerLightStatus.Blinking);
  44. }
  45. public override void SetLight(TowerLightStatus setpoint)
  46. {
  47. try
  48. {
  49. string reason = string.Empty;
  50. _trigError.CLK = (LightDO != null && LightDO.SetValue(setpoint == TowerLightStatus.On ? true : false, out reason)) ||
  51. (LightDOFlash != null && LightDOFlash.SetValue(setpoint == TowerLightStatus.Blinking ? true : false, out reason));
  52. if (_trigError.Q)
  53. {
  54. EV.PostWarningLog(Module, $"Set {Type} signal light {setpoint} error, {reason}");
  55. }
  56. }
  57. catch (Exception ex)
  58. {
  59. LOG.Write(ex);
  60. }
  61. }
  62. public override void Reset()
  63. {
  64. _trigError.RST = true;
  65. base.Reset();
  66. }
  67. }
  68. public class FurnaceSignalTower : SignalTowerBase
  69. {
  70. private Dictionary<string, DOAccessor> _lightDoDic;
  71. public FurnaceSignalTower(string module, XmlElement node, string ioModule = "") : base(module, module)
  72. {
  73. base.Module = string.IsNullOrEmpty(node.GetAttribute("module")) ? module : node.GetAttribute("module");
  74. base.Name = node.GetAttribute("id");
  75. base.Display = node.GetAttribute("display");
  76. base.DeviceID = node.GetAttribute("schematicId");
  77. _lightDoDic = new Dictionary<string, DOAccessor>();
  78. DOAccessor doRed = ParseDoNode("doRed", node, ioModule);
  79. if (doRed != null)
  80. {
  81. _lightDoDic.Add(LightType.Red.ToString(), doRed);
  82. }
  83. DOAccessor doYellow = ParseDoNode("doYellow", node, ioModule);
  84. if (doYellow != null)
  85. {
  86. _lightDoDic.Add(LightType.Yellow.ToString(), doYellow);
  87. }
  88. DOAccessor doGreen = ParseDoNode("doGreen", node, ioModule);
  89. if (doGreen != null)
  90. {
  91. _lightDoDic.Add(LightType.Green.ToString(), doGreen);
  92. }
  93. DOAccessor doBlue = ParseDoNode("doBlue", node, ioModule);
  94. if (doBlue != null)
  95. {
  96. _lightDoDic.Add(LightType.Blue.ToString(), doBlue);
  97. }
  98. DOAccessor doWhite = ParseDoNode("doWhite", node, ioModule);
  99. if (doWhite != null)
  100. {
  101. _lightDoDic.Add(LightType.White.ToString(), doWhite);
  102. }
  103. DOAccessor doBuzzer1 = ParseDoNode("doBuzzer1", node, ioModule);
  104. if (doBuzzer1 != null)
  105. {
  106. _lightDoDic.Add(LightType.Buzzer1.ToString(), doBuzzer1);
  107. }
  108. DOAccessor doBuzzer2 = ParseDoNode("doBuzzer2", node, ioModule);
  109. if (doBuzzer2 != null)
  110. {
  111. _lightDoDic.Add(LightType.Buzzer2.ToString(), doBuzzer2);
  112. }
  113. DOAccessor doRedFlash = ParseDoNode("doRedFlash", node, ioModule);
  114. if (doRed != null)
  115. {
  116. _lightDoDic.Add(LightType.Red.ToString() + "Flash", doRedFlash);
  117. }
  118. DOAccessor doYellowFlash = ParseDoNode("doYellowFlash", node, ioModule);
  119. if (doYellow != null)
  120. {
  121. _lightDoDic.Add(LightType.Yellow.ToString() + "Flash", doYellowFlash);
  122. }
  123. DOAccessor doGreenFlash = ParseDoNode("doGreenFlash", node, ioModule);
  124. if (doGreen != null)
  125. {
  126. _lightDoDic.Add(LightType.Green.ToString() + "Flash", doGreenFlash);
  127. }
  128. DOAccessor doBlueFlash = ParseDoNode("doBlueFlash", node, ioModule);
  129. if (doBlue != null)
  130. {
  131. _lightDoDic.Add(LightType.Blue.ToString() + "Flash", doBlueFlash);
  132. }
  133. }
  134. public override bool Initialize()
  135. {
  136. CustomSignalTower();
  137. return base.Initialize();
  138. }
  139. public override SignalLightBase CreateLight(LightType type)
  140. {
  141. if (!_lightDoDic.ContainsKey(type.ToString()))
  142. {
  143. return null;
  144. }
  145. return new FurnaceSingalLight(ModuleName.System.ToString(), $"SignalLight{type}")
  146. {
  147. Type = type,
  148. LightDO = _lightDoDic[type.ToString()],
  149. LightDOFlash = _lightDoDic.ContainsKey(type.ToString() + "Flash") ? _lightDoDic[type.ToString() + "Flash"] : null,
  150. };
  151. }
  152. public bool SetLight(LightType type, TowerLightStatus setpoint)
  153. {
  154. if(_lights == null || !_lights.ContainsKey(type))
  155. {
  156. return false;
  157. }
  158. (_lights[type] as FurnaceSingalLight)?.SetLight(setpoint);
  159. return true;
  160. }
  161. }
  162. }