Esempio n. 1
0
        /// <summary>
        /// 插入总值
        /// </summary>
        /// <param name="amv"></param>
        private void InserDataOaList(AutoMeasuredValue amv)
        {
            List <DataOa> list     = new List <DataOa>();
            Meterage      meterage = _meterageService.Query(m => m.AreaId == amv.areaId && m.McId == amv.machineId && m.ParId == amv.monitorId && m.DirId == amv.position_HVA).FirstOrDefault();

            foreach (var measuredValue in amv.MeasuredList)
            {
                DataOa oAData = new DataOa()
                {
                    AreaId = amv.areaId,
                    McId   = amv.machineId,
                    ParId  = amv.monitorId,
                    DirId  = amv.position_HVA
                };
                //获取采集时间
                oAData.OaTime = new DateTime(measuredValue.year, measuredValue.month, measuredValue.day,
                                             measuredValue.hour, measuredValue.minute, measuredValue.second);
                if (!float.IsNaN(measuredValue.rms_Acc_F))
                {
                    oAData.OaAcc = measuredValue.rms_Acc_F;
                }
                if (!float.IsNaN(measuredValue.Disp))
                {
                    oAData.OaDisp = measuredValue.Disp;
                }
                if (!float.IsNaN(measuredValue.CF_Acc))
                {
                    oAData.OaCF = measuredValue.CF_Acc;
                }
                if (!float.IsNaN(measuredValue.Kurtosis_Acc))
                {
                    oAData.OaKurt = measuredValue.Kurtosis_Acc;
                }
                if (!float.IsNaN(measuredValue.rms_Vel_BP))
                {
                    oAData.OaVel = measuredValue.rms_Vel_BP;
                }
                if (!float.IsNaN(measuredValue.rms_Bg_HP))
                {
                    oAData.OaBg = measuredValue.rms_Bg_HP;
                }
                if (!float.IsNaN(measuredValue.rms_Bv_HP))
                {
                    oAData.OaBv = measuredValue.rms_Bv_HP;
                }
                if (!float.IsNaN(measuredValue.rms_Env))
                {
                    oAData.OaEnv = measuredValue.rms_Env;
                }
                oAData.OaTacho = measuredValue.Speed;
                if (!float.IsNaN(measuredValue.SensorStaticValue))
                {
                    oAData.OaTemp = measuredValue.SensorStaticValue;
                }
                oAData.OaWorkStatus = measuredValue.WorkStatus;
                oAData.OaAccType    = "rms";
                oAData.OaBgType     = "rms";
                oAData.OaBvType     = "rms";
                oAData.OaDispType   = "rms";
                oAData.OaEnvType    = "rms";
                oAData.OaVelType    = "rms";
                oAData.OaTempType   = "gz1";

                list.Add(oAData);
                Console.WriteLine(string.Format("总值数据BG:{0}, BV:{1}, ENV:{2}, DISP:{3}, VEL:{4}, ACC:{5}, CF:{6},KURT:{7},Temp:{8} ", oAData.OaBg, oAData.OaBv, oAData.OaEnv, oAData.OaDisp, oAData.OaVel, oAData.OaAcc, oAData.OaCF, oAData.OaKurt, oAData.OaTemp));
            }

            //验证是否停机状态 报警验证及添加数据
            if (!_stopModule.ValidateStop(list, meterage, _machineStopList))
            {
                _dataOaService.InsertEntityList(list);
                _oaAlarmModule.ValidateAlarm(list, meterage);
                _oaAlarmModule.SaveCache();
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 验证报警
        /// </summary>
        /// <param name="dataOaList"></param>
        public void ValidateAlarm(List <DataOa> dataOaList, Meterage meterage)
        {
            //获取内存中 方向下的总值数据信息
            string         key          = $"{meterage.AreaId}{meterage.McId}{meterage.ParId}{meterage.DirId}";
            Queue <DataOa> oaDataQueue  = _dataOaQueue.DataQueue.GetValueOrDefault(key);
            int            dilutedCount = _dataOaQueue.DilutedCount.GetValueOrDefault(key);

            if (oaDataQueue == null)
            {
                oaDataQueue = new Queue <DataOa>();
            }

            //总值进队
            foreach (DataOa item in dataOaList)
            {
                oaDataQueue.Enqueue(item);
                Console.WriteLine($"Bg:{item.OaBg},BV:{item.OaBv},Env:{item.OaEnv},Acc:{item.OaAcc},kurt:{item.OaKurt},Vel:{item.OaVel},CF:{item.OaCF},time:{item.OaTime.ToString("yyyy-MM-dd HH:mm:ss")}");
            }

            //稀释数据
            if ((oaDataQueue.Count - dilutedCount * 12) >= 12)
            {
                List <DataOa> dilutedOa = oaDataQueue.Skip(dilutedCount * 12).Take(12).ToList();
                AvgDataOaSave(dilutedOa, 1);
                ++dilutedCount;
                if (dilutedCount > 5)
                {
                    AvgDataOaSave(oaDataQueue.ToList(), 2);
                    while (oaDataQueue.Count > _alarmCount)
                    {
                        DataOa item = oaDataQueue.Dequeue();
                    }
                    dilutedCount = 0;
                }
            }

            _dataOaQueue.DataQueue[key]    = oaDataQueue;
            _dataOaQueue.DilutedCount[key] = dilutedCount;
            List <Alarm> alarmList = _alarmService.Query(a => a.AlarmId == meterage.MeterAlarm1 || a.AlarmId == meterage.MeterAlarm2);

            Console.WriteLine($"一级报警线:Bg:{alarmList[0].AlarmBg},BV:{alarmList[0].AlarmBv},Env:{alarmList[0].AlarmEnv},Acc:{alarmList[0].AlarmAcc},kurt:{alarmList[0].AlarmKurt},Vel:{alarmList[0].AlarmVel},CF:{alarmList[0].AlarmCF}");
            Console.WriteLine($"二级报警线:Bg:{alarmList[1].AlarmBg},BV:{alarmList[1].AlarmBv},Env:{alarmList[1].AlarmEnv},Acc:{alarmList[1].AlarmAcc},kurt:{alarmList[1].AlarmKurt},Vel:{alarmList[1].AlarmVel},CF:{alarmList[1].AlarmCF}");

            //取最新几笔数据 计算报警次数
            int           len    = oaDataQueue.Count;
            List <DataOa> oaList = null;

            if (len > _alarmCount)
            {
                oaList = oaDataQueue.Skip(len - _alarmCount).Take(_alarmCount).ToList();
            }
            else
            {
                oaList = oaDataQueue.ToList();
            }
            AlarmTimes alarmTimes = GetAlarmTimes(oaList, alarmList, meterage);

            //报警状态判断
            int alarmGrad = 1;

            if (alarmTimes.GetAlarm1Times() == _alarmCount)
            {
                alarmGrad = 2;
                if (alarmTimes.GetAlarm2Times() == _alarmCount)
                {
                    alarmGrad = 3;
                }
                CreateEmail(alarmTimes, dataOaList[0], alarmList[0], alarmList[1], alarmGrad);
            }

            //修改报警状态
            if (alarmGrad != meterage.MeterStateOa)
            {
                meterage.MeterStateOa = alarmGrad;
                _meterageService.UpdateEntity(meterage);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 验证停机状态
        /// </summary>
        /// <param name="dataOaList"></param>
        /// <param name="meterage"></param>
        /// <param name="machineStopList"></param>
        /// <returns></returns>
        public bool ValidateStop(List <DataOa> dataOaList, Meterage meterage, List <MachineStop> machineStopList)
        {
            string      key         = $"A{meterage.AreaId}M{meterage.McId}";
            MachineStop machineStop = machineStopList.FirstOrDefault(m => m.AreaId == meterage.AreaId && m.McId == meterage.McId && m.ParId == meterage.ParId && m.DirId == meterage.DirId);

            if (machineStop == null)
            {
                bool isStop = _isStop.GetValueOrDefault(key);
                if (isStop)
                {
                    return(true);
                }
                return(false);
            }

            //更新停机状态
            Queue <DataOa> dataOaQueue = _dataOaStopQueue.DataQueue.GetValueOrDefault(key);

            if (dataOaQueue == null)
            {
                dataOaQueue = new Queue <DataOa>();
            }
            foreach (DataOa item in dataOaList)
            {
                dataOaQueue.Enqueue(item);
            }

            if (dataOaQueue.Count >= 5)
            {
                while (dataOaQueue.Count > 5)
                {
                    dataOaQueue.Dequeue();
                }
                _dataOaStopQueue.DataQueue[key] = dataOaQueue;
                List <DataOa> validateData = dataOaQueue.ToList();
                for (int i = 0; i < validateData.Count; i++)
                {
                    double value = 0;
                    if (machineStop.MsType == "Vel")
                    {
                        value = validateData[i].OaVel;
                    }
                    else if (machineStop.MsType == "Acc")
                    {
                        value = validateData[i].OaAcc;
                    }
                    else if (machineStop.MsType == "Disp")
                    {
                        value = validateData[i].OaDisp;
                    }
                    if (machineStop.MsValue < value)
                    {
                        _isStop[key] = false;
                        SaveCache();
                        return(false);
                    }
                }
                _isStop[key] = true;
                SaveCache();
                return(true);
            }

            _dataOaStopQueue.DataQueue[key] = dataOaQueue;
            SaveCache();
            return(false);
        }
Esempio n. 4
0
        /// <summary>
        /// 获取总值每个参数的报警次数
        /// </summary>
        /// <param name="oaList"></param>
        /// <param name="alarmList"></param>
        /// <param name="meterage"></param>
        /// <returns></returns>
        private AlarmTimes GetAlarmTimes(List <DataOa> oaList, List <Alarm> alarmList, Meterage meterage)
        {
            AlarmTimes alarmTimes = new AlarmTimes();
            Alarm      alarm1     = alarmList[0];
            Alarm      alarm2     = alarmList[1];

            foreach (DataOa oAData in oaList)
            {
                if (alarm1 != null && alarm2 != null)
                {
                    float p_float_alarmTemp = (float)oAData.OaAcc;
                    //-----------------------------------acc-------------------------------------------
                    if (meterage.MeterAcc == 1 && alarm1.AlarmAcc != 0 && alarm2.AlarmAcc != 0)
                    {
                        //注意
                        if (alarm1.AlarmAcc < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Acc");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmAcc)
                        {
                            alarmTimes.AddAlarm2("Acc");
                        }
                    }
                    p_float_alarmTemp = (float)oAData.OaDisp;
                    //-----------------------------------disp-------------------------------------------
                    if (meterage.MeterDisp == 1 && alarm1.AlarmDisp != 0 && alarm2.AlarmDisp != 0)
                    {
                        if (alarm1.AlarmDisp < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Disp");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmDisp)
                        {
                            alarmTimes.AddAlarm2("Disp");
                        }
                    }
                    p_float_alarmTemp = (float)oAData.OaVel;
                    //------------------------------------vel----------------------------------------------
                    if (meterage.MeterVel == 1 && alarm1.AlarmVel != 0 && alarm2.AlarmVel != 0)
                    {
                        //注意
                        if (alarm1.AlarmVel < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Vel");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmVel)
                        {
                            alarmTimes.AddAlarm2("Vel");
                        }
                    }
                    //------------------------------------bv----------------------------------------------
                    p_float_alarmTemp = (float)oAData.OaBv;
                    if (meterage.MeterBv == 1 && alarm1.AlarmBv != 0 && alarm2.AlarmBv != 0)
                    {
                        //注意
                        if (alarm1.AlarmBv < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Bv");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmBv)
                        {
                            alarmTimes.AddAlarm2("Bv");
                        }
                    }
                    //------------------------------------bg----------------------------------------------
                    if (meterage.MeterBg == 1 && alarm1.AlarmBg != 0 && alarm2.AlarmBg != 0)
                    {
                        //注意
                        if (alarm1.AlarmBg < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Bg");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmBg)
                        {
                            alarmTimes.AddAlarm2("Bg");
                        }
                    }
                    //------------------------------------env----------------------------------------------
                    p_float_alarmTemp = (float)oAData.OaEnv;
                    if (meterage.MeterEnv == 1 && alarm1.AlarmEnv != 0 && alarm2.AlarmEnv != 0)
                    {
                        //注意
                        if (alarm1.AlarmEnv < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Env");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmEnv)
                        {
                            alarmTimes.AddAlarm2("Env");
                        }
                    }
                    //------------------------------------temp----------------------------------------------
                    p_float_alarmTemp = (float)oAData.OaTemp;
                    if (meterage.MeterT == 1 && alarm1.AlarmT != 0 && alarm2.AlarmT != 0)
                    {
                        //注意
                        if (alarm1.AlarmT < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Temp");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmT)
                        {
                            alarmTimes.AddAlarm2("Temp");
                        }
                    }
                    //------------------------------------cf----------------------------------------------
                    p_float_alarmTemp = (float)oAData.OaCF;
                    if (meterage.MeterCF == 1 && alarm1.AlarmCF != 0 && alarm2.AlarmCF != 0)
                    {
                        //注意
                        if (alarm1.AlarmCF < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("CF");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmCF)
                        {
                            alarmTimes.AddAlarm2("CF");
                        }
                    }
                    //------------------------------------kurt----------------------------------------------
                    p_float_alarmTemp = (float)oAData.OaKurt;
                    if (meterage.MeterKurt == 1 && alarm1.AlarmKurt != 0 && alarm2.AlarmKurt != 0)
                    {
                        //注意
                        if (alarm1.AlarmKurt < p_float_alarmTemp)
                        {
                            alarmTimes.AddAlarm1("Kurt");
                        }
                        //报警
                        if (p_float_alarmTemp > alarm2.AlarmKurt)
                        {
                            alarmTimes.AddAlarm2("Kurt");
                        }
                    }
                }
            }
            return(alarmTimes);
        }