コード例 #1
0
ファイル: AlarmDataSet.cs プロジェクト: woohn/Pisces
        private void Check(Series s, alarm_definitionRow alarm)
        {
            Logger.WriteLine("found alarm definition " + s.SiteID + " " + s.Parameter);

            AlarmRegex alarmEx = new AlarmRegex(alarm.alarm_condition);

            if (alarmEx.IsMatch())
            {
                var c = alarmEx.GetAlarmCondition();
                if (c.Condition == AlarmType.Above)
                {
                    CheckForAboveAlarm(s, alarm, c);
                }
                else
                if (c.Condition == AlarmType.Below)
                {
                    CheckForBelowAlarm(s, alarm, c);
                }
                else
                if (c.Condition == AlarmType.Dropping ||
                    c.Condition == AlarmType.Rising)
                {
                    CheckForRateOfChangeAlarm(s, alarm, c);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Check each point in the series for an alarm
        /// </summary>
        /// <param name="s"></param>
        internal void Check(Series s)
        {
            var alarm = GetAlarmDefinition(s.SiteID, s.Parameter);

            // is alarm defined
            if (alarm.Rows.Count == 0)
            {
                return;
            }
            if (alarm.Rows.Count > 1)
            {
                throw new Exception("bad... alarm_definition constraint not working (siteid,parameter)");
            }


            AlarmDataSet.alarm_definitionRow row = alarm[0];
            // check alarm_condition for each value

            AlarmRegex alarmEx = new AlarmRegex(row.alarm_condition);

            if (alarmEx.IsMatch())
            {
                foreach (Point p in s)
                {
                    if (!p.IsMissing)
                    {
                        if (alarmEx.IsAlarm(p.Value))
                        {
                            Console.WriteLine("Alarm found");
                            CreateAlarm(row, p);
                            return;
                        }
                    }
                }
            }

            // TO DO  clear alarms if clear_condition
        }
コード例 #3
0
ファイル: AlarmDataSet.cs プロジェクト: ruo2012/Pisces
        /// <summary>
        /// Check each point in the series for an alarm
        /// </summary>
        /// <param name="s"></param>
        internal void Check(Series s)
        {
            Logger.WriteLine("Check for alarms " + s.SiteID + " " + s.Parameter);
            var alarm = GetAlarmDefinition(s.SiteID.ToLower(), s.Parameter.ToLower());

            // is alarm defined
            if (alarm.Rows.Count == 0)
            {
                return;
            }
            if (alarm.Rows.Count > 1)
            {
                throw new Exception("bad... alarm_definition constraint not working (siteid,parameter)");
            }

            Logger.WriteLine("found alarm definition " + s.SiteID + " " + s.Parameter);
            AlarmDataSet.alarm_definitionRow row = alarm[0];
            // check alarm_condition for each value

            AlarmRegex alarmEx = new AlarmRegex(row.alarm_condition);

            if (alarmEx.IsMatch())
            {
                foreach (var c in alarmEx.AlarmConditions())
                {
                    if (c.Condition == AlarmType.Above)
                    {
                        foreach (Point p in s)
                        {
                            if (!p.IsMissing && p.Value > c.Value)
                            {
                                Logger.WriteLine("alarm_condition: " + row.alarm_condition);
                                Logger.WriteLine("Alarm above found: " + p.Value);
                                CreateAlarm(row, p);
                                return;
                            }
                        }
                    }

                    if (c.Condition == AlarmType.Below)
                    {
                        foreach (Point p in s)
                        {
                            if (!p.IsMissing && p.Value < c.Value)
                            {
                                Console.WriteLine("Alarm below found");
                                CreateAlarm(row, p);
                                return;
                            }
                        }
                    }

                    if (c.Condition == AlarmType.Dropping)
                    {
                        double num_a = s[0].Value;
                        double num_b = s[1].Value;
                        double num_c = s[2].Value;
                        double num_d = s[3].Value;

                        if ((num_a - num_b) > c.Value
                            | (num_b - num_c) > c.Value
                            | (num_c - num_d) > c.Value)
                        {
                            Console.WriteLine("Alarm dropping found");
                            CreateAlarm(row, s[0]);
                            return;
                        }
                    }

                    if (c.Condition == AlarmType.Rising)
                    {
                        double num_a = s[0].Value;
                        double num_b = s[1].Value;
                        double num_c = s[2].Value;
                        double num_d = s[3].Value;

                        if ((num_b - num_a) > c.Value
                            | (num_c - num_b) > c.Value
                            | (num_d - num_c) > c.Value)
                        {
                            Console.WriteLine("Alarm dropping found");
                            CreateAlarm(row, s[0]);
                            return;
                        }
                    }
                }
            }

            // TO DO  clear alarms if clear_condition
        }