Exemplo n.º 1
0
        /// <summary>
        /// 获取要分析的数据
        /// </summary>
        /// <param name="sensorResult">传感器采集结果</param>
        /// <returns>数据列表</returns>
        public AnalyzingData GetAnalyzingData(SensorAcqResult sensorResult)
        {
            var data2Analyze = new AnalyzingData {
                SensorId = sensorResult.Sensor.SensorID
            };
            var            themeColums = sensorResult.Sensor.TableColums.Split(',');
            List <double?> data        = new List <double?>(themeColums.Length);

            if (sensorResult.Data.ThemeValues.Count() >= themeColums.Length)
            {
                for (int i = 0; i < themeColums.Length; i++)
                {
                    data.Add(sensorResult.Data.ThemeValues[i]);
                }
            }
            else
            {
                for (int i = 0; i < themeColums.Length; i++)
                {
                    if (i > sensorResult.Data.ThemeValues.Count() - 1)
                    {
                        data.Add(0);
                    }
                    else
                    {
                        data.Add(sensorResult.Data.ThemeValues[i]);
                    }
                }
            }

            data2Analyze.Data = data;

            return(data2Analyze);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 数据分析(默认满分)
        /// </summary>
        /// <param name="data"></param>
        /// <param name="thresholds"></param>
        public SensorAnalyzeResult AnalyzeSensorData(AnalyzingData data, IList <SensorThreshold> thresholds)
        {
            var rslt = new SensorAnalyzeResult();

            rslt.SensorId       = (int)data.SensorId;
            rslt.Score          = 100;
            rslt.ThresholdAlarm = null;

            if (!thresholds.Any() || data.Data == null)
            {
                // 未配置阈值,默认以无告警处理
                return(rslt);
            }

            var sensor     = DbAccessor.GetSensorInfo((int)data.SensorId).AsEnumerable().FirstOrDefault();
            var sensorData = data.Data;

            var alarm = new ThresholdAlarm((int)data.SensorId);

            // 遍历各监测项
            for (int i = 0; i < sensorData.Count(); i++)
            {
                int itemId    = i + 1;
                var threshold = thresholds.FirstOrDefault(t => t.ItemId == itemId);

                if (threshold != null)
                {
                    var itemName = this.GetItemName(sensor, itemId);
                    var totalLvl = threshold.LevelNumber;

                    // 查询落在哪个阈值区域
                    foreach (var sensorThreshold in threshold.Thresholds)
                    {
                        if (sensorData[i] >= sensorThreshold.Down && sensorData[i] <= sensorThreshold.Up)
                        {
                            rslt.Score -= (int)((1 - (double)sensorThreshold.Level / totalLvl) / sensorData.Count * 100);
                            var alarmDetail = new ThresholdAlarmDetail(itemName, sensorThreshold.Level);
                            alarm.AlarmDetails.Add(alarmDetail);
                            break;
                        }
                    }
                }
            }
            if (alarm.AlarmDetails.Count > 0)
            {
                rslt.ThresholdAlarm = alarm;
            }

            return(rslt);
        }
 public MovingAverageConvergenceDivergence(AnalyzingData analyzingData)
 {
     this.analyzingData = analyzingData;
 }
Exemplo n.º 4
0
        public void TestAnalyzeSensorData()
        {
            DataAnalyzer da            = new DataAnalyzer();
            var          analyzingData = new AnalyzingData {
                SensorId = 17, Data = new double?[] { 1, 2, 3 }
            };
            var thresholds = new List <SensorThreshold>();

            var act0 = da.AnalyzeSensorData(analyzingData, thresholds);

            Assert.AreEqual(100, act0.Score);
            Assert.IsNull(act0.ThresholdAlarm);

            thresholds.Add(
                new SensorThreshold
            {
                SensorId    = 17,
                ItemId      = 1,
                LevelNumber = 3,
                Thresholds  =
                    new List <Threshold>
                {
                    new Threshold {
                        Level = 1, Down = 1.5, Up = double.MaxValue
                    },
                    new Threshold {
                        Level = 2, Down = 0.8, Up = 1.5
                    },
                    new Threshold {
                        Level = 3, Down = 0.5, Up = 0.8
                    }
                }
            });

            var act1 = da.AnalyzeSensorData(analyzingData, thresholds);

            Assert.AreEqual(100 - (int)((1 - (double)2 / 3) / 3 * 100), act1.Score);
            Assert.AreEqual(1, act1.ThresholdAlarm.AlarmDetails.Count);
            Console.WriteLine(act1.ThresholdAlarm);

            thresholds.Add(
                new SensorThreshold
            {
                SensorId    = 17,
                ItemId      = 2,
                LevelNumber = 4,
                Thresholds  =
                    new List <Threshold>
                {
                    new Threshold {
                        Level = 1, Down = 1.5, Up = double.MaxValue
                    },
                    new Threshold {
                        Level = 2, Down = 0.8, Up = 1
                    },
                    new Threshold {
                        Level = 3, Down = 0.5, Up = 0.8
                    },
                    new Threshold {
                        Level = 4, Down = 0.3, Up = 0.5
                    }
                }
            });

            var act2 = da.AnalyzeSensorData(analyzingData, thresholds);

            Assert.AreEqual(
                100 - (int)((1 - (double)2 / 3) / 3 * 100) - (int)((1 - (double)1 / 4) / 3 * 100),
                act2.Score);
            Assert.AreEqual(2, act2.ThresholdAlarm.AlarmDetails.Count);
            Console.WriteLine(act2.ThresholdAlarm);
        }
Exemplo n.º 5
0
 public LoadAppData(AnalyzingData analyzingData) : this()
 {
     this.analyzingData = analyzingData;
 }
Exemplo n.º 6
0
 public OshIndicaror(AnalyzingData analyzingData)
 {
     this.analyzingData = analyzingData;
 }
Exemplo n.º 7
0
 public RsiIndicator(AnalyzingData analyzingData)
 {
     this.analyzingData = analyzingData;
 }