Example #1
0
        /// <summary>
        /// 根据数据 提取特征值 存储
        /// </summary>
        /// <param name="model"></param>
        /// <param name="ms"></param>
        /// <param name="rev"></param>
        private void ExtractValue(DataTwModel model, MeterageSamplerate ms, int rev = -1)
        {
            List <MalfunctionSetting> settingList       = GetMalfunctionSettingList(ms, rev).OrderByDescending(m => m.TypeId).ToList();
            List <BandDiagnosis>      bandDiagnosisList = new List <BandDiagnosis>();
            FeatureExtraction         featureExtraction = new FeatureExtraction(model);

            foreach (MalfunctionSetting setting in settingList)
            {
                float value = featureExtraction.ComputedFeature(setting);
                Console.WriteLine($"{setting.TypeName}:{value}");
                BandDiagnosis bandDiagnosis = new BandDiagnosis()
                {
                    BdTime  = DateTime.Now,
                    BdType  = 1,
                    BdUnit  = "mm/s",
                    MsId    = setting.MsId,
                    BdValue = value
                };
                bandDiagnosisList.Add(bandDiagnosis);
                //报警状态设置
                DirverRelation dirverRelation = _dirverRelationList.FirstOrDefault(dr => dr.DId == setting.UnitId && dr.DType == setting.UnitType);
                if (dirverRelation == null)
                {
                    continue;
                }
                if (!_dirverRelationFirst.Keys.Contains(dirverRelation))
                {
                    _dirverRelationFirst.Add(dirverRelation, true);
                    dirverRelation.DrState = 1;
                }
                int level = 1;
                if (setting.Danger == 0)
                {
                    continue;
                }
                if (setting.Danger < value)
                {
                    level = 4;
                }
                else if (setting.Warning < value)
                {
                    level = 3;
                }
                else if (setting.EasyWarning < value)
                {
                    level = 2;
                }

                if (dirverRelation.DrState < level)
                {
                    dirverRelation.DrState = level;
                }
            }
            if (bandDiagnosisList.Count > 0)
            {
                _bandDiagnosisService.InsertEntityList(bandDiagnosisList);
            }
        }
Example #2
0
 /// <summary>
 /// 构造方法
 /// </summary>
 /// <param name="waveData"></param>
 public FeatureExtraction(DataTwModel waveData)
 {
     _waveData = waveData;
     _ratio    = waveData.DataHz / (float)waveData.DataLines;
     GetSpectrum();
     for (int i = 0; i < _waveData.Data.Length; i++)
     {
         _residueIndex.Add(i);
     }
 }
Example #3
0
        /// <summary>
        /// 初始化,处理波形频谱需要的参数信息
        /// </summary>
        /// <param name="site"></param>
        /// <param name="socket"></param>
        public void InitConfig(SiteModel site, SocketMiddleware socket)
        {
            _site               = site;
            _socket             = socket;
            _stopMachineOa      = RedisHelper.Get <Dictionary <string, bool> >($"{CallContext.GetData<ClientInfo>("clientInfo").Database}IsStop");
            _dirverRelationList = _dirverRelationService.Query(dr => dr.AreaId == _site.AearId);

            //获取测量参数组 及转速定义
            List <MeterageSamplerate> meterageSamplerateList = _meterageSamplerateService.Query(ms => ms.AreaId == _site.AearId && ms.IsSamplerate == 1);
            List <TachoDefind>        tachoDefindList        = _tachoDefindService.Query(td => td.AreaId == _site.AearId);

            foreach (TachoDefind tachoDefind in tachoDefindList)
            {
                //没有找到需要的数据源,查找下一个
                MeterageSamplerate ms = meterageSamplerateList.FirstOrDefault(m => m.MsrId == tachoDefind.MsrId);
                if (ms == null)
                {
                    continue;
                }

                //获取频谱数据
                DataTwModel model = GetTwFFTData(ms);
                if (model == null)
                {
                    continue;
                }
                //提取转速
                float rev = ExtractRPM(model.Data, model.DataHz / ((float)model.DataLines), tachoDefind);
                Console.WriteLine($"转速:{rev}");
                //停机转态不提取
                if (rev <= 0)
                {
                    _stopMachine.Add($"A{tachoDefind.AreaId}M{tachoDefind.McId}", true);
                    continue;
                }
                //修改转速
                MachineRev machineRev = _machineRevService.Query(m => m.AreaId == tachoDefind.AreaId && m.McId == tachoDefind.McId).FirstOrDefault();
                if (machineRev != null)
                {
                    machineRev.MrRev  = rev;
                    machineRev.MrTime = DateTime.Now;
                    _machineRevService.UpdateEntity(machineRev);
                }
                else
                {
                    machineRev = new MachineRev()
                    {
                        AreaId  = tachoDefind.AreaId,
                        McId    = tachoDefind.McId,
                        MrTime  = DateTime.Now,
                        MrLevel = 2,
                        MrRev   = rev
                    };
                    _machineRevService.InsertEntity(machineRev);
                }

                ExtractValue(model, ms, (int)rev);
            }

            foreach (MeterageSamplerate ms in meterageSamplerateList)
            {
                if (tachoDefindList.FirstOrDefault(t => t.MsrId == ms.MsrId) != null)
                {
                    continue;
                }
                DataTwModel model = GetTwFFTData(ms);
                if (model == null)
                {
                    continue;
                }

                //停机状态不提取
                if (_stopMachine.ContainsKey($"A{ms.AreaId}M{ms.McId}"))
                {
                    continue;
                }
                ExtractValue(model, ms);
            }

            //更新元件状态
            foreach (DirverRelation dirverRelation in _dirverRelationList)
            {
                _dirverRelationService.UpdateEntity(dirverRelation);
            }
        }