//获取开关变位报警 public void GetVarStateAlarmMsg(Double OldValue, Double NewValue) { try { if (nVarState != null) { if (OldValue == NewValue && nVarState.newvalue == NewValue) { if ((DateTime.Now - nVarState.AlarmDT).TotalSeconds >= nVarState.Delay)//延时到 { cAlarmMsgAddMsg(nVarState.text, EAlarmType.StateChange, (EAlarmPriority)VarStatepriority); nVarState = null; return; } } else { nVarState = null; } } foreach (CVarState node in ListVarState) { if (node.oldvalue == OldValue && node.newvalue == NewValue && OldValue != NewValue) { if (node.Delay == 0) { //立马报警 cAlarmMsgAddMsg(node.text, EAlarmType.StateChange, (EAlarmPriority)VarStatepriority); nVarState = null; } else { nVarState = node; nVarState.AlarmDT = DateTime.Now; if ((DateTime.Now - nVarState.AlarmDT).TotalSeconds >= nVarState.Delay)//延时到 { cAlarmMsgAddMsg(nVarState.text, EAlarmType.StateChange, (EAlarmPriority)VarStatepriority); nVarState = null; } } break; } } } catch (Exception ex) { } }
public bool LoadFromNode(XmlElement VarNode)//读取报警值 { try { nLimtLO.Clear(); nLimtHI.Clear(); ListVarState.Clear(); //读取越限报警 string xpath = "OverLimit"; XmlElement temNode = (XmlElement)VarNode.SelectSingleNode(xpath); foreach (XmlElement nNode in temNode.ChildNodes) { bool k = true; switch (nNode.Name) { case "LimitLO": //越低限 SLimit nLimit = new SLimit(); nLimit.value = Convert.ToDouble(nNode.GetAttribute("value")); nLimit.Delay = Convert.ToInt32(nNode.GetAttribute("Delay")); nLimit.Deadband = Convert.ToDouble(nNode.GetAttribute("Deadband")); nLimit.priority = Convert.ToInt32(nNode.GetAttribute("priority")); nLimit.text = nNode.GetAttribute("text"); for (int i = 0; i < nLimtLO.Count; i++) { if (nLimit.value < nLimtLO[i].value) { nLimtLO.Insert(i, nLimit); k = false; break; } } if (k) { nLimtLO.Add(nLimit); } break; case "LimitHI": //越高限 nLimit = new SLimit(); nLimit.value = Convert.ToDouble(nNode.GetAttribute("value")); nLimit.Delay = Convert.ToInt32(nNode.GetAttribute("Delay")); nLimit.Deadband = Convert.ToDouble(nNode.GetAttribute("Deadband")); nLimit.priority = Convert.ToInt32(nNode.GetAttribute("priority")); nLimit.text = nNode.GetAttribute("text"); for (int i = 0; i < nLimtLO.Count; i++) { if (nLimit.value < nLimtLO[i].value) { nLimtHI.Insert(i, nLimit); k = false; break; } } if (k) { nLimtHI.Add(nLimit); } break; case "Warp": //偏差 Warpenabled = Convert.ToBoolean(nNode.GetAttribute("enabled")); if (Warpenabled) { Warpdefault = Convert.ToDouble(nNode.GetAttribute("default")); Warp = Convert.ToDouble(nNode.GetAttribute("warp")); WarpDeadband = Convert.ToDouble(nNode.GetAttribute("Deadband")); Warppriority = Convert.ToInt32(nNode.GetAttribute("priority")); } break; case "ChangeRate": //变化率 ChgPercentenabled = bool.Parse(nNode.GetAttribute("enabled")); if (ChgPercentenabled) { ChgPercent = Double.Parse(nNode.GetAttribute("percent")); Chgperiod = Double.Parse(nNode.GetAttribute("period")); ChgPerpriority = Convert.ToInt32(nNode.GetAttribute("priority")); } break; default: break; } } //读取变位报警 xpath = "VarStates"; temNode = (XmlElement)VarNode.SelectSingleNode(xpath); ListVarState.Clear(); foreach (XmlElement varstate in temNode.ChildNodes) { CVarState objVarState = new CVarState(); objVarState.oldvalue = Convert.ToDouble(varstate.GetAttribute("oldvalue")); objVarState.newvalue = Convert.ToDouble(varstate.GetAttribute("newvalue")); objVarState.text = varstate.GetAttribute("text"); objVarState.addition = varstate.GetAttribute("addition"); objVarState.Program = varstate.GetAttribute("Program"); objVarState.Delay = Convert.ToInt32(varstate.GetAttribute("Delay")); ListVarState.Add(objVarState); } VarStatepriority = Convert.ToInt32(temNode.GetAttribute("priority")); //读取变量异常报警 xpath = "VarError"; temNode = (XmlElement)VarNode.SelectSingleNode(xpath); VarErrorenabled = bool.Parse(temNode.GetAttribute("enabled")); if (VarErrorenabled) { minvalue = Double.Parse(temNode.GetAttribute("minvalue")); mintext = temNode.GetAttribute("mintext"); maxvalue = Double.Parse(temNode.GetAttribute("maxvalue")); maxtext = temNode.GetAttribute("maxtext"); VarErrorpriority = Convert.ToInt32(temNode.GetAttribute("priority")); } return(true); } catch (Exception e) { return(false); } }
public void SetDIAlarm(string sType, string sValue) { if (sType == "") { if (nVarAlarm == null) { return; } nVarAlarm.ListVarState.Clear(); if (nVarAlarm.GetNull() == 0) { nVarAlarm = null; return; } } if (nVarAlarm == null) { nVarAlarm = new CVarAlarm(); } nVarAlarm.ListVarState.Clear(); int iRp = Convert.ToInt32(sType.Substring(0, 1)); string sAlarm = ""; if (iRp == 2) { sAlarm = "警告"; } else { sAlarm = "报警"; } nVarAlarm.VarStatepriority = iRp; sValue = sValue.Replace(':', ','); sValue = sValue.Replace(';', ','); sValue = sValue.Replace(';', ','); sValue = sValue.Replace(':', ','); sValue = sValue.Replace('.', ','); string[] str2 = sValue.Split(','); for (int i = 0; i < str2.Length; i++) { try { int iNew = Math.Abs(Convert.ToInt32(str2[i])); int iOld = 1 - iNew; if (iOld < 0) { continue; } bool bAdd = true; foreach (CVarState node in nVarAlarm.ListVarState) { if (node.oldvalue == iOld && node.newvalue == iNew) { bAdd = false; break; } } if (bAdd) { CVarState nState = new CVarState(); nState.oldvalue = iOld; nState.newvalue = iNew; nState.text = Name + "." + Description + " " + iOld.ToString() + "-" + iNew.ToString() + sAlarm; nVarAlarm.ListVarState.Add(nState); } } catch { } } }