Beispiel #1
0
        private static AnalogAlarmModel NewAnalogAlarmModel(RealDataModel realData, AnalogPointModel analogPointModel)
        {
            var model = new AnalogAlarmModel();

            model.PointID      = realData.PointID;
            model.SubStationID = realData.SubStationID;
            model.PortNO       = realData.PortNO;
            model.PointName    = realData.PointName;
            model.Location     = analogPointModel.Location;
            model.StartTime    = realData.RealDate;
            model.EndTime      = realData.RealDate;
            model.AlarmValue   = realData.RealValue.Value <float>();
            model.AlarmState   = realData.RealState;
            model.MaxValue     = realData.RealValue.Value <float>();
            model.MaxValueTime = realData.RealDate;
            model.MinValue     = realData.RealValue.Value <float>();
            model.MinValueTime = realData.RealDate;
            model.AvgValue     = realData.RealValue.Value <float>();
            model.SumValue    += realData.RealValue.Value <float>();
            model.AbnormalFeed = 0;
            model.SumCount++;
            model.State    = 0;
            model.SpanTime = 0;
            return(model);
        }
Beispiel #2
0
        internal static void UpdateAnalogAlarm(ref AnalogAlarmModel analogAlarmModel,
                                               List <AnalogAlarmModel> analogAlarmModels,
                                               RealDataModel realDataModel, AnalogPointModel analogPointModel,
                                               Func <PointState, bool> isAlarmState)
        {
            if (analogAlarmModel == null)
            {
                NewAlarmAndSaveDatabase(out analogAlarmModel, analogAlarmModels, realDataModel, analogPointModel, isAlarmState);
            }
            else
            {
                analogAlarmModel.EndTime = realDataModel.RealDate;

                if (analogAlarmModel.IsRequireNew(realDataModel))
                {
                    // 有新的记录, 把老记录状态置1
                    analogAlarmModel.State = 1;
                }
                if (isAlarmState((PointState)analogAlarmModel.AlarmState) &&
                    (analogAlarmModel.IsTimeToSave(realDataModel) || analogAlarmModel.IsRequireNew(realDataModel)))
                {
                    // 报警情况下, 当状态改变或者时间大于10秒时候, 写入数据库.
                    var newM = analogAlarmModel.DeepClone();
                    AnalogAlarmModel existM;
                    if ((existM = analogAlarmModels.FirstOrDefault(o => o.PointID == newM.PointID && o.StartTime == newM.StartTime && o.AlarmState == newM.AlarmState)) != null)
                    {
                        existM.State    = newM.State;
                        existM.EndTime  = newM.EndTime;
                        existM.SpanTime = (int)newM.EndTime.Subtract(newM.StartTime).TotalSeconds;
                    }
                    else
                    {
                        analogAlarmModels.Add(newM);
                    }
                }
                var realValue = realDataModel.RealValue.Value <float>();
                if (realValue < analogAlarmModel.MinValue)
                {
                    analogAlarmModel.MinValue     = realValue;
                    analogAlarmModel.MinValueTime = realDataModel.RealDate;
                }
                else if (realValue > analogAlarmModel.MaxValue)
                {
                    analogAlarmModel.MaxValue     = realValue;
                    analogAlarmModel.MaxValueTime = realDataModel.RealDate;
                }

                analogAlarmModel.SumValue += realValue;
                analogAlarmModel.SumCount++;

                if (analogAlarmModel.IsRequireNew(realDataModel))
                {
                    // 有新记录.
                    NewAlarmAndSaveDatabase(out analogAlarmModel, analogAlarmModels, realDataModel, analogPointModel, isAlarmState);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 新增一条AnalogAlarm记录, 并且把它保存到数据库中.
        /// </summary>
        private static void NewAlarmAndSaveDatabase(out AnalogAlarmModel analogAlarmModel, List <AnalogAlarmModel> analogAlarmModels,
                                                    RealDataModel realDataModel, AnalogPointModel analogPointModel, Func <PointState, bool> isAlarmState)
        {
            // 需要新增加一条数据.
            analogAlarmModel = NewAnalogAlarmModel(realDataModel, analogPointModel);

            if (isAlarmState((PointState)analogAlarmModel.AlarmState))
            {
                analogAlarmModels.Add(analogAlarmModel.DeepClone()); // 直接写入数据库
            }
        }
Beispiel #4
0
        private void UpdateAnalogOff(DateTime now)
        {
            LogD.Info($"传感器[{PointID}]状态为真正断线...");
            var value      = "模拟量断线";
            var valueState = PointState.OFF;

            //是真正的断线
            RealDataModel.Update(now, value, valueState);
            _analogRunModel.Update(RealDataModel);
            _analogRunModels.Add(_analogRunModel);
            AnalogStatisticModel.UpdateAnalogStatistic(ref _analogStatisticModel, _analogStatisticModels, RealDataModel, this);
            AnalogAlarmModel.UpdateAnalogAlarm(ref _analogAlarmModel, _analogAlarmModels, RealDataModel, this, IsAlarmState);
            Alarm_TodayModel.UpdateAlarmToday(ref _alarmTodayModel, _alarmTodayModels, RealDataModel, this, IsAlarmState);
            DeviceFaultRunModel.UpdateDeviceFaultRun(ref _deviceFaultRunModel, _deviceFaultRunModels, RealDataModel, this, IsAlarmState);
        }
Beispiel #5
0
 internal void Update(DateTime now)
 {
     _analogOffCount++;
     if (new[] { PointState.UnKnow, PointState.Init }.All(o => o != (PointState)RealDataModel.RealState) && _analogOffCount <= DasConfig.SensorTimeoutCount)
     {
         LogD.Info($"传感器[{PointID}]处于断线屏蔽次数之内:当前屏蔽次数:{_analogOffCount}");
         RealDataModel.Update(now);
         //处于屏蔽次数之内
         _analogRunModels.Add(_analogRunModel);
         AnalogStatisticModel.UpdateAnalogStatistic(ref _analogStatisticModel, _analogStatisticModels, RealDataModel, this);
         AnalogAlarmModel.UpdateAnalogAlarm(ref _analogAlarmModel, _analogAlarmModels, RealDataModel, this, IsAlarmState);
         Alarm_TodayModel.UpdateAlarmToday(ref _alarmTodayModel, _alarmTodayModels, RealDataModel, this, IsAlarmState);
         DeviceFaultRunModel.UpdateDeviceFaultRun(ref _deviceFaultRunModel, _deviceFaultRunModels, RealDataModel, this, IsAlarmState);
     }
     else
     {
         UpdateAnalogOff(now);
     }
 }
Beispiel #6
0
        internal void Update(DateTime now, List <SensorRealDataInfo> sensorRealDataInfos)
        {
            var sensorRealData = sensorRealDataInfos.FirstOrDefault(p => p.EquipCodes.Exists(q => q == EquipCode));

            if (sensorRealData.IsAnalogOk)
            {
                _analogOffCount = 0;
                PointState valueState = PointState.OK;
                HandleAnalogAlarm(sensorRealData.Value, ref valueState);
                RealDataModel.Update(now, sensorRealData.Value.ToString("f2"), valueState);
                _analogRunModel.Update(RealDataModel);
                _analogRunModels.Add(_analogRunModel);
                AnalogStatisticModel.UpdateAnalogStatistic(ref _analogStatisticModel, _analogStatisticModels, RealDataModel, this);
                AnalogAlarmModel.UpdateAnalogAlarm(ref _analogAlarmModel, _analogAlarmModels, RealDataModel, this, IsAlarmState);
                Alarm_TodayModel.UpdateAlarmToday(ref _alarmTodayModel, _alarmTodayModels, RealDataModel, this, IsAlarmState);
                DeviceFaultRunModel.UpdateDeviceFaultRun(ref _deviceFaultRunModel, _deviceFaultRunModels, RealDataModel, this, IsAlarmState);
            }
            else
            {
                Update(now);
            }
        }