Patent Description:
A controller may be used to control operations of a variety of different components. Programming tools may be used to program or otherwise configure a controller for controlling a particular function or feature of a piece of equipment. There may be a desire to make a relatively minor edit to the programming of the controller. This edit may be made using a programing tool. To implement the change, the programming tool typically needs to compile the entire control program and download the entire compiled control program to the controller. This can be time-consuming, particularly over a low bandwidth communication channel. There is a need for an improved way of programming or otherwise configuring controllers for operation, particularly with respect to making changes to an existing program or configuration.

The present disclosure relates generally to methods and systems for programming a controller. A method of programming a controller that is configured to control operation of a building component includes using a programming tool to build controller logic that utilizes sub-structures organized within a hierarchal tree, and then downloading the controller logic including the sub-structures organized within the hierarchal tree to the controller. The controller is operated using the downloaded controller logic such that the controller controls operation of the building component. The programming tool is subsequently used to change one or more of the sub-structures, such as editing one or more of the sub-structures, adding one or more sub-structures, deleting one or more of the sub-structures and/or otherwise changing the controller logic. The one or more updated sub-structures are downloaded to the controller while not downloading one or more of the other sub-structures that were not updated. The method includes continuing to control operation of the building component using the controller logic that now includes the one or more updated sub-structures.

The controller that is configured to control operation of a building component includes a memory that is configured to store a modular controller logic that has a plurality of sub-structures that are arranged in a hierarchal tree. A processor is operatively coupled to the memory and is configured to execute the modular controller logic in order to control operation of the building component. A communications block is operably coupled to the processor and is configured to communicate with a programming tool that is used to create and/or edit the sub-structures within the modular controller logic. The modular controller logic is initially created using the programming tool and is downloaded to the controller via the communications block for execution. Subsequent updates to one or more of the sub-structures are subsequently downloaded to the controller via the communications block once updated via the programming tool, while sub-structures that were not updated are not downloaded.

In another example, a method of testing a modular controller logic within a programming tool is provided. The modular controller logic includes a plurality of sub-structures that are organized into a hierarchal tree. The modular controller logic is present within a controller and is synchronized within the programming tool, and the programming tool is configured to test execute the modular control logic directly within the programming tool. The modular control logic is built within the programming tool, and is test executed within the programming tool. One or more sub-structures within the modular control logic are updated to provide an updated modular control logic. The updated modular control logic is test executed within the programming tool.

The preceding summary is provided to facilitate an understanding of some of the innovative features unique to the present disclosure and is not intended to be a full description. A full appreciation of the disclosure can be gained by taking the entire specification, claims, figures, and abstract as a whole.

The disclosure may be more completely understood in consideration of the following description of various examples in connection with the accompanying drawings, in which:.

It should be understood, however, that the intention is not to limit the disclosure to the particular examples described. The dependent claims define preferred embodiments.

The following description should be read with reference to the drawings, in which like elements in different drawings are numbered in like fashion. The drawings, which are not necessarily to scale, depict examples that are not intended to limit the scope of the disclosure. Although examples are illustrated for the various elements, those skilled in the art will recognize that many of the examples provided have suitable alternatives that may be utilized.

It is noted that references in the specification to "an embodiment", "some embodiments", "other embodiments", etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is contemplated that the feature, structure, or characteristic is described in connection with an embodiment, it is contemplated that the feature, structure, or characteristic may be applied to other embodiments whether or not explicitly described unless clearly stated to the contrary.

<FIG> is a schematic block diagram of an illustrative system <NUM>. The illustrative system <NUM> includes a building component <NUM>. The building component <NUM> may generically represent any of a number of different components that may be found within any of a variety of building systems. Illustrative but non-limiting examples of building systems include Heating, Ventilating and Air Conditioning (HVAC) systems, security systems, lighting systems, fire systems, and others. For example, if the building component <NUM> is part of an HVAC system, the building component <NUM> may represent part of an air handling system such as a Variable Air Volume (VAV) box. The building component <NUM> may represent a heat source such as a furnace or a boiler. The building component <NUM> may represent a cooling source such as an air conditioning compressor or a fan motor. These are just examples, and are not intended to be limiting in any manner or fashion.

The illustrative system <NUM> includes a controller <NUM>. It will be appreciated that the controller <NUM> may be designed or programmed to control an operation of the building component <NUM>. In some cases, the controller <NUM> may be a Direct Digital Control (DDC) controller, although this is not required in all cases. In some cases, the controller <NUM> may operate in accordance with a hierarchal control logic in which a number of sub-structures are arranged within a hierarchal structure. The controller <NUM> may work through each of the sub-structures within the hierarchal structure, in an order dictated by how each of the sub-structures are linked together. In <FIG>, the controller <NUM> may be seen as including a hierarchal control logic <NUM>. As illustrated, the hierarchal control logic <NUM> is simplified and includes several sub-structures <NUM> that are individually labeled as 18a, 18b, 18c. It will be appreciated that this is highly simplified, as the hierarchal control logic <NUM> may have any number of sub-structures, including but not limited to folders, function blocks and links between folders and/or function blocks. Illustrative but non-limiting examples of folders, function blocks and links therebetween may be found in <CIT> and <CIT>, both of which are incorporated by reference herein in their entirety.

The illustrative system <NUM> includes a programming tool <NUM> that can be used to initially program the controller <NUM>. For example, a user may use the programming tool <NUM> to create the hierarchal control logic <NUM> and then subsequently download the hierarchal control logic <NUM> from the programming tool <NUM> to the controller <NUM>. If desired, the user may use the programming tool <NUM> to make one or more edits, corrections, additions or deletions to the hierarchal control logic <NUM>. In some cases, only the sub-structures <NUM> that are edited, added, deleted, moved or otherwise changed may be downloaded to the controller <NUM>, while the other sub-structures <NUM> that are not changed in any manner or fashion, are not downloaded again to the controller <NUM>. It will be appreciated that this reduces the communication time that would otherwise be needed to update the hierarchal control logic <NUM>. In some cases, the controller <NUM> may be configured to operate in accordance with each of the sub-structures <NUM> outlined within the hierarchal control logic <NUM> without having to separately compile each of the sub-structures individually, or compile the hierarchal control logic <NUM> as a whole. Instead, the controller <NUM> may include an engine that is configured to interpret the hierarchal control logic <NUM> and produce corresponding control signals and/or control commands for controlling one or more building components.

<FIG> is a schematic block diagram of an illustrative controller <NUM> that may be considered as an example of the controller <NUM> that is referenced with respect to <FIG>. The illustrative controller <NUM> is configured to control operation of a building component (such as but not limited to the building component <NUM>) and includes a memory <NUM> that is configured to store modular controller logic such as the hierarchal control logic <NUM> that includes a plurality of sub-structures (such as but not limited to the sub-structures <NUM>) that are arranged in a hierarchal tree. For example, the controller <NUM> may be configured to control operation of a Heating, Ventilating and Air Conditioning (HVAC) system component, a lighting system component, a water heater system component, a water softener system component, a sprinkler system component or a security system component.

The illustrative controller <NUM> includes a processor <NUM> that is operably coupled to the memory <NUM> and that is configured to execute the modular controller logic in order to control operation of the building component. A communications block <NUM> is operably coupled to the processor <NUM> and is configured to communicate with a programming tool (such as but not limited to the programming tool <NUM>) that is used to create and/or edit the sub-structures within the modular controller logic. In some cases, the modular controller logic may be initially created using the programming tool and may be downloaded to the controller <NUM> via the communications block <NUM> for execution. Subsequent updates to one or more of the sub-structures may be subsequently downloaded to the controller <NUM> via the communications block <NUM>, while not downloading one or more of the sub-structures that were not updated. At least some of the sub-structures may individually include one or more of a link, a folder and a function block. Each of the sub-structures may, for example, include an address linking path that defines an address space and a breadcrumb number that defines a unique component within the address space. It will be appreciated that the address linking path and breadcrumb number, in combination, link each sub-structure to a particular location within the modular controller logic so that the controller <NUM> knows how and when to execute the instructions present within each of the sub-structures.

<FIG> is a schematic block diagram of an illustrative controller <NUM>. The illustrative controller <NUM> may be considered as being an example of the controller <NUM> and/or the controller <NUM>. In some instances, the controller <NUM> may include features and/or functionality ascribed to the controller <NUM> and/or the controller <NUM>. Similarly, the controller <NUM> and/or the controller <NUM> may include features and/or functionality ascribed to the other, or may include features and/or functionality ascribed to the controller <NUM>. As illustrated, the illustrative controller <NUM> is a DDC (Direct Digital Control) controller, but this is not required. The illustrative controller <NUM> includes a DDC Command Service block <NUM> and a Storage Manager <NUM>. The controller <NUM> includes a Flash Memory block <NUM> and a Serial Flash Memory block <NUM>. The Flash Memory block <NUM> may be used to store the modular control logic, while the Serial Flash Memory block <NUM> may be used to store other information, such as but not limited to data used for operating a user interface (not illustrated).

The Flash Memory block <NUM> is in communication with a DDC Engine <NUM>. The DDC Engine <NUM> may be configured to execute each of the sub-structures included in the modular control logic, which itself may be stored within the Flash Memory block <NUM>. A DDC Runtime block <NUM> remains in communication with the DDC Engine <NUM>. In some cases, the modular control logic stored within the Flash Memory block <NUM> may be downloaded to a programming tool not previously used to create and/or edit the modular control logic. In some cases, graphical information (e.g. x,y display location of each of the function blocks as well as interconnect paths) and/or other information related to the modular control logic may be retrieved from the Serial Flash Memory block <NUM>. This may allow a user to read and display the modular control logic of a controller using a programming tool that does not have immediate access to the programming data used to previously program the controller. This may be particularly useful when a technician arrives at a site without having access to previous programming tool data that was used to previously program the controller. The technician can connect his programming tool to any controller, at which time his programming tool may download the modular control logic from the Flash Memory block <NUM> and the graphical information (e.g. x,y location of each of the function blocks as well as interconnect paths) and/or other information related to the modular control logic from the Serial Flash Memory block <NUM> of the controller. His programming tool may use this downloaded information to re-create the programming tool environment that was previously used to program the controller. The technician can then make changes, and download those changes to the controller.

The DDC Command Service Block <NUM> may accept Commands from a programming tool. The programming tool may issue Commands to the DDC Command Service Block <NUM> to make changes or updates to one or more of the sub-structures of the modular control logic stored in the Flash Memory block <NUM>. Such Commands may be used to selectively download the sub-structures that were changed using the programming tool while not downloading the sub-structures that did not change. Attached hereto is an Appendix that includes a number of example Commands and corresponding Responses that may be carried out using a programming tool to create and/or edit a modular control logic in a controller as described herein. The DDC Command Service Block <NUM> of the controller may be used to interpret and implement the Commands. A few illustrative Commands contained in the Appendix include Create Child, Delete Child, Set Properties, Set Predecessor and Set Multiple Links. It will be appreciated that the Command to Create a Child may be used if there is a desire to insert an additional function block within an existing modular control logic hierarchy. The Command Delete Child is, of course, the opposite, and would be used to delete a child function block that was previously created. The Set Properties Command may be used, for example, if a user desired to change or add additional properties to one or more function blocks. The Command to Set Predecessor may be used to select or change an order of operation of the function blocks. The Set Multiple Links Command may be used to instruct how a number of function blocks are to be operably coupled, meaning setting which inputs are coupled to which outputs. These are just examples. A more complete listing of illustrative available commands is contained in the attached Appendix.

<FIG> is a flow diagram showing an illustrative method <NUM> of programing a controller (such as but not limited to the controller <NUM>, the controller <NUM> and the controller <NUM>) that is configured to control operation of a building component (such as but not limited to the building component <NUM>). A programming tool may be used to build a controller logic that utilizes sub-structures that are organized within a hierarchal tree, as indicated at block <NUM>. The controller logic, including the sub-structures that are organized within the hierarchal tree, may be downloaded to the controller, as indicated at block <NUM>. The sub-structures may include one or more folders, and at least some of the one or more folders may include one or more function blocks. In some cases, the sub-structures may include one or more links for logically linking one or more of the function blocks. The sub-structures may, for example, include an address linking path that defines an address space as well as a breadcrumb number that defines a unique position within the address space. Accordingly, the combination of the address linking path and the breadcrumb uniquely identifies each of the sub-structures and their position relative to each of the other sub-structures as well as the hierarchal tree in which each of the sub-structures are arranged and organized.

The controller may be operated via the controller logic such that the controller controls operation of the building component, as indicated at block <NUM>. The programming tool may subsequently be used to update one or more of the sub-structures, as indicated at block <NUM>. The one or more updated sub-structures may be downloaded to the controller while not downloading one or more of the sub-structures that were not updated, as indicated at block <NUM>. This may be accomplished using one or more of the Commands in the attached Appendix. Operation of the building component may continue using the controller logic that now includes the one or more updated sub-structures, as indicated at block <NUM>.

In some cases, each of the sub-structures may include a calculated and stored Cyclic Redundancy Check (CRC) value and each updated sub-structure includes an updated calculated and stored CRC value. The overall controller logic itself may have a CRC value that is a summation of each of the CRC values for each of the sub-structures.

As noted with respect to block <NUM>, updated sub-structures are downloaded from the programming tool to the controller. This may be accomplished using one or more of the Commands contained in the attached Appendix. In some cases, the programming tool may periodically be used to compare a current CRC value for each sub-structure to a stored CRC value for the same sub-structure to look for sub-structures that have been updated since a previous check. Any sub-structures that are thus found to have been updated in the programming tool since a previous check may be downloaded to the controller. In some cases each sub-structure within the programming tool may include a logical UPDATE flag, and updating a sub-structure includes setting the logical UPDATE flag for that sub-structure to true. The logical UPDATE flag may be checked for each sub-structure, and for each logical UPDATE flag set to true in the programming tool, the corresponding updated sub-structure may be downloaded to the controller. In some cases, downloading the one or more updated sub-structures to the controller occurs immediately after the programming tool is used to update the one or more updated sub-structures.

<FIG> is a flow diagram showing an illustrative method <NUM> of testing a modular controller logic within a programming tool, where the modular controller logic includes a plurality of sub-structures that are organized into a hierarchal tree. The modular controller logic is present within a controller and is synchronized within the programming tool such that the programming tool is configured to test execute the modular control logic directly within the programming tool. The modular control logic may be built within the programming tool, as indicated at block <NUM>. The modular control logic may be test executed within the programming tool, as indicated at block <NUM>. One or more of the sub-structures within the modular control logic may be updated to provide an updated modular control logic, as indicated at block <NUM>. The updated modular control logic may be test executed, as indicated at block <NUM>. In some cases, the updated modular control logic may be downloaded to the controller so that the controller can execute the updated modular control logic.

<FIG> is a schematic block diagram showing an illustrative modular control logic <NUM>. As shown, the illustrative modular control logic <NUM> includes a number of folders <NUM> that are organized within a hierarchal tree <NUM>. Some of the folders <NUM> include one or more function blocks <NUM> contained therein. Each of the function blocks <NUM> may, for example, be OR function block, AND function block, a PID function block, among others. Each of the function blocks <NUM> include one or more inputs, shown as hollow carrots above each function block, and one or more outputs that are shown as solid carrots below each function block. In this particular example, a change is being made with respect to which output of one function block is being coupled with an input of another function block. Function block 86a can be seen as having an Output <NUM> and an Output <NUM>. Function block 86b can be seen as having an Input <NUM> and an Input <NUM>. The Output <NUM> of the function block 86a has an ORD, which may be considered as equivalent to an address linking path, of /<NUM>/<NUM>/<NUM>/<NUM> while the function block 86b has an ORD of /<NUM>/<NUM>/<NUM>/<NUM>. These addresses show how each of the folders <NUM> and the function blocks <NUM> are operably coupled.

A programming tool such as the programming tool <NUM> (<FIG>) may for example display a modular control logic such as the illustrative modular control logic <NUM> shown in <FIG>. In some cases, a programming tool may have a display that is divided into a left panel and a right panel. The left panel, for example, may display a hierarchal tree, with folders, such as that shown in <FIG>. The right panel, for example, may display a number of function blocks as shown in <FIG>. The right panel may, for example, display a number of function blocks in greater detail, as shown in <FIG>.

<FIG> is a screen capture of a portion of an illustrative but non-limiting wire screen <NUM>. It will be appreciated that an actual wire screen <NUM> may be much larger, and include a large number of function blocks and accompanying links between the various inputs and outputs of each of the function blocks. To call out a particular example, it can be seen that the wire screen <NUM> includes an RHFLOAT floating output function block <NUM>. As can be seen, the RHFLOAT floating output function block <NUM> displays various parameter values. In some cases, which parameter values are used and/or displayed may be user-programmed. In the example show, one of the displayed parameter values is an HOA parameter <NUM> and its accompanying value <NUM>. The HOA parameter <NUM> represents a particular HOA (HAND-OFF-AUTO) switch that is associated with the RHFLOAT floating output function block <NUM>. A HOA switch is a mechanically actuated switch that is actuatable between a HAND (H) setting which represents a manual "ON" setting, an OFF (O) setting which shuts off a particular output associated with that particular HOA switch, and an AUTO (A) setting which places the particular output in automatic control (e.g., to be controlled by a control algorithm of the controller).

The RHFLOAT floating output function block <NUM> is associated with a floating motor. A floating motor is a motor that can be driven in a first direction (say, to open a damper) by applying voltage pulses to a first electrical contact, and can be driven in a second direction (say, to close the damper) by applying voltage pulses to a second electrical contact. The floating motor would of course also have a ground contact. The RHFLOAT floating output function block <NUM> can be seen as being operably coupled to an RHOPN1 function block <NUM> that controls whether an output DO-<NUM> of the controller is energized and a RHCL01 function block <NUM> that controls whether an output DO-<NUM> is energized. This can be seen by a PIN parameter <NUM> and associated value <NUM> as shown in the RHOPN1 function block <NUM> and a PIN parameter <NUM> and associated value <NUM> as shown in the RHOPN1 function block <NUM>. For purposes of illustration, say that the output DO-<NUM>, when energized, drives the floating motor in a first direction while the output DO-<NUM>, when energized, drives the floating motor in an opposing second direction. Neither are currently energized, as indicated in the RHFLOAT floating output function block <NUM> as seen by the OPEN parameter <NUM> and associated FALSE value <NUM> and the CLOSED parameter <NUM> and associated FALSE value <NUM>. This is just an example wire screen of modular control logic for a controller.

Claim 1:
A method of programming a controller (<NUM>) that includes a memory for storing a controller logic and a processor operatively coupled to the memory for executing the controller logic stored in the memory to control operation of a building component (<NUM>), the method comprising:
using a programming tool (<NUM>) to build the controller logic that utilizes sub-structures organized within a hierarchal tree, the sub-structures including one or more folders with one or more function blocks within at least some of the one or more folders and one or more links that logically link one or more of the function blocks;
downloading the controller logic to the memory of the controller including the sub-structures organized within the hierarchal tree including the one or more function blocks and the one or more links that logically link one or more of the function blocks;
the processor of the controller executing the controller logic stored in the memory of the controller to control operation of the building component;
subsequently using the programming tool to update one or more of the sub-structures including one or more of the function blocks and/or one or more links that logically link one or more of the function blocks of the controller logic, resulting in an updated controller logic;
the programming tool flagging the function blocks and/or the one or more links of the controller logic that have been updated using the programming tool;
the programming tool downloading the one or more flagged function blocks and/or one or more flagged links to the memory of the controller while not downloading the one or more function blocks and/or the one or more links that were not flagged by the programming tool, wherein the one or more of the function blocks and/or the one or more links that were not flagged by the programming tool and stored in the memory, in combination with the one or more flagged function blocks and/or the one or more flagged links downloaded to the memory of the controller, represent the updated controller logic in the memory of the controller; and
the processor of the controller executing the updated controller logic stored in the memory of the controller to control operation of the building component.