Abstract:
A methodology for processing alarms generated within a predetermined system embodies a forward chaining approach to the analysis of alarms. Before an alarm set can be diagnosed, the method includes the steps of: providing a computer database representative of all components of the system capable of faulting and the interconnections between the components; providing rules that relate component faults to generated alarms and to propagation of component faults within the system; determining individual alarm patterns generated by separate faulting of each component of the system; and storing in a computer database individual alarm patterns determined for each component of the system. Thereafter, the method includes preparing each stored alarm pattern with a generated set of alarms and ascertaining those components whose individual alarm patterns are a subset of this set of alarms. A practical real time implementation of the method is obtained by including the steps of: hashing the individual alarm patterns determined for each system component to a binary pattern corresponding to a unique integer number; hashing the set of alarms to be analyzed to a binary representation; and comparing the alarm set binary representation with all binary patterns stored for the system components and ascertaining therefrom all potentially faulted components of the system.

Description:
BACKGROUND OF THE INVENTION 
     1. Technical field 
     This invention relates in general to alarm processing, and more particularly, to a diagnostic method for identifying from a set of generated alarms potential faulty components of a predetermined system; such as a power network, in real time. 
     2. Description of Prior Art 
     Alarm processing has been a traditional feature of Energy Managment Systems (EMS) and has remained basically unchanged over several generations of EMS designs. Problems with existing diagnostic methods are obvious, and operations personnel have consistently expressed the need for improved methodologies for monitoring the power system network. For example, identified state of the art processing drawbacks include: alarms which are not specific enough; alarms which are too specific; too many alarms occurring during a system disturbance; false alarms; multiplicity of alarms for the same event; and alarms changing too fast to be read on a display. These problems with existing technology are described further in an article entitled &#34;Feasibility Study For An Energy Management System, Intelligent Alarm Processor&#34; by B. F. Wollenberg, IEEE Transactions on Power Systems, Volume PWRS 1, No. 2, (May, 1986). 
     As a solution, the Wollenberg article proposes an expert system based on the concept that alarms should not be presented to the operator without interpretation. Instead, alarms are analyzed in a real time database of the EMS and only relevant alarms are presented to the operator. The suggested methodology for processing alarms is adjusted according to the state of the system. For example, during a thunderstorm certain alarms are automatically suppressed if they are expected to occur. From a review of the alarm rules and examples presented in the article, it appears that Wollenberg&#39;s expert system functions principally as an alarm filter that removes redundant alarms, rather than as a diagnostic system that identifies the faulty, or potentially faulty elements of the system. In addition, as presented, therein the described alarm processor is not, nor can it be interpolated to be, an operational expert system for real time application. 
     Another expert system for processing alarms in a power network is described in an article entitled, &#34;An Expert System For Fault Section Estimation Using Information From Protective Relays and Circuit Breakers&#34;, by C. Fukui and J. Kawakami, IEEE Transactions On Power Delivery, Volume PWRD 1, No. 4 (October, 1986). This expert system estimates possible fault sections using information from protective relays and circuit breakers When a fault occurs, the system makes inferences based on knowledge about protective systems in general and information on the operating relays and tripped circuit breakers The article describes an example of fault estimation in a model network containing several substations, buses, transformers, and circuit breakers However, in a practical power network implementation, an extremely long time can be expected for fault detection using the backward chaining rule-based approach presented. 
     Another approach to fault diagnosis in a power network has been presented by Komai and Sakaguchi in an article entitled, &#34;Artifical Intelligence Method For Power System Fault Diagnosis&#34;, released at the Second International Conference on Power System Monitoring and Control (1986). The Komai and Sakaguchi article descibes an approach different from the rule-based expert systems described above. Their motivation is to solve the problem of incompleteness of the knowledge base, which is an important limitation of present expert systems. According to the authors, expert systems will have the same ability to solve problems as human experts only when human expertise is fully encoded in the knowledge base. Although the approach is powerful in that solutions even under incompleteness and inconsistency of the knowledge base can be obtained, the system is slow. Thus, the approach described therein is inadequate for a real time application. 
     A review of the literature on available alarm processing techniques demonstrates the present deficiency in the art relating to real time processing of alarm signals in a power network. The present invention is directed to meeting this deficiency. 
     SUMMARY OF THE INVENTION 
     Briefly described, the invention comprises methodologies for processing a set of alarms generated by a fault in one or more components of a predetermined system. In a basic form, the method includes the steps of: providing a computer database representative of all components of the system capable of faulting and the interconnections between the components; providing rules that relate component faults to generated alarms and the propagation of component faults within the system; determining individual alarm patterns generated by separate failure of each component within the system using the representative database of components and interconnections and the rules relating component faults to alarms; storing in computer means the individual alarm patterns determined for each component of the system; accomplishing all of the above steps before the set of alarms to be analyzed is generated; and comparing each stored alarm pattern with the generated set of alarms and ascertaining those components whose individual alarm patterns are a subset of the set of alarms, those components being identified as potentially faulted components of the system. 
     In an enhanced embodiment, the method accomplishes the alarm pattern comparing step in real time and further includes the steps of: hashing each of the individual alarm patterns determined for each system component to a binary pattern corresponding to a unique integer number and storing the resultant binary patterns in the computer means; hashing the set of alarms into a binary representation; and comparing the alarm set binary representation with all binary patterns stored for the system components and ascertaining therefrom all potentially faulted components of the system. Further enhanced processing techniques are also described herein. In addition, a detailed method for processing breaker generated alarms in a power distribution network is provided. 
     Accordingly, a principal object of the present invention is to provide an improved diagnostic approach to processing alarms in a predetermined system, and more particularly, to such an approach which is capable of being implemented in real time. 
     Another object of the present invention is to provide an alarm processing method capable of being readily incorporated into a traditional power network, such as a power transmission and distribution system. 
     Yet another object of the present invention is to provide an expert system capable of assisting an power network operator in analyzing alarms, and thereby facilitate the operator&#39;s taking of timely corrective action. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     These and other objects, advantages and features of the present invention will be more readily understood from the following detailed description of certain preferred embodiments of the present invention, when considered in conjunction with the accompanying drawings in which: 
     FIG. 1 is a schematic depiction of a hypothetical power network useful in describing the present invention; 
     FIG. 2 is a table of fault patterns generated pursuant to the present invention using the hypothetical network of FIG. 1; 
     FIG. 3 is a block diagram representation of an expert alarm system incorporating the present invention; 
     FIG. 4 is a table of binary patterns produced pursuant to the present invention for the elements in the network of FIG. 1; 
     FIG. 5 is a Karnaugh map useful in describing the pattern matching implemented by one embodiment of the present invention; and 
     FIG. 6 is a Karnaugh map useful in describing a technique for identifying improperly faulted network breakers pursuant to one embodiment of the present invention. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     In a preferred embodiment, the present invention is implemented as an expert system for fault detection in a power network, such as a power distribution system or a power generation system. Generally stated, the present technique is to analyze faults using a hybrid model of rule-based and pattern recognition approaches. The expert system is initially implemented in LOGLISP (i.e., a software product made available marketed by Syracuse University, Syracuse, New York) and is divided into two modes of operation. In a first mode, the system generates a database of the network topology. In the second mode, the system uses this database, and alarms generated by protective breakers dispersed throughout the power network and pattern recognition techniques to identify potential faulty components of the network. With certain refinements described herein, the system can be implemented in real time. 
     A power distribution network consists of stations interconnected by transmission lines. A typical network can be subdivided into sub-networks of different voltages, interconnected by transformer banks. Common sub-network power transmission voltages are 765KV, 345KV, 230KV, and 115KV. Each station in the network is initially represented by a one-line diagram showing its elements (or components), such as generators, tranformers, buses, and breakers, as well as their interconnections. These station diagrams also show the transmission lines that connect one station to its neighboring stations. FIG. 1 shows a hypothetical power network containing only two stations: STATION-1 and STATION-2. STATION-1 contains two generators, two buses and six circuit breakers. STATION-2 contains two transformer banks, two buses and six circuit breakers. Also, two transmission lines interconnect these two stations. 
     The basic elements in a station are the generators, the transformers, the buses and the transmission lines. (The generators represented in FIG. 1 are in fact generation units that contain a generator and a transformer.) These basic elements are protected by switches and circuit breakers. Switches are elements manually operated to isolate or connect a particular element to the network. Switches are normally used to isolate an element from the power network for maintenance purposes. The switches are omitted from FIG. 1 since they are not used in the present analysis. 
     Breakers are protective elements of automatic operation that isolate an element from the power network whenever a fault is detected in the network. Associated to each breaker there is a relay that senses the element it protects. Whenever a relay detects an abnormal condition, it sends a signal to open the associated breaker, and generates a message reporting the change in breaker status. In this description, &#34;breaker&#34; will be used to refer to the protective set of elements composed of the breaker itself and the relay associated with the breaker. The message, called an event or an alarm, is displayed on an operator&#39;s console at a regional or central control station. Typically, an alarm contains the name of the breaker that changed status, the station, the time of the event, and the new status of the breaker. For example the following message is generated if breaker B-3 in STATION-1 trips: 
     
         933.09 STATION-1 B-3 CHANGE IN STATUS DETECTED-OPEN 
    
     This alarm reports that at 9h33min3sec, breaker B-3 in STATION-1 has opened. 
     When a fault occurs in the system, several protection breakers typically trip and are reported to the operator. The operator must then determine the fault that caused the breakers to trip. In a heavy thunderstorm or in major system malfunctions, a large number of breaker alarms may occur, making it very difficult for the operator to determine the severity of the situation and to interpret all the alarms. These situations are often very critical and may require fast intervention by the operator. Nevertheless, it may be difficult for the operator to act correctly due to an information overflow of alarm signals. In this context, an expert system that can interpret the incoming alarms rapidly and provide the operator with a more informative network system assessment would obviously be very useful. Such an expert system would not replace the operator, but rather act as an intelligent assistant in fault diagnosis and decision making. 
     An expert system approach to alarms processing requires a logical representation of the power network. The power network should be described in a way that a computer program could easily extract information about the network, such as the connectivity of each element, and lists containing element names. 
     Applicant has decided to represent the network by assertions of facts in a text file. This file contains the inforamtion about the connectivity of all elements in the network, obtained from the one-line diagrams of each station. The generation of this file can be done manually using a text editor. An expert system accesses this file whenever it needs information about the network. The convenience of using this approach is that the file containing the network description can be easily updated whenever there is a change in the network topology. 
     Each assertion in the connectivity file is a list describing an element, and has the following format: 
     
         (&lt;element-type&gt;&lt;station-names&gt; &lt;element-id&gt;&lt;connections&gt;) 
    
     &lt;element-type&gt;: Can be a Breaker, Bus, Generator, or Transformer. 
     &lt;station-name&gt;: The name of the station where the element is located. 
     &lt;element-id&gt;: The identification of the element within that station. The identification of breakers, buses and generators are the same ones used in the one-line diagrams. Nevertheless, the identification of transformer banks is slightly different. A transformer bank is considered as two elements representing the primary and the secondary of the transformer. The identification of each of these elements is the same one used in the diagrams, and contains the typical voltage at the output of this element. By representing a transformer bank in this way, it is possible to detect faults occurring in only one of its windings. 
     &lt;connections&gt;: Contain the identifications of all elements connected to the element being described. 
     Below are several examples of assertions describing the connectivity of some elements in the hypothetical power network present of FIG. 1: 
     (Breaker, STATION-2, B-5, TB2-345KV, (STATION-1 L2)) 
     (Bus, STATION-1, BUS-B, B-3, B-6) 
     (Generator, STATION-1, GEN1, B-1, B-2) 
     (Transformer, STATION-2, TB1-345KV, B-3, B-2) 
     The first example states that breaker B-5 in STATION-2 connects the 345KV side of transformer TB2 in this station to transmission line L2 that connects STATION-1 to STATION-2. The second example states that BUS-B in STATION-1 has breakers B-3 and B-6 connected to it. The third example states that generator GEN1 in STATION-1 has breakers B-1 and B-2 connected to it. The last example states that the 345KV side of the transformer TB-1 in STATION-2 has breakers B-2 and B-3 connected to it. 
     Although an element can be explicitly represented with an assertion, it is not always necessary to represent all elements in this way. In a power network where all system components are connected to circuit breakers, such as the hypothetical network represented in FIG. 1, applicant has discovered that it is only necessary to represent the breaker type elements explicitly. The other elements will be implicitly represented by the assertions. An expert system can ascertain the information about the connectivity of these elements by simple manipulations on the assertions. In this way, the following assertions comprise the connectivity file and completely describe the power network presented in FIG. 1: 
     (Breaker, STATION-1, B-1, BUS-A, GEN1) 
     (Breaker, STATION-1, B-2, GEN1, (STATION-2 L1)) 
     (Breaker, STATION-1, B-3, (STATION-2 L1), BUS-B) 
     (Breaker, STATION-1, B-4, BUS-A, GEN2) 
     (Breaker, STATION-1, B-5, GEN2, (STATION-2 L2)) 
     (Breaker, STATION-1, B-6, (STATION-2 L2) BUS-B) 
     (Breaker, STATION-2, B-1, BUS-A, (STATION-1 L1)) 
     (Breaker, STATION-2, B-2, (STATION-1 L1), TB1-345KV) 
     (Breaker, STATION-2, B-3, TB1-345KV, BUS-B) 
     (Breaker, STATION-2, B-4, BUS-A, (STATION-1 L2) 
     (Breaker, STATION-2, B-5, (STATION-1 L2) TB2-345KV) 
     (Breaker, STATION-2, B-6, TB2-345KV, BUS-B) 
     Although all elements have their own idenification within the station, they are not completely identified in the system since it is possible to have different elements of the same type, with the same identification, but in different stations. Also, although not shown in the hypothetical network of FIG. 1, the identification of a transmission line could be used to identify lines that connect different stations in the network. 
     To completely identify an element in the system, a pair is formed with the name of the station where it is located and its identification within the station. Some examples are shown below: 
     (STATION-1 B-1): a breaker located in STATION-1; 
     (STATION-2 BUS-B): a bus located in STATION-2; 
     (STATION-1 GEN1): a generator located in STATION-1; 
     (STATION-2 TB1-345KV): One side of a transformer located in STATION-2; 
     (STATION-2 STATION-2 L1): a transmission line that connects STATION-1 and STATION-2. 
     A process for extracting additional information about the network, such as lists containing the names of the elements, from the connectivity file will now be presented. 
     If a list is created with the names in the station-name field of all assertions, and removing duplicate names, a set, or a list is obtained containing the names of all stations in the system. Such a list is called STATION-LIST and considering the assertions of the hypothetical network, it is defined as: 
     
         STATION-LIST =(STATION-1, STATION-2) 
    
     From a list formed by the concatenation of the names contained in the station-name field and the id-field of all assertions, a list of all breakers in the system is obtained. Such a list is called BREAKER-LIST and considering the assertions previously described, it comprises: 
     
         ______________________________________BREAKER-LIST =        ((STATION-1 B-1), (STATION-1 B-2),        .sup. (STATION-1 B-3), (STATION-1 B-4),        .sup. (STATION-1 B-5), (STATION-1 B-6),        .sup. (STATION-2 B-1), (STATION-2 B-2),        .sup. (STATION-2 B-3), (STATION-2 B-4),        .sup. (STATION-2 B-5), (STATION-2 B-6))______________________________________ 
    
     Similarly, from a list formed by the concatenation of the name in the station-name field and the names in the connection field that are not transmission lines, a list of all generators, buses and transformers, is obtained, i.e., assuming the names in these fields contain the patterns GEN, BUS or TB. Duplicate elements are removed after this operation. Using as an example the above assertions, the following lists are obtained: 
     
         GEN-LIST =((STATION-1 GEN1), (STATION-2 GEN2)) 
    
     
         BUS-LIST =((STATION-1 BUS-A), (STATION-1 BUS-B), (STATION-2 BUS-A), (STATION-2 BUS-B)) 
    
     
         TB-LIST =((STATION-2 TB1-345KV), (STATION-2 TB2-345KV)) 
    
     A list containing the names of all transmission lines in the system can also be created. Each element of this list is obtained by concatenating the station name in one assertion with the names in the connection field, provided that these names represent a transmission line (the identification is in parenthesis). Each element is built in such a way that after the concatenation, the names appear in alphabetical order. After removing the duplicates, a list of all transmission lines in the system (called LINE-LIST) is obtained, which in the presented example is defined as: 
     
         LINE-LIST =((STATION-1 STATION-2 L1), (STATION-1 STATION-2 L2)) 
    
     All of these lists can be easily built by those skilled in the art using languages able to do symbolic manipulation, and that also have special query instructions that perform some operations of relational algebra. 
     The next step after representing the network is to define a series of rules that relate component faults to generated alarms and to the propagation of component faults within the system. The following rules describing the behavior of the circuit breakers and the nature of a complex fault have been formulated: 
     Rule 1. A fault in a transmission line trips all breakers connected to that line; 
     Rule 2. A fault in a transformer bank trips all breakers connected to that transformer; 
     Rule 3. A bus fault trips all breakers connected to that bus; 
     Rule 4. A generator fault trips all breakers connected to that generator; 
     Rule 5. If a fault occurs in a bus, generator, transformer bank or transmission line with a faulty breaker (stuck breaker) connected to this element, then the fault propagates through the faulty breaker to the other elements connected to it, tripping other breakers according to the rules previously described; 
     Rule 6. If a faulty breaker is detected through the analysis of alarms, then a fault must have occurred in at least one of the elements connected to this breaker, and those elements must be reported as potential faulty elements; and 
     Rule 7. A complex fault occurring in the network can always be decomposed into single faults occurring in different elements of they system. 
     As examples of application, if rule 4 is applied to one of the generators in the hypothetical power network shown in FIG. 1, then a: 
     Fault in (STATION-1 GEN1) 
     Trips breakers (STATION-1 B-1) and (STATION-1 B-2) 
     The application of rules 5 and 6 to the hypothetical network is illustrated as follows: 
     If the breakers (STATION-1 B-1), (STATION-1, B-3) (STATION-2 B-1) and (STATION-2 B-2) trip, then it can be concluded by rules 5 and 6, that a fault occurred in the generator (STATION-1 GEN1) or transmission line (STATION-1 STATION-2 L1), and breaker (STATION-1 B-2) failed to trip. 
     Rule 7 says that a complex fault is always formed by a combination of single faults. This means that if a set of alarms is generated, then all of its subsets must be identified, each one representing the alarms for a single fault in the network. 
     Applying rules 3 and 7 to the hypothetical power network, produces: 
     Breakers tripped: (STATION-1 B-1), (STATION-1 B-2), (STATION-1 B-4) and (STATION-1 B-6) 
     Fault in: (STATION-1 BUS-1) and (STATION-1 BUS-2) 
     From the nature of the rules presented, the rules can be divided into two groups: the first dealing with the generation of fault patterns (rules 1 to 5), and the second with the process of matching fault patterns with alarms (rules 6 and 7). In fact, as noted initially, this methodology uses two different techniques in its analysis: the rule-based and the pattern recognition approaches. 
     An expert system based on this methodology must first determine all the elements in the power network from their representation in the connectivity file. Then, it must determine the fault pattern for each element. This process is done by using the information in the connectivity file and the rules describing the behavior of breakers and the propagation of faults (rules 1 to 5). The fault pattern associated with an element in the network is defined as the set containing the names of all breakers that trip if a fault occurs in that element. Finally, the pattern recognition approach and the rule of multiple faults (rules 6 and 7) are used to determine the potential faulty elements in the network that explain the particular set of incoming alarms. The possible fault patterns for the hypothetical network of FIG. 1 are set forth in FIG. 2. Note that the number of fault patterns is always equal to the total number of elements in the power network. 
     Once the fault patterns are generated, the process of finding faults in the network can be accomplished by comparing each fault pattern with the set of alarms to be analyzed. Those elements whose fault pattern is a subset of the set of alarms are considered potential faulty elements. A list containing these elements must be checked in order to find the existence of breakers. Breakers in this list that are also reported by the alarms as tripping breakers cannot be considered as stuck or faulty breakers and must be removed from the list. Rule 7 is then applied to all other breakers. This process is illustrated in the following example. 
     Assume that alarms have been received reporting that the following breakers have tripped: 
     
         (STATION-1 B-1), (STATION-1 B-2), (STATION-1 B-3), (STATION-2 B-1) and (STATION-2 B-2) 
    
     
         By comparing the fault pattern of each element with the alarms received, and finding the elements whose fault pattern is a subset of the received alarms the following list of potential faulty elements is obtained: 
    
     
         (STATION-1 STATION-2 L1), (STATION-1 GEN1) and (STATION-1 B2) 
    
     Although breaker (STATION-1 B-2) was reported as a potential faulty element, it cannot be considered as a stuck breaker, since there is also an alarm reporting that it has tripped. Thus, the final solution of the analysis is that faults are likely to have occurred in: 
     
         transmission line (STATION-1 STATION-2 L1) and generator (STATION-1 GEN1) 
    
     The process of finding breaker faults can also be illustrated by an example. Again, assume that the following alarms have been received: 
     
         (STATION-1 B-1) and (STATION-1 B-5) 
    
     By comparing the fault patterns with the alarms received, it can be concluded that the breaker (STATION -1 B-4) is the only one whose fault pattern is a subset of the alarms received. Since there is no alarm reporting that this breaker has tripped, it can be considered as a faulty element and, according to rule 7, the elements connected to are also reported as faulted elements. Thus, the final result is that faults may have occurred in elements: 
     
         breaker (STATION-1 B-4), generator (STATION-1 GEN-1) and bus (STATION-1 BUS-A) 
    
     With this methodology of alarms analysis, it is also possible to detect isolated breaker trips and telemetering error. The breakers in the set of received alarms that do not belong to the set with the fault patterns are considered as isolated trip or telemetering errors. This process is illustrated in the following example. 
     Assume that the following alarms, reporting tripping breakers are received: 
     
         (STATION-1 B-1), (STATION-1 B-4) and (STATION-2 B-3) 
    
     After the matching process, a fault is identified as occurring in: 
     
         (STATION-1 BUS-A) 
    
     and its fault pattern is: 
     
         (STATION-1 B-1), (STATION-1 B-4) 
    
     Comparing the breakers in this fault pattern with the set of alarms, it will be observed that the breaker (STATION-2 B-3) does not belong to the set of fault patterns. Thus it is reported as an isolated trip or a telemetering error. A specific implementation of an expert system for alarms processing, using the concepts discussed above, will now be presented. First, however, the choice of programming language is an important aspect to be considered in expert system design. Characteristics to look for in choosing a system language include: efficiency of code generated, capabilty of expressing relationships, symbolic manipulation, mechanisms for interfacing with other systems and fast prototyping. Three such systems described below are LISP, PROLOG, and LOGLISP. 
     LISP and PROLOG are popular languages for expert system design and are described in the literature. LISP is a functional programming language (i.e., a function takes input arguments and computes results) designed for symbolic manipulation. It works directly with symbols, instead of assigning values to the symbols and operating with the values as with procedural languages. Symbolic manipulation is an important characteristic since it allows the emulation of some steps in human reasoning. PROLOG is a language based on first order predicate calculus. A program in PROLOG consists of facts and rules. Two types of queries are allowed, depending upon whether or not the variables are instantiated (have value) or not. In queries with instantiated variables, a search is performed through the facts and rules, and returns a true or false answer to the query is returned. The second type of query returns an object that matches the query. This mechanism is typically called pattern matching. 
     An ideal language for expert systems development is one combining both the functional characteristics of LISP and the logic characteristics of PROLOG. LOGLISP embodies such a language. Several articles have been published describing LOGLISP, including: J.A. Robinson and E.E. Sibert &#34;LOGLISP: An Alternative to PROLOG&#34;, Machine Intelligence, Ellis Howood Ltd., Chichester, England (1982); J.A. Robinson and E.E. Sibert &#34;LOGLISP: Motivation, Design and Implementation&#34;, Logic Programming, APIC Studies in Data Processing, No. 16, Academic Press (1982); and J.A. Robinson, E.E. Sibert, D.W. RAha &#34;The LOGLISP programming system, LISP/VM Version&#34; (VM-VM3M1), Syracuse University, Syracuse, New York (1984). LOGLISP is an implementation of LOGIC programming in a LISP environment. It consists of LISP with a set of logic programming primitives referred to as LOGIC. 
     LOGLISP programming language is selected for the expert system since it is believed to be the most suitable language for this application. The ability to perform symbolic manipulation with LISP permits set operations such as unions and differences, while the availability of LOGIC functions, such as assertions and queries, allows the performance of inferences using both forward and backward chaining. These two characteristics of LOGLISP make it possible to describe power networks and encode the rules used in this expert system. 
     FIG. 3 represents a block diagram implementation of an expert alarm system incorporating the present invention. The system includes a database 20, internal database 22, main program 24, and input 26 and output 28. Database 20 comprises a file of LOGLISP assertions describing the power network topology (discussed above) and is automatically loaded with the expert system environment. 
     As described further below, internal database 22 contains a set of working lists generated by the main program from the connectivity file. Main proram 24 consists of a set of LOGLISP functions, embodying the present invention, to analyze alarms, determine causes, and present faults to the user. The input 26 consists of a set of time coincident breaker alarms, and the output 28 consists of a sufficient set of potential faulty elements that explains the occurrence of the alarms generated. 
     As noted, internal database 22 consists of a set of lists generated from the connectivity file 20 that are used by the expert system in its analysis. These lists are: 
     STATION-LIST: contains the names of all stations; 
     BREAKER-LIST: contains the name of all breakers; 
     LINE-LIST: contains the names of all transmission lines; 
     BUS-LIST: contains the names of all generators; 
     GEN-LIST: contains the names of all generators 
     TB-LIST: contains the names of all transformer banks; 
     FAULT-LIST: contains the name of all elements in the system; 
     PATTERN-LIST: contains the fault pattern for each element in the system. A fault pattern is a list containing breaker names. 
     Once built, these lists are stored in a file which is automatically read whenever the expert system environment is loaded. The internal database is only updated if the power network topology changes. The internal database for the hypothetical power network shown in FIG. 1 includes: 
     
         ______________________________________STATION-LIST =(STATION-1 STATION-2)BREAKER-LIST =((STATION-1 B-1) (STATION-1 B-2) (STATION-1 B-3).sup. (STATION-1 B-4) (STATION-1 B-5) (STATION-1 B-6).sup. (STATION-2 B-1) (STATION-2 B-2) (STATION-2 B-3).sup. (STATION-2 B-4) (STATION-2 B-5) (STATION-2 B-6)LINE-LIST =((STATION-1 STATION-2 L1) (STATION-1 STATION-2 L2))BUS-LIST =((STATION-1 BUS-A) (STATION-2 BUS-A).sup. (STATION-1 BUS-B) (STATION-2 BUS-B)GEN-LIST =((STATION-1 GEN-1) (STATION-1 GEN-2))TB-LIST =((STATION-2 TB1-345KV) (STATION-2 TB2-345KV))FAULT-LIST =((STATION-1 STATION-2 L1) (STATION-1 STATION-2 L2).sup. (STATION-1 BUS-A) (STATION-2 BUS-A) (STATION-1BUS-B).sup. (STATION-2 BUS-B) (STATION-1 GEN-1) (STATION-1GEN-2).sup. (STATION-2 TB1-345KV) (STATION-2 TB2-345KV).sup. (STATION-1 B-1) (STATION-1 B-2) (STATION-1 B-3).sup. (STATION-1 B-4) (STATION-1 B-5) (STATION-1 B-6).sup. (STATION-2 B-1) (STATION-2 B-2) (STATION-2 B-3).sup. (STATION-2 B-4) (STATION-2 B-5) (STATION-2 B-6))TRIP-LIST =((STATION-1 BUS-A) (STATION-1 GEN-1).sup. (STATION-1 GEN-1) (STATION-1 STATION-2 L1).sup. (STATION-1 STATION-2 L1) (STATION-1 BUS-B).sup. (STATION-1 BUS-A) (STATION-1 GEN-2).sup. (STATION-1 GEN-2) (STATION-1 STATION-2 L2).sup.  (STATION-1 STATION-2 L2) (STATION-1 BUS-B).sup. (STATION-2 BUS-A) (STATION-1 STATION-2 L1).sup. (STATION-1 STATION-2 L1) (STATION-2 TB1-345KV).sup. (STATION-2 TB1-345KV) (STATION-2 BUS-B).sup. (STATION-2 US-A) (STATION-1 STATION-2 L2).sup. (STATION-1 STATION-2 L2) (STATION-2 TB2-345KV).sup. (STATION-2 TB2345KV) (STATION-2 BUS-B))PATTERN-LIST =(((STATION-1 B-3) (STATION-1 B-2) (STATION-2 B-2).sup. (STATION-2 B-1))((STATION-1 B-6) (STATION-1 B-5) (STATION-2 B-5).sup. (STATION-2 B-4))((STATION-1 B-1) (STATION-1 B-4))((STATION-2 B-1) (STATION-2 B-4))((STATION-1 B-3) (STATION-1 B-6))((STATION-2 B-3) (STATION-2 B-6))((STATION-1 B-2) (STATION-1 B-1))((STATION-1 B-5) (STATION-1 B-4))((STATION-2 B-3) (STATION-2 B-2))((STATION-2 B-6) (STATION-2 B-5))((STATION-1 B-4) (STATION-1 B-2))((STATION-1 B-1) (STATION-1 B-3) (STATION-2 B-2).sup. (STATION-2 B-1))((STATION-1 B-2) (STATION-2 B-2) (STATION-2 B-1).sup. (STATION-1 B-6))((STATION-1 B-1) (STATION-1 B-5))((STATION-1 B-4) (STATION-1 B-6) (STATION-2 B-5).sup. (STATION-2 B-4))((STATION-1 B-5) (STATION-2 B-5) (STATION-2 B-4).sup. (STATION-1 B-3))((STATION-2 B-4) (STATION-1 B-3) (STATION-1 B-2).sup. (STATION-2 B-2))((STATION-1 B-3) (STATION-1 B-2) (STATION-2 B-1).sup. (STATION-2 B-3))((STATION-2 B-2) (STATION-2 B-6))((STATION-2 B-1) (STATION-2 B-6) (STATION-1 B-5).sup. (STATION- B-5))((STATION-1 B-6) (STATION-1 B-5) (STATION-2 B-4).sup. (STATION-2 B-6))((STATION-2 B-5) (STATION-2 B-3)))______________________________________ 
    
     In addition to these lists, there are some temporary lists that are used during the expert system execution. These lists are: 
     CUMULATIVE-LIST: 
     List containing the breaker names in the fault pattern of each element considered as a potential faulty element; 
     RESULT-LIST: 
     List containing the names of the potential faulty elements found during an analysis; 
     TELE-LIST: 
     List containing the name of tripping breakers that are not related to any fault in the system; 
     UNKNOWN-LIST: 
     List containing the breaker names given to the expert system, but that are not recognized. 
     A process for building the lists belonging to the internal database will be described next. Initially, three lists are geneated from the connectivity file: STATION-LIST, BREAKER-LIST and NON-BREAKER-LIST. 
     STATION-LIST is created by the LOGLISP instruction: 
     
         (SETQ STATION-LIST (SORT (ALL s (Breaker s ###)))) 
    
     This instruction is executed in three steps. In the first one, the query: 
     
         (ALL s (Breaker s ###)) 
    
     builds a temporary list containing all the names in the first field of each assertion describing a breaker-type element in the connectivity file. They symbol # means that the query must ignore the names in the fields containing this symbol. Duplicate names are automatically removed by this instruction. The second step sorts the names in the temporary list, and the third step assigns its contents to STATION-LIST. 
     BREAKER-LIST is generated by the LOGLISP instruction: 
     
         (SETQ BREAKER-LIST (ALL (s x) (Breaker s x ##))) 
    
     In the first step of this instruction, the command 
     
         (ALL (s x) (breaker s ×##)) 
    
     builds a temporary list whose elements are also lists. Each element contains the names in the first and second fileds (denoted by s and x in the query) of an assertion describing a breaker-type element in the connectivity file. In the second step of this instruction, the contents of the temporary list are assignd to BREAKER-LIST. 
     NON-BREAKER-LIST is an auxiliary list containing the names of all elements that are not breakers. It is generated by the instruction: 
     
         ______________________________________(SETQ NON-BREAKER-LIST(UNION (ALL (s x) (Breaker s ## x))(ALL (s x) (Breaker s # x #))))______________________________________ 
    
     This instruction has two queries. In the first one, a temporary list with elements containing the names in the first and fourth fields of the assertions in the connectivity file are created. The second query creates a similar list with the names in the first and third fields. The two lists are merged into a single list and duplicated names are automatically removed. The resulting list is assigned to NON-BREAKER-LIST. 
     LINE-LIST, BUS-LIST, TB-LIST and GEN-LIST are built by a LISP that analyzes each element of NON-BREAKER-LIST, and puts it in the appropriate list. 
     FAULT-LIST, as defined before, contains the names of all elements in the system. It is generated by a LISP function that concatenates LINE-LIST, BUS-LIST, GEN-LIST, TB-LIST and BREAKER-LIST, and then assigns this temporary list to FAULT-LIST. 
     PATTERN-LIST contains the fault pattern of each element in the system. Each element of this list is a list containing the breaker names associated to a fault in a particular element. The elements in PATTERN-LIST are generated by LOGLISP functions that implement the rules described above. All of these functions are presented in more detail in the Appendix attached hereto and incorporated herein. 
     The main program 24 comprises two files containing LISP and LOGLISP functions for data manipulation and queries. These functions are set forth in the Appendix. Of these, four functions are available to the user. These functions, with examples of their usage, are presented below. 
     GENERATE-DATABASE: This function builds the internal database using the assertions in the connectivity file. It does not receive any parameter. At the end of its execution, it saves the internal database in a file called ALEX.DB. This function is called just by entering the command 
     
         (GENERATE-DATABASE) 
    
     while in the expert system environment. 
     FAULT: Returns the list of breakers that trip if a fault occurs in the element passed as parameter. The element can be a transmission line, a bus, a transformer, a generator, or a breaker. 
     
         ______________________________________Ex.      (FAULT &#39;(STATION-1 STATION-2 L1))    (FAULT &#39;(STATION-1 BUS-A))    (FAULT &#39;(STATION-1 GEN-1))    (FAULT &#39;(STATION-2 TB1-345KV))    (FAULT &#39;(STATION-2 B-1))______________________________________ 
    
     TRIP: Returns the elements connected to the breaker whose name is passed as parameter. 
     
         Ex. (TRIP &#39;(STATION-1 B-1)) 
    
     SEARCH: Finds the possible faulty elements in the power network that would explain the behavior of the tripping breakers passed as parameters. This function returns: 
     the possible faulty elements in the system, if any; 
     the tripping breakers not related to any fault, if any; 
     the breakers received as parameters that are unknown to the expert system, if any. 
     The functions are the direct representation of the rules presented above. Examples of these functions are LINE-FAULT (rule #1), BUS-FAULT (rule #3), and BREAKER-FAULT (rule #6). For purposes of illustration, the function BUS-FAULT is described in detail. Its body is shown below: 
     
         ______________________________________(BUS-FAULT(LAMBDA (BUS)(ALL (s b)(OR (Breaker s b y #) (Breaker s b # y))(= s (CAR BUS))(= y (LAST BUS)))))______________________________________ 
    
     This function receives a list (BUS) containing a bus name (station name and bus id). The query in this function finds a list whose elements are also lists, but containing only two names. These names are contained in the first and second fields of an assertion in the connectivity file that has in the first field the station name where the bus is located, and in the third or fourth fields the bus id. Duplicate names are automatically removed, and the function returns to the caller a list containing all the breakers connected to the bus. These breakers trip if a fault occurs in this bus. The functions representing other rules are presented in the Appendix to this work. 
     An important aspect of any software for real time application is its ability to analyze incoming data in a short period of time. Experiments with the processing technique described herein have demonstrated that in a multiuser environment response time may be on the order of several minutes, which is not acceptable for real time applications. Some modifications are thus necessary to improve the performance of the expert system. 
     The system SEARCH function searches for faulty elements from a set of tripped breakers. The process of finding faulty elements consists basically of a sequential search in PATTERN-LIST to find fault patterns that are subsets of the set of tripped breakers received as parameters. The `subset` operation tends to be time consuming since each breaker name in a particular fault pattern must be compared with the breaker names in te set of tripped breakers. One solution to speed up the search process is to represent each fault pattern with a unique integer number. This mapping function is referred to as hashing. In this way the `subset` operation deals with numbers instead of strings, resulting in a faster process. Implementation of this function in the present invention will now be described. 
     Each fault pattern is mapped into an integer number containing a number of bits equal to the total number of breakers in the power network. Each bit in this number corressponds to a breaker in BREAKER-LIST. An open breaker in a particular fault pattern is represented with the value &#34;0&#34; in the corresponding bit of the integer number. The bits associated with the breakers that are not in this fault pattern are represented as &#34;1&#34;. The following example illustrates the process. 
     Consider the transmission line (STATION-1 STATION-2 L1) in the hypothetical power network of FIG. 1. According to the table of FIG. 2, this line has the following fault pattern: 
     
         (STATION-1 B-2, STATION-1 B-3, STATION-2 B-1, STATION-2 B-2) 
    
     According to the mapping rules previously defined, the new fault pattern representation is 100111001111, which corresponds to the number -1585 in the two&#39;s complement notation. 
     The fault pattern representation described above is called a binary pattern. In this representation, a fault pattern contains the status of all breakers in the power network, assuming that ony one fault has occurred. FIG. 4 shows the binary pattern produced from faulting of each element in the hypothetical power network of FIG. 1. A set of breaker alarms is hashed in the same way into a binary representation. This pattern is then compared with all binary patterns in the database to find the subsets. The binary representation of a set of alarms is called NEW-PATTERN. 
     A binary pattern is considered a subset of NEW-PATTERN if all bits with value &#34;0&#34; in this pattern have a corresponding bit with value &#34;0&#34; in NEW-PATTERN. As an example, consider the following open breakers: 
     
         (STATION-1 B-1), (STATION-1 B-4), (STATION-2 B-3) and (STATION-2 B-6) 
    
     The binary representation associated with these breakers is: 
     
         NEW-PATTERN =011011110110 
    
     Comparing all the binary patterns shown in FIG. 4 with NEW-PATTERN, one can conclude that the patterns associated with elements (STATION-1 BUS-A) and (STATION-2 BUS-B) are subsets of NEW PATTERN since all bits representing open breakers have a corresponding representation in NEW-PATTERN. Thus, elements (STATION-1 BUS-A) and (STATION-2 BUS-B) are considered as possible faulty elements. 
     This rule for subset testing is easily represented by the boolean function derived from the Karnaugh map shown in FIG. 5. Thus, the pattern matching (or &#34;subset&#34; operation) is done by complementing all bits in NEW-PATTERN, and performing a bitwise OR operation with the binary patterns for all elements in the network. The elements whose binary patterns result in a number containing all bits equal to &#34;1&#34; after the matching process, are considered potential faulty elements. If a potential faulty element is a breaker, additional steps are taken as described above to determine if a stuck breaker situation exists. 
     The process of finding breaker trips with no fault, such as telemetering error, is also possible with this binary representation of fault patterns. Initially, a bitwise AND operation is performed among all binary patterns associated with the potential faulty elements. This resulting pattern, called CUMULATIVE-PATTERN, is then compared with NEW-PATTERN. Those bits in NEW-PATTERN hashing a pattern of open breakers that do not have an equivalent representation in CUMULATIVE-PATTERN represent isolated breakers that tripped with no fault associated with them. As an example, consider the following tripped breakers: 
     
         (STATION-1 B-1), (STATION-1 B-2), (STATION-1 B-4) and (STATION-2 B-6) 
    
     The binary pattern for these breakers is: 
     
         NEW-PATTERN =001011111110 
    
     Comparing this pattern with all binary patterns in FIG. 4, the following potential faulty elements are obtained: 
     
         (STATION-1 BUS-A), (STATION-1 GEN-1) and (STATION-1 B-1) 
    
     Breaker (STATION-1 B-1) cannot be considered as a stuck breaker, however, since it was also reported as an open breaker. Thus the faulty elements are (STATION-1 BUS-A) and (STATION-1 GEN-1). 
     According to FIG. 4, the binary pattern associated with these faulty elelments are 011011111111 and 001111111111, respectively. CUMULATIVE-PATTERN is then represented as: 
     
         CUMULATIVE-PATTERN =(011011111111) AND (001111111111) =001011111111 
    
     Comparing NEW-PATTERN with CUMULATIVE-PATTERN, we can see that its rightmost bit is &#34;0&#34; but its corresponding bit in CUMULATIVE-PATTERN is not. The breaker in BREAKER-LIST corresponding to this bit, (STATION-2 B-6) in this case, is then reported as having tripped with no fault associated with the event. The boolean operation to find these breakers is derived from the Karnaugh map shown in FIG. 6. 
     In the above example, this operation produces: 
     
         f =001011111110 AND 001011111111 =000000000001 
    
     Since the rightmost bit is equal to &#34;1&#34;, the last breaker in BREAKER-LIST, in this case (STATION-1 B-6), must have tripped with no fault associated with it. 
     The above described approach for optimal execution of the present invention cannot be implemented in LOGLISP or LISP, since these languages do not readily support bit manipulation functions. The approach results in optimal execution only if its implemented in a typed language that supports bit operations, such as C or PASCAL. 
     The SEARCH function, described above, analyzes breaker alarms and presents solutions. This function, using the modified pattern representation, can be easily translated into a typed language since it uses standard functions. The only function that uses LOGIC is the TRIP function that finds the elements connected to a particular breaker. 
     To implement the SEARCH function in a typed language, two more lists are generated by the LOGLISP PG,36 implementation of the expert system processor, and stored in its internal database. These lists are BINARY-LIST and TRIP-LIST. 
     BINARY-LIST contains the binary pattern of all the elements in the power network. Each binary pattern is a list of 1&#39;s and 0&#39;s, representing the breaker status for each fault. The first element represents the status of the first breaker in BREAKER-LIST, the second element represents the second breaker, and so on. Three functions are used for hashing the fault patterns in PATTERN-LIST into their binary representation: GENERATE-BINARY, MAP-PATTERN and FIND-INDEX. These functions are shown in the Appendix. 
     TRIP-LIST contains the names of the elements connected to the corresponding breaker in BREAKER-LIST. This list is read during program initialization, and is accessed to identify the names of the elements connected to a particular breaker. In this way, the program does not need to query the database containing the network representation. TRIP-LIST can also be used by the LOGLISP version of the expert system to improve its performance. This list is read during the initialization process of the expert system, and kept in a hash table. The search function then accesses this table instead of the TRIP function to determine which elements connect to a given breaker. The performance of the SEARCH function improves by using a hash table as a fast access data structure, and by replacing the TRIP function interpreted in LOGLISP. 
     As already noted, the internal database of the expert alarm processor consists of a text file containing such lists as STATION-LIST, LINE-LIST, PATTERN-LIST, etc. Although this is a text file, it would be very difficult for a program written in a language other than LISP to use this database. When the database is generated, each of its lists is divided into records of 80 characters. Each record is then stored as one line in a file. To solve this problem, it is necessary to write a program that translates the database generated by the LOGLISP program into a format acceptable to a program written in PASCAL or C. This conversion program, called CONVALEX, is itself written in PASCAL and is set forth in the Appendix. CONVALEX is basically composed by two functions called CONVERT-LIST and CONVERT-PATTERN. The CONVERT-LIST function converts the lists containing names and the CONVERT-PATTERN converts the list containing the binary fault patterns (BINARY-LIST). 
     The rules used by CONVALEX in the conversion of the database are: 
     1. Each element of STATION-LIST in the original database is written in one line of the new database. In the representation of our hypothetical power network, the list 
     
         (STATION-LIST =(STATION-1 STATION-2) 
    
     
         is translated as: 
    
     
         STATION-1 
    
     
         STATION-2 
    
     2. Each element of LINE-LIST in the original database is written in one line of the new database, with parentheses removed. For example: 
     
         LINE-LIST =((STATION-1 STATION-2 L1) (STATION-1 STATION-2 L2)) 
    
     is translated into: 
     
         STATION-1 STATION-2 L1 
    
     
         STATION-1 STATION-2 L2 
    
     3. The previous rule also applies to other lists in 
     the original database, such as BUS-LIST, TB 
     LIST, GEN-LIST, BREAKER-LIST, FAULT-LIST and 
     TRIP-LIST. 
     4. Each element of BINARY-LIST is broken in groups of 1&#39;s and 0&#39;s. The size of a group equals the integer word-length in the computer, which in a preferred implementation is 32 bits, for example for the IBM 3090. Each group of 32 bits is represented as a 32-bit integer number. Each number is written on one line of the new database in its decimal representaiton in 2&#39;s complement. Dummy 1&#39;s are appended to the representation, to make each entry a multiple of 32. 
     As an example, the binary pattern 
     (111100111001) 
     is represented in an 8-bit computer as two 8-bit binary numbers: 11110011 and 10011111. These numbers are stored in the new database as -13 and -97 respectively. 
     In the process of recoding the LOGLISP database, the conversion program uses the parentheses in each list as delimiters to find the number of elements in each list. This information is passed to the optimized version of the function SEARCH by writing it to the file containing its source code. This process is described in more detail below. 
     The translated version of the database for the hypothetical network is presented in the Appendix. Note that a binary pattern for this case is represented by only one integer number, since there are only 18 breakers in the network and a 32-bit machine is assumed. A binary pattern of the real power network that contains approximately 180 breakers is represented by six integer numbers. 
     The modification described herein has focused so far on recoding the LOGLISP database into a format useful to PASCAL. This process is only performed during the database construction, and has little effect on the real time operation of the expert alarm processor. Thus the modification of the SEARCH function will now be described. 
     The compiled version of the function SEARCH is renamed ALEXPAS. The faster execution of ALEXPAS permits the additon of &#34;memory&#34; to the system, allowing for a more accurate analysis and better user interface. In the LOGLISP version the status of the breakers was not considered during the analysis, that is, breakers initially open before the occurrence of the new alarms were not included in the new analysis. In the PASCAL version, the status of the breakers is combined with the new incoming alarms, and the resulting pattern checked against the database. This search relative to prior faults allows the identification of new faults as they occur. 
     The expert alarm processor&#39;s memory of prior conditions requires changes in the format of the input data. ALEXPAS requires as input not only the name of the breaker for which an alarm has been generated, but also the new status (OPEN or CLOSED) of the breaker so that breaker reclosures can be processed. The following example depicts this new format: 
     
         STATION-1 B-1 OPEN 
    
     
         STATION-2 B-3 CLOSE 
    
     ALEXPAS now consists of a set of 11 procedures and functions that are responsible for reading the database, interfacing with the operator and interpreting data. These functions are presented in detail in the Appendix. 
     Initially, when ALEXPAS is first run, it reads the database generated by the conversion program. The database is kept in internal variables equivalent to the lists in the LOGLISP version. Once the database is read, the program waits for data (breaker names and status) from the user. It then analyzes the data and displays the results. The user can see the names of all open breakers at any time, just by entering the command STATUS. 
     The program ALEXPAS is preferably written in such a way that it is completely parametrized, that is, the sizes of the arrays and iterations are defined in terms of constant names at the beginning of the program. In this way, whenever a new database is generated with additional components, fewer parameters in ALEXPAS must be changed. This change in ALEXPAS is necessary to allow the compiler to allocate variables of the correct size. The example below illustrates the process of parametrized definitions of variables, contained in 
     
         ______________________________________ALEXPAS:CONSTn.sub.-- of.sub.-- stations = 2;n.sub.-- of.sub.-- breakers = 12;n.sub.-- of.sub.-- lines = 2;size.sub.-- of.sub.-- string = 30 ;TYPE:element = string (size.sub.-- of.sub.-- string);station.sub.-- list = packed array [1..n.sub.-- of.sub.-- stations] ofelement;line.sub.-- list = packed array [1..n.sub.-- of.sub.-- lines] ofelement:VAR:station: station.sub.-- list;breaker: breaker.sub.-- list;line: line.sub.-- list;______________________________________ 
    
     First, constant definitions like n 13  of 13  stations, n 13  of 13  breakers, etc. are established. Then, variable types are defined. For example, the first variable type, defines variables of type element as a string of size size 13  of 13  string. The second definition says that any variable of type station 13  list is an array of variables of type element. The size of this array is given by the value n 13  of 13  stations. Finally the variable definitions are established. For example, the first one defines `station` as the name of a variable of type `station 13  list`. Using this approach, whenever the size of one of the lists changes, it is necessary only to change the value of the constant associated with the list. 
     Below are set forth the constants that must be updated whenever the database is expanded, and their current values: 
     n 13  of 13  stations=2 
     n 13  of breakers=12 
     n 13  of lines=2 
     n 13  of buses=4 
     n 13  of gens=2 
     n 13  of tbs=2 
     size 13  of 13  trip 13  list=24 
     To simplify the process of updating the constants, the program CONVALEX automatically writes in the file containing the source code of ALEXPAS the new values of constants from the lists in the new database. The process of updating SEARCHPAS becomes completely transparent to the user and eliminates mistakes. Once the source code is altered it is automatically compiled to generate a new executable version of ALEXPAS. 
     To summarize, several modifications to the expert system have been described that significantly improve the performance of the LOGLISP implementation of the expert alarm processor. The LOGLISP version&#39;s remaining use is to generate the database for the PASCAL implementation. During this process, a new version of the expert system is automatically generated to allocate the memory required by the expert system. This process is completely transparent to the user. 
     As another enhancement, the expert system preferably processes instantaneous alarm signals through a sliding window in the time domain. At a selected window length (e.g., 6 seconds in a near real time application) the status of the power network is recorded in a database. Alarms in successive windows are combined into a superset which is processed according to the method described above. Thus, any incomplete alarm patterns in one window will be complete in the superset formed from successive alarm sets, for example, through the opening of additional breakers. The present window continually slides in time and the process is repeated for the new window and its previous window. The validity of processing results is not affected by the length of the window because the status of the network at every window of time is saved. 
     Although specific embodiments of the present invention have been illustrated in the accompanying drawings and described in the foregoing detailed description, it will be understood that the invention is not limited to the particular embodiments described herein, but is capable of numerous rearrangements, modifications, and substitutions without departing from the scope of the invention. The following claims are intended to encompass all such modifications. ##SPC1##