Exemple #1
0
        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);
        }
Exemple #2
0
        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
                    {
                    }
                }));
            }
        }
Exemple #3
0
        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();
                }
            });
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        //低限和超低限报警
        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;
            }
        }
Exemple #6
0
        /// <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);
                        }
                    }));
                }
            }
        }
Exemple #7
0
 /// <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);
         }));
     }
 }
Exemple #8
0
 public void Dispose()
 {
     DataString = null;
     Alarm      = null;
 }