The invention pertains to signals from automated systems and particularly to their management at the point of receipt. More particularly, the invention pertains to such signals in large networks of building systems, particularly systems with thousands of buildings related to very large enterprises.
The invention is an approach for efficient signal management for automated systems, which may include building systems, industrial systems, medical systems, or any other system which reports signals that must be interpreted and acted on by a recipient (either human or machine).
The invention described herein provides a highly flexible method for defining all possible and desirable aspects of signal processing, including but not limited to the identification of signals for purposes of: 1) Assigning a specific person or class of human or computer handler to receive the signal, 2) assigning Priority Handling Instructions for the human or machine recipient, 3) assigning Maintenance Procedures instructions specific to a signal, 4) applying Suppression of a signal that does not provide important information, 5) applying Escalation to a signal that is aging within the system, 6) declaring sets of related signals that should be processed together, and 7) declaring sets of signals that together comprise a different meaning.
There exist event data processing centers that electronically receive a very large number of event signal instances, on the order of millions daily, with a diversity of signal parameters (i.e., formatted information included in the event data). The format and information content is based on multiple factors (e.g., a customer owning the site of an event), a type of event (e.g., missing data, a sensor high limit reached, a service of equipment overdue), and/or associated equipment or control system source), and thus the event signals vary in structure and amount of data. An event, alarm or entity may arrive at a system. An example entity unit may have information such as its model, location, name, last modification, and so on.
Previously, each incoming event was evaluated in a variety of methods and then disregarded or queued for processing. These methods were predefined and coded into the system, and based largely on the data included in the signal payload. When there is a way for human users to change the evaluation method, it falls into several categories: 1) To set parameters in each system to control features such as signal identification and signal priority, 2) to select the evaluation methods to be applied from precoded options, or 3) to write complex queries and filters in a data interaction language such as a structured query language (SQL). Option 1 is an unreasonable option when thousands of individual, disparate systems are involved, option 2 is limiting and option 3 is overly technical for many users.
The event signal flood requires fast management both within the initial input evaluation computation and within the human/computer event handling. Providing a configurable and flexible model for signal handling would aid in algorithm-based alarm mitigation, event queuing, and user interaction design for presenting event information, just to list a few of the many benefits. Alarms may be dealt with herein as an illustrative example of signals and their management.
A related-art implementation of alarm management systems generally maintains the configuration of alarms in the remote system that generates the alarm. This configuration is limited, and may be specific to the remote location. By providing an algorithm to recognize particular alarm features when the alarm is received, alarm characteristics may be added, or further refined to match the processing requirements of the receiving application. Additional alarm settings that apply to higher levels of the enterprise, such as enterprise-level alarm monitoring priorities may be added that modify the nature of the signal received from the remote system.
These signals are then, in many instances, retrieved by a direct query (as with SQL database queries) from a set of millions of signals, where only some subset has the required attributes, and those attributes may be assessed only through complicated querying. In other cases, the alarms are handled in first-in-first-out queue, and very little is done to identify which alarms are more urgent and should be higher in the queue than others. In all previously mentioned cases, most of the information available to signal management system, and to the end user, must come in the signal itself as part of the payload.
What is required is a way to translate signals from disparate systems into a common description, giving each of these potentially different signals a signature that may be processed in common fashion, regardless of source. These modified configuration parameters may then be used to alter signal handling in a manner that supports real-time evaluation of alarms at receipt.
The system and supporting algorithms must perform with a high degree of efficiency (on the order of milliseconds) to handle signal traffic at rates of five new events per second or more, in a system where signal volume may reach rates of one million alarms per day.
Instead of maintaining a configuration of every possible recognizable signal (e.g., as it is pre-configured at the issuing control device), one may design rules that inform the receiving system how to handle each alarm as a conjunction of disjunctive filter statements that apply to one or more of the signal attributes. (It should be noted that each Boolean expression that does not contain “not” can be reduced to that form.)
In order to enable consistent filtering across a range of disparate systems, the filtering mechanism must be generic and flexible. An example is the identification of the system components that are sources of signals, hereafter referred to as entities in the system. Typically, each control system vendor has a set of component descriptions that are specific to the engineering of that vendor's system (e.g., Unit, Module, Executive, C200, etc.). Entity filters in the present system will be decomposed to more generic forms than “Module Name” or “Unit Type”. Instead of asking for all alarms with, for instance, Module=“EHM 05”, one may ask for alarms that have a key/value pair matching ModuleType and EntityName. If the filter is a disjunction, additional key value pairs may be used for this filter to handle the disjunction. Filter types are not necessarily based on specific fields; they may be based on data type and comparison type. Filter types may be added at any time without recompiling the code that evaluates the filters. A rule may be a collection of filters (i.e., a conjunction of disjunctive or filter statements).
In this manner, the system can be flexible to the addition of new types of systems, new alarm parameters, and new alarm sources, without requiring modification of the system that supports configuration, filtering or display of the signals.
In general, for each incoming alarm, one may match its attributes against existing filters to get matching filters. Then one may match the matching filters against all of the rules. Those rules that have all their filters satisfied may be used to handle the alarm.
It should be noted that instead of maintaining millions of records that represent all attribute combinations of all anticipated signals, one may maintain a significantly smaller configuration of rules. The present approach may be implemented either as part of the transactional database (where alarm and other data are stored) or as a stand-alone program.
The present approach relates to truth-table filter processing in a database of signals. A challenge of a filter application is that it may require very fast throughput of incoming alarms from tens of thousands of sites, and require very fast analysis of the nature of each alarm to support effective processing. The analysis may involve questions of who should view the alarm, what does it mean and how important it is. A standard method would be to apply filters to the database of alarms after they are received to extract the few that are relevant to a specific task. Such solution may appear ineffective in a database where millions of possible signal profiles must be evaluated to identify the relevant set in a timely manner (within seconds of the request).
A filter algorithm may apply appropriate alarm management rules to each alarm as it comes in, and take the values from one alarm and compare them to all of the alarm management rules criteria in one operation, to determine its correct handling. This filtering may be for very fast real-time processing of traffic based on pre-configured criteria. However, it may be noted that this algorithm does not serve bulk-processing or historical reporting needs using ad-hoc querying methods.
A network 50 of the system may be provided as shown in
In order to find all of the rules 54 that need to be activated for a given alarm, for each attribute 51 one may find a condition 52 that matches the alarm's attribute value. At most, one condition 52 may be found. If a condition one 52 is found, then for all of the filters 53 which have that condition, one may find all of the rules 54 that have those filters 53. Each time a rule 54 is found, a counter of found filters 53 may be incremented. As the counter reaches the number of required filters 53, then a rule 54 may be activated.
Filter 53 types may be specified by an evaluation type algorithm. They may involve string equality, value equality and a range test. One filter 53 may be a disjunctive statement such as “alarm type=A or B or C”. Another filter 53 may be a disjunctive statement such as “system type=1 or 2 or 3”. A rule 54 may be a conjunction of disjunctions such as “rule 1=((alarm type=A or B or C) and (system type=1 or 2 or 3))”. A conjunction may include more than two disjunctions, and a disjunction may have more or less than three designations indicating a type of an alarm, a system, or other item. The designations in a disjunction may indicate any other property of the alarm or system. Each these properties or types may have a truth value associated with it.
A disjunction is true if any one element of it is true. In other words, all of the elements of the disjunction need to be false for the disjunction to be false. As to a conjunction of disjunctions, if any disjunction is false, then the conjunction is false. In other words, all disjunctions need to be true for the conjunction to be true.
A question relative to alarm filtering may concern what the attributes look like.
For an illustrative example of a specific kind of filter, a user may say “all alarms with ‘Module’ named ‘Foo’ in the signal source path”. So the filter would say all alarms with a key value pair “name|Foo on Attribute type 2”. The SQL for this query may be “Where ATTR=2 AND COL_NAME=‘name’ AND VALUE LIKE ‘% Foo %’”.
A filter table may look like one designated FILTER_VAL_CHAR, as shown in
A general filter process may be noted. One may get an incoming alarm. Then one may grab its attributes and add them to the filter tables. Next one may do an entity-specific query that returns all attributes for that alarm in a generic format. Then one may write those attributes to the New_Alarm_Values tables. There should be a flexible and automatic method to determine which attributes are required for all of the active filters. Note that one should not collect attributes of which no one is using in a filter. This may be done for reasons such as efficiency.
The general filter process may continue with running the filters), finding the matches, and returning a set of rules to execute for each alarm. This approach may be a batch activity (i.e., once every few seconds). Some of the items in the process may require applying the right settings to the alarms and deleting the processed alarm values from the filter tables.
An illustrative example SQL script 20 for establishing and using an alarm filter is shown in
Further description of various aspects relating to a filter processing algorithm may be provided. It may be noted that some of the tables indicated or used in this description are not necessary for implementation of the present system. In a large system configuration with multiple enterprises, such as in a large, centralized monitoring center, there will likely be relatively few rules per subscribing customer (i.e., about ten signal priority rules, about ten signal suppression rules, and about five signal routing rules). Even if there are many such customers, and thousands of systems, and if these rules have many filter conditions, they would likely number only a few hundred, or a few thousand individual comparisons. Therefore, the queries and joins of the truth value tables for the set of configured rules may be processed on relatively small data sets which grow significantly more slowly than the overall signal volume.
Although the present approach imposes a processing load when alarms are received, it may eliminate a number of troublesome maintenance issues and the need to run several background processes that would be required to support other approaches. It eliminates the need for the system to model alarm handling rules for specific identified signals a priori, which would entail modeling all such anticipated signals, amounting to multiple millions of configuration parameters in a very large network of systems. This is wasteful of disk space, working processor memory, and processing time, and troublesome to maintain over time.
The present solution is extremely flexible to the addition of new types of rules. As with the separation of the string and numeric filter tables, additional tables for dates may also be included. With minor modification, the logic may be modified to handle “NOT” conditions as well. These additions would not significantly affect performance.
The present solution may also handle nested conditions. A nested condition is simply a larger conjunction. For instance, if there are three hierarchical rules, rule 1, rule 2 and rule 3, where rule 3 is at the third level, to satisfy rule 3, all of the filter conditions at each level need to be true.
A number of base assumptions may be made. First, each filter deals with only one attribute. A condition on the filter may be a single equality condition or disjunctive condition. Second, each rule is a conjunction of filters. Third, the database is not necessarily normalized for efficiency reasons. Fourth, where appropriate, there is a note that may describe constraints on the attributes. Fifth, the approach discussed herein may focus on an evaluation of filter conditions, and identification of rules to be executed. The rules may be applied once identified. Sixth, the example may store intermediate results in the tables. However, the code may be changed so that the intermediate results are stored in memory.
A solution of processing one signal at a time may be noted in
Each incoming alarm may be represented by a set of rows in NEW_ALARM_TBL_NUM 22 and/or NEW_ALARM_TBL_CHAR 23 depending on the type of attribute. If the attribute is numeric then it should be stored in NEW_ALARM_TBL_NUM 22; if the attribute is a string then it should be stored in the NEW_ALARM_TBL_CHAR 23. This may allow all of the rules in each table to be processed using the same syntax. The date ranges on suppression rules may be handled in a similar manner using a third structure specific to numeric ranges, e.g., NEW_ALARM_TBL_RANGE (not shown).
To identify how to store the attributes and their values ATTRIBUTE_TBL 21 can be used. It should be noted that there is one-to-one correspondence between ATTR_NAME and ATTR_ID. In other words, ATTR_ID is a secondary key of ATTRIBUTE_TBL 21. The difference is that ATTR_ID is numeric and thus may make it more efficient for query processing.
In the interests of efficiency, the following may be used. First, one should store only attribute information of those attributes that are used in the filter. For example, alarm ID is not necessarily used in the filter and therefore should not be stored in the ATTRIBUTE_TBL 21 (and as a result in NEW_ALARM_TBL_NUM 22 or NEW_ALARM_TBL_CHAR) 23. Second, the number of rows in NEW_ALARM_TBL CHAR 23 (and FILTER_TBL_CHAR 24) should be minimized. For example, if there is one-to-one correspondence between Alarm Name and Alarm Type, then the filter should be stored as a numeric filter on the Alarm Type Key (not a character filter).
In both NEW_ALARM_TBL_* 22, 23, ATTR_ID is an identifier of the attribute of the alarm; VAL is the value of this attribute. So, if an alarm has 10 numeric and 5 character attributes, then when an alarm comes in one may have 10 rows in the NEW_ALARM_TBL_NUM 22 and 5 rows in the NEW_ALARM_TBL_CHAR 23, one for each attribute. This assumes that all 15 attributes are used in at least one filter. However, if only a sub-set of attributes is used in the set of existing filters, only those should be stored in the NEW_ALARM_TBL_* 22, 23 (for performance reasons). NEW_ALARM_TBL_* 22, 23 may hold each new alarm temporarily until it is matched to all of the rules. Then the rows related to that alarm should be deleted from the table.
One may note that in the present approach, one may be storing (temporarily) all of the attribute value pairs in the table. For performance reasons, the approach may be changed to store each such pair in the memory.
FILTER_TBL_NUM 25 may hold all of the filters on numeric attributes. FILTER_TBL_CHAR 24 may hold all of the filters on string attributes. ATTR_ID may be the ID of the attribute for which one would be testing the condition (COND).
It may be noted that the FILTER_ID should be globally unique. It means that if one filter tests a string attribute and another one tests a numeric attribute, the filters should not have the same ID's. (The FILTER_ID is likely to be implemented as a foreign key to existing filter tables, which already enforce unique identification.)
If the test is disjunctive, multiple rows may be produced and each row will have the same FILTER_ID/ATTR_ID pair, but a different COND, as shown in table 31 of
FILTER_MATCH 26 may be a temporary table which stores filter ID's that successfully matched attribute values on the incoming alarm. Filter ID's from both FILTER_TBL_NUM 25 and FILTER_TBL_CHAR 24 may be stored in FILTER_MATCH 26. This is why the filter_ids should be unique across different attribute types.
RULE_TBL 27 may store all of the rules. So if the rule says Filter 1 and Filter 2 then Rule 1, then one would have 2 rows in RULE_TBL 27, as illustrated in a diagram 32 of
Additional columns may be included in RULE_TBL 27 to resolve potentially overlapping conditions, or to arbitrate other dependencies. For example, if an alarm satisfies more than one priority rule, only the rule with the highest priority should be applied. (A customer-specific default priority rule may be stored in the table along with all other rules.)
There may be a one-to-one correspondence between the rule ID and required_match_count as well as the rule ID and action. It may also be emphasized that the required_match_count is equal to the number of rows with the same rule ID (number of filters to match).
RULE_MATCH 28 may be a temporary table that holds all of the rules that had at least one filter match. FOUND_MATCH_COUNT in table 28 may be the number of matched filters. If all of the filters in the rule matched, then FOUND_MATCH_COUNT should be equal to REQUIRED_MATCH_COUNT and the rule should fire. Otherwise, all of the conditions of the rule would not be satisfied and the rule should not fire.
A procedure may be provided to find all the rules that should be fired. It may be assumed that both tables NEW_ALARM_TBL_CHAR 23 and NEW_ALARM_TBL_NUM 22 have been populated. First, all of the all matching filters may be found in the following.
SELECT FILTER_ID INTO FILTER_MATCH
FROM FILTER_TBL_NUM
INNER JOIN NEW_ALARM_TBL_NUM
ON FILTER_TBL_NUM.ATTR_ID=NEW_ALARM_TBL_NUM.ATTR_ID AND FILTER_TBL_NUM.COND=NEW_ALARM_TBL_NUM.VAL
SELECT FILTER_ID INTO FILTER_MATCH
FROM FILTER_TBL_CHAR
INNER JOIN NEW_ALARM_TBL_CHAR
ON FILTER_TBL_CHAR.ATTR_ID=NEW_ALARM_TBL_CHAR.ATTR_ID AND FILTER_TBL_CHAR.COND LIKE NEW_ALARM_TBL_CHAR.VAL
Then all of the rules that have those filters may be found and that all of the required filters may be verified as matched, in the following.
SELECT RULE_ID, REQUIRED_MATCH_COUNT, COUNT(RULE_ID) AS FOUND_MATCH_COUNT, ACTION INTO RULE_MATCH
FROM RULE_TBL
INNER JOIN FILTER_MATCH
ON RULE_TBL.FILTER_ID=FILTER_MATCH.FILTER_ID
GROUP BY RULE_ID, REQUIRED_MATCH
SELECT RULE_ID, ACTION
FROM RULE_MATCH
WHERE REQUIRED_MATCH_COUNT=FOUND_MATCH_COUNT
Clean-up may be effected in the following.
TRUNCATE TABLE FILTER_MATCH
TRUNCATE TABLE RULE_MATCH
TRUNCATE TABLE NEW_ALARM_TBL_NUM
TRUNCATE TABLE NEW_ALARM_TBL_CHAR
A procedure to file all of the rules that should be fired (without storing intermediate results in the tables) may be effected. The following solution may eliminate the need to store intermediate results in the FILTER_MATCH 26 and RULE_MATCH 28 tables.
This query may be further optimized by using indexes.
The query to find all matching alarms may be indicated by the following.
This query may be re-written as non-correlated sub-query for further efficiency.
The present algorithm may be implemented in code as indicated in the following. This approach may be considered if the database solution described herein has an undesirable affect on throughput. For coding the algorithm, one may look to network 50 in
The function find_matching_condition should be implemented as an efficient search, so that the time to find the matching condition is not linear. An example of a more efficient search than a simple loop would be a binary search (O(ln n)). This search assumes that the values (conditions) are sorted. Other search strategies (detailed in various algorithm books) may be employed. An appropriate storage data structure should be used. In order for the noted algorithm to work for multiple alarms, an outer-loop (for each alarm) may be used.
In sum, the signal management system may include one or more signal sources of one or more customers, a processor for processing signals from the one or more signal sources in accordance with a set of rules, and a repository or memory for storing signals from the processor. The signals in the repository may be accessible. The processor may have an attribute extractor connected to a database, an attribute matcher connected to the attribute extractor, and a match comparator connected to the attribute matcher. The database may be for holding the rules, among other things. The attribute extractor may be for extracting attributes of signals. The attribute matcher may be for providing matches of attributes of the signals with conditions of the rules. The matches may be in the form of a tuple comprising a signal ID, an attribute ID and a rule ID. The match comparator may be for comparing the matches from the attribute matcher to the rules to determine which ones satisfy conditions of the rules. A rule or rules indicated by output items of the match comparator may be executed. Output items from the match comparator may have a signal ID and a rule ID. An attribute may have a set of one or more conditions which can be matched against a signal record. A signal, for instance, may be an alarm. Signal management, for example, may be used in a building control or automation system.
In the present specification, some of the matter may be of a hypothetical or prophetic nature although stated in another manner or tense.
Although the invention has been described with respect to at least one illustrative example, many variations and modifications will become apparent to those skilled in the art upon reading the present specification. It is therefore the intention that the appended claims be interpreted as broadly as possible in view of the prior art to include all such variations and modifications.
Number | Name | Date | Kind |
---|---|---|---|
4375637 | Desjardins | Mar 1983 | A |
4816208 | Woods et al. | Mar 1989 | A |
5042265 | Baldwin et al. | Aug 1991 | A |
5161387 | Metcalfe et al. | Nov 1992 | A |
5385297 | Rein et al. | Jan 1995 | A |
5390206 | Rein et al. | Feb 1995 | A |
5768119 | Havekost et al. | Jun 1998 | A |
5929761 | Van der Laan et al. | Jul 1999 | A |
5946303 | Watson et al. | Aug 1999 | A |
5955946 | Beheshti et al. | Sep 1999 | A |
6124790 | Golov et al. | Sep 2000 | A |
6178362 | Woolard et al. | Jan 2001 | B1 |
6185483 | Drees | Feb 2001 | B1 |
6223544 | Seem | May 2001 | B1 |
6295527 | McCormack et al. | Sep 2001 | B1 |
6314328 | Powell | Nov 2001 | B1 |
6351213 | Hirsch | Feb 2002 | B1 |
6356282 | Roytman et al. | Mar 2002 | B2 |
6420968 | Hirsch | Jul 2002 | B1 |
6430712 | Lewis | Aug 2002 | B2 |
6473407 | Ditmer et al. | Oct 2002 | B1 |
6492901 | Ridolfo | Dec 2002 | B1 |
6535122 | Bristol | Mar 2003 | B1 |
6549135 | Singh et al. | Apr 2003 | B2 |
6662235 | Callis et al. | Dec 2003 | B1 |
6675591 | Singh et al. | Jan 2004 | B2 |
6681156 | Weiss | Jan 2004 | B1 |
6690980 | Powell | Feb 2004 | B2 |
6813587 | McIntyre et al. | Nov 2004 | B2 |
6816811 | Seem | Nov 2004 | B2 |
6870141 | Damrath et al. | Mar 2005 | B2 |
6879253 | Thuillard | Apr 2005 | B1 |
6892546 | Singh et al. | May 2005 | B2 |
6919809 | Blunn et al. | Jul 2005 | B2 |
6947972 | Chun | Sep 2005 | B2 |
6955302 | Erdman, Jr. | Oct 2005 | B2 |
6973627 | Appling | Dec 2005 | B1 |
6990821 | Singh et al. | Jan 2006 | B2 |
7024283 | Bicknell | Apr 2006 | B2 |
7062389 | Johnson et al. | Jun 2006 | B2 |
7068931 | Tokunaga | Jun 2006 | B2 |
7069181 | Jerg et al. | Jun 2006 | B2 |
7085674 | Iwasawa | Aug 2006 | B2 |
7113085 | Havekost | Sep 2006 | B2 |
7171287 | Weiss | Jan 2007 | B2 |
7243044 | McCalla | Jul 2007 | B2 |
7250856 | Havekost et al. | Jul 2007 | B2 |
7277018 | Reyes et al. | Oct 2007 | B2 |
7345580 | Akamatsu et al. | Mar 2008 | B2 |
7457869 | Kernan | Nov 2008 | B2 |
7460020 | Reyes et al. | Dec 2008 | B2 |
7596613 | Silverthorne et al. | Sep 2009 | B2 |
7653459 | Pouchak et al. | Jan 2010 | B2 |
7819334 | Pouchak et al. | Oct 2010 | B2 |
7826929 | Wacker | Nov 2010 | B2 |
20030101009 | Seem | May 2003 | A1 |
20030171851 | Brickfield et al. | Sep 2003 | A1 |
20040143510 | Haeberle et al. | Jul 2004 | A1 |
20050038571 | Brickfield et al. | Feb 2005 | A1 |
20050043862 | Brickfield et al. | Feb 2005 | A1 |
20050193285 | Jeon | Sep 2005 | A1 |
20050203490 | Simonson | Sep 2005 | A1 |
20060136558 | Sheehan et al. | Jun 2006 | A1 |
20060168013 | Wilson et al. | Jul 2006 | A1 |
20060219473 | Boland et al. | Oct 2006 | A1 |
20060253205 | Gardiner | Nov 2006 | A1 |
20080010049 | Pouchak et al. | Jan 2008 | A1 |
20080016493 | Pouchak et al. | Jan 2008 | A1 |
20080115153 | Brindle | May 2008 | A1 |
20080125914 | Wacker | May 2008 | A1 |
20090113037 | Pouchak | Apr 2009 | A1 |
20100100583 | Pouchak | Apr 2010 | A1 |
20100106543 | Marti | Apr 2010 | A1 |
20100131653 | Dharwada et al. | May 2010 | A1 |
20100131877 | Dharwada et al. | May 2010 | A1 |
20110010654 | Raymond et al. | Jan 2011 | A1 |
Number | Date | Country |
---|---|---|
WO 0197146 | Dec 2001 | WO |
WO 02052432 | Jul 2002 | WO |
WO 03090038 | Oct 2003 | WO |
WO 2004053772 | Jun 2004 | WO |
WO 2004055608 | Jul 2004 | WO |
WO 2004070999 | Aug 2004 | WO |
WO 2005020167 | Mar 2005 | WO |
WO 2006048397 | May 2006 | WO |
WO 2007024622 | Mar 2007 | WO |
WO 2007024623 | Mar 2007 | WO |
WO 2007027685 | Mar 2007 | WO |
WO 2007082204 | Jul 2007 | WO |
Number | Date | Country | |
---|---|---|---|
20100287130 A1 | Nov 2010 | US |