public static string GetAlarmCacheString(IO_DEVICE device, out List <IO_PARAALARM> alarms) { alarms = new List <IO_PARAALARM>(); IODeviceParaMaker paraMaker = new IODeviceParaMaker(); string alarmString = ""; for (int i = 0; i < device.IOParas.Count; i++) { try { IO_PARAALARM alarm = paraMaker.MakeAlarm(device.IOParas, device.IOParas[i], device.IOParas[i].IORealData, device.IO_DEVICE_LABLE); if (alarm != null && !string.IsNullOrEmpty(alarm.IO_ALARM_DATE)) { alarmString += "^" + alarm.GetCommandString(); alarms.Add(alarm); } } catch { continue; } } return(alarmString); }
public void AddReeiveAlarm(System.Net.EndPoint ep, string server, string communication, string device, IO_PARAALARM alarm, bool result) { if (IOCenterManager.IsBackRun) { return; } //IP // 报警时间 //IO参数 //报警值 //报警类型 //报警等级 //采集站 //通道 //设备 //入库结果 if (!ucEnableAlarm.Checked) { return; } ListViewItem lvi = new ListViewItem(ep.ToString()); lvi.SubItems.Add(alarm.IO_ALARM_DATE); lvi.SubItems.Add(alarm.IO_LABEL + "[" + alarm.IO_NAME + "]"); lvi.SubItems.Add(alarm.IO_ALARM_VALUE); lvi.SubItems.Add(alarm.IO_ALARM_TYPE); lvi.SubItems.Add(alarm.IO_ALARM_LEVEL); lvi.SubItems.Add(server); lvi.SubItems.Add(communication); lvi.SubItems.Add(device); if (result) { lvi.SubItems.Add("入库成功"); } else { lvi.SubItems.Add("入库失败"); } if (listViewAlarm.IsHandleCreated) { listViewAlarm.BeginInvoke(new EventHandler(delegate { try { this.listViewAlarm.Items.Insert(0, lvi); if (this.listViewAlarm.Items.Count > int.Parse(this.cbAlarmSize.SelectedValue)) { this.listViewAlarm.Items.RemoveAt(this.listViewReceive.Items.Count - 1); } } catch { } })); } }
private void RunSimulator() { Task.Run(() => { try { for (int d = 0; d < Devices.Count; d++) { try { Scada.Model.IO_DEVICE Device = Devices[d]; TaskManager.Add( Task.Run(delegate { //将新值写入数据库 while (IsSimulator) { Task.Run(() => { Device.GetedValueDate = DateTime.Now; ///重新赋值 for (int i = 0; i < Device.IOParas.Count; i++) { Device.IOParas[i].IORealData = new Scada.IOStructure.IOData() { ParaName = Device.IOParas[i].IO_NAME, ParaValue = random.Next(5000, 9000).ToString(), QualityStamp = Scada.IOStructure.QualityStamp.GOOD, Date = Device.GetedValueDate.Value }; } ///将接收到的数据存储到当前缓存 IOCenterManager.InfluxDbManager.DbWrite_RealPoints(new List <Scada.Model.IO_DEVICE>() { Device }, DateTime.Now); if (SimulatorForm != null) { SimulatorForm.AddLog(Device.IO_DEVICE_NAME + " IO点插入了模拟数据成功"); } if (IsMakeAlarm) { IODeviceParaMaker paraMaker = new IODeviceParaMaker(); List <IO_PARAALARM> alarms = new List <IO_PARAALARM>(); for (int i = 0; i < Device.IOParas.Count; i++) { try { IO_PARAALARM alarm = paraMaker.MakeAlarm(Device.IOParas, Device.IOParas[i], Device.IOParas[i].IORealData, Device.IO_DEVICE_LABLE); if (alarm != null) { IOCenterManager.InfluxDbManager.DbWrite_AlarmPoints(alarm.IO_SERVER_ID, alarm.IO_COMM_ID, alarm, DateTime.Now); } } catch (Exception ex) { this.SimulatorForm.AddLog("ERROR20003" + ex.Message); } } } }); if (SimulatorForm != null && SimulatorForm.IsCustomTimer) { Thread.Sleep(Interval * 1000); } else { Thread.Sleep(Device.IO_DEVICE_UPDATECYCLE * 1000); } } })); } catch (Exception ex) { if (SimulatorForm != null) { SimulatorForm.AddLog(ex.Message); } } } } catch (Exception ex) { SimulatorForm.AddLog(ex.Message); ColseSimulator(); } }); }
/// <summary> /// 生成报警,这个传入值必须是量程转换后的(如果开启量程转换) /// </summary> /// <param name="para"></param> /// <param name="dataValue"></param> /// <returns></returns> public IO_PARAALARM MakeAlarm(List <IO_PARA> deviceParas, IO_PARA para, IOData dataValue, string devicename) { // IO_PARAALARM maxmaxAlarm = null; IO_PARAALARM maxAlarm = null; IO_PARAALARM minAlarm = null; IO_PARAALARM minminAlarm = null; if (para == null) { return(null); } if (para.IO_POINTTYPE != "模拟量") { return(null); } if (dataValue == null) { return(null); } if (dataValue.QualityStamp != QualityStamp.GOOD) { return(null); } if (dataValue.ParaValue == "-9999") { return(null); } if (dataValue.ParaValue == "") { return(null); } decimal dvalue = -9999; if (!decimal.TryParse(dataValue.ParaValue, out dvalue)) { return(null); } if (para.AlarmConfig == null) { return(null); } if (para.IO_ENABLEALARM == 1) { //高级报警 if (para.AlarmConfig.IO_ENABLE_MAX.Value == 1) { maxAlarm = new IO_PARAALARM(); maxAlarm.DEVICE_NAME = devicename; maxAlarm.IO_ALARM_ID = ""; maxAlarm.IO_ALARM_DATE = dataValue == null ? "" : dataValue.Date.Value.ToString("yyyy-MM-dd HH:mm:ss"); maxAlarm.IO_ID = para.IO_ID; maxAlarm.IO_LABEL = para.IO_LABEL; maxAlarm.IO_NAME = para.IO_NAME; maxAlarm.IO_SERVER_ID = para.IO_SERVER_ID; maxAlarm.IO_DEVICE_ID = para.IO_DEVICE_ID; maxAlarm.IO_COMM_ID = para.IO_COMM_ID; maxAlarm.IO_ALARM_LEVEL = para.AlarmConfig.IO_MAX_TYPE; maxAlarm.IO_ALARM_TYPE = "高限报警"; MakeUpAlarm(ref maxAlarm, dvalue, para.AlarmConfig.IO_CONDITION, deviceParas, dataValue, maxAlarm.IO_ALARM_LEVEL, "高限报警", para.AlarmConfig.IO_MAX_VALUE.Value); } //超高限报警 if (para.AlarmConfig.IO_ENABLE_MAXMAX.Value == 1) { maxmaxAlarm = new IO_PARAALARM(); maxmaxAlarm.DEVICE_NAME = devicename; maxmaxAlarm.IO_ALARM_ID = ""; maxmaxAlarm.IO_ALARM_DATE = dataValue == null ? "" : dataValue.Date.Value.ToString("yyyy-MM-dd HH:mm:ss"); maxmaxAlarm.IO_ID = para.IO_ID; maxmaxAlarm.IO_LABEL = para.IO_LABEL; maxmaxAlarm.IO_NAME = para.IO_NAME; maxmaxAlarm.IO_SERVER_ID = para.IO_SERVER_ID; maxmaxAlarm.IO_DEVICE_ID = para.IO_DEVICE_ID; maxmaxAlarm.IO_COMM_ID = para.IO_COMM_ID; maxmaxAlarm.IO_ALARM_LEVEL = para.AlarmConfig.IO_MAXMAX_TYPE; maxmaxAlarm.IO_ALARM_TYPE = "超高限报警"; MakeUpAlarm(ref maxmaxAlarm, dvalue, para.AlarmConfig.IO_CONDITION, deviceParas, dataValue, maxmaxAlarm.IO_ALARM_LEVEL, "超高限报警", para.AlarmConfig.IO_MAXMAX_VALUE.Value); } //低限报警 if (para.AlarmConfig.IO_ENABLE_MIN.Value == 1) { minAlarm = new IO_PARAALARM(); minAlarm.DEVICE_NAME = devicename; minAlarm.IO_ALARM_ID = ""; minAlarm.IO_ALARM_DATE = dataValue == null ? "" : dataValue.Date.Value.ToString("yyyy-MM-dd HH:mm:ss"); minAlarm.IO_ID = para.IO_ID; minAlarm.IO_LABEL = para.IO_LABEL; minAlarm.IO_NAME = para.IO_NAME; minAlarm.IO_SERVER_ID = para.IO_SERVER_ID; minAlarm.IO_DEVICE_ID = para.IO_DEVICE_ID; minAlarm.IO_COMM_ID = para.IO_COMM_ID; minAlarm.IO_ALARM_LEVEL = para.AlarmConfig.IO_MIN_TYPE; minAlarm.IO_ALARM_TYPE = "低限报警"; MakeDownAlarm(ref minAlarm, dvalue, para.AlarmConfig.IO_CONDITION, deviceParas, dataValue, minAlarm.IO_ALARM_LEVEL, "低限报警", para.AlarmConfig.IO_MIN_VALUE.Value); } //超低限报警 if (para.AlarmConfig.IO_ENABLE_MINMIN.Value == 1) { minminAlarm = new IO_PARAALARM(); minminAlarm.DEVICE_NAME = devicename; minminAlarm.IO_ALARM_ID = ""; minminAlarm.IO_ALARM_DATE = dataValue == null ? "" : dataValue.Date.Value.ToString("yyyy-MM-dd HH:mm:ss"); minminAlarm.IO_ID = para.IO_ID; minminAlarm.IO_LABEL = para.IO_LABEL; minminAlarm.IO_NAME = para.IO_NAME; minminAlarm.IO_SERVER_ID = para.IO_SERVER_ID; minminAlarm.IO_DEVICE_ID = para.IO_DEVICE_ID; minminAlarm.IO_COMM_ID = para.IO_COMM_ID; minminAlarm.IO_ALARM_LEVEL = para.AlarmConfig.IO_MINMIN_TYPE; minminAlarm.IO_ALARM_TYPE = "超低限报警"; MakeDownAlarm(ref minminAlarm, dvalue, para.AlarmConfig.IO_CONDITION, deviceParas, dataValue, minminAlarm.IO_ALARM_LEVEL, "超低限报警", para.AlarmConfig.IO_MINMIN_VALUE.Value); } } if (maxmaxAlarm != null) { return(maxmaxAlarm); } if (maxAlarm != null) { return(maxAlarm); } if (minminAlarm != null) { return(minminAlarm); } if (minAlarm != null) { return(minAlarm); } return(null); }
//低限和超低限报警 private void MakeDownAlarm(ref IO_PARAALARM alarm, decimal dvalue, string IO_CONDITION, List <IO_PARA> deviceParas, IOData dataValue, string AlarmLevel, string AlarmType, decimal AlarmTypeValue) { alarm.IO_ALARM_LEVEL = AlarmType; alarm.IO_ALARM_TYPE = AlarmLevel; if (dvalue < AlarmTypeValue) { //是否有前置条件,如果没有前置条件,则报警,否则不报警 if (IO_CONDITION == "") { alarm.IO_ALARM_DISPOSALIDEA = ""; alarm.IO_ALARM_DISPOSALUSER = ""; alarm.IO_ALARM_VALUE = dataValue.ParaValue; return; } else { alarm.IO_ALARM_DISPOSALIDEA = ""; alarm.IO_ALARM_DISPOSALUSER = ""; alarm.IO_ALARM_VALUE = dataValue.ParaValue; string[] condition = IO_CONDITION.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (condition.Length <= 0) { return; } else { bool isInvalid = true; #region 前置条件判断 for (int i = 0; i < condition.Length; i++) { string[] cond_values = condition[i].Split(new char[3] { '>', '=', '<' }, StringSplitOptions.RemoveEmptyEntries); if (cond_values.Length == 2) { IO_PARA conditonPara = deviceParas.Find(x => x.IO_NAME == cond_values[0]); if (conditonPara != null && conditonPara.IORealData != null && conditonPara.IORealData.QualityStamp == QualityStamp.GOOD && conditonPara.IORealData.ParaValue != "-9999" && conditonPara.IORealData.ParaValue != "") { #region 条件判断 if (condition[i].Contains(">")) { decimal pvalue = -9999; decimal cvalue = -9999; if (decimal.TryParse(conditonPara.IORealData.ParaValue, out pvalue) && decimal.TryParse(cond_values[1], out cvalue)) { isInvalid = pvalue > cvalue ? true : false; if (isInvalid == false)//条件不满足报警要求,则停止判断 { break; } } } else if (condition[i].Contains("=")) { decimal pvalue = -9999; decimal cvalue = -9999; if (decimal.TryParse(conditonPara.IORealData.ParaValue, out pvalue) && decimal.TryParse(cond_values[1], out cvalue)) { isInvalid = pvalue == cvalue ? true : false; if (isInvalid == false)//条件不满足报警要求,则停止判断 { break; } } } else if (condition[i].Contains("<")) { decimal pvalue = -9999; decimal cvalue = -9999; if (decimal.TryParse(conditonPara.IORealData.ParaValue, out pvalue) && decimal.TryParse(cond_values[1], out cvalue)) { isInvalid = pvalue < cvalue ? true : false; if (isInvalid == false)//条件不满足报警要求,则停止判断 { break; } } } #endregion } } } #endregion if (!isInvalid) { alarm = null; } } } } else { alarm = null; } }
/// <summary> /// 报警生产的显示 /// </summary> /// <param name="server"></param> /// <param name="communication"></param> /// <param name="device"></param> /// <param name="alarm"></param> /// <param name="uploadresult"></param> public void InsertMonitorAlarmListView(IO_SERVER server, IO_COMMUNICATION communication, IO_DEVICE device, IO_PARAALARM alarm, string uploadresult) { if (IOMonitorManager.IsBackRun) { return; } if (uccbRealAlarm.Checked) { if (listViewAlarm.IsHandleCreated) { listViewAlarm.BeginInvoke(new EventHandler(delegate { ListViewItem lvi = new ListViewItem(alarm.IO_ALARM_ID); lvi.SubItems.Add(alarm.IO_ALARM_DATE); lvi.SubItems.Add(alarm.IO_NAME + "[" + alarm.IO_LABEL + "]"); lvi.SubItems.Add(alarm.IO_ALARM_VALUE); lvi.SubItems.Add(alarm.IO_ALARM_TYPE); lvi.SubItems.Add(alarm.IO_ALARM_LEVEL); lvi.SubItems.Add(server.SERVER_NAME); lvi.SubItems.Add(communication.IO_COMM_NAME + "[" + communication.IO_COMM_LABEL + "]"); lvi.SubItems.Add(device.IO_DEVICE_NAME + "[" + device.IO_DEVICE_LABLE + "]"); lvi.SubItems.Add(uploadresult); listViewAlarm.Items.Insert(0, lvi); if (listViewAlarm.Items.Count > int.Parse(this.ucLateAlarmSIze.SelectedValue)) { listViewAlarm.Items.RemoveAt(listViewAlarm.Items.Count - 1); } })); } } }
/// <summary> /// 显示更新报警界面的数据 /// </summary> /// <param name="server"></param> /// <param name="comm"></param> /// <param name="device"></param> public static void MonitorIODataAlarmShowView(Scada.Model.IO_SERVER server, Scada.Model.IO_COMMUNICATION comm, Scada.Model.IO_DEVICE device, IO_PARAALARM alarm, string uploadresult) { if (mediator.IOMonitorForm.IsHandleCreated) { mediator.IOMonitorForm.BeginInvoke(new EventHandler(delegate { mediator.IOMonitorForm.InsertMonitorAlarmListView(server, comm, device, alarm, uploadresult); })); } }
public void Dispose() { DataString = null; Alarm = null; }