internal void PorcessExceedLimit() { IKPI_OverLimitConfigDal dataAccess = new KPI_OverLimitConfigDal(); try { //返回超限配置列表 List<OverLimitConfigEntity> faultConfigurations = dataAccess.GetOverLimitConfigs(); if (faultConfigurations == null) { m_Logger.Info("数据库不存在超限配置"); return; } DateTime startDate, endDate; endDate = DateTime.Now; endDate = endDate.AddSeconds(-1 * endDate.Second); startDate = endDate.AddMinutes(-1 * AlarmInterval); //startDate = new DateTime(2013, 11, 28, 4, 30, 0); //endDate = new DateTime(2013, 11, 28, 4, 40, 0); List<TagValue> tagAttributeList; //faultConfigurations = faultConfigurations.Where(p => p.TagCode == @"\mjdc\DCS1\TE_31251F_PV").ToList<KPI_OverLimitConfig>(); foreach (OverLimitConfigEntity faultConfiguration in faultConfigurations) { //StopLastShiftAlarm(faultConfiguration);//停止上一班未结束的报警 if (UnitIsRunning(faultConfiguration.UnitID) == false) continue; tagAttributeList = RTDataAccess.GetHistoryDataList(faultConfiguration.TagCode, startDate, endDate); if (tagAttributeList == null) { m_Logger.InfoFormat("读取测点{0}{1}信息失败!", faultConfiguration.TagCode, faultConfiguration.TagDesc); continue; } tagAttributeList = tagAttributeList.OrderBy(p => p.TimeStamp).ToList<TagValue>(); //StopPreviousAlarm(faultConfiguration, tagAttributeList);//停止前一轮起报的报警 CalcAlarm(faultConfiguration, tagAttributeList);//计算报警 } } catch (Exception ex) { m_Logger.InfoFormat("PorcessExceedLimit安全指标超限报警计算错误,错误信息是:{0},调用栈信息是:{1}", ex.Message, ex.StackTrace); m_Logger.Error(ex); } }
private List<OverLimitConfigEntity> GetOverLimitConfigList() { IKPI_OverLimitConfigDal dataAccess = new KPI_OverLimitConfigDal(); List<OverLimitConfigEntity> faultOverLimitConfigList = dataAccess.GetOverLimitConfigs(); return faultOverLimitConfigList; }
internal void PorcessExceedLimit() { IKPI_OverLimitConfigDal dataAccess = new KPI_OverLimitConfigDal(); try { m_DataAccess.Connection(); //返回超限配置列表 List<OverLimitConfigEntity> faultConfigurations = dataAccess.GetOverLimitConfigs(); DateTime startDate, endDate; endDate = DateTime.Now; endDate = endDate.AddSeconds(-1 * endDate.Second); startDate = endDate.AddMinutes(-1 * 10); List<TagValue> tagAttributeList; double high1, high2, high3; foreach (OverLimitConfigEntity faultConfiguration in faultConfigurations) { StopLastShiftAlarm(faultConfiguration);//停止上一班未结束的报警 tagAttributeList = m_DataAccess.GetHistoryDataList(faultConfiguration.TagCode, startDate, endDate); high1 = double.MaxValue; high2 = double.MaxValue; high3 = double.MaxValue; if (tagAttributeList.Count <= 0) continue; if (faultConfiguration.FirstLimitingValue != null) high1 = Convert.ToDouble(faultConfiguration.FirstLimitingValue.Value);//高1限值 if (faultConfiguration.SecondLimitingValue != null) high2 = Convert.ToDouble(faultConfiguration.SecondLimitingValue.Value);//高2限值 if (faultConfiguration.ThirdLimitingValue != null) high3 = Convert.ToDouble(faultConfiguration.ThirdLimitingValue.Value);//高3限值 //超高3 var q = (from p in tagAttributeList where p.TagDoubleValue > high3 select p); if (q.Count() > 0) { H3(faultConfiguration, tagAttributeList, high3); } q = (from p in tagAttributeList where p.TagDoubleValue <= high3 select p); if (q.Count() > 0) { StopAlarm(faultConfiguration, 3, tagAttributeList.First().TimeStamp); } //超高2 q = (from p in tagAttributeList where p.TagDoubleValue > high2 && p.TagDoubleValue <= high3 select p); if (q.Count() > 0) { H2(faultConfiguration, tagAttributeList, high2, high3); } q = (from p in tagAttributeList where p.TagDoubleValue <= high2 select p); if (q.Count() > 0) { StopAlarm(faultConfiguration, 2, tagAttributeList.First().TimeStamp); } //超高1 q = (from p in tagAttributeList where p.TagDoubleValue > high1 && p.TagDoubleValue <= high2 select p); if (q.Count() > 0) { H1(faultConfiguration, tagAttributeList, high1, high2); } q = (from p in tagAttributeList where p.TagDoubleValue <= high1 select p); if (q.Count() > 0) { StopAlarm(faultConfiguration, 1, tagAttributeList.First().TimeStamp); } } } catch (Exception ex) { LogUtil.LogMessage(string.Format("安全指标超限报警计算错误,错误信息是:{0},调用栈信息是:{1}", ex.Message,ex.StackTrace)); } }