AlarmManager.cs 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4. namespace BaseLibRWFile
  5. {
  6. public class AlarmManager
  7. {
  8. public static event Action<AlarmMsg> TriggerAlarmEvent;
  9. public static event Action ClearAlarmEvent;
  10. private static AlarmMsg almTrigTemp = new AlarmMsg();
  11. private static AlarmMsg almClearTemp = new AlarmMsg();
  12. public static Dictionary<string, AlarmMsg> dicCurrentAlarm = new Dictionary<string, AlarmMsg>();
  13. public static bool TriggerAlarm(string strErCode, string strException = "",string strAlarmPos = "")
  14. {
  15. if (dicCurrentAlarm.ContainsKey(strErCode))
  16. {
  17. return false;
  18. }
  19. DateTime dtStart, dtEnd;
  20. try
  21. {
  22. if(GlobalPara.CurrentMachineState != MachineState.EStop)
  23. {
  24. GlobalPara.CurrentMachineState = MachineState.Alarming;
  25. }
  26. string Content;
  27. string Solution;
  28. switch (GlobalPara.CurrentLanguage)
  29. {
  30. case Language.English:
  31. Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentEnglish;
  32. Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionEnglish;
  33. break;
  34. case Language.Chinese:
  35. Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentChinese;
  36. Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionChinese;
  37. break;
  38. default:
  39. Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentChinese;
  40. Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionChinese;
  41. break;
  42. }
  43. almTrigTemp.ErrorCode = strErCode;
  44. almTrigTemp.Level = Convert.ToInt32(RWAlarmFile.ErrorCodeDic[strErCode].Level);
  45. almTrigTemp.Enable = RWAlarmFile.ErrorCodeDic[strErCode].Enable == "false" ? false : true;
  46. almTrigTemp.Content = Content;
  47. almTrigTemp.Exception = strException;
  48. almTrigTemp.Solution = Solution;
  49. almTrigTemp.PictureName = RWAlarmFile.ErrorCodeDic[strErCode].PictureName;
  50. almTrigTemp.FileName = RWAlarmFile.ErrorCodeDic[strErCode].PDFFileName;
  51. almTrigTemp.PageNo = RWAlarmFile.ErrorCodeDic[strErCode].PDFPageNo;
  52. dtStart = DateTime.Now;
  53. almTrigTemp.StartTime = dtStart.ToString("yyyy-MM-dd HH:mm:ss.fff");
  54. almTrigTemp.EndTime = string.Empty;
  55. almTrigTemp.MachineMode = GlobalPara.CurrentMachineMode.ToString();
  56. almTrigTemp.Operator = GlobalPara.CurrentOperationLevel.ToString();
  57. almTrigTemp.AlarmPos = strAlarmPos;
  58. almTrigTemp.CMErrorCode = RWAlarmFile.ErrorCodeDic[strErCode].SpecifiedErrorCode;
  59. switch (almTrigTemp.Level)
  60. {
  61. case 1://Switch to the alarm interface
  62. almTrigTemp.IsShow = true;
  63. dicCurrentAlarm.Add(almTrigTemp.ErrorCode, almTrigTemp);
  64. TriggerAlarmEvent?.Invoke(almTrigTemp);
  65. return true;
  66. case 2://Popup prompt
  67. switch (GlobalPara.CurrentLanguage)
  68. {
  69. case Language.English:
  70. MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" +
  71. $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" +
  72. $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips",
  73. MessageBoxButtons.OK, MessageBoxIcon.Error);
  74. break;
  75. case Language.Chinese:
  76. MessageBox.Show($"报警代码:{almTrigTemp.ErrorCode}\r\n报警内容:{almTrigTemp.Content}\r\n" +
  77. $"解决方案:{almTrigTemp.Solution}\r\n开始时间:{almTrigTemp.StartTime}\r\n" +
  78. $"机台模式:{almTrigTemp.MachineMode}\r\n操作员:{almTrigTemp.Operator}\r\n", "报警提示",
  79. MessageBoxButtons.OK, MessageBoxIcon.Error);
  80. break;
  81. default:
  82. MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" +
  83. $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" +
  84. $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips",
  85. MessageBoxButtons.OK, MessageBoxIcon.Error);
  86. break;
  87. }
  88. break;
  89. case 3://Interface prompt
  90. almTrigTemp.IsShow = false;
  91. switch (GlobalPara.CurrentLanguage)
  92. {
  93. case Language.English:
  94. if (MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" +
  95. $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" +
  96. $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips",
  97. MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
  98. {
  99. dtEnd = DateTime.Now;
  100. almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString();
  101. almTrigTemp.EndTime = dtEnd.ToString("yyyy-MM-dd HH:mm:ss.fff");
  102. RWAlarmFile.WriteAlarmFile(almTrigTemp);
  103. TriggerAlarmEvent?.Invoke(almTrigTemp);
  104. //GlobalPara.CurrentMachineState = GlobalPara.LastMachineState;
  105. return true;
  106. }
  107. break;
  108. case Language.Chinese:
  109. if (MessageBox.Show($"报警代码:{almTrigTemp.ErrorCode}\r\n报警内容:{almTrigTemp.Content}\r\n" +
  110. $"解决方案:{almTrigTemp.Solution}\r\n开始时间:{almTrigTemp.StartTime}\r\n" +
  111. $"机台模式:{almTrigTemp.MachineMode}\r\n操作员:{almTrigTemp.Operator}\r\n", "报警提示",
  112. MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
  113. {
  114. dtEnd = DateTime.Now;
  115. almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString();
  116. almTrigTemp.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
  117. RWAlarmFile.WriteAlarmFile(almTrigTemp);
  118. TriggerAlarmEvent?.Invoke(almTrigTemp);
  119. //GlobalPara.CurrentMachineState = GlobalPara.LastMachineState;
  120. return true;
  121. }
  122. break;
  123. }
  124. break;
  125. default:
  126. break;
  127. }
  128. }
  129. catch (Exception ex)
  130. {
  131. string str = "触发报警出错:";
  132. Msg.Show($"{str}\r\n{ex}", $"{str}\r\nError triggering alarm:\r\n{ex}",
  133. $"{str}\r\nLỗi khi kích hoạt cảnh báo:\r\n{ex}", "Error", msgicon: MessageBoxIcon.Error);
  134. return false;
  135. }
  136. //Level == 2 时执行
  137. almTrigTemp.IsShow = false;
  138. dtEnd = DateTime.Now;
  139. almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString();
  140. almTrigTemp.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
  141. RWAlarmFile.WriteAlarmFile(almTrigTemp);
  142. TriggerAlarmEvent?.Invoke(almTrigTemp);
  143. return false;
  144. }
  145. public static void ClearAlarm()
  146. {
  147. if (dicCurrentAlarm.Count <= 0)
  148. {
  149. return;
  150. }
  151. try
  152. {
  153. DateTime dtStart, dtEnd;
  154. dtEnd = DateTime.Now;
  155. string[] strCount = new string[dicCurrentAlarm.Count];
  156. int j = 0;
  157. foreach (var item in dicCurrentAlarm.Keys)
  158. {
  159. strCount[j] = item;
  160. j++;
  161. }
  162. for (int i = 0; i < strCount.Length; i++)
  163. {
  164. almClearTemp = dicCurrentAlarm[strCount[i]];
  165. dtStart = Convert.ToDateTime(almClearTemp.StartTime);
  166. dtEnd = DateTime.Now;
  167. almClearTemp.EndTime = dtEnd.ToString("yyyy-MM-dd HH:mm:ss.fff");
  168. almClearTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString();
  169. dicCurrentAlarm.Remove(almClearTemp.ErrorCode);
  170. dicCurrentAlarm.Add(almClearTemp.ErrorCode, almClearTemp);//更新报警时间等内容
  171. RWAlarmFile.WriteAlarmFile(almClearTemp);
  172. }
  173. ClearAlarmEvent?.Invoke();
  174. }
  175. catch (Exception ex)
  176. {
  177. MessageBox.Show("清除报警内容出错 err :" + ex.ToString());
  178. }
  179. }
  180. }
  181. }