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); } } }
/// <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 }
/// <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 }