MinicsManager.cs 5.4 KB

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