SunWaySignalTower.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Aitex.Core.Util;
  2. using MECF.Framework.Common.Device.Bases;
  3. using MECF.Framework.Common.Equipment;
  4. using CyberX8_RT.Devices.EFEM;
  5. using CyberX8_RT.Modules;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using MECF.Framework.Common.IOCore;
  12. namespace CyberX8_RT.Devices.SignalLight
  13. {
  14. public class SunWaySignalTower : SignalTowerBase
  15. {
  16. #region 常量
  17. private const string BUZZER = "Buzzer";
  18. private const string RED_LIGHT = "RedLight";
  19. private const string YELLOW_LIGHT = "YellowLight";
  20. private const string GREEN_LIGHT = "GreenLight";
  21. private const string BLUE_LIGHT = "BlueLight";
  22. #endregion
  23. private EfemBase _efem;
  24. private List<SunWaySignalLight> _lights = new List<SunWaySignalLight>();
  25. /// <summary>
  26. /// 变量是否初始化字典
  27. /// </summary>
  28. private Dictionary<string, bool> _variableInitializeDic = new Dictionary<string, bool>();
  29. private Dictionary<string, bool> _lightValueDic = new Dictionary<string, bool>();
  30. public SunWaySignalTower(string module, string name) : base("", "")
  31. {
  32. base.Module = module;
  33. base.Name = name;
  34. base.Display = name;
  35. base.DeviceID = "";
  36. }
  37. public override bool Initialize()
  38. {
  39. base.Initialize();
  40. if (_efem == null && Singleton<RouteManager>.Instance.EFEM != null)
  41. {
  42. _efem = Singleton<RouteManager>.Instance.EFEM.EfemDevice;
  43. }
  44. CustomSignalTower();
  45. SubscriptionAction();
  46. return true;
  47. }
  48. private void SubscriptionAction()
  49. {
  50. IOSubscribeUpdateVariable(BUZZER);
  51. IOSubscribeUpdateVariable(RED_LIGHT);
  52. IOSubscribeUpdateVariable(YELLOW_LIGHT);
  53. IOSubscribeUpdateVariable(GREEN_LIGHT);
  54. IOSubscribeUpdateVariable(BLUE_LIGHT);
  55. }
  56. /// <summary>
  57. /// 订阅IO变量
  58. /// </summary>
  59. /// <param name="variable"></param>
  60. private void IOSubscribeUpdateVariable(string variable)
  61. {
  62. _variableInitializeDic[variable] = false;
  63. _lightValueDic[variable] = false;
  64. IOModuleManager.Instance.SubscribeModuleVariable("LightTower", variable, UpdateVariableValue);
  65. }
  66. /// 更新变量数值
  67. /// </summary>
  68. /// <param name="variable"></param>
  69. /// <param name="value"></param>
  70. private void UpdateVariableValue(string variable, object value)
  71. {
  72. if (_lightValueDic.ContainsKey(variable))
  73. {
  74. _lightValueDic[variable] = (bool)value;
  75. }
  76. }
  77. //重新连接EFEM之后,需要重置灯塔
  78. public void ResetData()
  79. {
  80. foreach (var rorzeSingalLight in _lights)
  81. {
  82. rorzeSingalLight.ResetData();
  83. }
  84. }
  85. public override SignalLightBase CreateLight(MECF.Framework.Common.Device.Bases.LightType type)
  86. {
  87. var light = new SunWaySignalLight(ModuleName.System.ToString(), $"SignalLight{type}", _efem)
  88. { Type = type };
  89. _lights.Add(light);
  90. return light;
  91. }
  92. }
  93. }