public static void UpdateAnalogStatistic(ref AnalogStatisticModel analogStatisticModel, List <AnalogStatisticModel> analogStatisticModels, RealDataModel realDataModel, AnalogPointModel model) { if (analogStatisticModel == null) { analogStatisticModel = NewAnalogStatisticModel(realDataModel, model); analogStatisticModels.Add(analogStatisticModel); } else { if (!realDataModel.IaAnalogOK) { return; } var realValue = realDataModel.RealValue.Value <float>(); if (realValue < analogStatisticModel.MinValue) { analogStatisticModel.MinValue = realValue; analogStatisticModel.MinValueTime = realDataModel.RealDate; } else if (realValue > analogStatisticModel.MaxValue) { analogStatisticModel.MaxValue = realValue; analogStatisticModel.MaxValueTime = realDataModel.RealDate; analogStatisticModel.State = realDataModel.RealState; } analogStatisticModel.SumValue += realValue; analogStatisticModel.SumCount++; if (analogStatisticModel.IsTimeToSave(realDataModel)) { var newM = analogStatisticModel.DeepClone(); AnalogStatisticModel existM; if ((existM = analogStatisticModels.FirstOrDefault(o => o.PointID == newM.PointID && o.StartTime == newM.StartTime)) != null) { existM.SumCount = newM.SumCount; existM.SumValue = newM.SumValue; existM.MaxValueTime = newM.MaxValueTime; existM.MaxValue = newM.MaxValue; existM.MinValue = newM.MinValue; existM.MinValueTime = newM.MinValueTime; } else { analogStatisticModels.Add(analogStatisticModel.DeepClone()); } } if (analogStatisticModel.IsRequireNew(realDataModel)) { // 需要新增加一条数据. analogStatisticModel = NewAnalogStatisticModel(realDataModel, model); analogStatisticModels.Add(analogStatisticModel.DeepClone()); } } }
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); }
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); } }
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); } }
private static AnalogStatisticModel NewAnalogStatisticModel(RealDataModel realDataModel, AnalogPointModel analogPointModel) { var model = new AnalogStatisticModel(); model.PointID = realDataModel.PointID; model.PointName = realDataModel.PointName; model.SubStationID = realDataModel.SubStationID; model.PortNO = realDataModel.PortNO; model.Location = analogPointModel.Location; model.UnitName = analogPointModel.UnitName; model.MonitoringValue = realDataModel.RealValue; model.State = realDataModel.RealState; model.StartTime = RoundDown(realDataModel.RealDate, TimeSpan.FromMinutes(5)); model.EndTime = RoundUp(realDataModel.RealDate, TimeSpan.FromMinutes(5)); model.MinValue = realDataModel.RealValue.Value <float>(); model.MinValueTime = realDataModel.RealDate; model.MaxValue = realDataModel.RealValue.Value <float>(); model.MaxValueTime = realDataModel.RealDate; model.SumValue = realDataModel.RealValue.Value <float>(); model.SumCount = 1; model.AvgValue = realDataModel.RealValue; return(model); }