/// <summary> /// 丢出报警,生产完当前板再做处理 /// </summary> /// <param name="sender"></param> /// <param name="info"></param> private void FireAndDelayHandle(IAlarmSenderable sender, AlarmInfo info) { if (this.delayAlarmDic.TryAdd(info.DateTime, info)) { this.alarmEventQueue.Enqueue(AlarmEvent.Create(sender, info)); } }
/// <summary> /// 丢出报警,立即处理 /// </summary> /// <param name="sender"></param> /// <param name="info"></param> private DialogResult?FireAndShowMsgBox(IAlarmSenderable sender, AlarmInfo info, Dictionary <DialogResult, Action> dic) { //记录报警 this.alarmEventQueue.Enqueue(AlarmEvent.Create(sender, info)); if (!this.MachineInitDone) { return(DialogResult.Cancel); } this.litghtTower.HandleAlarmEvent(AlarmHandleType.ImmediateHandle); // 处理报警 string senderName = ""; if (sender != null) { senderName = sender.Name; } //DialogResult result = new AlarmForm(dic, new List<string> { string.Format("{0}:{1}", senderName, info.Message)}).ShowDialog(); //IAsyncResult ar = this.OnAlarmFormShown?.BeginInvoke(dic, new List<string> { string.Format("{0}:{1}", senderName, info.Message) }, null, null); //DialogResult? result = this.OnAlarmFormShown?.EndInvoke(ar); immediateAlarmInfo = string.Format("{0}:{1}", senderName, info.Message); DialogResult?result = this.OnAlarmFormShown?.Invoke(dic, new List <string> { string.Format("{0}:{1}", senderName, info.Message) }); immediateAlarmInfo = ""; return(result); }
public static AlarmEvent Create(IAlarmSenderable sender, AlarmInfo info) { AlarmEvent alarmEvent = new AlarmEvent() { Sender = sender, Info = info }; return(alarmEvent); }
public void HandleAlarmEvent(AlarmEvent e) { if (!this.IsHandleCreated) { this.buffer.Enqueue(e); return; } this.BeginInvoke(new Action(() => { Image img = null; switch (e.Info.Level) { case AlarmLevel.Fatal: img = this.imgFatal; break; case AlarmLevel.Error: img = this.imgError; break; case AlarmLevel.Warn: img = this.imgWarn; break; } DataGridViewRow dr = new DataGridViewRow(); DataGridViewImageCell cell0 = new DataGridViewImageCell(); cell0.Value = img; dr.Cells.Add(cell0); DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell(); cell1.Value = e.Info.DateTime; dr.Cells.Add(cell1); cell1 = new DataGridViewTextBoxCell(); cell1.Value = e.Info.ErrorCode; dr.Cells.Add(cell1); cell1 = new DataGridViewTextBoxCell(); cell1.Value = e.Sender?.Name; dr.Cells.Add(cell1); cell1 = new DataGridViewTextBoxCell(); cell1.Value = e.Info.Where; dr.Cells.Add(cell1); cell1 = new DataGridViewTextBoxCell(); cell1.Value = e.Info.Message; dr.Cells.Add(cell1); this.dataGridView1.Rows.Insert(0, dr); if (this.dataGridView1.Rows.Count > 200) { this.dataGridView1.Rows.RemoveAt(this.dataGridView1.Rows.Count - 1); } this.dataGridView1.CurrentCell = cell0; })); }
/// <summary> /// 丢出可消除的报警(如轴状态、报警信号) /// </summary> /// <param name="sender"></param> /// <param name="info"></param> private void FireAndAutoHandle(IAlarmSenderable sender, AlarmInfo info) { if (this.alarmDic.ContainsKey(string.Format("{0}:{1}", sender.ToString(), info.Message))) { return; } else { if (this.alarmDic.TryAdd(string.Format("{0}:{1}", sender.ToString(), info.Message), new Tuple <IAlarmSenderable, AlarmInfo>(sender, info))) { this.alarmEventQueue.Enqueue(AlarmEvent.Create(sender, info)); if (info.HandleType == AlarmHandleType.AutoAndImmeDiateHandle) { this.AutoImmediateAlarmDic.TryAdd(info.Message, info); } if (info.HandleType == AlarmHandleType.AutoAndDelayHandle) { this.AutoDelayAlarmDic.TryAdd(info.Message, info); } } } }
public void Fire(IAlarmSenderable sender, AlarmInfo info) { if (info.HandleType == AlarmHandleType.OnlyRecord) { this.alarmEventQueue.Enqueue(AlarmEvent.Create(sender, info)); } else if (info.HandleType == AlarmHandleType.DelayHandle) { this.FireAndDelayHandle(sender, info); } else if (info.HandleType == AlarmHandleType.AutoHandle || info.HandleType == AlarmHandleType.AutoAndImmeDiateHandle || info.HandleType == AlarmHandleType.AutoAndDelayHandle) { this.FireAndAutoHandle(sender, info); } else if (info.HandleType == AlarmHandleType.ImmediateHandle) { Dictionary <DialogResult, Action> dic = new Dictionary <DialogResult, Action>(); dic.Add(DialogResult.Ignore, new Action(() => { })); this.FireAndShowMsgBox(sender, info, dic); } }