PROGRAMMING LANGUAGE STRUCTURES FOR USE IN A NETWORK FOR COMMUNICATING, SENSING AND CONTROLLING INFORMATION

Abstract: An improved programming interface (501, 502, 503, 504, 505, 506) which provides for event scheduling improved variable declarations allowing for configuration of declaration parameters (1101, 1102, 1103, 1104) and improved handling of I/O objects (1201, 1202, 1203, 1204, 1205). Known computing devices allow for event scheduling based on the occurrence of a predefined event. However, such a system presents shortfalls in that flexibility is not provided to allow scheduling based on any arbitrary condition. Programs which run on such computing devices typically declare one or more variables; such variables having one or more parameters associated therewith. The present invention provides flexibility in allowing the states of the parameters to be changed, for example at the time a network implementing the computing device is configured. Additionally, it is disclosed to have improved declaration and control of I/O devices (115, 116, 117, 131, 132) providing for ease of use anf flexibility.

Description: PROGRAMMING LANGUAGE STRUCTURES FOR USE IN A NETWORK FOR COMMUNICATING, SENSING AND CONTROLLING INFORMATION BACKGROUNDOFTHEIMYENTTON 1. FIELDOFTHEINVENΗON The present invention relates to the field of systems for distributed computing, communication and control and, more specifically, communication of information between devices in a distributed computing environment 2. DESCRIPTIONOFTHERELATEDART In distributed computer systems it is necessary to provide for communication of information between nodes in the system. A number of methods for providing such communication are known in the an. These methods include message passing techniques in which messages are passed, over a medium, from one node to another in a network. In message passing techniques, messages are built by a sender node and sent to one or more receiver nodes. The message is then parsed by the receiver node in order to correctly interpret the data. Message passing allows the advantage of passing large amounts of data in an expected format. Of course, over time the format of the message may be required to change to support new applications or features. This typically leads to compatibility issues between nodes on the network. A second technique involves remote procedure calls in which a first node, requiring data which exists on a second node, calls a procedure executing on the second node where the data exists and requests the procedure to manipulate the data and provide a result to the first node. Remote procedure calls are typically suited to passing small amounts of data; however, a separate procedure call is typically required for each interchange. Therefore, it is likely in any networking system that over time additional procedure calls will be required in the network as new functions are carried out by the network. The addition of new procedure calls to certain nodes of the network leads to incompatibility between nodes, because the existing nodes do not know of and cannot execute the new remote procedure calls. A third technique for communication of data in a network involves data sharing. Bal, Henri E., Steiner, Jennifer G., and Tanenbaum, Andrew S., Programming Languages for Distributed Computing Systems. ACM Computing Surveys, Vol.21, No. 3, September, 1989, pp.261-322 (hereinafter Bal et al describes certain data sharing techniques. A discussion of data sharing may be found in the Bal et al. article at pages 280, et seq. ( It should also be noted that a discussion of messaging may be found in the Bal et al. article at pages 276, et seq. along with a general overview of interprocess communication and synchronization.) Bal et al. describes how parts of a distributed program can communicate and synchronize through use of shared data. Bal et al. states that, if two processes have access to the same variable, communication can take place by one processor setting the variable and the other processor reading the variable. This communication is described as being allowed to take place whether the two processors are both running on a host where the shared data is stored and thus can manipulate the shared data directly, or if the processes are running on different hosts and access to the shared data is accomplished by sending a message to the host on which the shared data resides. Two types of shared data are described: (1) shared logical variables; and (2) distributed data structures. Briefly, shared logical variables are described as facilitating a 1 communication channel between processes through a "single-assignment" property. 2 Initially, a shared logical variable is unbound, but once a value is assigned to the variable 3 the variable is considered to be bound. An example is provided in which the three goals of 4 conjunction: 5 goal_l (X, Y), goal_2 (X, Y), and goal_3 (X) 6 are assumed and solved in parallel by processes PI, P2 and P3. The variable X is 7 initially unbound and represents a communication channel between the three processes. If 8 any of the processes binds X to a value, the other processes can use this value. Likewise, 9 Y is a channel between PI and P2. Processes synchronize by suspending on unbound I 0 variables. For example, if Y is to be used to communicate information from PI to P2, then I I P2 may suspend until Y is bound by PI. 1 2 It should be emphasized that in the described concept of shared logical variables, 1 3 the term binding is used to describe a process of assigning a value to a variable. As will be 1 4 seen below, the term binding is also used to describe the present invention, however, the 1 5 meaning of the term is significantly different and the reader is cautioned to avoid confusion 1 6 between the concepts represented by these two uses of this term. Generally, in the present 1 7 invention, the term binding is used to indicate a process of associating a variable of one 1 8 node with a variable of at least one other node. It is not necessary that the variable of either 1 9 node has yet been assigned a data value. 20 Distributed data structures are data structures which may be manipulated 2 1 simultaneously by several processes. In concept, all processes share one global memory 22 termed "tuple space" or TS. The elements of TS arc ordered sequences of values, similar 23 to records in a language such as Pascal. Three operations may take place on TS: (1) OUT" adds a tuple to TS; (2) "READ" reads a tuple from TS; and (3) "IN" reads a tuple from TS and deletes it from TS. Thus, in order to change the value of a tuple in TS it is necessary to first perform an IN operation, then to manipulate the data, and then perform an OUT operation. The requirement that a tuple must first be removed by the IN operation makes it possible to build distributed systems without conflict between accesses by the various processes. Bal et al. contrasts distributed data structures with interprocess communication techniques noting that communication accomplished by distributed data structures is anonymous. A process reading a tuple from TS does not know or care which other process inserted the tuple. Further, a process executing an OUT does not s røcify which process the tuple is intended to be read by. Bal et al. states that in concept distributed data structures utilizing the tuple space implement conceptually a shared memory, although in implementation a physical shared memory is not required. However, as can be seen, in a system utilizing such distributed data structures a single copy of the data is stored in tuple space whether or not such tuple .space is implemented as a single physical shared memory. Separate copies of the data are not maintained for the various processes or on the various hosts. In fact, maintaining separate copies would lead to data conflict possibilities as the various nodes attempted to coordinate updates of the variable between the various process and hosts. Thus, the reason for requiring use of the IN command to delete a tuple before allowing manipulation of the data represented by the tuple. The present invention discloses a networked communication system which is perhaps closest in certain concepts to the described distributed data structures. However, it can, of course, be appreciated that certain advantages may be gained from development of a system which utilizes certain features of distributed data structures while retaining flexibility in allowing multiple copies of a data value to be stored on the various nodes. The present invention discloses certain improved programming language and data structure support for communication, sensing and control as may be used by nodes of the present invention. It is known in the art to allow for scheduling of tasks through use of a programming statement such as a "when" clause or the like. However, in known systems such tasks may only be scheduled to be executed on the occurrence of a predefined event such as may be defined by the compiler writer. Examples of such events typically include expiration of a timer or input pin state changes. Such known systems do not allow for definitions of events, other than such predefined events. It has been discovered that it is useful to provide for definition of events as any valid programming language statement which may be evaluated to a true or false condition. Of course, any number of known systems allow for declaration of variables and when declaring such variables certain parameters may be specified which may be set to a state indicative of a desired characteristic of the variable. For example, a variable may be declared as input or output, as a given variable type (e.g., boolean, numeric, etc.). However, once declared such characteristics are static and may only be changed by changing the source program which declares the variables. It has been discovered that it would be useful to provide for a system in which the state of at least certain parameters may be changed during system configuration allowing for greater flexibility in optimizing the s stem of the preferred embodiment 1 Finally, in known systems it is necessary to call certain I/O library procedures to 2 declare and use I/O devices. Such calls to I/O procedures may be quite complex and ' 3 require significant skill on the part of the programmer to properly code and utilize the 4 routines. The present invention discloses a system having improved methods for 5 declaration and use of I O devices. 6 7 OBJECTS OF THE PRESENT INVENTION 8 It is a primary object of the present invention to provide for improved 9 communication of information between nodes of a distributed network. 0 It is more specifically an object of the present invention to provide for improved 1 communication of information in a highly distributed computer system in which a problem 2 may be broken down into small units in which each node accomplishes a small part of the 3 entire application. Li such a system, data communication may be typically accomplished in 4 relatively small units of dat — however, significant communication of data between nodes 5 of the network is required. 6 It is further an object of the present invention to provide for improved 7 communication of information in a distributed computing system by allowing for standard 8 communication techniques between nodes. 9 It is still further an object of the present invention to provide for improved 0 communication of information by providing certain facilities, structures and tools for such 1 communication. 1 It is also an object of the present invention to provide improved data structures and 2 programming language support for communication and other aspects of the present 3 invention. 4 As one aspect of providing such improved data structures and programming 5 language support, it is one aspect of the present invention to provide for declaration of 6 variables having configurable parameters leading to improved ability to maintain and 7 optimize networks of the present invention. 8 As another aspect of providing such improved data structures and programming 9 language support, it is desired to provide for increased ease in declaring and I 0 communicating with I O devices of the present invention. I I As still another aspect of providing such improved data structures and programming 1 2 language support, it is desired to provide for improved scheduling functions allowing for 1 3 use of programmCT-defined or predefined events in scheduling of tasks to be executed. 1 4 It is also an object of the present invention to provide simplified installation and 1 5 network maintenance. Such an objective may be accomplished by storing in each node the 1 6 node's application interface such that nodes may identify themselves and their application 1 7 requirements to a network management node at installation time and when it is necessary to 1 8 recover the complete network database. 1 9 To accomplish such a simplified installation and maintenance objective, it is a 0 further objective of the present invention to define an interface file format which may 1 efficiently store and allow retrieval of such identification and application requirement 2 information. These and other objects of the present invention will be better understood with reference to the Detailed Description of the Preferred Embodiment, the accompanying drawings, and the claims. SUMM.ARY OF THE TN F. mON A network for communicating information having at least a first and second node is described in which each node includes data storage for storing data representing a variable V and further includes a processor coupled with the data storage. In the case of the first node, the processor may manipulate and write to new values to the variable V. After having updated the variable V with a new value, the processor then assembles and communicates a packet for transmission on the network. The packet includes the new data value for the variable V. The second node then receives the packet and stores the new value for the variable V in its data storage. In particular, during programming of the first node, it is declared as a writer of the variable V and likewise during programming of the second node, it is declared as a reader of the variable V. During configuration of the network, a communication connection between the first node and the second node is defined and during later communication of message packets, addressing of message packets between the various nodes is accomplished through use of address tables based on the definition of such connections. Further, it is disclosed to utilize a standardized set of variable types in accomplishing such communication. Use of a standardized set of variable types leads to increased compatibility between nodes of different manufacture as well as increased ease in configuring networks. Finally, certain extensions are provided to standard programming languages to provide for increased ease of use of the data communication features of the present invention. These and other aspects of the present invention will be apparent to one of ordinary sWM in the art with further reference to the below Detailed Description of the Preferred Embodiment and the accompanying drawings. BRIEF DESCRIPTION OF THE DRAWINGS Figure 1 is a logical view of a configuration of devices as may be networked using methods and apparatus of the present invention. Hgure 2 is a diagram illustrating an embodiment of the network of Figure 1 as may be accomplished by the present invention. Rgure 3(a) is a diagram illustrating a second embodiment of the network of Rgure 1 as may be accomplished by the present invention. Rgure 3(b) is a second diagram illustrating the second embodiment of Figure 3(a) and including a logical view of certain connections of nodes of the network. Rgure 4 is an overall block diagram of a single node of the present invention coupled with a communication medium. Rgure 5 is an overall flow diagram illustrating a method of programming and configuring a network as may be accomplished by the present invention. Rgure 6 is a flow diagram illustrating a method for defining hardware requirements of a rode as may be utilized by the present invention. 1 Rgure 7 is a flow diagram illustrating a method for defining network and logical 2 parameters of a node as may be utilized by the present invention. 3 4 Rgure 8(a) is a flow diagram illustrating a method for defining connections among 5 network variables as may be utilized by the present invention. 6 7 Rgure 8(b) is a flow diagram illustrating a method for binding network variables as 8 may be utilized by the present invention. 9 I 0 Rgure 9 is an illustration of certain data structures which may be utilized by the I I present invention. 1 2 1 3 Rgure 10 is a flow diagram illustrating a method of configuring a network using 1 4 standard network variable types, as may be utilized by the present invention. 1 5 6 Rgure 11 is a flow diagram illustrating a method of declaring and configuring a 7 network variable as may be used by the present invention. 8 9 Rgure 12 is a flow diagram illustrating a method of declaring and accessing I O 0 devices as may be utilized by the present invention. For ease of reference, it might be pointed out that reference numerals in all of the accompanying drawings typically are in the form "drawing number" followed by two digits, xx; for example, reference numerals on Figure 1 may be numbered lxx; on Figure 9, reference numerals may be numbered 9xx. In certain cases, a reference numeral may be introduced on one drawing, e.g., reference numeral 201 illustrating a communication medium, and the same reference numeral may be utilized on other drawings to refer to the same item. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT An improved computer network including facility for communication of information between nodes in the network is described. In the following description, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It will be obvious, however, to one skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known circuits, structures and techniques have not been shown in detail in order not to unnecessarily obscure the present invention. OVE VIEW OF THE NETWORK OF THE PRESENT INVENTION The network of the preferred embodiment is of the type which provides for sensing, control and communication. The network of the present invention and nodes utilized within the network of the present invention are described in greater detail with reference to United States Patent No.4.918.690 Markkula et al. titled "Network and intelligent cell for providing sensing, bi-directional communications and control", which patent is assigned to the assignee of the present invention (referred to herein as the '690 patent). In an exemplary network, the network of the present invention may provide for sensing of current environmental factors and control of apparatus affecting the environmental factors. Further, the network may allow for communication of information packets providing information on the environmental factors between nodes in the network. The present application will utilize, as an example, a network for control of fans based on sensing and communicating information regarding temperature in different zones in a controlled environment It might be worthwhile noting that in an expected scenario, various manufacturers will include a node of the type defined by the present invention in their products. For example, a thermostat manufacturer may include such a node in its thermostats. A fan manufacturer may include such a node in its fans. The various nodes may be programmed for specific applications by their respective manufacturers and, when configured in an environmental control system, are useful for communication, sensing and control between various components of the system. A node of the preferred embodiment is illustrated in block diagram form with reference to Rgure 4. Such nodes may be programmed, for example, using the "C" computer programming language. As one aspect of the present invention, certain extensions have been provided to the "C" language to facilitate network communications. As a further and important aspect of the present invention, network variables are described which provide for communication of information between nodes of the network. A network variable may be thought of as a data object shared by multiple nodes where some nodes are "readers" and some nodes are "writers" of the object This will be discussed in greater detail below. A network as mav be implemented utilizing the present invention Referring now to Rgure 1 , a logical view of a network as may utilize the present invention is shown. The network may, for example, include three separate temperature sensors 115-117 located in three separate zones of a building for sensing and communicating temperature information. The network may further include two control cells 101 and 121 coupled to receive temperature information from the sensors 115-117 and to control two fans 131-132 (by turning the fans 131-132 on and oft). In the exemplary netwo±, network variable temp_out 151 is coupled to a first network variable temperature input 102 of control cell 101. Netwo± variable temp_out 152 is coupled with a second network variable temperature input 104 of control cell 101. In the illustrated embodiment a third network variable temperature input 103 is not utilized. On/Off control netwo± variable 105 of control cell 101 is coupled to control an input network variable, On/Off, of a fan 131. Thus, in this embodiment sensing a temperature above a given level in the zone of the building sensed by temperature sensor 115 or by temperature sensor 116 will cause fan 131 to be turned on. Likewise, when the temperature in these zones is again lowered below a given level, the fan 131 may be turned off. Netwo± variable temp_out 152 is also coupled to a first temperature input network variable 122 of control cell 121. In addition, network variable temp_out 153 is coupled to a second temperature input netwo± variable 123 of control cell 121. A third temperature input 124 of control cell 121 is not utilized in this embodiment Control cell 121 is coupled through an On/Off control output netwo± variable 125 to control fan 132. Thus, sensing a temperature above a given level in the zone of the building sensed by temperature sensor 116 or by temperature sensor 117 will cause fan 132 to be turned on. Likewise, when the temperature in these zones is again lowered below a given level, the fan 132 may be turned off. As is appreciated, in the described configuration, when temperature sensor 116 detects a high temperature, both fan 131 and fan 132 are turned on. 1 Rgure 1 has been labeled to illustrate logical connections between the various 2 components. Connection 141 is illustrated as the connection between temperature sensor 3 115 and control cell 101. Connection 142 is illustrated as the connection including 4 temperature sensor 116, control cell 101 and control cell 121. Connection 143 is illustrated 5 as the connection between control cell 101 and fan 131. Connection 1-44 is illustrated as 6 the connection between sensor 117 and control cell 121. Connection 145 is illustrated as 7 die connection between control cell 121 and fan 132. The connection of netwo± variables 8 will be discussed in greater detail below. However, it may now be useful to introduce 9 three new terms: netwo± variables, readers, and writers. In addition, general definitions I 0 for certain other terms used in this specification may be found with reference to Table XV. I I As one important aspect of the present invention, the present invention provides for 1 2 allocation and use of netwo± variables by processes running on nodes in a network. As 1 3 stated above, netwo± variables may be thought of as a data object shared by multiple 1 4 nodes where some nodes are "readers" of the object and other nodes are "writers" of the 1 5 object Additionally, a node may be both a reader and a writer with "turnaround". Writing 1 6 with turnaround is discussed in greater detail below. Although the data object may be 1 7 thought of as being shared by multiple nodes, as will be understood from the discussion 1 8 below, the netwo± variable of the preferred embodiment is not stored in shared memory 1 9 but rather separate memory is provided in each of the multiple nodes to store a copy of the 20 data object A writer node may modify the value of the data object and all reader nodes of 2 1 that network variable have their memories updated to reflect the change. Thus, for 22 example, each of the temperature sensors 115-117 may run a process which declares a data 23 object as follows: netwo± output boolean temp iigh. Each of the controller cells 101 and 121 may declare data objects as follows: netwo± input boolean temp_high network output boolean fan_on. Each of the fans 131-132 may declare a data object as follows: network input boolean fan_on. The complete syntax for declaration of netwo± variables in the system of the preferred embodiment is given in Table VOL The keyword "netwo±" indicates the data object is a netwo± variable. A netwo± variable declared as output will result in transmission of the new value of the netwo± variable on the netwo± when the program stores the variable — thus, nodes having declared an output netwo± variable are considered writer nodes for that variable. For example, each time a process running on temperature sensor 115 stores the variable tempjiigh, a netwo± message is generated communicating the new value of tempjiigh. The message is communicated to all reader nodes connected in connection_l 141, i.e., to control cell 101. In the case of temperature sensor 116 changing the value of its tempjiigh variable, a message is generated and transmitted to all nodes connected in connection_2 142, Le., to both control cell 101 and to control cell 121. The process for configuring connections as disclosed by the present invention will be discussed in greater detail below. Although the preferred embodiment declares nodes as either writers or readers of netwo± variables, it should be noted that in an alternative embodiment a node may be declared as a both a reader and writer of a particular variable. Such an embodiment may be envisioned without departure from the spirit and scope of the present invention. IS It might be that the present invention in its preferred embodiment allows an output netwo± variable to be initialized using an initialization command without causing a message to be transmitted on the netwo±. Using this command, a node may be initially configured or reset without affecting other nodes on the network. Network variables declared as input may change values asynchronously with program execution — this declaration is used for "reader" nodes. In the preferred embodiment input netwo± variables may also change values at program initialization or at other points under program control; however, the changed value will not be transmitted on the network. At anytime, a reader node may force an update of its input netwo± variables utilizing a polling function of the present invention. When this function is called, the specified network variables are updated by requesting over the netwo± the current value from the writer node or nodes. This facility may be useful, for example, after a node reset to allow the node to determine the current value of netwo± variables without need to wait until the next time the writer nodes update the value of those variables. Thus, temperature sensors 115-117 are writer nodes of the variable tempjiigh. Control cells 101 and 121 are reader nodes of the variable tempjiigh and also are writer nodes of the variable fan_on. Fans 131-132 are reader nodes of the variable fan_on. Of course, many other applications and configurations are within the scope of the teachings of the present invention and the netwo± described with reference to Rgure 1 is merely exemplary. It should be noted that multiple readers and multiple writers may be provided within a single connection without departure from the spirit and scope of the present invention. Multiple readers are illustrated with reference to connection_2 142 Multiple writers have not been illustrated by Figure 1. However, variation in which multiple writers are employed will be readily apparent to one of ordinary skill in the art Turning to Rgure 2, an embodiment of the netwo± of Rgure 1 is illustrated in which each of cell 101, cell 121, temperature sensor 115, temperature sensor 116, temperature sensor 117, fan 131 and fan 132 are each coupled to communicate over common communication medium 201. The communication medium 201 may be, for example, twisted pair wiring, radio frequency, power lines, or other communication channels or multiple physical channels connected together with bridges and/or routers. In this embodiment and in order to accomplish the connections illustrated by Rgure 1, temperature sensor 115 must be configured to address and communicate with cell 101; temperature sensor 116 must be configured to address and communicate with cell 101 and cell 121; temperature senses" 117 must be configured to address and communicate with cell 121; control cell 101 must be configured to address and communicate with fan 131; and control cell 121 must be configured to address and communicate with fan 132. Of course, providing for such addressing may be and typically is a significant task. It is appreciated that each of control cells 101 and 121, temperature sensors 115-117 and fans 131-132 may be engineered, programmed and/or manufactured by different sources. Further, although the exemplary network is, in itself, complicated having 5 separate connections, 141-145, it can of course be imagined that other networks may be substantially more complicated having even hundreds or more connections. Therefore, the present invention implements methods and apparatus which allow for straightforward and efficient configurati m of nodes in a network. Turning now to Figure 3(a), a modified embodiment of the configuration of Rgure 2 is illustrated. In this embodiment controller cells 101 and 121 have been removed from the configuration and each of temperature sensors 115-117 and fans 131-132 are illustrated as comprising nodes 301-305, respectively. These nodes are preferably of the type which are capable of sensing, communicating and controlling as have been described in the '690 patent and which are shown in greater detail with reference to Figure 4. Thus, these nodes 301-305 are capable of replacing certain control functions of the control cells 101 and 121, eliminating the need for separate control cells in the described embodiment In the embodiment of Rgure 3(a), and in order to accomplish the logical connections illustrated by Rgure 1, node 301 must be configured to communicate with node 304; node 302 must be configured to communicate with nodes 304 and 305; and node 303 must be configured to communicate with node 305. Again it is important to note that the temperature sensors 115-117 and fans 131-132 may be manufactured by different sources. It is preferable that the manufacturing sources are not required to have prior knowledge as to what devices their products will communicate with in a network. Thus, the manufacturer of temperature sensor 115 is preferably not required to be aware, during programming and manufacture of temperature sensor 115, whether temperature sensor 115 will be configured in a network to communicate with a controller cell, such as controller cell 101 (as shown in figure 2), or to communicate directly with a fan, such as fan 131 (as shown in Figure 3(a)), or even with some other device (perhaps a heater, air conditioner, fire extinguishing equipment etc.). Likewise, it is preferable that the manufacturer of fans 131-132 are similarly allowed to manufacture devices without requirement of prior knowledge as to the eventual uses of those devices in a network. 1 Li order to allow for such flexibility in configuring networks and to allow for 2 efficient communication between nodes in a network, the present invention provides 3 netwo± variables which may be used to facilitate standards of communication between 4 nodes in the network. 5 Table I illustrates a temperature sensor control program as may be used to program 6 nodes 301-303 coupled with temperature sensors 115-117. As can be seen, the program of 7 Table I is written to communicate onto the medium 201 a netwo± variable indicative of the 8 state of temp Jn. The value of this variable may be, for example, used by a control 9 program running on a control cell, such as control cell 101 or 121, or used directly by a I 0 control program running on a fan, such as fans 131-132. I I Table E illustrates a fan control program which may be used for controlling a fan 1 2 such as fans 131-132 by turning the fan on and off responsive to receiving changes in state 1 3 of a netwo± variable on_ofif. As can be seen, the program of Table II is written to allow 1 4 receiving from the medium 201 the network variable on_ofT as a binary netwo± variable 1 5 regardless of the source (e.g., whether from a control cell such as control cell 101 or 121, 1 6 or directly from a temperature sensor, such as temperature sensor 115-117). 7 Table HI illustrates a binding set which connects temperature sensors 115-117 with 8 fans 131-132 as illustrated by Rgure 3(a). Figure 3(b) is provided to further an 9 understanding of the binding set As can be seen, the binding set provides for three 0 connections illustrated as templ_controls 321, temp2_controls 322, and temp3_controls 1 323 of Rgure 3(b). The connection templjcontrols connects the output variable 2 tempjiigh of temperature sensor 115 with the input variable fan_on of fan 131. The 3 connection temp2_controls connects the output variable tempjiigh of temperature sensor 116 with the input variable fan_on of both fan_l 131 and fan_2 132. Finally, the connection temp3_controls connects the output variable tempjiigh of temperature sensor 117 with the input variable fan_on of fan_2 132. It should be noted that although tables I, π and m illustrate programs which are useful for illustrative concepts of the present invention, an attempt has not been made to ensure these programs are syntactically correct Rather, these programs are provided for the exemplary teaching of concepts of the present invention. It is understood from an examination of the programs of tables I and II that the program of Table I may write the variable tempjiigh without regard to the eventual recipient of the variable and likewise the program of Table II may read the variable fan_on without regard to the writer node of the variable. Thus, these programs wo± equally well in a netwo± such as illustrated by Hgure 2 including separate control cells 101 and 121 or in a netwo± such as illustrated by Hgure 3(a) which does not include such control cells. The binding set illustrated by Table HI determines the relationship between the various nodes of the network. Table IV illustrates a binding set which may be used to establish connections in a network such as illustrated by Figure 2. A node of the present invention Rgure 4 illustrates a block diagram of a node such as nodes 301-305 as may be utilized by the present invention. The node 421 is coupled in communication with medium 201 through control 411, clock and timer circuitry 412, and communication port -408. In addition, the node provides a general purpose I port 407 allowing for communication with various external devices. The node further comprises three separate processors 404-406, a read only memory (ROM) 403, a random access memory 402, and an EEPROM -401. The processors 40-4-406 are useful for executing programs such as the programs illustrated in Tables I and II, as well as other communication, control and operating programs. The ROM 403 may be useful for storing such programs. As will be seen, the EEPROM 401 may be useful for storing certain data values which, although configurable, are not subject to frequent changes in value. Each of the processors 404-406, ROM 403, RAM 402, EEPROM 401, control 411, clock 412, I/O port 407, and communication port 408 are coupled in communication through internal address bus 410, internal data bus 420 and timing and control lines 430. PROGRAMMING AND CONFIGURING A NETWORK OF THE PRESENT INVENTION Turning now to Figure 5, steps for programming and configuring a netwo± of the present invention are illustrated. It should be noted that steps illustrated by Rgure 5 are implemented in a development system which allows for development and management of networks such as may be implemented by the present invention. However, certain of these steps may also take place outside of the development environment (e.g., connection of network variables and binding). The development system is an integrated hardware and software environm«2nt that operates in conjunction with a host computer, an IBM PC/AT compatible in the currently preferred embodiment allowing a manufacturer or other party to design and build components compatible for communication with a network of the present invention. The development system includes an IBM PC AT-compatible computer having an interface adapter card for coupling with a control processor located in a separate card cage. In addition to the control processor, the card cage may hold other cards designed to emulate routing functions in a netwo± and transceiver evaluation boards allowing evaluation of the physical interface with various media, e.g., twisted pair, power line, or radio frequency. Initially certain hardware parameters are defined for each node in the network, block 501. This step includes naming or otherwise identifying the node, block 601. A node type is specified, block 602 In the development environment the node type may be specified as the control processor, an emulator board, or a custom node type. The location of the node is then specified — the location specifies whether or not the node resides in a card cage and, if the node resides in a card cage, the card cage number and slot number, block 603. Next the channel to which the node is connected is specified, block 604, and the channel's priority is specified, block 605. If the node has been assigned the priority privilege, then the node's priority is set at this time, finally, certain hardware properties may be specified, block 605. Hardware properties may include model numbers for the node, clock rates, operating system revision levels, ROM size, RAM size, EEPROM size, RAM start address, and EEPROM start address. Finally, the hardware definitions are downloaded to the node, block 606. Next netwo± and certain logical parameters are specified for each node, block 502. Currently, this step involves specifying a node name, block 701, and then specifying a program file, block 702, and hardware device name, block 703 associated with the node. Hardware names were specified above in step 601. Program files will be discussed in greater detail below in connection with block 503. The definition of the node is then saved, block 704. The development environment provides an editor for developing and editing program code, block 503, such as the code illustrated in tables I and π. The preferred 1 embodiment allows programming in the "C" language and, further, provides certain 2 extensions to the "C" language which will be discussed in greater detail below. After 3 developing program code, the programs are compiled, linked and loaded as executable 4 programs, block 504, onto the nodes specified in definition of netwo± and logical 5 parameters, block 502. 6 Connections are then specified for the netwo±, block 505. This step is better 7 illustrated with reference to Rgure 8(a). Initially, a connection name is entered (for 8 example, the connection names specified in the binder script of Table HI are 9 templ_controls, temp2_controls and temp3_controls), block 801. In the preferred I 0 embodiment the connection name is entered as a unique name having from one to 16 I I characters consisting of letters, numbers and underscores; no spaces are allowed. 1 2 Next a node name is selected, block 802. In the preferred embodiment a list of 1 3 defined nodes (Le., nodes which have been previously defined as described in connection 1 4 with block 502) is displayed and a valid node name may be selected from the displayed list 1 5 For example, the node temp_sensor_l may be selected. After selecting a node name, block 1 6 802, a netwo± variable name is selected, block 803. Again, a list of netwo± variable 1 7 names for the selected node are preferably displayed and a netwo± variable name is 8 selected from the displayed list For example, the netwo± variable tempjiigh may be 9 selected. 0 After completing this process for a first node, a second node may be selected, block 1 804. Again, a node list is preferably displayed and the second node is selected from the 2 displayed node list For example, the node fan_l may be selected. A netwo± variable associated with the second node is then selected, block 805, again preferably from a displayed list Continuing the example, the selected netwo± variable may be fan_on. finally, certain parameters may be set block 806. In the preferred embodiment settable parameters include the retry count set to the maximum number of times the message will be sent, the retry timer for acknowledged services, and the repeat timer for unacknowledged repeated messages. This aspect of the present invention will be discussed in greater detail below. The connection is then added to a connection list using an add function, block 807. It is noted that if additional nodes are to be connected in the connection, they are specified in a similar manner to the first and second nodes after having specified the first and second nodes. An example of such a connection is illustrated in Table in as temp2_controls which includes three nodes: temp_sensor_2, fan J and fan_2. The process of Figure 8(a) is repeated for each desired connection. In the case of the binding set of Table HI, the process is repeated three times: (1) once for the connection named templ_controls; (2) once for the connection named temp2_controls; and (3) once for the connection named temp3_controls. In the case of the binding set of Table IV, the process is repeated five times, once for each of connection_l , connection_2, connection_3, connection_4, and connection_5. In the preferred embodiment the output of the connection process is a binary script file that provides commands to drive the subsequent binding process. In order to provide a textual version of what this binary file looks like, Table III and Table IV have been provided. It is also within the power of one of ordinary skill in the art to develop a graphical user interface for drawing the connections between iconic representations of the nodes and creating a binder script based on such drawings. Finally, the netwo± variables are bound, block 506, to their respective nodes in order to allow communication within the connections defined during execution of the steps of Figure 8(a). The preferred method of binding netwo± variables is described in greater detail with reference to Figure 8(b). Initially, the list of connections developed during execution of the steps of Figure 8(a) is read, block 821. Then, certain type checking and message constraint checking is performed for each connection, block 822. The type and message constraint checking includes the following checks: (1) Ensure that there are at least two members in each connection; (2) Ensure that there is at least one output member and one input member for each connection; (3) In the preferred embodiment no more than one input and one output netwo± variable from the same node may appear in the same connection; (4) A warning is given if polled output variables are not attached to at least one polled input; (5) An estimate for message rates may be declared for netwo± variables; a warning is given if the estimated message rates do not match for all members of a connection; (6) Netwo± variables may be synchronized or non-synchronized — a warning message is provided if synchronized variables are bound to non-synchronized variables; (7) Network variables may be sent as authenticated — a warning is provided if some, but not all, members of a connection are declared as authenticated; and (8) Variable types are checked fϊeld-by-field for size and sign type matching and for type definition matching. The currently preferred list of type definitions are provided in Table V. After completing type and message rate constraint checking, the addressing mode for the network variable is determined, block 824. If there is only one destination (e.g., templ_controls), subnet-node addressing is used using the subnetnode structure given below to create an entry in address table 901. Address table 901 will be discussed in greater detail below. The address entered in the address table 901 is the address of the destination node (e.g., in the case of templ_controls, the address of fan_l is entered in the address table of temp_sensor_l ; conversely, the address of temp_sensor_l is entered in the address table of fan J to allow for such functions as polling of the current status of the network variable). The address table index entry 912 is set to correspond to the location in the address table 901 corresponding with the address entered in the address table 901. For example, in the case of the bind set of Table Ul, if the address of FAN is entered as a netwo± address 913 in the address table 901 at entry 001, the address table index entry 912 of the netwo± variable table 903 corresponding to the netwo± variable id assigned to the connection templjcontrols is written with the address 001. In this way, whenever messages are sent on the netwo± by temp_sensor_l indicating the value of tempjiigh has 1 been updated, the address table index is used to lookup the address of the destination node 2 of such a message. A message is then sent, addressed to the destination node, including 3 the netwo± variable id and the new value. The destination node then receives the message 4 and is able to update the value of its corresponding netwo± variable "f anjon". 5 If there is more than one destination node (e.g., temp2_controls), group addressing 6 is used using the above group address structure to create an entry in the address table 901. 7 Li the case of group addressing, a set of sender and destinations for the network variable is 8 constructed. For example, in the case of the connection temp2_controls, the set of sender 9 and destinations includes temp_sensor_2, fan_l and fan_2. I 0 Other optimization steps are also provided by the binder of the preferred I I embodiment and are described in further detail below. 12 After determining an addressing mode, for each unique set of sender and 1 3 destinations (unique without respect to which nodes are senders and which nodes are 14 receivers), a group address is assigned to the set block 825. The group address is 1 5 propagated to the address table of each of the nodes in the set and stored in their respective 6 address tables 901. The address table index value 912 for the entry corresponding to the 7 group address is updated to index the address table 901 at the new entry. For example, 8 groupl is defined to include temp_sensσr_2, fan_l and fan_2 and the group address is 9 stored at entry 002 of the address table 901. Then, the address table index 912 for each of 0 the three nodes temp_sensor_2, fan_l and fan_2 is updated to point to the new address 1 table entry. 2 For group address table entries, as described above, only the output netwo± 3 variable nodes actually set their netwo± variable table entries to index the address table. The nodes with input network variables will not index the address table. This allows the same netwo± variable to reside in several netwo± variable connections, and many netwo± variable groups. When an incoming message arrives for one of these input network variables, the correct netwo± variable table entry is found using the network variable ID (the software matches the netwo± variable ID in the message to one in the table). This "intersecting connection" ability makes the network variable concept more powerful by allowing the same variable to be updated by several groups, thus reducing both the overall netwo± traffic and reducing netwo± variable table space by sharing the same table entry among several connections. Finally, a single network variable identification number (netvarJD) is assigned to each netwo± variable in the connection, block 823. This may be better understood with reference to Rgure 9 which illustrates a netwo± variable table 902 having a netwo± variable identification field 911 and an address table index field 912. Further, an address table 901 is illustrated having a network address field 913. It should be noted that these tables preferably reside in each individual node's EEPROM 401 and have additional fields in the preferred embodiment However, for simplicity only the above-mentioned fields are illustrated in Figure 9. The netwo± variable table is preferably of a structure as follows: struct nv_table { unsigned priority: 1 ; /* 1 =priority netwo± variable, 0*=non-priority nv*/ unsigned din 1; /*direction 0=input l=output*/ unsigned idhi:6; /"network variable id, most significant bits*/ unsigned idlo; /*netwo± variable id, least significant bits*/ unsigned ta:l; /*turnaround: 1= turnaround*/ unsigned st:2: /*service*/ unsigned auth:l; /"authenticated: l=authenticated*/ unsigned addπ4 /"address table index*/ ); where the priority field indicates whether messages to update the network variable are to be sent as priority or non-priority messages; direction indicates the direction of the target ID, for example, a netwo± variable update going from an output variable to an input variable would have the direction bit set to a 0; the netwo± variable id is a 14 bit identification number allowing for a maximum of 16,384 unique network variables per domain in the network and corresponds to the netwo± variable id 911 of Figure 9; turnaround indicates an output netwo± variable may be connected to an input netwo± variable of the same node; service indicates whether acknowledged or unacknowledged services is utilized; auth indicates whether message are authenticated prior to being accepted and processed by identifying the sender node through an authentication process; priority indicates whether messages are transmitted as priority or normal messages; and the address table index corresponds to address table index 912 and is an index into the address table 901. The Address Table preferably follows one of two formats given below; the first format is for group address table entries and the second format is for single destination node address table entries: structgroup { unsigned type: 1; /"indicates whether the structure is for a group or single node*/ unsigned size:7; "group size (0 for groups > 128 members*/ unsigned domain:l; /"domain reference*/ unsigned membeπ7; /"node's member # (0 for groups > 128 members*/ unsigned ιpttimer:4; /"unacknowledged message service repeat timer*/ unsigned retry:4; /"retry count*/ unsigned rcvtimen4; /"receive timer index*/ unsigned txjtimeπ4; /"transmit timer index*/ int group; /"group id*/ } struct subnetnode { unsigned type; /"indicates whether the structure is for a group or single node*/ unsigned domain: 1; domain reference*/ unsigned node:7; /"node's #*/ unsigned rpttimer.4; /"unacknowledged message service repeat timer*/ unsigned retry:4; /"retry count*/ unsigned rsvd:4; /"reserved*/ unsigned tx_timeπ4; /"transmit timer index */ int subnet; /"subnet*/ } It should be noted here that many of the present invention's concepts of groups, domains, subnets, acknowledged messages, etc. are described in greater detail with reference to United States Patent Application Serial Number 07/621 ,737 filed December 3, 1990 titled Network Communication Protocol (the 737 application) which is assigned to the assignee of the present invention and which is incorporated herein by reference. Continuing with die description of assigning a netwo± variable id to a connection, block 823, the first unassigned netwo± id is assigned to the connection and the netwo± variable id is written to the netwo± variable table 902 for each node using the network. Thus, in the above example, the netwo± variable id OOOOOOOOOOOOOO2 may be assigned to the connection templ_controls of Table HI; the netwo± variable id OOOOOOOOOOOOOI 2 may be assigned to the connection temp2_controls of Table HI; and the network variable id OOOOOOOOOOOOIO 2 may be assigned to the connection temp3_controls of Table UL It should be noted that network variable ids need not be unique domain wide, but only need be unambiguous within the nodes involved. Certain advantages gained through use of netwo± variables have now been described such as the ability to automatically generate network addressing schemes from application level connections. In addition to allowing for such ease of use, netwo± 1 variables lead to generally smaller and less complicated application programs over other 2 forms of network communication, such as prior art messaging techniques. Tables V and 3 " VT better illustrate differences between and certain advantages of use of the present 4 invention's techniques over, for example, prior messaging techniques. Table V is a 5 program written using netwo± variables of the present invention. Table VI is a 6 functionally equivalent program written using prior art messaging techniques. It is useful 7 to note the comparative program statistics at the end of each program listing in which it is 8 shown that the message program requires 626 bytes of ROM; 177 bytes of EEPROM; and 9 1314 bytes of RAM. By way of comparison, the netwo± variables program requires only I 0 335 bytes of ROM while using 231 bytes of EEPROM and only 1126 bytes of RAM I I SELF-IDENTIFYING ST.ANDARD NETWORK VARIABLE TYPES 1 2 It is desirable to provide for interoperability between nodes in a network. To 1 3 provide for such interoperability, it is necessary to assure compatibility between netwo± 1 4 variables in the various nodes of a network. To facilitate such compatibility, as one feature 1 5 of the present invention, a list of standard network variable types is provided by the 1 6 assignee of the present invention. The currently preferred list of standard network variable 7 typ«ss is provided as Table VII. By utilizing the list of standard netwo± variable types, 8 nodes in the netwo± may be interrogated for information on the netwo± variables 9 employed by the node and the network may then be configured based on this information. 0 This process is better illustrated with reference to Figure 10. 1 Initially, a node which must be configured is coupled to the netwo± medium, block 2 1001. After the node is coupled to the medium, an address of the node may be determined 3 through any number of methods. At least one of such methods is described with reference 1 to the 737 application. After having determined an address for the node, messages may be 2 communicated to the node over the medium. In the preferred embodiment a netwo± 3 management node is coupled to the medium which is useful for configuring the network. 4 The netwo± management node may communicate a command to the new node requesting 5 its information on the netwo± variables employed by the node, block 1002, or may 6 alternatively read such information from a file which has already been placed in the netwo± 7 management node's memory. 8 In the preferred embodiment in order to allow for the information to be stored in 9 the netwo± management node's memory, such information is made available for I 0 importation into the netwo± management node via a binder interface file (BIF). The BIF I I file is a byproduct of the compilation process for each node, and contains all the 1 2 information necessary to install the node on the netwo±. This information is also referred 1 3 to as the exposed interface of the node. 1 4 The BIF file for a new node may by provided to the netwo± management node 1 5 prior to installation of the new node on the netwo± in order to allow a complete netwo± 1 6 database to be constructed in advance of, and separate from, the physical installation of the 1 7 new node on the network. For example, the BIF file may be supplied to the netwo± 1 8 management node on diskette, over phone lines, or on through other computer readable 1 9 media. 0 Information equivalent to the information stored in the BIF file is also preferably 1 stored in the memory of the node. In this case the preferred embodiment confines the 22 application writer to use of a list of standard netwo± variable types when developing an 3 application program designed to run on the node. The list of standard netwo± variable types used by the system of the preferred embodiment is enumerated in Table VE Use of the list of standard netwo± variables minimizes the required space for storing the exposed interface in the node's memory. Storing the exposed interface in the node's memory offers the advantage of allowing the information to be retrieved without n<sed for the netwo± management node to include a floppy disk drive or other device for receiving externally communicated computer readable information. However, absent the option of providing the BIF file over such an external interface, the node must be physically connected on the same netwo± with die netwo± management node prior to construction of the netwo± database. In the preferred embodiment both options are available and the choice of how the exported interface is imported into the netwo± management node is left up to the node designer. The file layout for the BIF file of the preferred embodiment is given in Table IX. An example of a BIF file is given in Table X. This exemplary BIF file has been generated for the program given in Table V. As was mentioned, in the preferred embodiment nodes may utilize the standard netwo± variable types in declaration of netwo± variables. The information describing its netwo± variables is communicated (or exposed) by the node to the netwo± management node, block 1003, using standard messaging features of the network. It will be understood that in alternative embodiments, information describing other, non-standard variable types may also be communicated in a manner similar to communicating the information on standard network variables. The netwo± management node receives the exposed netwo± variable information, block 1004, and may then use information, including the netwo± variable type, in verifying valid connections and in the binding process. Only netwo± variables of identical types may be bound together in a single connection — thus, use of standard netwo± variable types facilitates interoperability of nodes in the netwo± as well as facilitating identification of netwo± variables when a command is issued to expose the network variables of a node. As one extension to the concept of self-identifying standard network types as just described, it is possible to include in the information transmitted responsive to receiving the command to expose netwo± variable's text strings and even graphical icons to the netwo± management node. Such information would make the nodes largely self-documenting. EXTENSIONS TO THE -C LANGUAGE The present invention has implemented certain extensions and features to the "C" programming languages to support use of netwo± variables — these extensions include (1) the already disclosed declarations of variables as netwo± variables and the ability to declare such variables as standard netwo± variable types; (2) declaration and use of I O objects; and (3) scheduling clauses. Each of these extensions will be discussed in greater detail below. It should be noted that although the extensions have been preferably implemented in the "C" programming language, the idea and concepts of these extensions are not limited to use in this programming language and, in fact these ideas and concepts may readily be extended to other programming languages. Network variable decl atioπs As has been discussed, the present invention provides for declaration of network variables in C programs. Importantly, the declaration of netwo± variables allows for declaring certain information for use by the above-described binding process. This process is better understood with reference to Rgure 11. Initially, a netwo± variable is declared in a computer program intended to run on a node of the netwo± of the present invention, block 1101. The preferred format for the declaration may be found with reference to Table Vm, below. As can be seen with reference to Table Vm, the declaration format preferably includes a set of parameters called bind Jnfo. These parameters allow the network variable to be declared with an initial specification of protocol services. When the program is compiled, this initial information is output as part of the BIF file. The format of the BJF file may be found widi reference to Table DC. As one option in declaring network variables, these parameters may be declared as configurable or non-configurable, block 1102. Li this way, a programmer programming a node may make an initial determination as to the state the parameter should normally be set to. For example, the programmer may determine in a typical configuration, a particular network variable should use acknowledged message services. However, the programmer may also allow a netwo± administrator flexibility in configuring and optimizing the netwo± by declaring the acknowledged parameter as configurable. The program is then compiled and a compiled output is produced in the conventional manner. In addition to producing the conventional outputs of a compiler, e.g., object code, the compiler of the present invention produces the above-mentioned BIF file which includes information on the declared netwo± variables such as the state of parameters and whether or not such parameters are configurable, block 1103. During configuration of the netwo± of the present invention, the state of these configurable parameters may be modified by the network administrator, block 1104. In the above-discussed example, the network administrator may determine the netwo± will be optimally configured if the variable declared as acknowledged is actually configured as unacknowledged and repeated. It is worthwhile to again refer to figure 8(a) which illustrates, in addition to other steps in the connection process, the step of setting parameters for the connection, block 806. The parameters which are settable in this step of the configuration process are those parameters declared as configurable in the netwo± variable declarations. These parameters are displayed on a display screen during the configuration process and may be modified by changing the state of the parameters on the display screen. For example, one of three states may be set to tell the network the type of service to be used for a network variable — unacknowledged, unacknowledged and repeated, and acknowledged. The authentication feature may be set to an on state in which message authentication is used or to an off state in which message authentication is not used. Also, netwo± variable may be set to a priority state or a non-priority state indicating whether messages associated with the variable are to be sent as priority messages or as normal messages. Declaration and use of Objects Each node of the present invention comprises its own scheduler, timers, and logical I/O devices. The "C" programming language employed by the present invention provides access to these devices through use of predefined objects; namely, an event scheduler which handles task scheduling for the node, timer objects which provide both millisecond and second timers, and I/O objects which provide for declaration of a number of logical I O devices. Importantly, once declared a logical link is created between the object name and the physical device and references may be made to the object name to gain access to the physical device. Declaration and use of objects will be discussed in greater detail by referring to declaration of VO objects. Each node of the netwo± of the present invention has a number of built-in electrical interface options for performing input and output Prior to performing input or output a program must declare an I/O object which interfaces with one of eleven VO pins on the node; three serial pins 441 and eight parallel pins 445. The eleven pins are referred to with the reserved pin names: IO_0, IO_l, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, and IO_10. The declaration syntax for an I O object and use of die eleven pins in the present invention is discussed further with reference to Table XL It is worthwhile to turn to figure 12 to discuss this concept in somewhat greater detail. Initially, a program statement is coded to declare an I O device giving a pin designation, a device type and a device name; when the program is compiled d e declaration statement causes declaration of the I/O device, block 1201. Other parameters and the format of the declaration for an I/O device in die preferred embodiment may be found with reference to Table XL Responsive to declaring the I O device, the pins are configured to perform the function specified by the device type, block 1202. The device types of the preferred embodiment may be found with reference to Table XL This process is further illustrated witii reference to the exemplary netwo± variable program of Table V and the associated assembly language code resulting from a compile of die program given in Table XIV. As can be seen with reference to the program source code in Table V, two I O devices are declared, IOjO as a bit output named MotorCtri and IO_5 as a pulsecount input named pulseamps. The specified device name is logically associated with the specified device to perform the designated I O, block 1204. In this way, a reference may be simply made to the device name to accomplish the designated VO with necessity of continued reference to specific pins and wiώout need for special coding to implement die desired device types. As can be seen with reference to Table XII, built-in functions are provided to allow communication with die VO devices. One of the built-in functions may be used to perform the built-in function referring to the desired device name to specify a hardware device, block 1204. The desired I O is tiien performed in accordance wiώ the device type specified in die device declaration, block 1205. Scheduling Scheduling on a node in the present invention is event driven. When a given condition becomes true, a body of code termed a task associated with that condition is executed. In the preferred embodiment scheduling is accomplished through "when" statements. The syntax of a when statement of the preferred embodiment is given in Table XJH. An example of a when statement is given below: when (timer_expires 0ed_timer)) /* This line is the when clause */ { io_out (led, OFF); /* This is the task - turn the led off */ } In the above example, when the application timer led imer expires, the body of code following die when statement is executed (and the LED is turned off). When statements provide for execution of a task (the bracketed code) when the condition specified (e.g., the led_timer expires) evaluates to true. It is known in the art to provide structures in programming languages which allow for conditional execution of a task when a statement evaluates to true. However, in known systems which include a scheduling statement (a when statement or the equivalent), the event which is evaluated is a predefined event As is noted in Table Xm, the present invention provides for use of predetermined events in scheduling statements. However, as one important aspect of the present invention, events may also be any valid C expression. For example, the following statement may be coded in a system of the present invention: when (x =■= 3) /* This line is the when clause */ { io_out Oed, OFF); /* This is the task - turn the led off */ } In this case, whenever the event x=3 occurs, the LED is turned off. Of course, significandy more complicated C programming statements may be envisioned to define an event As will be understood by one of ordinary skill in the art, allowing evaluation of any valid language expression to define an event offers significant flexibility over known systems. The present invention further allows for use of multiple when statements to be associated with a single task. For example: when (powerup) " This line is one when clause */ when (reset) /" This line is another when clause */ when (ic>_changes(ϊo_switch)) /* This line is another when clause */ when (x = 3) /" This line is another when clause */ { io_out fled, OFF); /* This is the task - turn the led off */ } In this case, when any of the above events evaluates to true, the task is executed — e.g., die LED is turned off. Importandy, as one aspect of the present invention, I/O objects may be referred to in an event clause allowing improved ease of programming of the system of die present invention. For example, two mediods may be used to deteπnine if an input value is new: (1) the io_update_occurs event may be used, referring to the desired device in a when statement or the io_in function may be used. The below two programs accomplish the same goal. The particular method chosen will depend on the individual case; however, the above is exemplary of the flexibility and ease of use of the system of the present invention. Further, as an additional feature of the present invention and as is described with reference to Table Vm, the present invention provides for two levels of when clauses, priority when clauses and normal when clauses. Using this feature, it is possible to handle events which must be dealt with on a priority basis. PERFORMANCE OPTIMIZATIONS PERFORMED BY THE BINDER OFTHE PREFERRED EMBODIMENT As was discussed above, when more than two nodes are used in a connection, the nodes may be recognized as a group and a group address may be assigned to d e group of nodes. The preferred embodiment also carries out other performance optimization routines to achieve nima netwo± traffic with resulting optimized response time. For example, 1 the binder determines optimal protocol service class and addressing allocation at the time of 2 binding variables in order. Illustrative of this, with reference to Figure 3(b), three separate ' 3 connections are shown, 321-323. .Although tiiis represents a typical optimal configuration, 4 these three connections could be combined by the binder into a single group resulting in 5 nodes sometimes receiving messages about network variable updates which are not used by 6 tiiose nodes. In such a configuration, although there are additional messages received by 7 die nodes, no effect is seen by the application running on the node because the netwo± 8 variable messages include a 14-bit netwo± variable identification. Therefore, nodes which 9 have no need for a variable sent to them simply discard and, in the case of acknowledged I 0 service, acknowledge the message. I I .An advantage of grouping many nodes in a single group in the system of die 1 2 preferred embodiment is that such grouping simplifies tasks for the binder process and 1 3 further uses only one group address (d e preferred embodiment is limited to 255 group 1 4 addresses per domain). 1 5 Further, die binder of the present invention dynamically selects an optimal protocol 1 6 class of service at the time of binding. This is done by first computing the number of 1 7 messages it would take to complete a transaction on the first using acknowledged service 1 8 (including the original message and die acknowledgements). (Note that tiiis number is die 1 9 group size which is known by the network variable binder process at the beginning of the 20 connection process). Second, tiiis number is compared with the repeat count for repeating 2 1 message. If the repeat count is less than the group size, and none of the programs require 22 acknowledged services (each program allows the config option for its network variables), then die binder dynamically converts the service from acknowledged to unacknowledged repeat This reduces network traffic, thus improving response time. __________ =z _____________ == Thus, an improved communication netwo± having capability for communication of information between nodes in the network is described. 49 1 TABLE V config netwo± input signed long int MinOffTime, MinOnTime; config netwo± input struct tempSetpoints OudetWater, CndnsrHead, CoolAir, config netwo± input struct pressureSetpoints CmprssrlnltGas; #pragma set d_string "HVAComp" I* Netwo± variable declarations for temperature & pressure inputs */ I* used to decide when the motor should be turned on and off ♦ / netwo± input fahrenheit OudetWaterTemp, CndnsrHeadTemp, CooIAirTemp; netwo± input PoundsPerSqln CmprssrGasPrssr; netwo± input boolean BuildingCooling; I* Netwo± variable declarations used to report status to the HVAC ♦ / I* system controller. Reported conditions are: node offline/online, ♦ / * motor on/off, and motor overloaded O.K. Th-sse conditions are only ♦ / /* reported when they change. ♦ / netwo± output boolean MotorOn, MotorOverload, AmOnline; I* Definitions of the Neuron® VO pins. The previous study used an */ I* onchip AtoD to measure the current that die motor used. This version */ * uses a $ O external AtoD to convert current to a number of pulses */ I* over a 1 second interval. These pulses are accumulated via die on */ I* chip timer/counter block to determine the current the motor uses */ IOJO output bit MotorCtri; IO_5 input pulsecount PulseAmps; I* Timer declarations take no EEPROM space - tiiey are in RAM */ 6905 54 CndnsrHeadTemp > CndnsrHeadϋighSet && CmprssrGasPrssr > CmprssrInltGas.ESghSet && CoolAirTemp < CoolAirlowSet { motor(off); } when (reset) { MotorOn = false; MotorOverload = false; AmOnline = true; motor(off); /"initialize all input variables so that odier nodes ♦ / I* don't have to all update diis one before this one ♦ / I* begins operation. */ OudetWaterTemp OudetWaterXowSet; CndnsrHeadTemp CndnsrHeadXowSet; CoolAirTemp CoolAirXowSet; CmprssrGasPrssr CmprssrlnltGasiowSet; strikes = 0; poll(BuiIdingCooling); /* ask the controller if AC is on */ when (online) { AmOnline = true; moto ff); /* if the motor was overloaded & and we just came back online */ I* perhaps someone repaired it */ MotorOverload = false; } when(offline) { AmOnline « false; motor(off); } when ( nv update occurs ) control actionO; } when ( timer exρires(MotorMeasurementTimer) ) MotorMeasurementTimer = Measurementlnterval; if ( io_in(PulseAmps) > CompressorMotorMaxDraw) if (++strikes >= 3) /* motor is really overloaded */ motor(off); MotorOverload = true; } else strikes = 0 } Link Memory Usage Statistics: ROM Usage: User Code & Constant Data 335 bytes EEPROM Usage: (not necessarily in order of physical layout) System Data & Parameters 72 bytes Domain & Address Tables 105 bytes Netwo± Variable Config Tables 42 bytes User EEPROM Variables 12 bytes User Code & Constant Data 0 bytes Total EEPROM Usage 231 bytes RAM Usage: (not necessarily in c-rder of physical layout) System Data & Parameters 549 bytes Transaction Control Blocks 132 bytes User Timers &1/O Change Events 12 bytes Netwo± & Application Buffers 424 bytes User RAM Variables 9 bytes Total RAM Usage 1126 bytes End of Link Statistics TABLE VI MESSAGING PROGRAM EXAMPLE #pragma receive rans count 8 /* This example has all the setpoint configuration local to this node. */ /* In tiiis way, generic temperature and pressure sensors can be used */ /* which have no knowledge of the setpoints. They only report new temp */ /* values when die old one changes by a tiireshold value. Additionally, */ * he temperature value can be reported to many nodes which can each */ /* use die temp ture for their specific function — even applying */ /* different set points to the temperature value. In the old study, */ I* actual temperature values were not sent on the network. Messages */ I* were sent for above high setpoint at setpoint & below low setpoint */ I* Since no temperature values were sent the messages sent could only */ I* be used by this node - defeating the value of a netwo±ed approach */ I* This division of function in the old study was done to save EEPROM */ /* in tiiis node since storing die setpoints takes EEPROM. */ #deδnetrυe 1 ■ Sdefine false 0 #defineon true #defineoff false /* Add In some message codes */ #define CondensrTemp 0 I* net in condensor temp */ ■SdefineCoolTemp 1 /" net in air temp */ #defineGasPress 2 I* net in gas pressure */ #defineBldCool 3 / ♦ net in building cooling stat ♦ / #defineMotOn 4 " netoutcmprsrmoton */ #defineMotOvld 5 I* net out cmprsr mot overload ♦ / #defineNdOnline 6 / ♦ net out online ♦ / #definePollBldCool 7 I* poll building status */ #defϊneTimeMinOff_c 8 I* Config Msg code for time off ♦ / #defineTimeMinOn_c 9 I* Config Msg code for time on ♦ / #defineOuύetH20 10 I* Net in H20 temperature */ #defin CndnsrHd_c 11 I* cndsr head temp config ♦ / #defineColdAir_c 12 I* Cold air temp config */ •ftdefineCoπφGasPress c 13 I* gass pressure config */ |#defineOudedl20_c 14 / ♦ Config Msg code for water tmp */ signed int fahrenheit typedef signed int PoundsPerSqln; struct tempSctpoints fahrenheit LowSet HighSet; }; struct pressureSetpoints { PoundsPerSqln LowSet HighSet ); I* EEPROM nodal configuration parameters: Minimum time the motor must */ /* remain on, minimum time the motor must remain off. Temperature & */ I* pressure setpoints. Location and device type, too!! */ signed long int MinOffTime, MinOnTime; struct tempSetpoints OudetWater, CndnsrHead, CoolAir, struct pressureSetpoints CmprssrlnltGas; #pragma set d_string "HVACαmp" * Netwo± variable declarations for temperature & pressure inputs */ /* used to decide when die motor should be turned on and off */ fahrenheit OudetWaterTemp, CndnsrHeadTemp, CoolAirTemp; PoundsPerSqln CmprssrGasPrssr, boolean BuildingCooIing; I* Netwo± variable declarations used to report status to the HVAC */ I* system controller. Reported conditions are: node offline/online, */ /* motor on/off, and motor overloaded/O J These conditions are only */ /* reported when tiiey change.*/ when (reset) { MotorOn false; MotorOverioad false; AmOnline true; msg_outtag modsOn out msg_outcode MotOn; msg_outdata[0] MotorOn; msg_send0; msg_outtag motisOvrld out msg_outcode MotOvld; msg_outdata[0] MotorOverload; msg_send0; msg_outtag Im_onln_out msg_outcode NdOnline; msg_outdata[0] AmOnline; msg_send0; motor(off); I* initialize all input variables so that other nodes ♦ / /* don't have to all update this one before this one*/ I* begins operation.*/ OuύetWaterTemp OudetWaterXowSet CndnsrHeadTemp CndnsrHeadXowSet; Cool-AirTemp CoolAirXowSet; CmprssrGasPrssr Cmprssr~nlLGa~.~owSet; strikes 0; msgjouttag getBldState; msg outcode Poll BIdCool; msg_outservice REQUEST; msg_send0; when ( msg_aπives(BldCool)) BuildingCooIing = msg_in.data[0]; controLactionO; when ( msg_arrives(Oudeti320)) OudetWaterTemp = (msgJn.data[0]<- 8) + msgjn.data[l]; controLactionO; when ( msg_arrives(TimeMinOff_c)) MinOffTime = (msg_in.data[0]«8) + msg_in.data[l]; when ( msg_arrives(TimeMinOn_c)) MinOnTime = (msg_in.data[0]«8) + msgjn.data[l]; when ( msg arrives(CndnsrHd_c) CndnsrH<sad.LowSet (msg_in.data[0]<-<8) + msgjn.data[l]; CndnsrHead HighSet (msg_in.data[2]«8) + msg_in.data[3]; when ( msg_aιrives(ColdAir_c)) Coo \irXowSet (msg_in.data[0]«8) + msgjn.data[l]; CoolAiπHighSet (msgjn.data[2]«8) + msgjn.data[3]; when (msg_aπives(CompGasPress_c)) CmprssrInltGas.LowSet = (msg_in.data[0]«8) + msgjn.data[l]; CmprssrlnltGas.HighSet ■ (msg_in.data[2]«8) + msg_in.data[3]; when ( msg_arrives(Ouded 20_c)) OudetWateriowSet = (msgjn.data[0]<' 8) + msg_in.data[l]; OudetWaterJIighSet ■ (msg_in.data[2]<- 8) + msg_in.data[3]; TABLE Vm NETWORK VARIABLE DECLA TION The preferred syntax for declaration of a netwo± variable is as follows: network input | output [netvar modifier] [class] type [bind nfo (fields)] identifier, where: netvar modifier are the following optional modifiers which can be included.in the declaration of a netwo± variable: sync I synchronized — specifies that all values assigned to this netwo± variable must be propagated, and in their original order. However, if a synchronous netwo± variable is updated multiple times within a single critical section, only the last value is sent out If this keyword is omitted from the declaration, the scheduler does not guarantee that all assigned values will be propagated. For example, if die variable is being modified more rapidly than its update events can be processed, the scheduler may discard some intermediate data values. However, the most recent data value for a network variable will never be discarded. polled — is used only for output netwo± variables and specifies that die value of die output netwo± variable is to be sent only in response to a poll request from a node which reads die netwo± variable. When this keyword is omitted, die value is propagated over the netwo± every time the variable is assigned a value. class Certain classes of storage may be specified for netwo± variables. Specifically, the following keywords may be entered in the network variable declaration statement const — specifies that the network variable may not be changed by the application program; eeprom — allows the application program to indicate die value of the network variable is to be preserved across power outages. In the preferred embodiment, variables declared with tiiis storage class are stored in the eeprom -401. EEPROM variables have a limited capability to accept changes before the EEPROM can no longer be guaranteed to operate properly. Therefore, initializers for the eeprom class take effect when the program is loaded and not each time the program is started. Reloading a program has the effect of reinitializing all eeprom variables. co g — specifies a const netwo± variable in EEPROM that can be changed only by a netwo± management node node. This class of netwo± variable is typically used for application configuration by a netwo± manager. Network variable typing serves two purposes: (1) typing ensures proper use of the variable in the compilation, and (2) typing ensures proper connection of network variables at bind time. Netwo± variables may be declared as any one of the following types: [signed] long integer unsigned long integer signed character [unsigned] character [signed] [short] integer unsigned [short] integer enumerated lists structures and unions of the above types standard netwo± variable types (see Table VCQ The following optional fields may be included in the declaration of a netwo± variable; the compiler builds the BIF file utilizing information declared in these fields and the information in the BIF file is used for binding the netwo± variable inputs and outputs. The fields are each optional and may be specified in any order. offline — is used to signal to the bind process that a node should be taken offline before an update can be made to die netwo± variable. This option is commonly used with the config class network variable. 1 bind I bind(var_name) — specifies whether the network variable is 2 bound to netwo± variables on other nodes (die usual case) or to a • 3 netwo± variable on the same node. The default is bind which 4 indicates that die netwo± variable can be bound to netwo± 5 variables on other nodes. The other form, bind (varjiame) allows 6 binding an output to an input on the same node. The varjiame is 7 die name of another netwo± variable on the same node. It should be 8 noted that this option has been omitted from the currently preferred 9 embodiment of the present invention. 10 unackd I unackdjrpt I ack [(config I nonconfig)] — tells the 11 protocol layer of the network management software of die present 12 invention the type of service to use for the variable. .An 13 unacknowledged (unackd ) netwo± variable uses minimal netwo± 14 resources to propagate its values to other nodes. As a result, 15 propagation failures are more likely to occur, and such failures are 16 not detected by the node. This class is typically used for variables 17 which are updated on a frequent, periodic basis, where the loss of 18 an update is not critical, or in cases where the probability of a 19 collision or transmission error is extremely low. The unackdjrpt 20 class of service is used when a variable is sent to a large group of 21 other nodes; with this class the message is sent multiple times to 22 gain a greater probability of delivery. Acknowledged (ackd ) service 23 provides for receiver node acknowledged delivery with retries. The 1 keyword config, indicates the service type can be changed at the 2 time connections are specified for the netwo± variable. The 3 keyword nonconfig indicates die service type cannot be changed at 4 configuration time. 5 authenticated I nonauthenήcated [(config I nonconfig )] — specifies 6 whether the netwo± variable requires use of an authentication to 7 verify the identity of the sender node. The config I nonconfig 8 keywords specify whether the authentication designation is 9 configurable. The default in the system of the preferred embodiment 10 is nonauth (config). 11 priority I nonpriority [(config I nonconfig)] — specifies whether 12 the network variable receives priority or not The keywords config 13 I nonconfig specify whether priority is configurable. The default is 14 nonpriority (config). 15 rate_est (const jnφression) — specifies the estimated average 16 message rate, in tenths of messages per second, that an associated 17 netwo± variable is expected to transmit or receive. This value 18 assists the netwo± administrator in configuring the network. 19 maxjate st (const_expression) — specifies the estimated 20 maximum message rate, in tenths of messages per second, that die 21 associated netwo± variable is expected to transmit or receive. This 22 value assists the netwo± administrator in configuring the network. 23 TABLE DC BIF FILE FORMAT The Binder Interface File (BDF) format comprises a number of records — one record per netwo± variable and one record per message tag plus some overhead records. The format is designed to be concise with few lines of physical lines per record. The format of the file generally allows for die following record types: (1) File Header comprising timestamp and other general information (one record); (2) Global information comprising general information of indicating general information about the node and the application program running on the node; and (3) Netwo± variable and message tag records for each network variable and message tag comprising information about the network variable or message tag. Importantly, netwo± variables and message tags may require differing amounts and format of information. Therefore, as one aspect of the present invention, a record structure has been developed to allow efficient storage of the differing required information and efficient retrieval of th records. In addition, in order to conserve storage, the present invention discloses an encoding scheme to encode numeric information present in the records. In general, string fields contain an asterisk if they are not applicable. Integer fields contain zero. The first record in the file is a header which comprises three lines of commentary and copyright notice text and a timestamp. Following this header is one blank line followed by global information used by the binder process. Global Information The first global value line is a Program ID comprising eight 2-digit hexadecimal values, separated by colons. The second global value line comprises several numeric fields separated by spaces. The fields are defined in order as follows: Either a 1 or a 2 which specifies the number of domains. The number of address table 901 slots in the range of decimal 1-15. Either a 0 or a 1. Indicates whether the node application program handles incoming messages. The number of netwo± variables defined by the application program in the range of 0 to 62 The number of message tags defined by die application program in the range 0 to 15. The number of network input buffers (encoded, see below). The number of netwo± output buffers (encoded, see below). The number of priority network output buffers (encoded, see below). The number of priority application output buffers (encoded, see below). The number of application output buffers (encoded, see below). The number of application input buffers (encoded, see below). The size of a netwo± input buffer (encoded, see below). The size of a netwo± output buffer (encoded, see below). The size of an application input buffer (encoded, see below). The size of an application output buffer (encoded, see below). The third line is used for node-specific parameters and has not been fully defined in die currendy preferred embodiment The fourth and following lines are optional and may include anode documentation string which may be transmitted to the netwo± management node for documenting, for example, the general function of the node. If not supplied, these nodes comprise a single asterisk. If supplied, these lines each begin with a double-quote character which is not included as part of die documentation string. Multiple lines are concatenated without any intervening character There is no end double quote. The global values section ends witii a blank line. As noted above, buffer sizes and count fields are encoded. The encoded values allow selected values, given below, to be stored in a nibble, tiius reducing the size of the database.In the preferred embodiment buffer sizes must be one of 20, 21, 22, 24, 26, 30, 34, 42, 50, 66, 82, 11 146, 210 or 255 (i.e., 15 allowed buffer size values where die buffer sizes are given in bytes); non-priority buffer counts must be one of 1, 2, 3, 5, 7, 11, 15, 23, 31, 47, or 63 (i.e., 11 allowed buffer size values). Priority buffer counts must be one of 1, 2, 3, 5, 7, 11, 15, 23, 31, 47, or 63 (i.e., 12 allowed buffer size values). In order to represent these values in a single nibble (4 bits), the following formulas are used to transform the nibble value (n) to the above values: for buffer sizes: l* 12 + (n&l) * 2 n 2 - 1 + 18 (except where n = Or, size = 255); and for count (priority and non-priority): 2 n,/:2 + (n&l) * 2 n * 2 "l - 1 where n is the nibble value and die & symbol indicates a logical AND function between the four bit n value and 0001 (e.g., for n = 3l0, the result of n&l is 0011&0001=0001 or 1 ιo, for n= the result is OlO; in general for any even number n, the value of this function will be 0 and for any odd number n, die value will be .)• lso, in the above equations, integer arithmetic is used; therefore, where fractional values result in die computation of a value (e.g„ -& where n = 1), the fractional values are rounded down to the next lowest integer (e.g., for n=l, n 2 = 1 2, is rounded down to 0). Use of the above formula, as opposed to, for example a table lookup routine, leads to decreased requirements for static memory. Netwo± Variable and Message Tap Records Zero or more records are produced which correspond to the netwo± variables and message tag definitions in the program. Message tag records begin with die word 'TAG"; Netwo± variable messages begin witii "VAR". Following the "TAG" or " VAR" identifier is a string of at maximum 16 characters which is the name of the tag or variable. Next there is a decimal number (0-61 for network variables; 0-14 for message tags) which translates the name into an internal program index for the object code. Finally, there .are two rate estimates, each a decimal number from 0-255, which are the rate_est and max_rate_est respectively, in units of tenths of a message per second. The second line of each record corresponds to the bindjnfo fields and other numeric fields in the order and as defined below: EM Values offline specifier Oor l bindable specifier Oor l bind target index 0-61 (63 if no bind target is specified) direction 0=input, l=output service type 0=acknowledged, l=unackd_rpt 2=unackd service type configurable? l=yes, 0=no authenticated? l=yes, 0=no authenticated configurable? l=yes, 0=no priority l=yes, 0=no priority configurable? l=yes, 0=no polled l=yes, 0=no synchronized l=yes, 0=no config l=yes, 0=no The third and any subsequent lines optionally contain variable documentation in the same format as the node documentation described above. If no documentation is supplied, a single asteris is used. For netwo± variables, the remaining lines following any documentation comprise the following information. Message tags do not require this information. The first line following the documentation lines is a header in which a first field indicates whether the variable is a standard netwo± variable type; if so, the remaining fields are ignored and there are no more lines in the record. The format of the line, in order of the fields, is as follows: Field Values Standard netwo± variable type number 1 -255 (0 if not a standard type) First typedef name used in the definition maximum length 16 characters, * if none Number of elements in the type 1 unless structured or union, 256 max There is one additional line per element, (where the number of elements was given immediately above). The format of these lines is as follows, in order of the fields presented: Eeld Values Basic Type 0=char, l=integer, 2=long, 3=bitfield, «4=union Bitfield Offset 0-7, 0 if not applicable Bitfield /union size 1-7 for bitfield; 1-31 for union; 0 if not applicable Signedness 0=unsigned, l=signed Array bound 1-31, 0 if not an array TABLE X BIF FILE FOR PROGRAM OF TABLE V TABLE XI I O DEVICE DECLARATION Each I/O device is declared in the application program as an external "device name". The syntax for such declaration is as follows: <pin> « type> [<assign>] <device-name> [=<initial-output-level>]; where <φin> is one of the eleven reserved pin names: IO_0, IO_l, IO_2, IO_3, IO_4, IO_5, IO_6, IO_7, IO_8, IO_9, and IO_10; <type> is one of the following types, may specify the indicated pins and is subject to the indicated restrictions: (1) output bit — Used to control the logical output state of a single pin, where 0 equals low and 1 equals high; may specify any pin IOjO to IOJ0 and is unrestricted. (2) input bit — Used to read the logical output state of a single pin, where 0 equals low and 1 equals high; may specify any pin IO_0 to IOJO and is unrestricted. (3) [output] bitshifi [numbits (<aφr>)] [clockedge ({ + / - ])] [kbaud (<expr>)] — Used to shift a data word of up to 16 bits out of the node. Data is clocked out by an internally generated clock, numbits specifies the number of bits to be shifted; clockedge specifies whether the data is stable on the positive going or negative going edge; and kbaud specifies the baud rate. Requires adjacent pin pairs; the pin specification specifies the low numbered pin of the pair and may be IO_0 through IO_6 orIO_8 or IO_9. (4) [input] bitshifi [numbits (<expr>)] [clockedge ({+/ -])] [kbaud (<expr>)] — Used to shift a data word of up to 16 bits into the node. Data is clocked in by an internally (16) [output] oneshot [invert] [clock (<expr>)] — This device type produces a single output pulse whose duration is a function of a specified output value and the selected clock value. Must specify IQjO or IO_l. The mux keyword (see below) must be specified for IO_0 and the ded keyword (see below) must be specified for IO_l. (17) {output \ input] nibble — This device type is used to read or control four adjacent pins simultaneously. Requires four adjacent pins; the pin specifies denotes the lowest number pin of the quartet and may be pin IO_0 through IO_4. (18) (output I input] byte — This device type is used to read or control eight pins simultaneously. Requires eight adjacent pins; the pin specification denotes the lowest number pin and must be IO_0. (In general, pins may appear in a single device declaration only, however, a pin may appear in multiple declarations if the types belong to the set of {bit nibble and byte}); where <assign> is one of "mux" which indicates the device is assigned to a multiplexed timer counter circuit or "ded" which indicates the device is assigned to a dedicated timer counter circuit and where <initial-output-state> is a constant expression used to set the output pin of the channel to an initial state at initialization time (e.g., when the application program is reset). TABLE Xπ ACCESS TO I/O DEVICES VIA BUILT IN FUNCTIONS To access one of the VO devices (after declaring it as shown above), the application 1 programmer merely calls one of die built-in functions defined below. These built-in functions appear syntactically to be nothing more than procedure calls. However, these procedure calls are not be defined as external functions to be linked in. Instead, these procedure names are "known" to the compiler, and the compiler enforces type checking on the parameters of the procedures. The built-in function syntax is as follows: • retum-value> io n ( <device> [<args>} ) <retum-value> io_out ( <device>, <output-value> [<args>] ) where the <device> name corresponds to an VO device declaration and «<args> are as follows, depending on die type of device: bitshift [, « numbits>] serial (output only) , <count> serial (input only) , input-value>, <count> neurowire (output only) , <count> neurowire (input only) , *<input-value>, <count> parallel (output only) , <count> parallel (input only) , -dnput-valuo, <count> For period, pulsecount and ontime input devices, the built-in variable "input_is_new" is set to TRUE whenever the iojn call returns an updated value. The frequency witii which updates occur depends on the device declaration For parallel, serial and neurowire, io_out and iojn require a pointer to the data buffer as the -<output-value> and die <input-value>, respectively. For parallel and serial, io n returns a short integer which contains die count of the actual number of bytes received. Ranges and defaults The following ranges and defaults apply to the various IO attributes: • The bitshift "numbits" may be specified in die bitshift declaration as any number from 1 to 16 and, if not specified, defaults to 16. In the calls to iojn and io_out the shift value may be any number from 1 to 127. For io n, only the last 16 bits shifted in will be returned. For io_out after 16 bits, zeroes arc shifted out • The bitshift output clock may be either '+' or '-'. It defaults to '+'. This defines whether the data is shifted on die positive-going or negative-going edge of die clock. This can only be specified in die declaration. • The initial frequencies of the frequency output triac output, pulsewiddi output and pulsecount output are 0. • The clock value specifies a clock in the range 0...7 where 0 is the fastest clock and 7 is die slowest The defaults are as follows: frequency output 0 triac ouφut 7 pulsewidth ouφut 0 pulsecount ouφut 7 oneshot ouφut 7 ontime input 2 period input 0 The baud rate of serial may be 300, 1200 or 2400 baud with a default of 2400. • The baud rate for neurowire and bitshift may be 1,10 or 25 kbits/second and defaults to 25 kbits/second. Example An example follows — to read a switch attached to pin 1 and light an LED attached to pin 2 when die switch is closed, die following would be coded by the application programmer: IO_l input bit chl switch; IO_2 output bit led; if (io_in(switch)) { io_out (led, TRUE); } VO Multiplexing The timer counter circuit may be multiplexed among pins 4 to 7. To facilitate this, the following built-in function is provided: io_select (<device>); This function causes the specified device to become the new owner of the timer counter circuit .Any reinitialization of the timer counter circuit is handled by diis function. It is under the application's control when the timer counter is connected to which piij. ' The multiplexed timer counter is initially assigned to die mux device which is declared first For example, die application may choose to select a new device after a when change clause has executed for the current connected device. Alternatively, the selection could be done based on a timer, e.g., select a new device every 100 milliseconds. 1 TABLE XD3 2 WHEN STATEMENT SYNTAX " 3 4 The syntax of a when statement in the system of the preferred embodiment is given 5 below: 6 [priority] when (event) task 7 I where: 8 priority is an option used to force evaluation of the following when clause 9 each time the scheduler runs. This allows priority when clauses to 1 0 be evaluated first Within a program having multiple priority when 1 1 clauses, priority when clauses are evaluated in the order coded in the | 1 2 program. If any priority when clause evaluates to true, the 1 3 corresponding task is run and the scheduler starts over at the top of 1 4 the priority when clauses. If no priority when clause evaluates to 1 5 true tiien a non-priority when clause is evaluated and selected in a 1 6 round robin fashion. The scheduler then starts over with the priority 1 7 when clauses. This process may be best understood by example: 1 8 Assume the following when clauses coded in the following order 1 9 priority when (A) 0 priority when (B) 1 when (C) 2 when (D). 23 Assume only C and D are true; first A is evaluated, then B is evaluated and finally C is evaluated and die task associated widi C is executed. A is then evaluated again, then B is evaluated and then, in round robin fashion, D is evaluated and executed, event may be eidier a predefined event or, importandy, may be any valid C expression. Predefined events include, by way of example, input pin state changes (io changes, io update occurs); netwo± variable changes (network variable update completes, network variable update fails, netwo± variable update occurs, netwo± variable update succeeds); timer expiration; message reception information (message arrives, message completes, message fails, message succeeds); and other status information (powerup, reset online, offline). task is a C compound statement consisting of a series of C declarations and statements enclosed in braces. The following predefined events exist in the system of die preferred embodiment Ωush completes A flush function is available in the system of the preferred embodiment which causes die node to monitor the status of all incoming and outgoing messages. When die node has completed processing of all messages the flush_complete event becomes true indicating all outgoing transactions have been completed, no more incoming messages are outstanding, and no network variable updates are occurring. Predefined events may be used within other control expressions in addition to in the when statement for example, in an if, while or for statement As noted above, a user-defined event may be any valid C expression and may include assignment statements to assign values to global variables and function calls. TABLE XTV ASSEMBLY LANGUAGE LISTING FOR THE NETWORK VARIABLE PROGRAM OF TABLE V 905 92 IMPORT _bitshift_ input, bitshift, ouφut IMPORT _byte_ input, byte, ouφut IMPORT .nibble, input, nibble, input, ά\_ nibble, ouφut IMPORT .frequency, ouφut, leveldetect, input IMPORT _neurowire_ input, neurowire, output IMPORT _oneshot_ ouφut, ontime_ input IMPORT .parallel, input, parallel_ input, ready IMPORT .parallel, ouφut, parallel, ouφut, ready,, parallel, ouφut, request IMPORT _period_ input IMPORT .pulsecount. input, pulsecount, ouφut IMPORT _pulsewidth_ ouφut IMPORT .quadrature, input IMPORT .serial, input, serial, ouφut IMPORT .totalize, input, triac, ouφut, triggered, count, ouφut IMPORT _init_ timer, counterl,, init, timer, counter2 IMPORT _init_ baud,, io, set, clock IMPORT io, input, value io, change, init, select, input, fn list of imported symbols - Messaging support IMPORT _bound_ mt IMPORT _msg_ alloc,, msg, alloc, priority __ msg, cancel,, msg, free IMPORT _msg_ receive,, msg, send IMPORT _msg_ addr, blockget, msg. addr, get, msg, auth, get, msg. code, g IMPORT _msg_ data, blockget, msg, data. get_ msg. len, get, msg, service, g IMPORT _msg_ addr. blockset. msg, addr, set, msg, autii, set, msg. code, se IMPORT _msg_ data, blockset. msg, data. set. msg. domain, set, msg, node, IMPORT _msg_ priority, set _»_ msg, service, set. msg, tag, set IMPORT _resp_ alloc resp. cancel,, resp, free,, resp. receive,, resp. send IMPORT _resp_ code, set. resp. data, blockset. resp. data, set ; list of imported symbols - Netwo± Variable support IMPORT .bound, nv,, nv. poll,. nv_ poll, all IMPORT _nv_ update,, nv, update, int. nv_ update, long IMPORT _nv_ update, int. offset, nv_ update, long, offset ; list of imported symbols - Timer support IMPORT _timer_ get timer, off IMPORT _timer_ mset, timer, mset. repeat, timer, sset, timer, sset, repeat ; List of imported symbols - Event support IMPORT _flush_ completes IMPORT Jo, changes,, io. changes, to,, io, changes, by,, io. update, occurs IMPORT _msg_ arrives,, msg, code, arrives IMPORT _msg_ completes,, msg, fails,, msg, succeeds IMPORT _nv_ update, completes,. nv_ update, faih . nv. update, succeeds IMPORT _nv_ update, occurs IMPORT .offline, .online,, resp. arrives IMPORT _timer_ expires^, timer, expires, any,, wink ; list of Imported symbols - Misc builtin function support 1 TABUEXV 2 GENERAL DEFΠVΠTTONS 3 4 The following definitions are generally applicable to terms used in this specification: 5 Neuron, or node: A neuron or node is an intelligent programmable element or 6 elements providing remote control, sensing, and/or communications, tiiat when 7 interconnected with other like elements foπns a communications, control and/or sensing 8 network. Nodes are named witii Neuron ids (see below). Nodes may be addressed as a 9 § part of a domain and subnet using a node number. The node number in the preferred I 0 J embodiment is 7 bits. Multiple nodes may be addressed using a group id. The group id in I I I the preferred embodiment is 8 bits. 1 2 1 Neuron id: Nodes in the present invention are assigned a unique identification 1 3 I number at the time of manufacture. The identification number is preferably 48-bits long. 14 This 48-bit identification number does not change during die lifetime of node. As is 15 appreciated, die assignment of a unique identification to each individual node allows for 16 numerous advantages. This 48-bit identification number may be referred to as die node .id. 17 Domain addresses: The term "domain" is used to describe a virtual netwo± 18 wherein aU communication, as supported by the network of die present invention, must be 19 within a single domain. Any required inter-domain communication must be facilitated by 20 application level gateways. In the preferred embodiment domains are identified with 21 48-bit domain identifiers. However, in certain applications the size of the domain field may 22 vary. -a== - ===s===! ____ =I^^ Subnet — Li the preferred embodiment a subnet is a subset of a domain containing from 0 to 127 nodes, hi die preferred embodiment subnets are identified witii an 8-bit subnet identification number. A single domain may contain up to 255 subnets. Group: A group is a set of nodes which work together to perform a common function. L the preferred embodiment, groups are identified with an 8-bit group identification number. A single domain may contain up to 255 groups. For example, a group may be created to include aU nodes in a connection, such as connection_2 142 in which case the group would include a node at temperature sensor_2 116, a node at ceU_l 101 and a node at ceU_2121. Addressing — The present invention provides for a hierarchical address structure and supports three basic addressing modes: (1) (Domain, Subnet, Node number); (2) (Domain, Subnet Nodejd); and (3) (Domain, Group).

Claims: CLAIMS What is claimed is: 1. A mediod for declaring and configuring variables in a program for execution on a processor, said mediod comprising the steps of: (a) declaring a state of a parameter for a variable, said parameter indicating a characteristic of said variable; (b) declaring said parameter as configurable by a configuration process; (h) compiling said program, said compiling producing a compiled program as an ouφut; said compiling further producing an ouφut file providing information on said parameter, said information including information on said parameter, (d) configuring said program using a configuration routine said configuration process including varying the state of said parameter. 2. The method as recited by claim 1 wherein said state of said parameter is selected from a set of states consisting of unacknowledged, unacknowledged widi repeat and acknowledged. 3. The method as recited by claim 1 wherein said state of said parameter is selected from a set of states consisting of authenticated and unautiienticated. 4. The method as recited by claim 1 wherein said state of said parameter is selected from a set of states consisting of priority and nonpriority. 5. A method of scheduling tasks in a computer system comprising the steps of: (a) declaring a first event as a first logical programming expression; (b) declaring at least one first step to be accomplished by a first task; (c) evaluating said first logical programming expression; (d) determining said first logical programming expression evaluates to true; and (e) executing said at least one first step responsive to determining said first logical programming expression evaluates to true. 6. The method as recited by claim 5 wherein said method further includes die steps of: (f) declaring a second event as a second logical programming expression, said second event declared as a priority event (g) declaring at least one second step to be accomplished by a second task; (h) evaluating said second logical programming expression prior to evaluating said first logical programming expression; (i) determining said second logical programming expression evaluates to true; and (j) executing said at least one second step responsive to determining said second logical programming statement evaluates to true. 7. The mediod as recited by claim 5 wherein said declaration of said first event comprises the keyword "when" followed by said first logical programming expression. . A method of prioritizing and scheduhng tasks in a computer system comprising the steps of: (a) declaring a first event as a priority event (b) declaring at least one first step to be accomplished by a first task; (c) declaring a second event as a non-priority event (d) delaring at least one second step to be accomplished as a second task; (e) evaluating said first event to determine if said first event has occurred; (f) evaluating said second event to determine if said second event has occured, said evaluation of said second event being accomplished subsequent to said evaluation of said first event (g) determ ing said first event has occurred; and (h) executing said at least one first step responsive to deteπriining said first event has occurred. 9. The method as recited by claim 8 wherein said first event is declared as a logical programming expression. 10. In a mediod of scheduling tasks to be executed by a computer, said method including evaluating each of a plurahty of events associated with each of said tasks in a round robin fashion and conditionally executing said associated ones of said tasks upon evaluation of one of said events as true, the improvement wherein: (a) certain of said events are designated as priority events and others of said events are evaluated as non-priority events; and (b) said priority events are evaluated prior to evaluation of said non-priority events. 11. The method as recited by claim 9 wherein said at least one of said plurahty of events is declared as a logical programming expression. 12. In a device for scheduling execution of tasks responsive to occurrence of events, said device comprising a processor for executing said tasks, wherein said events may comprise any of a plurahty of predefined event types, an improvement wherein said events may further comprise a logical programming expression. 13. The improvement of claim 12 wherein said logical programming expression may comprise any valid C programming language logical statement 14. A method for declaring and accessing I/O devices comprises the steps of: (1) declaring an I/O device designating a hardware device, a device type and a device name; (2) configuring said hardware device to perform functions of said device type responsive to declaring said VO device; (3) executing an operation, said operation designating said device name; and (4) performing an I O operation comprising functions of said device type on said hardware device responsive to execution of said operation. 15. The method of claim 14 wherein said device type is chosen from the set consisting of bit, bitshift frequency, triac, pulsewidth, pulsecount, ontime, serial, parallel, microwire, quadrature, period, oneshot nibble and byte.

Inventors: DOLIN ROBERT A JR, EINKAUF ROBERT L, RILEY GLEN M, DOLIN, ROBERT, A., JR., EINKAUF, ROBERT, L., RILEY, GLEN, M.
Applicants: ECHELON CORP, ECHELON CORPORATION
Application year: 1992
Main classification: G06F15
IPC codes: G05B19, G06F9, H04L29