MinicsManager.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using Aitex.Core.RT.Event;
  2. using Aitex.Core.Util;
  3. using DocumentFormat.OpenXml.Wordprocessing;
  4. using FurnaceRT.Equipments.PMs;
  5. using FurnaceRT.Equipments.Systems;
  6. using MECF.Framework.Common.Equipment;
  7. using MECF.Framework.Common.Event;
  8. using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
  9. using RTCommunicatorBase;
  10. using RTCommunicatorTLV;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading;
  16. using System.Threading.Tasks;
  17. namespace FurnaceRT.Extraction
  18. {
  19. public class MinicsManager : Singleton<MinicsManager>, IRTMini8Provider
  20. {
  21. public void Connected(string ip, int port)
  22. {
  23. Console.WriteLine($"DisconnectedNotify {ip} {port}");
  24. }
  25. public void DisConnected(string ip, int port)
  26. {
  27. Console.WriteLine($"DisconnectedNotify {ip} {port}");
  28. }
  29. private RTCommunicator_TLV communicator = new RTCommunicator_TLV();
  30. public void Initialize(string ip = "127.0.0.1", int port = 50052)
  31. {
  32. communicator.Initialize(this);
  33. SWJConnectedMinics(ip, port);
  34. AlarmIndefinx();
  35. }
  36. public void SWJConnectedMinics(string ip, int port)
  37. {
  38. if (communicator.StartService(ip, port))
  39. {
  40. EV.PostInfoLog(ModuleName.Minics.ToString(), $"minics Connected {ip}:{port} sucessful");
  41. }
  42. else
  43. {
  44. for (int i = 1; i <= 3; i++)
  45. {
  46. var status = this.communicator.StartService(ip, port);
  47. try
  48. {
  49. if (status)
  50. break;
  51. }
  52. catch
  53. {
  54. if (i == 3)
  55. return;
  56. Thread.Sleep(300);
  57. EV.PostAlarmLog(ModuleName.Minics.ToString(), $"retry minics Connected {ip}:{port} error {i} times");
  58. }
  59. }
  60. }
  61. }
  62. public void End()
  63. {
  64. }
  65. public void SelectMinicsConfig(string minicsConfigName)
  66. {
  67. bool result = communicator.SelectConfigFile(minicsConfigName);
  68. if (!result)
  69. {
  70. EV.PostAlarmLog(ModuleName.Minics.ToString(), $"SelectMinicsConfig {minicsConfigName} fail!");
  71. }
  72. }
  73. public Dictionary<string, Tuple<AlarmEventItem, AlarmEventItem, AlarmEventItem>> MinicsAlarmDic { get; set; } = new Dictionary<string, Tuple<AlarmEventItem, AlarmEventItem, AlarmEventItem>>();
  74. public void AlarmIndefinx()
  75. {
  76. var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
  77. for (int i = 1; i < 9; i++)
  78. {
  79. for (int j = 1; j < 17; j++)
  80. {
  81. MinicsAlarmDic.Add($"{i}_{j}", pm.AddMini8ChannelAlarm(i, j));
  82. }
  83. }
  84. }
  85. public void CurrentTempConfigFile(string fileName)
  86. {
  87. }
  88. public void ChannelAlarmNotify(ST_ALARM alarm)
  89. {
  90. var gasLineHeaterIndex = $"{alarm.Mini8Index}_{alarm.ChannelIndex}";
  91. if (!MinicsAlarmDic.ContainsKey(gasLineHeaterIndex))
  92. {
  93. return;
  94. }
  95. var alarmValue = MinicsAlarmDic[gasLineHeaterIndex];
  96. if (alarm.AlarmType == RTCommunicatorBase.AlarmType.CapsOverFlow)
  97. {
  98. var msg = $"{gasLineHeaterIndex} {alarm.PV} limit is ({alarm.Caps}~{alarm.Floor}) ";
  99. alarmValue.Item1.Set(msg);
  100. }
  101. if (alarm.AlarmType == RTCommunicatorBase.AlarmType.FloorOverFlow)
  102. {
  103. var msg = $"{gasLineHeaterIndex} {alarm.PV} limit is ({alarm.Caps}~{alarm.Floor}) ";
  104. alarmValue.Item2.Set(msg);
  105. }
  106. if (alarm.AlarmType == RTCommunicatorBase.AlarmType.TcBroken)
  107. {
  108. var msg = $"{gasLineHeaterIndex} is TcBroken";
  109. alarmValue.Item3.Set(msg);
  110. }
  111. }
  112. public void Mini8ConnectNotify(byte mini8Index)
  113. {
  114. var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
  115. pm.Mini8ConnectAlarm.Reset();
  116. }
  117. public void Mini8DisconnectNotify(byte mini8)
  118. {
  119. var pm = Singleton<EquipmentManager>.Instance.Modules[ModuleName.PM1] as PMModule;
  120. pm.Mini8ConnectAlarm.Set();
  121. }
  122. }
  123. }