예제 #1
0
파일: CAlarm.cs 프로젝트: tomyqg/SemiGC
 //获取开关变位报警
 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)
     { }
 }
예제 #2
0
파일: CAlarm.cs 프로젝트: tomyqg/SemiGC
        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);
            }
        }
예제 #3
0
        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
                { }
            }
        }