using System; using System.Collections.Generic; using System.Windows.Forms; namespace BaseLibRWFile { public class AlarmManager { public static event Action TriggerAlarmEvent; public static event Action ClearAlarmEvent; private static AlarmMsg almTrigTemp = new AlarmMsg(); private static AlarmMsg almClearTemp = new AlarmMsg(); public static Dictionary dicCurrentAlarm = new Dictionary(); public static bool TriggerAlarm(string strErCode, string strException = "",string strAlarmPos = "") { if (dicCurrentAlarm.ContainsKey(strErCode)) { return false; } DateTime dtStart, dtEnd; try { if(GlobalPara.CurrentMachineState != MachineState.EStop) { GlobalPara.CurrentMachineState = MachineState.Alarming; } string Content; string Solution; switch (GlobalPara.CurrentLanguage) { case Language.English: Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentEnglish; Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionEnglish; break; case Language.Chinese: Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentChinese; Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionChinese; break; default: Content = RWAlarmFile.ErrorCodeDic[strErCode].ContentChinese; Solution = RWAlarmFile.ErrorCodeDic[strErCode].SolutionChinese; break; } almTrigTemp.ErrorCode = strErCode; almTrigTemp.Level = Convert.ToInt32(RWAlarmFile.ErrorCodeDic[strErCode].Level); almTrigTemp.Enable = RWAlarmFile.ErrorCodeDic[strErCode].Enable == "false" ? false : true; almTrigTemp.Content = Content; almTrigTemp.Exception = strException; almTrigTemp.Solution = Solution; almTrigTemp.PictureName = RWAlarmFile.ErrorCodeDic[strErCode].PictureName; almTrigTemp.FileName = RWAlarmFile.ErrorCodeDic[strErCode].PDFFileName; almTrigTemp.PageNo = RWAlarmFile.ErrorCodeDic[strErCode].PDFPageNo; dtStart = DateTime.Now; almTrigTemp.StartTime = dtStart.ToString("yyyy-MM-dd HH:mm:ss.fff"); almTrigTemp.EndTime = string.Empty; almTrigTemp.MachineMode = GlobalPara.CurrentMachineMode.ToString(); almTrigTemp.Operator = GlobalPara.CurrentOperationLevel.ToString(); almTrigTemp.AlarmPos = strAlarmPos; almTrigTemp.CMErrorCode = RWAlarmFile.ErrorCodeDic[strErCode].SpecifiedErrorCode; switch (almTrigTemp.Level) { case 1://Switch to the alarm interface almTrigTemp.IsShow = true; dicCurrentAlarm.Add(almTrigTemp.ErrorCode, almTrigTemp); TriggerAlarmEvent?.Invoke(almTrigTemp); return true; case 2://Popup prompt switch (GlobalPara.CurrentLanguage) { case Language.English: MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" + $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" + $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips", MessageBoxButtons.OK, MessageBoxIcon.Error); break; case Language.Chinese: MessageBox.Show($"报警代码:{almTrigTemp.ErrorCode}\r\n报警内容:{almTrigTemp.Content}\r\n" + $"解决方案:{almTrigTemp.Solution}\r\n开始时间:{almTrigTemp.StartTime}\r\n" + $"机台模式:{almTrigTemp.MachineMode}\r\n操作员:{almTrigTemp.Operator}\r\n", "报警提示", MessageBoxButtons.OK, MessageBoxIcon.Error); break; default: MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" + $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" + $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } break; case 3://Interface prompt almTrigTemp.IsShow = false; switch (GlobalPara.CurrentLanguage) { case Language.English: if (MessageBox.Show($"ErrorCode:{almTrigTemp.ErrorCode}\r\nAlarmContent:{almTrigTemp.Content}\r\n" + $"Solution:{almTrigTemp.Solution}\r\nStartingTime:{almTrigTemp.StartTime}\r\n" + $"MachineMode:{almTrigTemp.MachineMode}\r\nOperator:{almTrigTemp.Operator}\r\n", "Alarm Tips", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { dtEnd = DateTime.Now; almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString(); almTrigTemp.EndTime = dtEnd.ToString("yyyy-MM-dd HH:mm:ss.fff"); RWAlarmFile.WriteAlarmFile(almTrigTemp); TriggerAlarmEvent?.Invoke(almTrigTemp); //GlobalPara.CurrentMachineState = GlobalPara.LastMachineState; return true; } break; case Language.Chinese: if (MessageBox.Show($"报警代码:{almTrigTemp.ErrorCode}\r\n报警内容:{almTrigTemp.Content}\r\n" + $"解决方案:{almTrigTemp.Solution}\r\n开始时间:{almTrigTemp.StartTime}\r\n" + $"机台模式:{almTrigTemp.MachineMode}\r\n操作员:{almTrigTemp.Operator}\r\n", "报警提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { dtEnd = DateTime.Now; almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString(); almTrigTemp.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); RWAlarmFile.WriteAlarmFile(almTrigTemp); TriggerAlarmEvent?.Invoke(almTrigTemp); //GlobalPara.CurrentMachineState = GlobalPara.LastMachineState; return true; } break; } break; default: break; } } catch (Exception ex) { string str = "触发报警出错:"; Msg.Show($"{str}\r\n{ex}", $"{str}\r\nError triggering alarm:\r\n{ex}", $"{str}\r\nLỗi khi kích hoạt cảnh báo:\r\n{ex}", "Error", msgicon: MessageBoxIcon.Error); return false; } //Level == 2 时执行 almTrigTemp.IsShow = false; dtEnd = DateTime.Now; almTrigTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString(); almTrigTemp.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); RWAlarmFile.WriteAlarmFile(almTrigTemp); TriggerAlarmEvent?.Invoke(almTrigTemp); return false; } public static void ClearAlarm() { if (dicCurrentAlarm.Count <= 0) { return; } try { DateTime dtStart, dtEnd; dtEnd = DateTime.Now; string[] strCount = new string[dicCurrentAlarm.Count]; int j = 0; foreach (var item in dicCurrentAlarm.Keys) { strCount[j] = item; j++; } for (int i = 0; i < strCount.Length; i++) { almClearTemp = dicCurrentAlarm[strCount[i]]; dtStart = Convert.ToDateTime(almClearTemp.StartTime); dtEnd = DateTime.Now; almClearTemp.EndTime = dtEnd.ToString("yyyy-MM-dd HH:mm:ss.fff"); almClearTemp.TimeSpan = (dtEnd - dtStart).TotalSeconds.ToString(); dicCurrentAlarm.Remove(almClearTemp.ErrorCode); dicCurrentAlarm.Add(almClearTemp.ErrorCode, almClearTemp);//更新报警时间等内容 RWAlarmFile.WriteAlarmFile(almClearTemp); } ClearAlarmEvent?.Invoke(); } catch (Exception ex) { MessageBox.Show("清除报警内容出错 err :" + ex.ToString()); } } } }