public List<Model.TN_AlarmItem> GetRecentAlarm() { List<Model.TN_AlarmItem> alarmList = null; DataTable dt = dal.GetRecentAlarm(); if (dt != null) { TN_Coal CoalsInstance = new TN_Coal(); Dictionary<string, string> coalsDefine = CoalsInstance.GetCoalList(); string coalName = string.Empty; alarmList = new List<Model.TN_AlarmItem>(); foreach (DataRow dr in dt.Rows) { coalName = coalsDefine[dr["CoalCode"].ToString()]; Model.TN_AlarmItem aitem = new Model.TN_AlarmItem { CoalCode=dr["CoalCode"].ToString(), CoalName = coalName, DevCode = dr["DevCode"].ToString(), DevName = dr["DevName"].ToString(), DevType = dr["DevType"].ToString(), DevAddress = dr["DevAddress"].ToString(), DevUnit = dr["DevUnit"].ToString(), StartTime = Convert.ToDateTime(dr["AlarmSTime"].ToString()), EndTime = Convert.ToDateTime(dr["AlarmETime"].ToString()), AlarmLRV = dr["AlarmLRV"].ToString(), AlarmURV = dr["AlarmURV"].ToString(), Duration =(Int32)Convert.ToDecimal(dr["Duration"].ToString()), DevMaxValue = Convert.ToDecimal(dr["DevMaxValue"].ToString()), DevMaxTime=Convert.ToDateTime(dr["DevMaxTime"].ToString()), DevState = statusList[Convert.ToInt32(dr["DevState"].ToString())]//传感器状态 // UploadState = dr["UploadState"].ToString() // SendedCounter = Int32.Parse(dr["UploadState"].ToString()), //DevValue = "0", // AlarmGrade = dr["AlarmGrade"].ToString(), //AlarmType = dr["AlarmType"].ToString() //DevState = dr["DevState"].ToString(), }; if (aitem.EndTime.Year != 2000) { alarmList.Add(aitem); } } } DALFactory.DataCache.SetCache("RecentAlarm", alarmList, DateTime.Now.AddMinutes(1),TimeSpan.Zero); return alarmList; }
/// <summary> /// 更新报警信息报警级别 /// </summary> /// <param name="rtm">实时数据</param> /// <param name="define">报警短信定义</param> /// <param name="item">原始报警信息</param> /// <returns>报警信息</returns> private Model.TN_AlarmItem UpdateAlarmGrade(Model.TN_Rtm rtm, Model.TN_AlarmSendDefine define, Model.TN_AlarmItem item) { Model.TN_AlarmItem newItem = new Model.TN_AlarmItem(); //截止到当前时间点的报警结束时间 // int duration = (int)(Convert.ToDateTime(rtm.RealTime) - item.StartTime).TotalSeconds; int duration = (int)(Convert.ToDateTime(rtm.RealTime) - Convert.ToDateTime(rtm.ChageStateTime)).TotalSeconds; //判断实时数据的状态是否已经升级n多种条件判定,慢慢写吧,不要着急 if (item.AlarmGrade == "预警" && rtm.DevState == "1")//条件1:报警状态直接由“预警”升级到“轻警” { newItem.AlarmGrade = "轻警"; newItem.AlarmType = "模拟量超限"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if ((item.AlarmGrade == "预警" && rtm.DevState == "2") || (item.AlarmGrade == "预警" && rtm.DevState == "3"))//条件2:报警状态直接由“预警”升级到“重警” { newItem.AlarmGrade = "重警"; newItem.AlarmType = "超限断电"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;//0; //持续时长 } else if ((item.AlarmGrade == "轻警" && rtm.DevState == "2") || (item.AlarmGrade == "轻警" && rtm.DevState == "3"))//条件3:报警状态直接由“轻警”升级到“重警” { newItem.AlarmGrade = "重警"; newItem.AlarmType = "超限断电"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if ((item.AlarmGrade == "特重" && rtm.DevState == "2") || (item.AlarmGrade == "特重" && rtm.DevState == "3"))//条件4:报警状态直接由“特重”下降到“重警” { newItem.AlarmGrade = "重警"; newItem.AlarmType = "超限断电"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } //else if (item.AlarmGrade == "特重" && rtm.DevState == "1")//条件5:报警状态直接由“特重”下降到“轻警” //{ // newItem.AlarmGrade = "轻警"; // newItem.AlarmType = "模拟量超限"; //报警类型 // newItem.SendedCounter = 0; // newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 // newItem.Duration = 0; //持续时长 //} else if (item.AlarmGrade == "特重" && IsEarlyWarning(Convert.ToDecimal(rtm.AlarmURV), define.ShiftRange, rtm.DevValue, rtm.DevState) && rtm.DevState == "0" && item.AlarmType != "预警")//条件6:报警状态直接由“特重”下降到“预警” { newItem.AlarmGrade = "预警"; newItem.AlarmType = "预警"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } //else if (item.AlarmGrade == "重警" && rtm.DevState == "1")//条件7:报警状态直接由“重警”下降到“轻警” //{ // newItem.AlarmGrade = "轻警"; // newItem.AlarmType = "模拟量超限"; //报警类型 // newItem.SendedCounter = 0; // newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 // newItem.Duration = 0; //持续时长 //} else if (item.AlarmGrade == "重警" && IsEarlyWarning(Convert.ToDecimal(rtm.AlarmURV), define.ShiftRange, rtm.DevValue, rtm.DevState) && rtm.DevState == "0" && item.AlarmType != "预警")//条件8:报警状态直接由“重警”下降到“预警” { newItem.AlarmGrade = "预警"; newItem.AlarmType = "预警"; //报警类型 newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration; //0; //持续时长 } else if (item.AlarmGrade == "轻警" && IsEarlyWarning(Convert.ToDecimal(rtm.AlarmURV), define.ShiftRange, rtm.DevValue, rtm.DevState) && rtm.DevState == "0" && item.AlarmType != "预警")//条件9:报警状态直接由“轻警”下降到“预警” { newItem.AlarmGrade = "预警"; newItem.SendedCounter = 0; newItem.AlarmType = "预警"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "预警" && Convert.ToInt32(rtm.DevState) > 4)//条件13:报警状态直接由“预警”升级到“重警” 类型:传感器故障 { newItem.AlarmGrade = "重警"; newItem.SendedCounter = 0; newItem.AlarmType = "传感器故障"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration; //0; //持续时长 } else if (item.AlarmGrade == "轻警" && Convert.ToInt32(rtm.DevState) > 4)//条件14:报警状态直接由“轻警”升级到“重警” 类型:传感器故障 { newItem.AlarmGrade = "重警"; newItem.SendedCounter = 0; newItem.AlarmType = "传感器故障"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "特重" && Convert.ToInt32(rtm.DevState) > 4 && item.AlarmType != "传感器故障")//条件15:报警状态直接由“特重”下降到“重警” 类型:传感器故障 { newItem.AlarmGrade = "重警"; newItem.SendedCounter = 0; newItem.AlarmType = "传感器故障"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "预警" && rtm.DevState == "0" && rtm.DevType == "开关量" && rtm.DevValue == 0)//条件16:报警状态直接由“预警”升级到“轻警” 类型:双风门开 { newItem.AlarmGrade = "轻警"; newItem.SendedCounter = 0; newItem.AlarmType = "双风门开"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "重警" && rtm.DevState == "0" && rtm.DevType == "开关量" && rtm.DevValue == 0 && item.AlarmType != "双风门开")//条件17:报警状态直接由“重警”下降到“轻警” 类型:双风门开 { newItem.AlarmGrade = "轻警"; newItem.SendedCounter = 0; newItem.AlarmType = "双风门开"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "特重" && rtm.DevState == "0" && rtm.DevType == "开关量" && rtm.DevValue == 0 && item.AlarmType != "双风门开")//条件17:报警状态直接由“特重”下降到“轻警” 类型:双风门开 { newItem.AlarmGrade = "轻警"; newItem.SendedCounter = 0; newItem.AlarmType = "双风门开"; //报警类型 newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else if (item.AlarmGrade == "预警" && IsEarlyWarning(Convert.ToDecimal(rtm.AlarmURV), define.ShiftRange, rtm.DevValue, rtm.DevState) && rtm.DevState == "0")//条件10:报警状态由“预警”升级到“轻警” { if (define.AutoUpdate) { //升级的间隔时间 int spanTime = Convert.ToInt32(define.GUModel.Split(',')[0]) * 60; if (duration >= spanTime) { newItem.AlarmGrade = "轻警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else { newItem.AlarmGrade = "预警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } else { newItem.AlarmGrade = "预警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } else if (item.AlarmGrade == "轻警")//条件11:报警状态由“轻警”升级到“重警” { if (define.AutoUpdate) { if (item.AlarmType == "预警" || item.AlarmType == "模拟量超限" || item.AlarmType == "双风门开") { //升级的间隔时间 int spanTime = Convert.ToInt32(define.GUModel.Split(',')[1]) * 60; if (duration >= spanTime) { newItem.AlarmGrade = "重警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else { newItem.AlarmGrade = "轻警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } } else { newItem.AlarmGrade = "轻警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } else if (item.AlarmGrade == "重警")//条件12:报警状态由“重警”升级到“特重” { if (define.AutoUpdate) { if (item.AlarmType == "预警" || item.AlarmType == "模拟量超限" || item.AlarmType == "双风门开" || item.AlarmType == "超限断电" || item.AlarmType == "传感器故障") { //升级的间隔时间 int spanTime = Convert.ToInt32(define.GUModel.Split(',')[2]) * 60; if (duration >= spanTime) { newItem.AlarmGrade = "特重"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = 0; newItem.StartTime = Convert.ToDateTime(rtm.RealTime); //开始报警时间 newItem.Duration = duration;// 0; //持续时长 } else { newItem.AlarmGrade = "重警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } } else { newItem.AlarmGrade = "重警"; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } } else { newItem.AlarmGrade = item.AlarmGrade; newItem.AlarmType = item.AlarmType; newItem.SendedCounter = item.SendedCounter; newItem.StartTime = item.StartTime; //开始报警时间 newItem.Duration = duration; //持续时长 } #region bulid alarm item object newItem.AlarmLRV = rtm.AlarmLRV; //报警下限 //newItem.AlarmType = define.AlarmType; //报警类型 newItem.AlarmURV = rtm.AlarmURV; //报警上限 newItem.CoalCode = rtm.CoalCode; //煤矿编号 newItem.CoalName = rtm.CoalName; //煤矿名称 newItem.DevAddress = rtm.DevAddress; //传感器地址 newItem.DevCode = rtm.DevCode; //传感器编号 newItem.DevName = rtm.DevName; //传感器名称 newItem.DevState = rtm.DevState; //传感器状态 newItem.DevType = rtm.DevType; //传感器类型 newItem.DevUnit = rtm.DevUnit; //传感器测量值单位 newItem.DevValue = rtm.DevValue.ToString(); //传感器测量值 newItem.EndTime = Convert.ToDateTime(rtm.RealTime); //结束时间 newItem.UploadState = "正常"; //上传状态(此添加操作是设备级别的上传状态为正常) newItem.IsFinished = false; #endregion return newItem; }
/// <summary> /// 添加上传中断报警信息 /// </summary> /// <param name="state">数据上传状态实体</param> /// <param name="define">报警短信定义</param> private void AddState(Model.TN_UpLoadState state) { //删除操作(删除有可能在报警缓存中存在的该煤矿编号对应的其他报警信息) alarmItemList.RemoveAll(a => a.CoalCode == state.CoalCode); #region bulid alarm item object Model.TN_AlarmItem item = new Model.TN_AlarmItem(); item.AlarmLRV = string.Empty; //报警下限 item.AlarmType = "数据上传中断"; //报警类型 item.AlarmGrade = "重警"; //报警级别 item.AlarmURV = string.Empty; //报警上限 item.CoalCode = state.CoalCode; //煤矿编号 item.CoalName = state.CoalName; //煤矿名称 item.DevAddress = string.Empty; //传感器地址 item.DevCode = string.Empty; //传感器编号 item.DevName = "数据上传"; //传感器名称(此处为“数据上传”) item.DevState = string.Empty; //传感器状态 item.DevType = string.Empty; //传感器类型 item.DevUnit = string.Empty; //传感器测量值单位 item.DevValue = string.Empty; //传感器测量值 item.Duration = 0; //持续时间(因为是添加操作持续时间为零) item.EndTime = Convert.ToDateTime(state.RealTime); //结束时间 item.SendedCounter = 0; //已发送短信息次数(因为是添加操作没有短信发送操作) item.StartTime = Convert.ToDateTime(state.StartTime); //开始报警时间 item.UploadState = "中断"; //上传状态(此添加操作是设备级别的上传状态为正常) item.IsFinished = false; //报警是否结束(添加操作报警没有结束) #endregion alarmItemList.Add(item); }
/// <summary> /// 更新数据上传报警信息报警级别 /// </summary> /// <param name="state">数据上传状态</param> /// <param name="define">报警短信息定义</param> /// <param name="item">原始报警信息</param> /// <returns>报警信息</returns> private Model.TN_AlarmItem UpdateAlalrmGradeForUpload(Model.TN_UpLoadState state, Model.TN_AlarmSendDefine define, Model.TN_AlarmItem item) { Model.TN_AlarmItem newItem = new Model.TN_AlarmItem(); //截止到当前时间点的报警结束时间 int duration = (int)(Convert.ToDateTime(state.RealTime) - item.StartTime).TotalSeconds; if (define.AutoUpdate) { //升级的间隔时间 int spanTime = Convert.ToInt32(define.GUModel.Split(',')[2]) * 60; if (item.AlarmGrade == "重警" && (duration >= spanTime)) { newItem.AlarmGrade = "特重"; //报警级别 newItem.StartTime = Convert.ToDateTime(state.RealTime); //开始报警时间 newItem.SendedCounter = 0; //已发送短信息次数(因为是添加操作没有短信发送操作) newItem.Duration = 0; //持续时间(因为是添加操作持续时间为零) } else { newItem.AlarmGrade = item.AlarmGrade; newItem.StartTime = item.StartTime; newItem.SendedCounter = item.SendedCounter; //已发送短信息次数(因为是添加操作没有短信发送操作) newItem.Duration = duration; //持续时间(因为是添加操作持续时间为零) } } else { newItem.AlarmGrade = item.AlarmGrade; newItem.StartTime = item.StartTime; newItem.SendedCounter = item.SendedCounter; //已发送短信息次数(因为是添加操作没有短信发送操作) newItem.Duration = duration; //持续时间(因为是添加操作持续时间为零) } #region rebulid object newItem.AlarmLRV = string.Empty; //报警下限 newItem.AlarmType = "数据上传中断"; //报警类型 newItem.AlarmURV = string.Empty; //报警上限 newItem.CoalCode = state.CoalCode; //煤矿编号 newItem.CoalName = state.CoalName; //煤矿名称 newItem.DevAddress = string.Empty; //传感器地址 newItem.DevCode = string.Empty; //传感器编号 newItem.DevName = "数据上传"; //传感器名称(此处为“数据上传”) newItem.DevState = string.Empty; //传感器状态 newItem.DevType = string.Empty; //传感器类型 newItem.DevUnit = string.Empty; //传感器测量值单位 newItem.DevValue = string.Empty; //传感器测量值 newItem.EndTime = Convert.ToDateTime(state.RealTime); //结束时间 newItem.UploadState = "中断"; //上传状态(此添加操作是设备级别的上传状态为正常) newItem.IsFinished = false; //报警是否结束(添加操作报警没有结束) #endregion return newItem; }
/// <summary> /// 添加传感器报警信息 /// </summary> /// <param name="rtm">实时数据</param> /// <param name="define">短信报警定义</param> private void AddItem(Model.TN_Rtm rtm, Model.TN_AlarmSendDefine define) { #region bulid alarm item object Model.TN_AlarmItem item = new Model.TN_AlarmItem(); item.AlarmLRV = rtm.AlarmLRV; //报警下限 item.AlarmType = define.AlarmType; //报警类型 item.AlarmGrade = define.AlarmGrade; //报警级别 item.AlarmURV = rtm.AlarmURV; //报警上限 item.CoalCode = rtm.CoalCode; //煤矿编号 item.CoalName = rtm.CoalName; //煤矿名称 item.DevAddress = rtm.DevAddress; //传感器地址 item.DevCode = rtm.DevCode; //传感器编号 item.DevName = rtm.DevName; //传感器名称 item.DevState = rtm.DevState; //传感器状态 item.DevType = rtm.DevType; //传感器类型 item.DevUnit = rtm.DevUnit; //传感器测量值单位 item.DevValue = rtm.DevValue.ToString(); //传感器测量值 item.Duration = (int)(Convert.ToDateTime(rtm.RealTime) - Convert.ToDateTime(rtm.ChageStateTime)).TotalSeconds;// 0; //持续时间(因为是添加操作持续时间为零) item.EndTime = Convert.ToDateTime(rtm.RealTime); //结束时间 item.SendedCounter = 0; //已发送短信息次数(因为是添加操作没有短信发送操作) item.StartTime = Convert.ToDateTime(rtm.ChageStateTime); //开始报警时间 item.UploadState = "正常"; //上传状态(此添加操作是设备级别的上传状态为正常) item.IsFinished = false; //报警是否结束(添加操作报警没有结束) #endregion alarmItemList.Add(item); }