Results from Field Testing of 

Embedded Air Handling Unit and 

Variable Air Volume Box Fault 

Detection Tools

Jeffrey Schein

NISTIR 7365
NISTIR 7365

Results from Field Testing of 

Embedded Air Handling Unit and 

Variable Air Volume Box Fault 

Detection Tools

Jeffrey Schein 

Building Environment Division 

Building and Fire Research Laboratory 

National Institute of Standards and Technology 

Gaithersburg, MD 20899-8530 

October 2006

U.S. Department of Commerce 

Carlos M. Gutierrez, Secretary 

Technology Administration 

Robert Cresanti, Under Secretary of Commerce for Technology 

National Institute of Standards and Technology

 William Jeffrey, Director 
Executive Summary 

Fault detection and diagnostic (FDD) methods that can detect common mechanical faults and 

control errors in air-handling units (AHUs) and variable-air-volume (VAV) boxes were 

developed and commercialized. The tools are sufficiently simple that they can be embedded in 

commercial building automation and control systems and rely only upon the sensor data and 

control signals that are commonly available in these systems. AHU Performance Assessment 

Rules (APAR) is a diagnostic tool that uses a set of expert rules derived from mass and energy 

balances to detect faults in air-handling units. VAV box Performance Assessment Control Charts 

(VPACC) is a diagnostic tool that uses statistical quality control measures to detect faults or 

control problems in VAV boxes. 

This report describes the transfer of the FDD methods from research to commercial use. An 

interface between the FDD tools and the building operator is introduced. Results are presented 

from a multiple site field demonstration in which APAR and VPACC were embedded in 

commercial AHU and VAV box controllers. Robust FDD parameters are tabulated for both 

APAR and VPACC. The parameters, which eliminate the need for site-specific configuration, 

were developed based on experience from the field demonstration. 

Key words: BACnet, building automation and control, cybernetic building systems, direct digital 

control, energy management systems, fault detection and diagnostics 

Acknowledgments

This work was supported in part by the California Energy Commission. 
Table of Contents 

1 Introduction............................................................................................................................. 5 

2 Methodology........................................................................................................................... 6 

2.1 AHU Performance Assessment Rules (APAR) .............................................................. 6 

2.2 VAV Box Performance Assessment Control Charts - VPACC.................................... 11 

3 FDD Interface ....................................................................................................................... 14 

3.1 Alarms........................................................................................................................... 14 

3.2 Work Orders.................................................................................................................. 14 

3.3 Fault Codes ................................................................................................................... 14 

4 Robust FDD Parameters ....................................................................................................... 15 

4.1 Tuning FDD Parameters for Optimum Performance.................................................... 17 

4.1.1 Tuning APAR Parameters..................................................................................... 17 

4.1.2 Tuning VPACC Parameters.................................................................................. 18 

5 Field Test .............................................................................................................................. 19 

5.1 Test Sites....................................................................................................................... 19 

5.1.1 SITE-1................................................................................................................... 19 

5.1.2 SITE-2................................................................................................................... 19 

5.1.3 SITE-3................................................................................................................... 19 

5.1.4 SITE-4................................................................................................................... 19 

5.1.5 SITE-5................................................................................................................... 20 

5.1.6 SITE-6................................................................................................................... 20 

5.1.7 SITE-7................................................................................................................... 20 

5.1.8 SITE-8................................................................................................................... 20 

5.1.9 System Coverage .................................................................................................. 21 

5.2 Procedure ...................................................................................................................... 22 

5.3 Results........................................................................................................................... 24 

5.3.1 SITE-1................................................................................................................... 25 

5.3.2 SITE-2................................................................................................................... 35 

5.3.3 SITE-3................................................................................................................... 40 

5.3.4 SITE-4................................................................................................................... 41 

5.3.5 SITE-5................................................................................................................... 45 

5.3.6 SITE-6................................................................................................................... 46 

5.3.7 SITE-7................................................................................................................... 51 

5.3.8 SITE-8................................................................................................................... 52 

6 Summary............................................................................................................................... 53 

7 References............................................................................................................................. 54 

Appendix 1 APAR Pseudocode.................................................................................................... 55 

Appendix 2 VPACC Pseudocode ................................................................................................. 70 
5

1 Introduction 

Building HVAC equipment routinely fails to satisfy performance expectations envisioned at 

design. Such failures often go unnoticed for extended periods of time. Additionally, higher 

expectations are being placed on a combination of different and often conflicting performance 

measures, such as energy efficiency, indoor air quality, comfort, reliability, limiting peak 

demand on utilities, etc. To meet these expectations, the processes, systems, and equipment used 

in both commercial and residential buildings are becoming increasingly sophisticated. This 

development both necessitates the use of automated diagnostics to ensure fault-free operation 

and enables diagnostic capabilities for the various building systems by providing a distributed 

platform that is powerful and flexible enough to perform fault detection and diagnostics (FDD). 

Most of today’s emerging FDD tools are stand-alone software products that do not reside in a 

building control system. Thus, trend data files must be processed off-line, or an interface to the 

building control system must be developed to enable on-line analysis. This does not scale well 

because all of the data must be obtained at a single point. A better solution is to embed FDD in 

the local controller for each piece of equipment, so that the FDD algorithm is executed as a 

component of the control logic. NIST has developed FDD methods that can detect common 

mechanical faults and control errors in air-handling units (AHUs) and variable-air-volume 

(VAV) boxes. The tools are sufficiently simple that they can be embedded in commercial 

building control systems and only rely upon sensor data and control signals that are commonly 

available in commercial building automation and control systems. 

In previous research, software tools have been developed to implement APAR and VPACC, then 

tested and refined using data generated by simulation, emulation, and laboratory testing [1] and 

data collected from real buildings [2]. APAR and VPACC have also been embedded in 

commercial AHU and VAV box controllers from several manufacturers and tested in emulation 

and laboratory environments [3]. 

The project described in this report was designed to move the FDD algorithms from the research 

environment to commercial HVAC control products. Several methods to communicate the 

results of the FDD calculations to the system operator were developed. Robust FDD parameters 

for both APAR and VPACC were developed to eliminate the need for site-specific configuration. 

APAR and VPACC were embedded in commercial AHU and VAV box controllers for a multiple 

site field demonstration which was conducted to establish confidence in automated diagnostics 

and to familiarize potential vendors and users with FDD. 
6

2 Methodology 

2.1 AHU Performance Assessment Rules (APAR) 

The basis for the air handling unit fault detection methodology is a set of expert rules used to 

assess the performance of the AHU. The tool developed from these rules is APAR (AHU 

Performance Assessment Rules). A brief overview of APAR is presented here; a detailed 

description is available elsewhere [5]. 

APAR is applicable to single duct VAV and constant volume AHUs with airside economizers. 

The operation of this type of AHU during occupied periods can be classified into a number of 

modes, depending on the heating/cooling load and outdoor air conditions. Each mode of 

operation can be characterized by a different range of values for each of three control signals: 

the heating coil valve, cooling coil valve, and mixing box dampers. For convenience, the 

operating modes are summarized below: 

• Mode 1: heating 

• Mode 2: cooling with outdoor air 

• Mode 3: mechanical cooling with 100 % outdoor air 

• Mode 4: mechanical cooling with minimum outdoor air 

• Mode 5: unknown 

Once the mode of operation has been established, rules based on conservation of mass and 

energy can be evaluated using the sensor and control signal information that is typically available 

from AHUs. APAR has a total of 28 rules (see Table 2.1). Each rule is expressed as a logical 

statement that, if true, indicates the presence of a fault. Because the mass and energy balances 

are different for each mode of operation, a different subset of the rules applies to each mode. 

There are also some rules that are independent of the operating mode and are always evaluated. 

A list of possible causes is associated with each rule (see Table 2.2). 

Several modifications to the basic APAR algorithm were made to enhance usability and reduce 

nuisance alarms. Each rule can be individually disabled by the user in order to eliminate nuisance 

alarms caused by fault conditions that are known to the maintenance staff, but will not be 

repaired immediately. Since the rules are based on steady state assumptions, there are several 

delays, during which the rules are not evaluated, to ensure that quasi-steady state conditions 

exist. There is a delay at the beginning of occupancy and another delay after each mode switch. 

A third delay establishes the length of time a rule must be satisfied before an alarm is reported. 

Furthermore, the rules are evaluated using exponentially weighted moving averages of the raw 

data rather than the current values [5]. 

The rules in Table 2.1 are generic, not tightly linked to a specific sequence of operations. The 

rule set was developed for AHUs with hydronic heating and cooling coils and relative enthalpybased economizers, however, it can easily be adapted for different types of AHUs. For example, 

Rules 9 and 15 will change based on the type of economizer, whether it is temperature- or 

enthalpy-based, and whether it compares outdoor conditions to return or to a fixed changeover 

condition, or some combination thereof. If the cooling coil uses direct expansion instead of 

chilled water, Rules 13, 14, 19, and 20 do not apply. Also, the causes in Table 2.2 related to the 
7

cooling coil valve (valve stuck or leaking) or the chilled water system (chilled water supply 

temperature too high, problem with chilled water circulating pump, chilled water not available) 

are interpreted as problems with the mechanical refrigeration system. If some form of staged 

heating (electric or combustion) is used instead of hydronic heating, Rules 3 and 4 do not apply. 

Also, the causes in Table 2.2 related to the heating coil valve (valve stuck or leaking) or the hot 

water system (hot water supply temperature too low, problem with hot water circulating pump) 

are interpreted as problems with the staged heating system. For single zone or other AHUs with 

no supply air temperature setpoint, Rules 5, 8, 13, 19, and 25 do not apply. If there is no mixed 

air temperature sensor, delete Rules 1, 2, 7, 10, 11, 16, 18, 26, and 27 cannot be evaluated and 

therefore do not apply. 
8

Table 2.1: APAR Rule Set 

Mode Rule # Rule Expression (true implies existence of a fault)

1 Tsa < Tma + ∆Tsf - εt

2 For |Tra - Toa| ≥ ∆Tmin: |Qoa/Qsa - (Qoa/Qsa)min | > εf

 

3 |uhc – 1| ≤ εhc and Tsa,s – Tsa ≥ εt

Heating 

(Mode 1) 

4 |uhc – 1| ≤ εhc

5 Toa > Tsa,s - ∆Tsf + εt

6 Tsa > Tra - ∆Trf + εt

Cooling with 

Outdoor Air 

(Mode 2) 7 |Tsa - ∆Tsf - Tma| > εt

8 Toa < Tsa,s - ∆Tsf - εt

9 Toa > Tco + εt

10 |Toa - Tma| > εt

11 Tsa > Tma + ∆Tsf + εt

12 Tsa > Tra - ∆Trf + εt

13 |ucc – 1| ≤ εcc and Tsa – Tsa,s ≥ εt

Mechanical 

Cooling with 

100% Outdoor 

Air 

(Mode 3) 

14 |ucc – 1| ≤ εcc

15 Toa < Tco - εt

16 Tsa > Tma + ∆Tsf + εt

17 Tsa > Tra - ∆Trf + εt

18 For |Tra - Toa| ≥ ∆Tmin: |Qoa/Qsa - (Qoa/Qsa)min | > εf

19 |ucc – 1| ≤ εcc and Tsa – Tsa,s ≥ εt

Mechanical 

Cooling with 

Minimum 

Outdoor Air 

(Mode 4) 

20 |ucc – 1| ≤ εcc

21 ucc > εcc and uhc > εhc and εd < ud < 1 - εd

22 uhc > εhc and ucc > εcc

23 uhc > εhc and ud > εd

Unknown 

Occupied 

Modes 

(Mode 5) 24 εd < ud < 1 - εd and ucc > εcc

25 | Tsa – Tsa,s | > εt

26 Tma < min(Tra , Toa) - εt

27 Tma > max(Tra , Toa) + εt

All Occupied 

Modes 

(Mode 1, 2, 3, 4, 

or 5) 28 Number of mode transitions per hour > MTmax
9

Where 

 MTmax = maximum number of mode changes per hour 

Tsa = supply air temperature 

Tma = mixed air temperature 

Tra = return air temperature 

Toa = outdoor air temperature 

 Tco = changeover air temperature for switching between Modes 3 and 4 

Tsa,s = supply air temperature set point 

 ∆Tsf = temperature rise across the supply fan 

∆Trf = temperature rise across the return fan 

∆Tmin = threshold on the minimum temperature difference between the return and 

outdoor air 

Qoa/Qsa = outdoor air fraction = (Tma - Tra)/(Toa - Tra)

(Qoa/Qsa)min = threshold on the minimum outdoor air fraction 

uhc = normalized heating coil valve control signal [0,1] where uhc = 0 indicates 

the valve is closed and uhc = 1 indicates it is 100 % open 

ucc = normalized cooling coil valve control signal [0,1] where ucc = 0 indicates 

the valve is closed and ucc = 1 indicates it is 100 % open 

ud = normalized mixing box damper control signal [0,1] where ud = 0 indicates 

the outdoor air damper is closed and ud = 1 indicates it is 100 % open 

εt = threshold for errors in temperature measurements 

 εf = threshold parameter accounting for errors related to airflows (function of 

uncertainties in temperature measurements) 

 εhc = threshold parameter for the heating coil valve control signal 

εcc = threshold parameter for the cooling coil valve control signal 

 εd = threshold parameter for the mixing box damper control signal 
10

Table 2.2: APAR Diagnoses 

Supply Air Temperature Sensor Error

Return Air Temperature Sensor Error

Mixed Air Temperature Sensor Error

Outdoor Air Temperature Sensor Error

Leaking Cooling Coil Valve

Stuck Cooling Coil Valve

Undersized Cooling Coil

Fouled Cooling Coil

Chilled Water Supply Temperature Too High

Problem with Chilled Water Circulating Pump

Chilled Water not Available to Season

1 In heating mode, supply air temp should be greater than mixed air temp. X X XX 

2 Outdoor air fraction (percentage of outdoor air) is too low or too high. X X X 3 Heating coil valve command is fully open and supply air temp error exists. X X X 4 Heating coil valve command is fully open. If heating load increases, supply air temp will drift from setpoint. X X X 5 Outdoor air temp is too warm for cooling with outdoor air. X X6 Supply air temp should be less than return air temp. X X 7 Supply and mixed air temp should be nearly the same. X X X X 8 Outdoor air temperature is too cool for mechanical cooling with 100% outdoor air. X X 9 Outdoor air enthalpy is too great for mechanical cooling with 100% outdoor air.

10 Outdoor and mixed air temp should be nearly the same. X X 11 Supply air temp should be less than mixed air temp. X X X X X X X X 12 Supply air temp should be less than return air temp. X X X X X X X X 13 Cooling coil valve command is fully open and supply air temp error exists. X X X X X X X 14 Cooling coil valve command is fully open. If cooling load increases, supply air temp will drift from setpoint. X XXXXXX

15 Outdoor air enthalpy is too low for mechanical cooling with minimum outdoor air.16 Supply air temp should be less than mixed air temp. X X X X X X X X 17 Supply air temp should be less than return air temp. X X X X X X X X 18 Outdoor air fraction (percentage of outdoor air) is too low or too high. X X X 19 Cooling coil valve command is fully open and supply air temp error exists. X X X X X X X 20 Cooling coil valve command is fully open. If cooling load increases, supply air temp will drift from setpoint. X XXXXXX21 Heating coil valve, cooling coil valve, and mixing box dampers are all modulating simultaneously.22 Heating coil valve and cooling coil valve are both modulating simultaneously.23 Heating coil valve and mixing box dampers are both modulating simultaneously.24 Cooling coil valve and mixing box dampers are both modulating simultaneously.25 Persistent supply air temp error exists.26 Mixed air temp should be between return and outdoor air temp (mixed air temp too great). XXX27 Mixed air temp should be between return and outdoor air temp (mixed air temp too low). XXX28 Too many mode switches per hour.

Possible Dia

Rule # Alarm Description
11

2.2 VAV Box Performance Assessment Control Charts - VPACC 

The challenges presented in detecting and diagnosing faults in VAV boxes are similar to those 

encountered with other pieces of HVAC equipment. Generally there are very few sensors, 

making it difficult to determine what is happening in the device. Limitations associated with 

controller memory and communication capabilities further complicate the task. The number of 

different types of VAV boxes and lack of standardized control sequences add a final level of 

complexity to the challenge. These needs and constraints led to the development of VAV Box 

Performance Assessment Control Charts (VPACC), a fault detection tool that uses a small 

number of control charts to assess the performance of VAV boxes. A brief overview of VPACC 

is presented here; a detailed description is available elsewhere [6]. 

VPACC implements an algorithm known as a CUSUM (cumulative sum) chart [7]. The basic 

concept behind CUSUM charts is to accumulate the error between a process output and the 

expected value of the output. Large values of the accumulated error indicate an out of control 

process. Mathematically, the technique can be expressed as: 

zi = (xi – xexp) / σexp

where zi is the normalized error at time i, xi is the error at time i, xexp is the expected value of the 

error, and σexp is the expected variation of the error. Separate positive (S) and negative (T) sums 

are then accumulated. The slack parameter, k, is defined as the amount of variation that is 

considered normal, and therefore ignored. The cumulative positive and negative sums are 

calculated by: 

Si = max[0, zi – k + Si-1] 

Ti = max[0, -zi – k + Ti-1]

The final step is to compare S and T to the alarm limit, h, to determine whether the process is out 

of control. 

In order to make VPACC independent of the control strategy used in a particular controller/VAV 

box application, four generic errors were identified: the airflow rate error, the absolute value of 

the airflow rate error, the temperature error, and the discharge air temperature error. As long as 

the VAV box controller has an airflow setpoint, as well as heating and cooling temperature 

setpoints, VPACC will function independently of the specific control strategy used. Common 

mechanical and control faults will result in a positive or negative deviation of one or more of 

these errors from its value during normal operation, which can be detected by a CUSUM chart. A 

list of possible causes is associated with each alarm (see Table 2.3). 

The airflow rate error, Qerror, is defined as the difference between the measured airflow rate and 

the airflow rate set point. The absolute value of the airflow rate error, |Qerror|, is defined simply as 

the absolute value of the difference between the measured airflow rate and the airflow rate set 

point. Only one CUSUM value is defined for this error since it is never negative. 
12

The zone temperature error, Terror, is defined as 

Terror = Tzone – CSP : If Tzone > CSP 

Terror = 0 : If HSP < Tzone < CSP 

Terror = Tzone – HSP : If Tzone < HSP 

where 

Tzone = zone temperature 

CSP = cooling set point 

HSP = heating set point. 

The discharge air temperature error, DATerror, is only applied to VAV boxes with hydronic 

reheat. The DATerror is calculated only when the reheat coil valve is fully closed, otherwise it is 

set equal to zero. It is defined as the difference between the VAV box discharge air temperature 

and the entering air temperature. The supply air temperature from the AHU serving the VAV box 

can be used as a surrogate for the entering air temperature. This value is generally obtained via 

the building control network. 

The errors and CUSUMs are only calculated during occupied periods. During unoccupied 

periods, the errors are not computed and the CUSUMs are reset to zero. There is a delay at the 

onset of the occupied period to allow quasi-steady state conditions to develop. Also, the 

CUSUMs are periodically reset to zero to prevent alarms from being reported due to small steady 

state errors. Each alarm can be individually disabled by the user in order to eliminate nuisance 

alarms caused by fault conditions that are known to the maintenance staff, but will not be 

repaired immediately. 

VPACC was developed for pressure independent VAV boxes with hydronic reheat coils, 

however, it can easily be adapted for different types of VAV boxes. For cooling only VAV boxes 

or boxes that do not have discharge air temperature sensors, the discharge air temperature error 

(∆Terror) does not apply. For dual duct boxes, two airflow errors (Qerror,hot and Qerror,cold) and two 

absolute value airflow errors (|Qerror, hot| and |Qerror, cold|) are needed, and the discharge air 

temperature error (∆Terror) does not apply. Although VPACC was originally tested using VAV 

boxes without fans [1, 2, 3, 5], the algorithm is independent of fan configuration and can be 

applied to boxes with series or parallel fans without modification. 
13

 

Zone temperature sensor drift/failureAirflow (DP) sensor drift/failureDischarge temperature sensor drift/failureDamper stuck or failedDamper actuator stuck or failedReheat coil valve stuck or failedReheat coil valve actuator stuck or failedAHU Supply air too warmAHU Supply air too coolSupply air static pressure too lowScheduling conflict with AHUUndersized VAV boxTuning problem with airflow feedback control loopTuning problem with zone temperature feedback control loopInappropriate zone temperature setpointMinimum airflow setpoint too lowMinimum airflow setpoint too highMaximum airflow setpoint too lowMaximum airflow setpoint too highSequencing logic error

High zone temperature alarm X X X X X X X X X X X X

Low zone temperature alarm X X X X X X X X X X X X

High airflow alarm X X X X X X

Low airflow alarm X X X X X X X X X

Unstable airflow alarm X X X X X X X X X

High discharge temperature alarm X X X

Low discharge temperature alarm X X X

Possible Diagnoses

Alarm Description

Table 2.3. VPACC Diagnoses. 
14

3 FDD Interface 

In addition to providing access to the data that the algorithms need and a platform to perform the 

calculations, the BAS also provides an interface between the results of the FDD algorithms and 

the operator. The results of APAR and VPACC consist, within the controller, of a set of fault 

conditions as shown in Tables 2.2 (APAR) and 2.3 (VPACC). There are several different ways to 

communicate the results to the operator. 

3.1 Alarms 

Most BASs provide some alarm or event handling capability. Each FDD fault condition can be 

configured as a BAS alarm point with the appropriate text message from Table 2.2 or 2.3. When 

a rule is satisfied (APAR) or a CUSUM exceeds the alarm limit (VPACC), a BAS alarm is 

reported. There are various options for instantaneous notification via the operator workstation, 

printer, email, fax, or pager. Alarms are also logged in an alarm history file or database. If an 

alarm is investigated at the time it occurs, diagnosis and troubleshooting are aided by observation 

of the system during faulty operation. An alternative is to review the alarm history for each piece 

of equipment before performing scheduled maintenance. If any faults have been recorded since 

the previous maintenance, corrective action can be taken. 

3.2 Work Orders 

Facilities that use a computerized maintenance management system (CMMS) can have work 

orders generated automatically when faults are detected. Interfacing the CMMS with FDD is 

typically done by having the CMMS periodically query the AHU and VAV box controllers for 

fault status, then generate a work order for each device with one or more faults. The work order 

would identify the piece of equipment, the time and date the fault was detected, and include 

descriptive information about the fault(s) detected from Table 2.2 or 2.3. Implementation 

requires some configuration of the CMMS to communicate with the AHU and VAV box 

controllers including drivers for the network communication protocol used by the BAS. The 

greater persistence and visibility of work orders compared to BAS alarms is the primary benefit 

of this approach, but it means that the potential harm caused by false alarms is also greater. In 

order to minimize the danger of false alarms, the building operator should have the capability of 

disabling the FDD-work order process when certain conditions exist that are likely to cause false 

alarms. There should also be a provision to delete erroneous work orders. 

3.3 Fault Codes 

Rather than reporting faults as BAS alrms or work orders, trend logs could be used to monitor 

the equipment fault status. To reduce the number of trend logs, several binary fault statuses for a 

particular piece of equipment could be combined using a bitmask into a single analog fault code. 

This approach can be useful as a service tool. It could also be used in an initial installation of 

FDD to verify its performance before enabling the generation of alarms or work orders.
15

4 Robust FDD Parameters 

There are a wide variety of disturbances that can cause an HVAC system to deviate from ideal, 

“normal operation” conditions, but are not actual faults and should not be reported as such [4]. 

These include variations in outdoor temperature, wind velocity and direction, solar radiation, 

internal heat sources, and changes in system mode of operation or schedule. Normal nonidealities of the HVAC system, such as minor sensor drift, errors due to analog-to-digital or 

digital-to-analog converter resolution, electronic noise, small deviations from setpoint, actuator 

hysteresis, etc., also should not be reported as faults. Many FDD methods, including APAR and 

VPACC, employ a set of parameters that collectively define the severity of a fault needed in 

order to report an alarm. If the cutoff severity needed to trigger an alarm is too great, real faults 

will remain undetected (false negatives). However, if the cutoff severity is too small, false alarms 

(false positives) will be generated. FDD parameters must be selected carefully to minimize both 

false positives and false negatives. 

In previous research, the FDD parameters for APAR and VPACC were determined on a sitespecific basis. For each data source, whether it was a simulation, emulation, laboratory, or field 

test site, initial guess values of the parameters were refined through trial and error [1,2,3,5,6]. It 

is expected that for most control system integrators and building owners, the need to develop a 

site-specific set of parameters presents a major barrier to the adoption of FDD, both in terms of a 

detailed understanding of the APAR and VPACC algorithms as well as the time and resources 

required. To overcome this obstacle, a set of robust FDD parameters was developed. These 

parameters were found to be effective for a variety of mechanical system types, building uses, 

and weather conditions based on application to previous work [2] as well as to multiple test sites 

in a field demonstration of APAR and VPACC concurrent with the study described in this report. 

In the development of any set of FDD parameters, there is an inherent tradeoff between false 

negatives (real faults remain undetected) and false positives (false alarms). For the tabulated set 

of parameters, this tradeoff is biased toward minimizing false alarms, if necessary at the expense 

of missing some real faults. Most facilities have limited manpower available to follow up on 

reported faults, so by reporting only relatively severe faults, technician productivity is 

maximized as repairs are made to the most serious problems. Minimizing false alarms is crucial 

since too many false alarms will cause O&M staff to waste time and lose confidence in the FDD 

algorithms, ultimately causing real faults to be ignored. Furthermore, a large number of fault 

reports, whether real or false, may be more information than the O&M staff can process. 

The recommended FDD parameters are presented in Tables 3.1 for APAR and 3.2 for VPACC. 
16

Table 4.1. APAR Recommended Parameters. 

Parameter Value 

Heating Coil Valve Control Signal Threshold 0.02 

Cooling Coil Valve Control Signal Threshold 0.02 

Mixing Box Damper Threshold 0.02 

Temperature Threshold 2.0 oC (3.6 oF) 

Flow Threshold 0.3 

Enthalpy Threshold 3.0 kJ/kg (1.3 Btu/lbm) 

Supply Fan Temperature Rise 1.1 oC (2.0 oF) 

Return Fan Temperature Rise 1.1 oC (2.0 oF) 

Minimum Temperature Difference for Ventilation Rules 5.6 oC (10.0 oF) 

Maximum Number of Mode Switches Per Hour 7 

Occupancy Delay 90 min 

Mode Switch Delay 60 min 

Rule Delay 60 min 

Smoothing Constant for APAR Input Data 0.1 

Table 4.2. VPACC Recommended Parameters. 

Parameter Value 

Expected Zone Temperature Error 0.0 oC (0.0 oF) 

Zone Temperature Error Standard Deviation 0.6 oC (1.0 oF) 

Expected Airflow Rate Error 0 m3/s (0 cfm) 

Airflow Rate Error Standard Deviation 0.02 * VAV Box Maximum Airflow Rate1

Expected Discharge Temperature Error 1.1 oC (2.0 oF) 

Discharge Temperature Error Standard Deviation 1.1 oC (2.0 oF) 

Slack Parameter 3 

Alarm Limit 1000 

Occupancy Delay 90 min 

CUSUM Reset Interval 360 min 

1

By scaling the airflow rate error standard deviation to the maximum airflow rate through the 

box, the same code can be used for any size VAV box. 
17

4.1 Tuning FDD Parameters for Optimum Performance 

In most cases it is expected that the tabulated FDD parameters will be used. However, some 

building operators may need to develop their own parameter values. For example, a particular 

facility may find that, although the faults that are reported are legitimate, there are too many for 

the operations and maintenance (O&M) staff to handle. In this case, the parameters will be 

adjusted so that the threshold severity for a fault to be reported is increased. Or, in a facility that 

has more resources available and is particularly interested in reducing energy consumption, the 

parameters might be adjusted so that the threshold severity is reduced. To enable users to make 

these adjustments, guidelines for tuning the FDD parameters are included. 

4.1.1 Tuning APAR Parameters 

Some of the parameters can be determined directly by evaluating the mechanical system. The 

values for supply and return fan temperature rise can be determined from design data or field 

measurements. 

The minimum temperature difference for ventilation rules can be determined by evaluating 

trendlogs of the return, outdoor, and mixed air temperatures, and the mixing box damper control 

signal. For each logged data sample, the actual outdoor air fraction can be compared with the 

calculated outdoor air fraction based on the temperature data. Correlating the accuracy of the 

calculated outdoor air fraction with the difference between the return and outdoor air 

temperatures will yield the minimum temperature difference for ventilation rules. 

The occupancy delay can be determined by evaluating trendlogs of the supply air temperature 

and setpoint. The occupancy delay parameter should be set equal to the time from the onset of 

the occupancy until the supply air temperature is reasonably close to the setpoint. Then a margin 

of safety should be added. The mode switch delay can be determined similarly, by observing the 

time for the system to “settle out” after a change from one mode of operation to another. 

The heating coil, cooling coil, mixing box damper, temperature, flow, and enthalpy thresholds, 

and the maximum number of mode switches per hour are best determined by analysis of 

particular rules that are causing false alarms or are not reporting actual faults when the 

recommended parameter values are used. Although it is possible to apply a standard uncertainty 

analysis as described in [8] to the rule, better results are obtained from trial and error. Trendlogs 

of the data relevant to the rule combined with a spreadsheet analysis of the rule can be very 

helpful for understanding why a particular rule is or is not reporting a fault, and then to help 

select better parameter values. 

A detailed analysis of a particular rule will also reveal incorrect results that are due to poor 

values of the rule delay or the smoothing constant. If the rule delay is too short, transient 

conditions that are not true faults will cause false alarms, while a rule delay that is too long will 

cause real faults to be missed. If the smoothing constant is too great, noisy data or transient 

conditions that are not true faults will cause false alarms, while a smoothing constant that is too 

small will not allow real faults to be reported. A smoothing constant that is too small can also 

cause false alarms if the smoothed data still reflect the transient conditions from the most recent 

mode switch. 
18

4.1.2 Tuning VPACC Parameters 

Ideally, initial guesses for the expected value and standard deviation of the zone temperature, 

airflow, and discharge temperature errors should be calculated from data collected from the VAV 

boxes at the site. Data from unoccupied periods and from the first two hours of occupied periods 

should be removed from the set before computing the statistics. It is important to use data that is 

equally representative of heating and cooling conditions. If data are not available, the initial 

guesses for the expected zone temperature or airflow errors should both be set equal to zero. The 

initial guess for the expected discharge temperature should be set equal to the duct heat gain, 

which can be determined from the design documents or from measurements from a few typical 

VAV boxes. Sensor accuracies or typically observed variations can be used as initial guesses for 

the standard deviations. The recommended values from Table 3.2 can serve as initial guesses for 

the remaining parameters. 

Once initial guesses have been determined, the parameters can be tuned by observing the faults 

reported by VPACC compared to the actual performance of the system. If there are false alarms 

or missed faults from two or more of the errors, the alarm limit should be increased or decreased, 

respectively. If the missed faults or false alarms are from one error only, the standard deviation 

of that error should be adjusted instead. To eliminate false alarms early in the occupied period of 

the day, the occupancy delay should be increased. If false alarms occur late in the day, the 

CUSUM reset interval should be decreased. 

The following example demonstrates the relationships between the parameters. In this example, 

the recommended values from Table 3.2 are used. Consider a VAV box with a maximum airflow 

rate of 0.472 m3

/s (1000 cfm) and a constant airflow rate error of 0.07 m3/s (150 cfm). The 

expected airflow rate error is zero and the airflow rate error standard deviation is equal to 0.02 

multiplied by the maximum airflow rate, or 0.009 m3/s (20 cfm). The normalized error will be 

constant: 

zi = (xi – xexp) / σexp = (0.07 m3/s – 0 m3/s) / 0.009 m3/s = (150 cfm – 0 cfm) / 20 cfm 

zi = 7.5

Since the error is positive, only the positive (S) sum is accumulated. S is defined as: 

Si = max[0, zi – k + Si-1] 

The expression is evaluated once per minute beginning 90 min (the occupancy delay) after the 

beginning of occupancy. Since all the terms are constant, S increases by 

z – k = 7.5 – 3 = 4.5 

each minute. After 223 minutes, S reaches a value of 1003.5, which is greater than the alarm 

limit of 1000. The CUSUM reset interval is 360 min, which is greater than the time to reach the 

alarm limit, so the alarm will be reported before S is reset to zero. 
19

5 Field Test 

5.1 Test Sites 

Previous research has established the performance of APAR and VPACC [1, 2, 3, 4, 5]. 

However, the primary goal of the field test was to evaluate the practicality and usability of 

embedding these FDD algorithms in commercial AHU and VAV box controllers. By involving 

controls manufacturers and dealers as well as building engineers in the study, the tools were 

evaluated under conditions as close as possible to those in which they will be used commercially. 

This approach was selected to ensure that any obstacles to commercialization would be revealed 

during the course of the test. Another goal was to evaluate modifications to APAR and VPACC 

for different system types. The field sites are described below. 

5.1.1 SITE-1 

SITE-1 is a private office building. APAR was embedded in the controllers of two VAV rooftop 

AHUs with hydronic heating coils and staged direct-expansion (DX) cooling coils. VPACC was 

embedded in 53 VAV box controllers, including 20 pressure independent, single-duct, parallel 

fan powered VAV boxes with hydronic reheat and 33 pressure independent, single-duct, 

throttling (no fan), cooling-only VAV boxes. Trendlogs of selected raw data, APAR rule 

violations, and VPACC alarms were configured. The trendlogs were archived and reviewed 

monthly. Personnel at the site responded to investigate and verify any reported faults. 

5.1.2 SITE-2 

SITE-2 is a large federal government office building in California. APAR was embedded in the 

controllers of two constant-volume AHUs with hydronic heating and cooling coils. VPACC was 

embedded in 1000 pressure independent, dual-duct VAV box controllers. Rather than 

configuring trendlogs, a computerized maintenance management system (CMMS) was 

configured to automatically generate a work order whenever a fault was detected. The building 

engineers responded to investigate, verify, and repair any faults reported through the CMMS. 

5.1.3 SITE-3 

SITE-3 is a private office building with some light industrial spaces. APAR was embedded in 

one VAV AHU with staged (combustion) heating and DX cooling coils. VPACC was embedded 

in the controllers of 46 pressure independent, single-duct, throttling (no fan), cooling-only VAV 

boxes. Trendlogs of selected raw data, APAR rule violations, and VPACC alarms were 

configured. The trendlogs were archived and reviewed periodically. Also, the building 

automation system’s alarm/event handling function was configured to alert the operator 

whenever an APAR rule violations or VPACC alarm occurred. Each FDD event was also 

recorded in an alarm history database. Personnel at the site responded to investigate and verify 

any reported faults. 

5.1.4 SITE-4 

SITE-4 is a federal government building with a combination of office and laboratory spaces. 

APAR was embedded in the controller of one constant-volume AHUs with hydronic heating and 
20

cooling coils. Since the AHU controller operated in stand-alone mode (not connected to a 

network), selected raw data and APAR rule violations were logged by a stand-alone datalogging 

software tool running on a computer physically connected to the AHU controller. The trendlogs 

were archived and reviewed weekly. Personnel at the site responded to investigate and verify any 

faults that were detected. 

5.1.5 SITE-5 

SITE-5 is a large federal government office building. APAR was embedded in the controllers of 

two VAV AHUs with hydronic heating and cooling coils. VPACC was embedded in two 

pressure independent, single-duct, throttling (no fan) VAV boxes with hydronic reheat and two 

pressure independent, single-duct, throttling (no fan), cooling-only VAV boxes. Trendlogs of 

selected raw data, APAR rule violations, and VPACC alarms were configured. The trendlogs 

were archived and reviewed periodically. Also, the building automation system’s alarm/event 

handling function was configured to record each FDD event in an alarm history database. 

Personnel at the site responded to investigate and verify any reported faults. 

5.1.6 SITE-6 

SITE-6 is a classroom building on a community college campus. APAR was embedded in the 

controllers of two VAV AHUs with hydronic heating and cooling coils. VPACC was embedded 

in 101 pressure independent, single-duct, series fan-powered VAV boxes with hydronic reheat. 

Trendlogs of selected raw data, APAR rule violations, and VPACC alarms were configured. The 

trendlogs were archived and reviewed periodically. Personnel at the site responded to investigate 

and verify any reported faults. 

5.1.7 SITE-7 

SITE-7 is a museum building on a university campus. A specialized HVAC system maintains 

precise temperature and humidity conditions for the museum’s artifacts; however, there is also a 

general purpose HVAC system for office and visitor spaces. APAR was embedded in the 

controllers of two VAV rooftop AHUs with hydronic heating coils and DX cooling coils. 

VPACC was embedded in nine pressure independent, single-duct, throttling (no fan) VAV boxes 

with hydronic reheat. Trendlogs of selected raw data, APAR rule violations, and VPACC alarms 

were configured. The trendlogs were archived and reviewed weekly. Personnel at the site 

responded to investigate and verify any reported faults. 

5.1.8 SITE-8 

SITE-8 is a classroom and office building on a community college campus. APAR was 

embedded in the controllers of one VAV AHU with hydronic heating and cooling coils. VPACC 

was embedded in 11 VAV box controllers, including 10 pressure independent, single-duct, 

parallel fan powered VAV boxes with electric reheat and one pressure independent, single-duct, 

throttling (no fan), cooling-only VAV box. The building automation system’s alarm/event 

handling function was configured to to alert the operator whenever an APAR rule violations or 

VPACC alarm occurred. Each FDD event was also recorded in an alarm history database. 

Personnel at the site responded to investigate and verify any reported faults. 
21

5.1.9 System Coverage 

Tables 3.1 and 3.2 show the extent of AHU and VAV box system types that will be studied, as 

well as the coverage of those system types by the four field sites already identified. 

Table 5.1. AHU System Types. 

Cooling Medium Heating Medium Volume Control 

Site 

Chilled 

Water DX 

Hot water / 

Steam 

Staged (Electric 

Resistance or 

Combustion) 

Variable 

Volume

Constant 

Volume

SITE-1 X X X 

SITE-2 X X X 

SITE-3 X X X 

SITE-4 X X X 

SITE-5 X X X 

SITE-6 X X X 

SITE-7 X X X 

SITE-8 X X X 

Table 5.2. VAV Box System Types. 

System Type Fan Configuration Reheat Medium 

Site 

Single 

Duct 

Dual 

Duct 

Throttling 

(No Fan)

Parallel FanPowered Series FanPowered No 

Reheat

Electric 

Reheat 

Hydronic 

Reheat 

SITE-1 (Type 1) X X X 

SITE-1 (Type 2) X X X 

SITE-2 (Type 1) X X X 

SITE-2 (Type 2) X X X 

SITE-3 X X X 

SITE-4 

SITE-5 (Type 1) X X X 

SITE-5 (Type 2) X X X 

SITE-6 X X X 

SITE-7 X 

SITE-8 (Type 1) X X X 

SITE-8 (Type 2) X X X 
22

5.2 Procedure 

The following procedure was applied to each field site, except as noted in 3.1 – 3.9: 

1. Collect the HVAC control system points list and the relevant control application 

programs from the site. 

2. Modify the control application programs to incorporate the FDD algorithms. 

3. Download the modified control application programs to the appropriate controllers at the 

site. 

4. Establish trend logs of selected raw data along with the results of the FDD algorithms. 

 For each AHU, trend the following data points:

• AHU run status (on - off) 

• Supply air temperature setpoint 

• Supply air temperature 

• Return air temperature 

• Outdoor air temperature 

• Mixed air temperature 

• Return air enthalpy or humidity, if used in economizer control sequence 

• Outdoor air enthalpy or humidity, if used in economizer control sequence 

• Cooling coil valve control signal, if chilled water is used for cooling; or 

mechanical cooling status, if DX cooling is used 

• Heating coil valve control signal, if hot water or steam is used for cooling; or 

heating status, if electric resistance or combustion heating is used 

• Mixing box dampers control signal 

• Status of each APAR rule (on - off) 

 For each VAV box, trend the following data points:

• Occupancy status (on - off) 

• Zone temperature 

• Heating setpoint 

• Cooling setpoint 

• Airflow rate (if box is dual duct, then trend both hot and cold airflow rates) 

• Airflow rate setpoint (if box is dual duct, then trend both hot and cold airflow 

rate setpoints) 

• Damper control signal 

• Reheat coil valve control signal, if reheat coil is present 

• Discharge air temperature, if sensor is present 

• Supply air temperature from the AHU serving the VAV box, only if a 

discharge air temperature sensor is present 

• Status of each VPACC alarm (on - off) 

5. Once per week, collect and analyze the trend data to evaluate the performance of the 

FDD algorithms. The data can be made available by either enabling online access to the 

building control system’s trend log database, or by exporting the trend logs to text files 
23

and submitting them via email or CD. 

6. Follow up with the facility maintenance staff to verify the presence of any faults detected 

by either of the FDD algorithms. Verify whether the actual cause of the fault is one of the 

causes listed by the FDD algorithm. 

7. Record the presence and cause of any faults reported through any other means that were 

not detected by the FDD algorithms. 
24

5.3 Results 

A representative subset of faults that were detected during the study are presented in the 

following pages. Table 5.3 summarizes the faults and their impact on the facility. 

Table 5.3. Fault Summary and Impact. 

Site Fault Description

Energy ConsumptionIndoor Air QualityOccupant ComfortEquipment LifeMaintenance Staff Productivity

SITE-1 Mixed Air Temperature Sensor Error X

SITE-1 Leaking Heating Coil Valve X

SITE-1 Outdoor Air Temperature Sensor Error X

SITE-1 Mechanical Cooling Fault X

SITE-1 Stuck VAV Box Damper Actuator X

SITE-1 VAV Box Maximum Airflow Setpoint Too High X

SITE-1 Slipping Supply Fan Drive Belt X

SITE-1 Communication Failure X X

SITE-1 Undersized Supply Duct X

SITE-1 Disconnected Zone Temperature Sensor XXX

SITE-2 Outdoor Air Temperature Sensor Error X

SITE-2 Chilled Water Not Available X

SITE-2 Airflow (DP) Sensor Drift XXX

SITE-2 Zone Temperature Sensor Failure X X

SITE-2 Damper Actuator Failure X X

SITE-2 Zone Temperature PID Loop Tuning Error X

SITE-3 Supply Air Temperature Error X

SITE-4 Hot Water Converter Offline X

SITE-4 Manual Override of Outdoor Air Damper X

SITE-4 Steam Outage X

SITE-4 Incorrect Cooling Coil Valve Actuator Configuration X

SITE-5 Simultaneous Mechanical Cooling and Economizing X

SITE-6 Simultaneous Mechanical Cooling and Economizing X

SITE-6 Outdoor Air Temperature Sensor Error X

SITE-6 VAV Box Controller Hardware Failure X X

SITE-6 Disconnected VAV Box Supply Air Duct X X

SITE-6 VAV Box Damper Actuator Failure X

SITE-6 Disconnected VAV Box Flow Sensor Tubing XXX

SITE-6 Zone Temperature Sensor Error X X

SITE-6 Undersized VAV Box X

SITE-6 Undersized Supply Fan X

SITE-7 AHU PID Loop Tuning Error X

SITE-8 Zone Temperature Setpoint Too High X X

Fault Impact
25

5.3.1 SITE-1 

5.3.1.1 Mixed Air Temperature Sensor Error 

Figure 5.1 shows a plot of temperature and control signal data vs. time of day from one of the 

rooftop AHUs at SITE-1. The heating coil valve is fully closed and the mixing box dampers are 

positioned for the minimum outdoor air fraction needed to meet ventilation requirements (20 %). 

Stages of mechanical cooling are energized based on cooling requests from the terminal units 

served by the AHU. This combination of control signals corresponds to Mode 4: mechanical 

cooling with minimum outdoor air. In addition to the set of rules specific to Mode 4, there is a 

set of rules that applies to all occupied modes of operation (see Table 2.1). One rule which 

applies to all occupied modes is Rule 26, which states that the mixed air temperature should be 

greater than the minimum of the return and outdoor air temperatures. For nearly the entire time 

period shown in Figure 5.1, the return air temperature is less than the outdoor air temperature, so 

according to Rule 26, the mixed air temperature should be greater than the return air temperature. 

However, Figure 5.1 shows that the mixed air temperature is less than the return air temperature 

by approximately 3 oC. A trendlog showed that the APAR algorithm embedded in the AHU 

controller had generated a fault report due to Rule 26. As shown in Table 2.2, the possible causes 

of this fault are a return, mixed, or outdoor air temperature sensor error. Onsite personnel 

investigated, determined that the mixed air temperature sensor had drifted out of calibration, and 

recalibrated it. 

Figure 5.1. Mixed Air Temperature Sensor Error. 

20

25

30

35

40

9:30 10:30 11:30 12:30 13:30 14:30 15:30 16:30 17:30

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Outdoor Air Temperature

Mechanical Cooling

Return Air Temperature

Mixing Box Dampers

Mixed Air Temperature

Heating Coil Valve
26

5.3.1.2 Leaking Heating Coil Valve 

Figure 5.2 shows a plot of temperature and control signal data vs. time of day from one of the 

rooftop AHUs at SITE-1. The heating coil valve is fully closed and all stages of mechanical 

cooling are de-energized. The mixing box dampers modulate to maintain the supply air 

temperature at its setpoint (not shown). This combination of control signals corresponds to Mode 

2: cooling with outdoor air. One of the rules for Mode 2 is Rule 7, which states that the supply 

air and mixed air temperatures should be nearly the same. Figure 5.2 shows that the supply air 

temperature is greater than the mixed air temperature by approximately 3 oC. A trendlog showed 

that the APAR algorithm embedded in the AHU controller had generated a fault report due to 

Rule 7. As shown in Table 2.2, the possible causes of this fault are a supply or mixed air 

temperature sensor error, a problem with the mechanical cooling system (since chilled water is 

not used), or a stuck or leaking heating coil valve. Onsite personnel investigated and determined 

that there was a leak in the heating coil valve. 

Figure 5.2. Leaking Heating Coil Valve. 

8

9

10

11

12

13

14

15

16

13:00 14:00 15:00 16:00 17:00

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Supply Air Temperature

Mixing Box Dampers

Mixed Air Temperature

Heating Coil Valve

Mechanical Cooling
27

5.3.1.3 Outdoor Air Temperature Sensor Error 

Figure 5.3 shows a plot of temperature and control signal data vs. time of day from one of the 

rooftop AHUs at SITE-1. The heating coil valve is fully closed and the mixing box dampers are 

positioned for 100 % outdoor air. Stages of mechanical cooling are energized based on cooling 

requests from the terminal units served by the AHU. This combination of control signals 

corresponds to Mode 3: mechanical cooling with 100 % outdoor air. One of the rules for Mode 3 

is Rule 10, which states that the outdoor air and mixed air temperatures should be nearly the 

same. Figure 5.3 shows that the mixed air temperature is greater than the outdoor air temperature 

by 2 to 3 oC. A trendlog showed that the APAR algorithm embedded in the AHU controller had 

generated a fault report due to Rule 10. As shown in Table 2.2, the possible causes of this fault 

are an outdoor or mixed air temperature sensor error or a stuck or leaking mixing box damper. 

Onsite personnel investigated and determined that the fault was due to an outdoor air temperature 

sensor error caused by a difference in temperature between the location of the outdoor air 

temperature sensor and the AHU’s outdoor air intake. 

Figure 5.3. Outdoor Air Temperature Sensor Error. 

10

11

12

13

14

15

16

17

18

19

20

12:30 13:30 14:30 15:30 16:30

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Mixing Box Dampers

 Mixed Air Temperature

Outdoor Air Temperature

Mechanical Cooling

Heating Coil Valve
28

5.3.1.4 Mechanical Cooling Fault 

Figure 5.4 shows a plot of temperature and control signal data vs. time of day from one of the 

rooftop AHUs at SITE-1. The heating coil valve is fully closed and the mixing box dampers are 

positioned for 100 % outdoor air. Stages of mechanical cooling are energized based on cooling 

requests from the terminal units served by the AHU. This combination of control signals 

corresponds to Mode 3: mechanical cooling with 100 % outdoor air. One of the rules for Mode 3 

is Rule 11, which states that the supply air temperature should be less than the mixed air 

temperature. Figure 5.4 shows that the supply air temperature is 3 oC to 4 oC greater than the 

mixed air temperature. A trendlog showed that the APAR algorithm embedded in the AHU 

controller had generated a fault report due to Rule 11. Table 2.2 lists the possible causes of this 

fault including a supply or mixed air temperature sensor error, a fouled or undersized heating or 

cooling coil, and problems associated with mechanical cooling system. Onsite personnel 

investigated, determined that the fault was due to a problem with the mechanical cooling system, 

and added it to a list of tasks that was prepared for a maintenance contractor. 

Figure 5.4. Mechanical Cooling Fault. 

10

11

12

13

14

15

16

17

18

19

20

8:30 9:00 9:30 10:00

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Mixing Box Dampers

Supply Air Temperature

Mixed Air Temperature

Mechanical Cooling

Heating Coil Valve
29

5.3.1.5 Stuck VAV Box Damper Actuator 

Figure 5.5 shows a plot of airflow data vs. time of day from one of the fan powered VAV boxes 

at SITE-1. The plot shows that there was a large positive airflow error, since the measured 

airflow rate was substantially greater than the airflow rate setpoint. A trendlog showed that the 

VPACC algorithm embedded in the VAV box controller reported a high airflow alarm. Table 2.3 

lists the possible causes of this fault including an airflow (DP) sensor error, a stuck or failed 

damper or damper actuator, a scheduling conflict with the AHU, a tuning problem with the 

airflow control PID loop, and a sequencing logic error. Onsite personnel investigated and 

determined that the fault was due to a stuck damper actuator. 

Figure 5.5. Stuck VAV Box Damper Actuator. 

0.00

0.05

0.10

0.15

0.20

0.25

0:00 2:00 4:00 6:00 8:00 10:00 12:00 14:00 16:00 18:00 20:00

Time

Airflow Rate (m3/s)

Measured Airflow Rate

Airflow Rate Setpoint
30

5.3.1.6 VAV Box Maximum Airflow Setpoint Too High 

Figure 5.6 shows a plot of airflow data vs. time of day from one of the fan-powered VAV boxes 

at SITE-1. The plot shows that whenever the airflow setpoint increased above the minimum, 

there was a large negative airflow error, since the measured airflow rate was substantially less 

than the airflow rate setpoint. A trendlog showed that the VPACC algorithm embedded in the 

VAV box controller reported a low airflow alarm. Table 2.3 lists the possible causes of this fault, 

including an airflow (DP) sensor error, a stuck or failed damper or damper actuator, low static 

pressure in the supply air duct, a scheduling conflict with the AHU, an undersized VAV box, a 

tuning problem with the airflow control PID loop, a maximum airflow setpoint that is too high, 

and a sequencing logic error. Onsite personnel investigated and determined that the fault was due 

to a maximum airflow setpoint that was too high. The VAV box controller was originally 

installed on a larger VAV box. During a building renovation, the controller was moved to a 

smaller VAV box, but the maximum airflow parameter was not changed. As a result, even when 

the damper was fully open, the airflow rate never reached the nominal maximum value. 

Figure 5.6. VAV Box Airflow Parameter Error. 

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

0.90

6:00 8:00 10:00 12:00 14:00 16:00

Time

Airflow Rate (m3/s)

Airflow Rate Setpoint

Measured Airflow Rate
31

5.3.1.7 Slipping Supply Fan Drive Belt 

Figure 5.7 shows a plot of airflow data vs. time of day from one of the fan-powered VAV boxes 

at SITE-1. The occupied period was from 06:30 until 19:30. During occupancy, the VAV box 

had a minimum airflow rate setpoint of 0.047 m3

/s to meet ventilation requirements. The plot 

shows that whenever the airflow setpoint increased above the minimum, there was a large 

negative airflow error, since the measured airflow rate was substantially less than the airflow rate 

setpoint. A trendlog showed that the VPACC algorithm embedded in the VAV box controller 

reported a low airflow alarm. Table 2.3 lists the possible causes of this fault, including an airflow 

(DP) sensor error, a stuck or failed damper or damper actuator, low static pressure in the supply 

air duct, a scheduling conflict with the AHU, an undersized VAV box, a tuning problem with the 

airflow control PID loop, a maximum airflow setpoint that is too high, and a sequencing logic 

error. Onsite personnel investigated and determined that the fault was due to low static pressure 

caused by a slipping supply fan drive belt in the AHU that serves this VAV box. Figure 5.7 

illustrates that early in the day, the airflow rate setpoint was at the minimum and the supply fan 

was able to maintain sufficient static pressure. When the airflow setpoint increased later in the 

day, the actual airflow fell below the setpoint as the supply fan was not able to maintain the static 

pressure at the setpoint due to the slipping belt. 

Figure 5.7. Slipping Supply Fan Drive Belt. 

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

0.90

9:00 10:00 11:00 12:00 13:00 14:00

Time

Airflow Rate (m3/s)

Airflow Rate Setpoint

Measured Airflow Rate
32

5.3.1.8 Communication Failure 

Figure 5.8 shows a plot of airflow data vs. time of day from one of the throttling (no fan) VAV 

boxes at SITE-1. It shows a large negative airflow error, since the measured airflow rate was 

substantially less than the airflow rate setpoint. A trendlog showed that the VPACC algorithm 

embedded in the VAV box controller reported a low airflow alarm. Table 2.3 lists the possible 

causes of this fault, including an airflow (DP) sensor error, a stuck or failed damper or damper 

actuator, low static pressure in the supply air duct, a scheduling conflict with the AHU, an 

undersized VAV box, a tuning problem with the airflow control PID loop, a maximum airflow 

setpoint that is too high, and a sequencing logic error. Onsite personnel investigated and 

determined that the fault was due to low static pressure caused by a temporary communication 

failure of the building control network. The AHUs at SITE-1 are scheduled based on the number 

of run requests received from the VAV boxes they serve. Since the AHU serving this VAV box 

did not receive any run requests, the supply fan was not energized and the static pressure in the 

supply air duct was too low. Figure 5.8 also shows that the fault disappeared when network 

communications were restored at approximately 11:00. 

Figure 5.8. Communication Failure. 

0.00

0.20

0.40

0.60

0.80

1.00

1.20

10:00 10:15 10:30 10:45 11:00 11:15

Time

Airflow Rate (m3/s)

Airflow Rate Setpoint

Measured Airflow Rate
33

5.3.1.9 Undersized Supply Duct 

Figure 5.9 shows a plot of airflow and temperature data vs. time of day from one of the throttling 

(no fan) VAV boxes at SITE-1. It shows a large negative airflow error, since the measured 

airflow rate was substantially less than the airflow rate setpoint. There is also a large positive 

zone temperature error, since the zone temperature is greater than the cooling setpoint 

temperature. A trendlog showed that the VPACC algorithm embedded in the VAV box controller 

reported a low airflow alarm and a high zone temperature alarm. Table 2.3 lists the possible 

causes of this fault, including a zone temperature sensor error, an airflow (DP) sensor error, a 

stuck or failed damper or damper actuator, supply air too warm, low static pressure in the supply 

air duct, a scheduling conflict with the AHU, an undersized VAV box, a tuning problem with the 

airflow control or zone temperature control PID loop, a maximum airflow setpoint that is too low 

or too high, an inappropriate zone temperature setpoint, and a sequencing logic error. This VAV 

box does not have a reheat coil, so the possible causes of reheat coil valve or actuator stuck or 

failed shown in Table 2.3 do not apply. Onsite personnel investigated and determined that the 

fault was due to low static pressure in the supply duct. This is a large VAV box at the distant end 

of the supply duct from the serving AHU. The duct is undersized so under high load conditions 

this VAV box is starved of supply air. When this happens, the airflow rate drops below the 

airflow rate setpoint, and the zone temperature rises above the cooling setpoint temperature, 

since there is not enough airflow to meet the cooling load. 

Figure 5.9. Undersized Supply Duct. 

0.00

0.10

0.20

0.30

0.40

0.50

0.60

0.70

0.80

0.90

1.00

7:00 9:00 11:00 13:00 15:00 17:00 19:00 21:00

Time

Airflow Rate (m3/s)

16

18

20

22

24

26

28

30

32

Temperature (oC)

Airflow Rate Setpoint

Measured Airflow Rate

Zone Temperature

Cooling Setpoint Temperature

Heating Setpoint Temperature
34

5.3.1.10 Disconnected Zone Temperature Sensor 

Figure 5.10 shows a plot of temperature data vs. time of day from one of the throttling (no fan) 

VAV boxes at SITE-1. It shows a large negative zone temperature error, since the zone 

temperature is less than the heating setpoint temperature. A trendlog showed that the VPACC 

algorithm embedded in the VAV box controller reported a low zone temperature alarm. Table 

2.3 lists the possible causes of this fault, including a zone temperature sensor error, airflow (DP) 

sensor error, supply air too cool, a scheduling conflict with the AHU, an undersized VAV box, a 

tuning problem with the airflow control or zone temperature control PID loop, an inappropriate 

zone temperature setpoint, a minimum airflow setpoint that is too high, and a sequencing logic 

error. This VAV box does not have a reheat coil, so the possible causes of reheat coil valve or 

actuator stuck or failed shown in Table 2.3 do not apply. Onsite personnel investigated and 

determined that the fault was due to a zone temperature sensor error which occurred when the 

zone temperature sensor was inadvertently disconnected during maintenance. The sensor was 

configured for 0-10 V with a value of 7.5 oC at 0 V. When the sensor was disconnected, 0 V was 

read at the input on the VAV box controller, so a value of 7.5 oC was recorded, as shown in 

Figure 5.10. The figure also shows that the fault disappeared when the sensor was reconnected. 

Figure 5.10. Disconnected Zone Temperature Sensor. 

0.0

5.0

10.0

15.0

20.0

25.0

30.0

35.0

11:30 12:00 12:30 13:00 13:30 14:00

Time

Temperature (oC)

Zone Temperature

Cooling Setpoint Temperature

Heating Setpoint Temperature
35

5.3.2 SITE-2 

At SITE-2, the computerized maintenance management system (CMMS) was configured to 

automatically generate a work order whenever a fault was detected. The building engineer 

responded to investigate and verify any faults reported through the MMS. Since no trendlogs of 

the raw data were established for the AHUs, there are no plots to illustrate the AHU faults 

described in this section. Supplemental trendlogs were configured for some of the VAV boxes, 

so plots are shown where data were available. 

5.3.2.1 Outdoor Air Temperature Sensor Error 

The APAR algorithm embedded in one of the AHU controllers at SITE-2 reported faults due to 

Rules 8 and 10. Rule 8 states that, in mechanical cooling with 100 % outdoor air mode, the 

outdoor air temperature should be greater than the supply air temperature setpoint (otherwise, the 

AHU should be operating in cooling with outdoor mode). As shown in Table 2.2, the possible 

causes associated with Rule 8 are a supply or outdoor air temperature sensor error, a stuck or 

leaking heating coil valve, a stuck or leaking mixing box damper, or a controller logic error. Rule 

10 states that, in mechanical cooling with 100 % outdoor air mode, the outdoor and mixed air 

temperatures should be nearly the same. Table 2.2 shows that the possible causes associated with 

Rule 10 are a mixed or outdoor air temperature sensor error and a stuck or leaking mixing box 

damper. Onsite personnel investigated and determined that the fault was due to an outdoor air 

temperature sensor error caused by the AHUs taking outdoor air from a plenum which was 

consistently 5 to 10 oC warmer than the actual outdoor air temperature. A project was undertaken 

to retrofit the outdoor air plenum with ventilation fans to bring the plenum temperature closer to 

the the actual outdoor air temperature, thus reducing the chilled water load and the number of 

hours of chiller operation. 

5.3.2.2 Chilled Water Not Available 

The APAR algorithm embedded in one of the AHU controllers at SITE-2 reported faults due to 

Rule 12, while another AHU controller reported faults due to Rule 13. Rule 12 states that, in 

mechanical cooling with 100 % outdoor air mode, the supply air temperature should be less than 

the return air temperature. As shown in Table 2.2, the possible causes associated with Rule 12 

are a supply or return air temperature sensor error, a stuck cooling coil valve, an undersized 

cooling coil, a fouled cooling coil, chilled water too warm, a problem with one of the chilled 

water pumps, chilled water not available, a stuck or leaking heating coil valve, and a controller 

tuning error. Rule 13 observes that the cooling coil valve is saturated fully open and a persistent 

supply air temperature error exists. Table 2.2 shows that the possible causes associated with Rule 

13 are a supply air temperature sensor error, a stuck cooling coil valve, an undersized cooling 

coil, a fouled cooling coil, chilled water too warm, a problem with one of the chilled water 

pumps, chilled water not available, a stuck or leaking heating coil valve, and a controller tuning 

error. Onsite personnel investigated and determined that the fault was due to chilled water not 

being available. The current sequence of operations for the chiller specifies that the chiller is 

only operated if several AHUs require chilled water. A project is being developed at the site to 

modify the chiller plant sequence of operations to ensure that chilled water is available when 

needed. 
36

5.3.2.3 Airflow (DP) Sensor Drift 

Figure 5.11 shows a plot of airflow and temperature data from vs. time of day one of the dualduct VAV boxes at SITE-2. It shows a large negative zone temperature error, since the zone 

temperature is less than the zone temperature setpoint. A trendlog showed that the VPACC 

algorithm embedded in the VAV box controller reported a low zone temperature alarm. Table 

2.3 lists the possible causes of this fault, including a zone temperature sensor error, airflow (DP) 

sensor drift or failure, supply air too cool, a scheduling conflict with the AHU, an undersized 

VAV box, a tuning problem with the airflow control or zone temperature control PID loop, an 

inappropriate zone temperature setpoint, a minimum airflow setpoint that is too high, and a 

sequencing logic error. This VAV box does not have a reheat coil, so the possible causes of 

reheat coil valve or actuator stuck or failed shown in Table 2.3 do not apply. Onsite personnel 

investigated and determined that the fault was due to an airflow sensor error which occurred due 

to debris buildup in the tubing connecting the pressure probes in the hot deck inlet to the 

differential pressure senor onboard the VAV box controller. Figure 5.11 shows that the measured 

hot deck airflow rate was at the setpoint, which was also the maximum hot deck airflow rate for 

the VAV box. However, the actual hot deck airflow rate was less than the measured value due to 

the sensor drift. Insufficient warm airflow was provided to the zone, causing the zone 

temperature to drift well below the setpoint. The fault was repaired by removing the debris from 

the tubing. 

Figure 5.11. Airflow (DP) Sensor Drift. 

0

0.05

0.1

0.15

0.2

0.25

0.3

6:00 8:00 10:00 12:00 14:00 16:00

Time

Airflow Rate (m3/s)

20

25

30

35

Temperature (oC)

Hot Deck Airflow Rate Setpoint

Measured Hot Deck Airflow Rate

Zone Temperature

Zone Temperature Setpoint 
37

5.3.2.4 Zone Temperature Sensor Failure 

Figure 5.12 shows a plot of temperature data vs. time of day from one of the dual-duct VAV 

boxes at SITE-2. It shows a large negative zone temperature error, since the zone temperature is 

less than the zone temperature setpoint. A trendlog showed that the VPACC algorithm embedded 

in the VAV box controller reported a low zone temperature alarm. Table 2.3 lists the possible 

causes of this fault, including a zone temperature sensor error, airflow (DP) sensor drift or 

failure, supply air too cool, a scheduling conflict with the AHU, an undersized VAV box, a 

tuning problem with the airflow control or zone temperature control PID loop, an inappropriate 

zone temperature setpoint, a minimum airflow setpoint that is too high, and a sequencing logic 

error. This VAV box does not have a reheat coil, so the possible causes of reheat coil valve or 

actuator stuck or failed shown in Table 2.3 do not apply. Onsite personnel investigated and 

determined that the fault was due to a zone temperature sensor failure. The zone temperature 

shown in Figure 5.12 is close to the minimum of the range for the sensor, so this fault is not a 

complete failure, but an extreme sensor drift. The fault was repaired by replacing the sensor. 

Figure 5.12. Zone Temperature Sensor Failure. 

-5

0

5

10

15

20

25

30

35

6:00 8:00 10:00 12:00 14:00 16:00

Time

Temperature (oC)

Zone Temperature Setpoint

Zone Temperature
38

5.3.2.5 Damper Actuator Failure 

Figure 5.13 shows a plot of airflow and temperature data vs. time of day from one of the dualduct VAV boxes at SITE-2. It shows a positive cold deck airflow rate error and a negative zone 

temperature error. A trendlog showed that the VPACC algorithm embedded in the VAV box 

controller reported a high cold deck airflow alarm and a low zone temperature alarm. Table 2.3 

lists the possible causes of these faults, including a zone temperature sensor error, airflow (DP) 

sensor drift or failure, cold deck damper or actuator stuck or failed, supply air too cool, a 

scheduling conflict with the AHU, an undersized VAV box, a tuning problem with the airflow 

control or zone temperature control PID loop, an inappropriate zone temperature setpoint, a 

minimum airflow setpoint that is too high, and a sequencing logic error. This VAV box does not 

have a reheat coil, so the possible causes of reheat coil valve or actuator stuck or failed shown in 

Table 2.3 do not apply. Onsite personnel investigated and determined that the fault was due to a 

failed cold deck damper actuator. The damper failure allowed uncontrolled cold deck airflow to 

the zone, causing the zone temperature to fall well below the setpoint. The fault was repaired by 

replacing the broken actuator. 

Figure 5.13. Damper Actuator Failure. 

0

0.05

0.1

0.15

0.2

0.25

0.3

6:00 8:00 10:00 12:00 14:00 16:00

Time

Airflow (m3/s)

20

20.5

21

21.5

22

22.5

23

23.5

24

24.5

25

Temperature (oC)

Cold Deck Airflow Setpoint

Measured Cold Deck Airflow Rate

Zone Temperature Setpoint

Zone Temperature
39

5.3.2.6 Zone Temperature PID Loop Tuning Error 

Figure 5.14 shows a plot of airflow and temperature data vs. time of day from one of the dualduct VAV boxes at SITE-2. It shows a negative zone temperature error, since the zone 

temperature is less than the zone temperature setpoint. A trendlog showed that the VPACC 

algorithm embedded in the VAV box controller reported a low zone temperature alarm. Table 

2.3 lists the possible causes of this faults, including a zone temperature sensor error, airflow (DP) 

sensor drift or failure, supply air too cool, a scheduling conflict with the AHU, an undersized 

VAV box, a tuning problem with the airflow control or zone temperature control PID loop, an 

inappropriate zone temperature setpoint, a minimum airflow setpoint that is too high, and a 

sequencing logic error. This VAV box does not have a reheat coil, so the possible causes of 

reheat coil valve or actuator stuck or failed shown in Table 2.3 do not apply. Onsite personnel 

investigated and determined that the fault was due to an underdamped temperature control PID 

loop. The outputs of the zone temperature control loop are the hot and cold deck airflow 

setpoints. The hot and cold deck airflow control loops successfully maintained the hot and cold 

airflow rates (not shown) at their respective setpoints. Figure 5.14 shows that as the zone 

temperature approached the setpoint, the temperature control loop oscillated, as seen in the 

varying hot and cold deck airflow setpoints. 

Figure 5.14. Zone Temperature Control Loop Tuning Problem. 

0.00

0.02

0.04

0.06

0.08

0.10

0.12

0.14

0.16

6:00 8:00 10:00 12:00 14:00 16:00

Time

Airflow Rate (m3/s)

20

21

21

22

22

23

23

24

24

Temperature (oC)

Hot Deck Airflow Setpoint

Cold Deck Airflow Setpoint

Zone Temperature Setpoint

Zone Temperature 
40

5.3.3 SITE-3 

5.3.3.1 Supply Air Temperature Error 

Figure 5.15 shows a plot of temperature and control signal data vs. time of day from the AHU at 

SITE-3 for the occupied portion of one day. Both stages of heating (not shown) and all four 

stages of cooling (not shown) remain off while the mixing box dampers modulate to maintain the 

supply air temperature at its setpoint. This combination of control signals corresponds to Mode 

2: cooling with outdoor air. In addition to the set of rules specific to Mode 4, there is a set of 

rules that apply to all occupied modes of operation (see Table 2.1). One rule which applies to all 

occupied modes is Rule 25, which states that the supply air temperature should be nearly equal to 

the supply air temperature setpoint. For most of the day shown, the supply air temperature is 

nearly equal to the setpoint, but from 17:45 until 19:00, the supply air temperature drifts well 

below the setpoint. A trendlog showed that the APAR algorithm embedded in the AHU 

controller had generated a fault report due to Rule 25 late in the day. As shown in Table 2.2, the 

only possible causes of this fault are either a controller tuning or logic error. Onsite personnel 

investigated and determined that the fault was not due to either of the possible causes listed by 

APAR. Instead it was the result of a low supply airflow rate due to a low cooling load. The 

constant toilet exhaust airflow rate caused the AHU outdoor air fraction to rise despite the 

mixing box dampers closing to the minimum position. It is unknown whether the AHU controller 

would have energized the first stage of heating had the condition persisted. 

Figure 5.15. Supply Air Temperature Error. 

10

12

14

16

18

20

5:00 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Supply Air Temperature

Mixing Box Dampers

Supply Air Temperature Setpoint
41

 

5.3.4 SITE-4 

5.3.4.1 Hot Water Converter Offline 

Figure 5.16 shows a plot of control signal data vs. time of day from the AHU at SITE-4. This 

AHU has a preheat coil and a heating coil, which are sequenced in series to meet the heating 

load. Relatively small heating loads are met by opening the preheat coil valve only, while the 

heating coil valve remains closed. As the heating load increases, the preheat coil valve saturates 

open and the heating coil valve opens to meet the load. Figure 5.16 shows the AHU operating in 

Mode 1: heating. One of the rules for Mode 1 is Rule 4, which warns that the heating coil valve 

is saturated fully open. For the first 10 hours of the day shown, both the preheat and heating coil 

valves are saturated at 100 % open. A trendlog showed that the APAR algorithm embedded in 

the AHU controller had generated a fault report due to Rule 4. As shown in Table 2.2, the 

possible causes of this fault are either a supply air temperature sensor error, a stuck or leaking 

cooling coil valve, a stuck heating coil valve, an undersized heating coil, a fouled heating coil, 

hot water supply temperature too low, a problem with the hot water circulating pump, or a 

controller tuning error. Onsite personnel investigated and determined that the fault was due to a 

steam-to-hot water converter going offline. The converter supplies hot water to the preheat and 

heating coils of the AHU. When the converter was offline, the hot water supply temperature was 

too low. Figure 5.16 shows that the fault disappeared when the converter was brought back 

online at approximately 10:00. 

Figure 5.16. Hot Water Converter Offline. 

0

20

40

60

80

100

0:00 2:00 4:00 6:00 8:00 10:00 12:00 14:00 16:00

Time

Control Signal (%)

Heating Coil Valve Preheat Coil Valve
42

5.3.4.2 Manual Override of Outdoor Air Damper 

Figure 5.17 shows a plot of temperature and control signal data vs. time of day from the AHU at 

SITE-4. The preheat and heating coil valves (not shown) remain fully closed and the mixing box 

dampers are positioned for 100 % outdoor air. The cooling coil valve is modulated to meet the 

cooling load. This combination of control signals corresponds to Mode 3: mechanical cooling 

with 100 % outdoor air. One of the rules for Mode 3 is Rule 10, which states that the outdoor air 

and mixed air temperatures should be nearly the same. Figure 5.17 shows that the mixed air 

temperature is greater than the outdoor air temperature by as much as 3 oC. A trendlog showed 

that the APAR algorithm embedded in the AHU controller had generated a fault report due to 

Rule 10. As shown in Table 2.2, the possible causes of this fault are an outdoor or mixed air 

temperature sensor error or a stuck or leaking mixing box damper. Onsite personnel explained 

that the fault was due to a manual override of the outdoor air damper which had been made in 

response to a design flaw. The sequence of operations for this AHU specifies that the outdoor air 

damper open fully during occupied periods. However, under some weather conditions, the AHU 

does not have sufficient capacity to meet both the space heating/cooling load and the ventilation 

load. A manual override keeps the outdoor air damper partially closed, thereby reducing the 

ventilation load so that the AHU has sufficient capacity to maintain the space temperature and 

humidity at setpoint. 

Figure 5.17. Manual Override of Outdoor Air Damper. 

15

16

17

18

19

20

21

22

23

24

25

16:00 16:30 17:00 17:30 18:00

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Outdoor Air Damper

Mixed Air Temperature

Outdoor Air Temperature

Cooling Coil Valve
43

5.3.4.3 Steam Outage 

Figure 5.18 shows a plot of temperature and control signal data vs. time of day from the AHU at 

SITE-4. This AHU has a preheat coil and a heating coil, which are sequenced as described in 

Section 5.4.1. Figure 5.18 shows the AHU operating in Mode 1: heating. One of the rules for 

Mode 1 is Rule 4, which warns that the heating coil valve is saturated fully open. For the first 12 

hours of the day shown, both the preheat and heating coil valves are saturated at 100 % open. A 

trendlog showed that the APAR algorithm embedded in the AHU controller had generated a fault 

report due to Rule 4. As shown in Table 2.2, the possible causes of this fault are either a supply 

air temperature sensor error, a stuck or leaking cooling coil valve, a stuck heating coil valve, an 

undersized heating coil, a fouled heating coil, hot water supply temperature too low, a problem 

with the hot water circulating pump, or a controller tuning error. Onsite personnel investigated 

and determined that the fault was due to a sitewide steam outage which caused the hot water 

supply temperature to fall too low. Figure 5.18 shows that the fault disappeared when the steam 

supply was brought back online at approximately 12:00. 

Figure 5.18. Sitewide Steam Outage. 

0

20

40

60

80

100

0:00 2:00 4:00 6:00 8:00 10:00 12:00 14:00 16:00 18:00 20:00 22:00

Time

Contol Signal (%)

Preheat Coil Valve

Heating Coil Valve
44

5.3.4.4 Incorrect Cooling Coil Valve Actuator Configuration 

Figure 5.19 shows a plot of temperature and control signal data vs. time of day from the AHU at 

SITE-4. It shows the AHU operating in Mode 5: unknown mode of operation. One of the rules 

which applies to all modes of operation is Rule 25, which states that the supply air temperature 

should be nearly equal to the supply air temperature setpoint. The sequence of operations for this 

single-zone AHU modulates the cooling coil valve to maintain the zone temperature between the 

heating and cooling setpoints, so Rule 25 was rewritten to state that the zone temperature should 

be between the cooling and heating setpoints. Figure 5.19 shows that the zone temperature 

exceeded the cooling setpoint by as much as 5.5 oC, yet the cooling coil valve remained closed. 

A trendlog showed that the APAR algorithm embedded in the AHU controller had generated a 

fault report due to Rule 25. As shown in Table 2.2, the possible causes of this fault are either a 

controller tuning or logic error. Onsite personnel investigated and determined that the fault was 

due to an incorrect configuration of the AHU controller output to the cooling coil valve actuator. 

The controller output was configured for 0 V – 10 V, but the actuator was 2 V – 10 V. As a 

result, the valve remained closed for controller output values from 0 V – 2 V. The fault was 

repaired by reconfiguring the controller output for 2 V – 10 V. 

Figure 5.19. Incorrect Cooling Coil Valve Actuator Configuration. 

20

21

22

23

24

25

26

27

28

0:00 2:00 4:00 6:00 8:00 10:00 12:00 14:00 16:00 18:00 20:00 22:00

Time

Temperature (oC)

0

20

40

60

80

100

Control Signal (%)

Zone Temperature

Cooling Temperature Setpoint

Heating Temperature Setpoint

Cooling Coil Valve
45

5.3.5 SITE-5 

5.3.5.1 Simultaneous Mechanical Cooling and Economizing 

0

20

40

60

80

100

6:00 7:00 8:00 9:00 10:00 11:00 12:00

Time

Control Signal (%)

Heating Coil Valve

Cooling Coil Valve

Outdoor Air Damper

Figure 5.20 shows a plot of control signal data vs. time of day from one of the AHUs at SITE-5; 

it shows the AHU operating in Mode 5: unknown mode of operation. One of the rules for Mode 

5 is Rule 24, which indicates simultaneous mechanical cooling and the economizing. Figure 5.20 

shows the cooling coil valve and outdoor air damper move in concert from 50 % to 75 % open. A 

trendlog showed that the APAR algorithm embedded in the AHU controller had generated a fault 

report due to Rule 24. As shown in Table 2.2, the possible causes of this fault are a controller 

tuning or logic (sequencing and scheduling) error. Since this fault was reported for both AHUs at 

SITE-5, a logic error was the most likely explanation. A review of the control logic revealed that 

this was the case: the output of the temperature control PID loop was simply sent to the cooling 

coil valve and outdoor air damper simultaneously. This fault caused an increased load on the 

chiller and increased chiller run time, both contributing to increased energy consumption. Proper 

sequencing for conditions that meet the criteria for economizer operation would position the 

outdoor air damper to maintain the supply air temperature at its setpoint while keeping the 

cooling coil valve closed, thus meeting the cooling load without using mechanical cooling. If the 

cooling load is too great, the outdoor air damper will saturate at 100% open, and the cooling coil 

valve should then open to maintain the supply air temperature at its setpoint.

Figure 5.20. Simultaneous Mechanical Cooling and Economizing. 
46

5.3.6 SITE-6 

5.3.6.1 Simultaneous Mechanical Cooling and Economizing 

0

20

40

60

80

100

120

12:00 13:00 14:00 15:00 16:00 17:00

Time

Control Signal (%)

Outdoor Air Damper

Cooling Coil Valve

Figure 5.21 shows a plot of control signal data vs. time of day from one of the AHUs at SITE-6; 

it shows the AHU operating in Mode 5: unknown mode of operation. One of the rules for Mode 

5 is Rule 24, which states that the AHU is simultaneously modulating the cooling coil valve and 

economizer. As shown in Figure 5.21, the cooling coil valve opens while the outdoor air damper 

is modulating. A trendlog showed that the APAR algorithm embedded in the AHU controller had 

generated a fault report due to Rule 24. As shown in Table 2.2, the possible causes of this fault 

are a controller tuning or logic (sequencing and scheduling) error. As in the simultaneous cooling 

and economizing fault for SITE-5, the AHU sequencing logic was the cause. In this case, two 

separate PID loops were used to position the cooling coil valve and the outdoor air damper. No 

interlocks or other logic was present to coordinate outdoor air damper operation with the heating 

and cooling coil valves.

Figure 5.21. Simultaneous Mechanical Cooling and Economizing. 
47

5.3.6.2 Outdoor Air Temperature Sensor Error 

6

8

10

12

14

16

18

20

22

24

6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00

Time

Temperature (oC)

Return Air Temperature

Outdoor Air 

Mixed Air Temperature

Figure 5.22 shows a plot of temperature data vs. time of day from one of the AHUs at SITE-6. 

Rules 26 and 27 apply to all modes of operation and state that the mixed air temperature should 

be between the outdoor air and return air temperatures. Rule 26 checks whether the mixed air 

temperature is greater than the maximum of the outdoor air and return air temperatures, while 

Rule 27 checks whether the mixed air temperature is less than the minimum of the outdoor air 

and return air temperatures. Figure 5.22 shows that the mixed air temperature is less than the 

minimum of the outdoor air and return air temperatures by as much as 5 oC. A trendlog showed 

that the APAR algorithm embedded in the AHU controller had generated a fault report due to 

Rule 27. As shown in Table 2.2, the possible causes of this fault are an outdoor or mixed air 

temperature sensor error or a stuck or leaking mixing box damper. Onsite personnel investigated 

and determined that the fault was due to an outdoor air temperature sensor error caused by a 

difference in temperature between the location of the outdoor air temperature sensor and the 

AHU’s outdoor air intake.

Figure 5.22. Outdoor Air Temperature Sensor Error. 
48

5.3.6.3 VAV Box Controller Hardware Failure 

In one case, high airflow alarms were reported for two of the VAV boxes at SITE-6. A follow up 

by the maintenance staff determined that both of the VAV box controllers had failed. The 

controllers were replaced and the alarms did not recur. 

5.3.6.4 Disconnected VAV Box Supply Air Duct 

Another fault was a low airflow alarm for a VAV box. The maintenance staff determined that the 

flexible duct connecting the main supply air duct to the inlet of the VAV box had partially 

slipped from the VAV box inlet connection. The flexible duct was moved into the correct 

position and secured in place. After this repair, the alarm did not recur. 

5.3.6.5 VAV Box Damper Actuator Failure 

A high airflow alarm was reported for one of the VAV boxes at SITE-6. A follow up by the 

maintenance staff determined that the damper actuator shaft was bent. The shaft was replaced 

and the alarm did not recur. 

5.3.6.6 Disconnected VAV Box Flow Sensor Tubing 

Another high airflow alarm was reported for another VAV box at SITE-6. In this case, the fault 

was caused by one of the flexible tubing connections from the velocity probe (flow ring) in the 

VAV box inlet to the differential pressure sensor on the VAV box controller. The tubing had 

slipped off of the connection at the controller. The tubing was moved back into the correct 

position and the alarm did not recur. 

5.3.6.7 Zone Temperature Sensor Error 

A high zone temperature fault was reported for one of the VAV boxes at SITE-6. A follow up by 

the maintenance staff determined that the zone temperature sensor was located directly above a 

computer monitor. The sensor was measuring the temperature of a local “hot spot” rather than 

the zone temperature. 
49

5.3.6.8 Undersized VAV Box 

20

21

22

23

24

25

26

27

28

6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00

Time

Temperature (oC)

Cooling Setpoint Temperature

Heating Setpoint Temperature

Zone Temperature

Figure 5.23 shows a plot of temperature data vs. time of day from one of the VAV boxes at 

SITE-6. It shows a large positive zone temperature error, since the zone temperature is greater 

than the cooling setpoint temperature. A trendlog showed that the VPACC algorithm embedded 

in the VAV box controller reported a high zone temperature alarm. Table 2.3 lists the possible 

causes of this fault, including a zone temperature sensor error, airflow (DP) sensor error, reheat 

coil valve or actuator stuck or failed, supply air too warm, a scheduling conflict with the AHU, 

an undersized VAV box, a tuning problem with the airflow control or zone temperature control 

PID loop, an inappropriate zone temperature setpoint, a maximum airflow setpoint that is too 

low, and a sequencing logic error. Onsite personnel investigated and determined that the fault 

was due to a high solar heat gain to the conditioned space, which is a lobby with large windows. 

The VAV box is not large enough to provide a sufficient supply airflow rate to meet the load.

Figure 5.23. Undersized VAV Box. 
50

5.3.6.9 Undersized Supply Fan 

0

0.05

0.1

0.15

0.2

0.25

0.3

0.35

0.4

3:00 6:00 9:00 12:00 15:00 18:00 21:00

Time

Airflow Rate (m3/s)

Airflow Rate Setpoint

Measured Airflow Rate

Figure 5.24 shows a plot of airflow data vs. time of day from one of the VAV boxes at SITE-6. 

The plot shows that the measured airflow rate was substantially less than the airflow rate 

setpoint. A trendlog showed that the VPACC algorithm embedded in the VAV box controller 

reported a low airflow alarm. Table 2.3 lists the possible causes of this fault, including an airflow 

(DP) sensor error, a stuck or failed damper or damper actuator, low static pressure in the supply 

air duct, a scheduling conflict with the AHU, an undersized VAV box, a tuning problem with the 

airflow control PID loop, a maximum airflow setpoint that is too high, and a sequencing logic 

error. Onsite personnel investigated and determined that the fault was due to low static pressure 

in the supply air duct caused by an undersized supply fan in the AHU that serves this VAV box. 

Figure 5.24 illustrates that early and again later in the day, the airflow rate setpoint was at the 

minimum and the supply fan was able to maintain sufficient static pressure. When the airflow 

setpoint increased in the middle of the day, the actual airflow fell below the setpoint as the 

supply fan was not able to maintain the static pressure at the setpoint. The problem was corrected 

by replacing the sheaves on the supply fan and motor to increase the fan speed.

Figure 5.24. Undersized Supply Fan. 
51

5.3.7 SITE-7 

5.3.7.1 AHU PID Loop Tuning Error 

Figure 5.25 shows a plot of control signal data vs. time of day from one of the AHUs at SITE-7. 

Both stages of DX cooling remain off (not shown) and the economizer is positioned for 

minimum outdoor air (not shown), while the heating coil valve repeatedly cycles open and 

closed. The actual rate of valve cycling was observed by the researcher and the maintenance staff 

to be several times greater than that shown on Figure 5.25. An aliasing effect is present due to 

the relatively large trendlog sample interval time of 15 min. Whenever the heating coil valve is 

closed, the AHU is in Mode 5 (unknown mode of operation) and when the heating coil valve is 

open, the AHU is in Mode 1 (heating). Rule 28, which applies to all modes of operation, counts 

the number of mode switches per hour. If the count exceeds the threshold (seven mode switches 

per hour) then a fault has occurred. Although it does not appear so in Figure 5.2, Rule 28 is 

violated several times on the day shown. A trendlog showed that the APAR algorithm embedded 

in the AHU controller had generated several fault reports due to Rule 28. As shown in Table 2.2, 

the possible causes of this fault are a controller or logic error. Onsite personnel investigated and 

determined that the fault was due to the value of the parameters used to sequence the heating coil 

valve, stages of DX cooling, and the economizer. 

0

5

10

15

20

25

30

35

40

12:00 13:00 14:00 15:00 16:00

Time

Control Signal (%)

Heating Coil Valve

Figure 5.25. AHU PID Loop Tuning Error. 
52

5.3.8 SITE-8 

5.3.8.1 Zone Temperature Setpoint Too High 

One of the VAV box controllers at SITE-8 reported a low zone temperature alarm. The control 

contractor investigated and determined that the zone temperature setpoint had been set to an 

unreasonably high value. This error caused the VAV box to operate in full reheat mode, with the 

parallel fan running and both stages of reheat energized, during mild spring weather. The 

setpoint was corrected and the alarms did not recur. 
53

6 Summary 

An overall effort was conducted to transfer two FDD methods, APAR and VPACC, from 

research to commercial use. FDD code was developed using several manufacturers’ application 

programming languages. Various options for communicating the results of the FDD calculations 

to the building operator were explored, including notification via BAS alarms and automatically 

generated work orders. 

Robust sets of parameters for APAR and VPACC were tabulated to enable the commercial use 

of these FDD tools without the collection and analysis of trend data from each potential 

installation. Recommended values for the parameters were determined through trial and error at 

multiple field test sites and the resulting values were compiled and tabulated. For users who need 

or prefer to determine site-specific parameters, procedures to do so were developed and 

documented.

Multiple field sites were established to test APAR and VPACC embedded in commercial HVAC 

equipment controllers. The test was quite successful: a variety of mechanical and control faults 

have been detected, diagnosed, and in many cases, repaired. 

The viability of deploying FDD as an integral component of the HVAC control system has been 

demonstrated. Based on feedback from users at the field sites, modifications have been made to 

enhance the usability and robustness of the FDD tools. In some cases, the local representative of 

the manufacturer of the control system was involved in the setup and operation of the test site. 

Feedback from these manufacturers’ representatives, who will ultimately be responsible for 

installing FDD in their customers’ buildings, was used to make the installation procedure more 

time- and resource-efficient and minimize the amount of site-specific configuration required. 
54

7 References 

[1] Castro, N.S., Schein, J., Park, C., Galler, M.A., Bushby, S.T., and House, J.M. 2002. Results 

from Simulation and Laboratory Testing of Air Handling Unit and Variable Air Volume Box 

Diagnostic Tools. NISTIR 6964. National Institute of Standards and Technology. Gaithersburg, 

MD.

[2] Schein, J., Bushby, S.T., Castro, N.S., and House, J.M. 2003. Results from Field Testing of 

Air Handling Unit and Variable Air Volume Box Diagnostic Tools. NISTIR 6994. National 

Institute of Standards and Technology. Gaithersburg, MD.

[3] Schein, J., Bushby, S.T., and House, J.M. 2003. Results from Laboratory Testing of 

Embedded Air Handling Unit and Variable Air Volume Box Diagnostic Tools. NISTIR 7036. 

National Institute of Standards and Technology. Gaithersburg, MD.

[4] Hyvärinen, J. and Kärki, S. (Ed.). 1996. International Energy Agency Building Optimisation 

and Fault Diagnosis Source Book. Published by Technical Research Centre of Finland, 

Laboratory of Heating and Ventilation, Espoo, Finland. 

[5] House, J.M., Vaezi-Nejad, H., and Whitcomb, J.M., 2001. An Expert Rule Set for Fault 

Detection in Air-Handling Units. ASHRAE Transactions. Vol. 107, Pt. 1: pp. 858-871. 

[6] Schein, J., and House, J.M. 2003. Application of Control Charts for Detecting Faults in 

Variable-Air-Volume Boxes. ASHRAE Transactions Vol. 109, Part 2. 

[7] Ryan, Thomas P., 2000. Statistical Methods for Quality Improvement, 2nd Edition. Wiley and 

Sons, New York. 

[8] Taylor, B.N. and Kuyatt, C.E. 1994. Guidelines for Evaluating and Expressing the 

Uncertainty of NIST Measurement Results. NIST Technical Note 1297. National Institute of 

Standards and Technology. Gaithersburg, MD. 
55

Appendix 1 APAR Pseudocode 

A platform-independent pseudocode implementation of APAR was developed as a programmer’s 

reference: 

//---------------------------------------------------- 

// Air handling unit Performance Assessment Rules = APAR 

//---------------------------------------------------- 

// Inputs: local data from controller 

 // OCC = occupancy status (on/off) 

 // CC = cooling coil valve position: 0 = fully closed, 100 = fully open 

 // HC = heating coil valve position: 0 = fully closed, 100 = fully open 

 // DMP = mixing box damper (economizer) position: 0 = full recirculation, 100 = 100% 

outdoor air 

 // SAT = supply air temperature 

 // SAT_SP = supply air temperature setpoint 

 // RAT = return air temperature 

 // MAT = mixed air temperature 

 // OAT = outdoor air temperature (local data from controller or via BAS network) 

 // RAE = return air enthalpy 

 // OAE = outdoor air enthalpy (local data from controller or via BAS network) 

 // DMP_MIN = minimum mixing box damper (economizer) position for occupied 

ventilation requirement 

 

// APAR variables 

 // ucc_norm = normalized cooling coil valve position (0 to 1) 

 // uhc_norm = normalized heating coil valve position (0 to 1) 

 // ud_norm = normalized mixing box damper (economizer) position (0 to 1) 

 // MODE99 = Unoccuppied (on/off) 

 // MODE1_START = Heating mode (on/off) 

 // MODE1_STDY = Heating mode steady state (on/off) 

 // MODE2_START = Cooling with outdoor air mode (on/off) 

 // MODE2_STDY = Cooling with outdoor air mode steady state (on/off) 

 // MODE3_START = Mechanical cooling with 100% outdoor air mode (on/off) 

 // MODE3_STDY = Mechanical cooling with 100% outdoor air mode steady state 

(on/off) 

 // MODE4_START = Mechanical cooling with minimum outdoor air mode (on/off) 

 // MODE4_STDY = Mechanical cooling with minimum outdoor air mode steady state 

(on/off) 

 // MODE5_START = Unknown mode of operation (on/off) 

 // MODE5_STDY = Unknown mode of operation steady state (on/off) 

 // EWMA_RESET = used to reset exponentially weighted moving averages (on/off) 

 // SAT_AVG = supply air temperature exponentially weighted moving average 
56

 // SAT_SP_AVG = supply air temperature setpoint exponentially weighted moving 

average 

 // RAT_AVG = return air temperature exponentially weighted moving average 

 // MAT_AVG = mixed air temperature exponentially weighted moving average 

 // OAT_AVG = outdoor air temperature exponentially weighted moving average 

 // RAE_AVG = return air enthalpy exponentially weighted moving average 

 // OAE_AVG = outdoor air enthalpy exponentially weighted moving average 

 // U_CC_AVG = normalized cooling coil valve position exponentially weighted moving 

average 

 // U_HC_AVG = normalized heating coil valve position exponentially weighted moving 

average 

 // U_D_AVG = normalized mixing box damper (economizer) position exponentially 

weighted moving average 

 // SW_COUNTER = mode switch counter 

 // VIOL_1 = status of rule 1, on = fault (rule violated), off = normal 

 // VIOL_2 = status of rule 2, on = fault (rule violated), off = normal 

 // VIOL_3 = status of rule 3, on = fault (rule violated), off = normal 

 // VIOL_4 = status of rule 4, on = fault (rule violated), off = normal 

 // VIOL_5 = status of rule 5, on = fault (rule violated), off = normal 

 // VIOL_6 = status of rule 6, on = fault (rule violated), off = normal 

 // VIOL_7 = status of rule 7, on = fault (rule violated), off = normal 

 // VIOL_8 = status of rule 8, on = fault (rule violated), off = normal 

 // VIOL_9 = status of rule 9, on = fault (rule violated), off = normal 

 // VIOL_10 = status of rule 10, on = fault (rule violated), off = normal 

 // VIOL_11 = status of rule 11, on = fault (rule violated), off = normal 

 // VIOL_12 = status of rule 12, on = fault (rule violated), off = normal 

 // VIOL_13 = status of rule 13, on = fault (rule violated), off = normal 

 // VIOL_14 = status of rule 14, on = fault (rule violated), off = normal 

 // VIOL_15 = status of rule 15, on = fault (rule violated), off = normal 

 // VIOL_16 = status of rule 16, on = fault (rule violated), off = normal 

 // VIOL_17 = status of rule 17, on = fault (rule violated), off = normal 

 // VIOL_18 = status of rule 18, on = fault (rule violated), off = normal 

 // VIOL_19 = status of rule 19, on = fault (rule violated), off = normal 

 // VIOL_20 = status of rule 20, on = fault (rule violated), off = normal 

 // VIOL_21 = status of rule 21, on = fault (rule violated), off = normal 

 // VIOL_22 = status of rule 22, on = fault (rule violated), off = normal 

 // VIOL_23 = status of rule 23, on = fault (rule violated), off = normal 

 // VIOL_24 = status of rule 24, on = fault (rule violated), off = normal 

 // VIOL_25 = status of rule 25, on = fault (rule violated), off = normal 

 // VIOL_26 = status of rule 26, on = fault (rule violated), off = normal 

 // VIOL_27 = status of rule 27, on = fault (rule violated), off = normal 

 // VIOL_28 = status of rule 28, on = fault (rule violated), off = normal 

 // FAULT_CODE_1 = multiplexes VIOL_1 through VIOL_8 into a single 8-bit number 

 // FAULT_CODE_2 = multiplexes VIOL_9 through VIOL_16 into a single 8-bit number 

 // FAULT_CODE_3 = multiplexes VIOL_17 through VIOL_24 into a single 8-bit 

number 
57

 // FAULT_CODE_4 = multiplexes VIOL_25 through VIOL_28 into a single 8-bit 

number 

// Static parameters 

 min_OA_frac = DMP_MIN / 100 // minimum outdoor air fraction 0 to 1 

 e_hc = 0.02 // heating coil threshold (unitless) 

 e_cc = 0.02 // cooling coil threshold (unitless) 

 e_d = 0.02 // mixing box dampers threshold (unitless) 

 e_f = 0.3 // flow threshold (unitless) 

 e_h = 1.3 // enthalpy threshold (kJ/kg) (3.0 BTU/lb) 

 e_t = 2.0 // temperature threshold (deg C) (3.6 deg F) 

 sw_max = 7 // maximum mode switches per hour (unitless) 

 del_t_sf = 1.1 // supply fan temperature rise (deg C) (2.0 deg F) 

 del_t_rf = 1.1 // return fan temperature rise (deg C) (2.0 deg F) 

 del_t_min = 5.6 // min temperature difference between OA and RA for ventilation rules 

(deg C) (1.0 deg F) 

 lambda = 0.1 // smoothing constant (unitless, value determined elsewhere in program) 

 occ_dly = 90 min // occupancy delay (min) 

 mode_dly = 60 min // mode switch delay (min) 

 rule_dly = 60 min // rule delay (min) 

 // allow selective disabling of rules to eliminate nuisance alarms 

 RULE_1_ENABLE = On 

 RULE_2_ENABLE = On 

 RULE_3_ENABLE = On 

 RULE_4_ENABLE = On 

 RULE_5_ENABLE = On 

 RULE_6_ENABLE = On 

 RULE_7_ENABLE = On 

 RULE_8_ENABLE = On 

 RULE_9_ENABLE = On 

 RULE_10_ENABLE = On 

 RULE_11_ENABLE = On 

 RULE_12_ENABLE = On 

 RULE_13_ENABLE = On 

 RULE_14_ENABLE = On 

 RULE_15_ENABLE = On 

 RULE_16_ENABLE = On 

 RULE_17_ENABLE = On 

 RULE_18_ENABLE = On 

 RULE_19_ENABLE = On 

 RULE_20_ENABLE = On 

 RULE_21_ENABLE = On 

 RULE_22_ENABLE = On 

 RULE_23_ENABLE = On 

 RULE_24_ENABLE = On 
58

 RULE_25_ENABLE = On 

 RULE_26_ENABLE = On 

 RULE_27_ENABLE = On 

 RULE_28_ENABLE = On 

 

//---------------------------------------------------- 

Do // once every 60 seconds 

//---------------------------------------------------- 

 // Normalize control signals 

 ucc_norm = CC / 100 

 uhc_norm = HC / 100 

 ud_norm = (DMP - DMP_MIN) / (100 - DMP_MIN) 

 

 //---------------------------------------------------- 

 // Determine mode 

 //---------------------------------------------------- 

 // Mode 99: Unoccupied 

 If (OCC = On) For occ_dly Then 

 MODE99 = Off 

 Else 

 MODE99 = On 

 End If 

 // Mode 1: Heating 

 If MODE99 = Off And uhc_norm > e_hc And ud_norm < e_d And ucc_norm < e_cc 

Then 

 MODE1_START = On 

 Else 

 MODE1_START = Off 

 End If 

 If (MODE1_START = On) For mode_dly Then 

 MODE1_STDY = On 

 Else 

 MODE1_STDY = Off 

 End If 

 // Mode 2: Cooling with OA 

 If MODE99 = Off And uhc_norm < e_hc And ud_norm > e_d And ud_norm < (1 - e_d) 

And ucc_norm < e_cc Then 

 MODE2_START = On 

 Else 

 MODE2_START = Off 
59

 End If 

 If (MODE2_START = On) For mode_dly Then 

 MODE2_STDY = On 

 Else 

 MODE2_STDY = Off 

 End If 

 // Mode 3: Mechanical Cooling with 100% OA 

 If MODE99 = Off And uhc_norm < e_hc And ud_norm > (1 - e_d) And ucc_norm > e_cc 

Then 

 MODE3_START = On 

 Else 

 MODE3_START = Off 

 End If 

 

 If (MODE3_START = On) For mode_dly Then 

 MODE3_STDY = On 

 Else 

 MODE3_STDY = Off 

 End If 

 

 // Mode 4: Mechanical Cooling with Min OA 

 If MODE99 = Off And uhc_norm < e_hc And ud_norm < e_d And ucc_norm > e_cc 

Then 

 MODE4_START = On 

 Else 

 MODE4_START = Off 

 End If 

 

 If (MODE4_START = On) For mode_dly Then 

 MODE4_STDY = On 

 Else 

 MODE4_STDY = Off 

 End If 

 

 // Mode 5: Unknown 

 If MODE99 = Off And MODE1_START = Off And MODE2_START = Off And 

MODE3_START = Off And MODE4_START = Off Then 

 MODE5_START = On 

 Else 

 MODE5_START = Off 

 End If 

 

 If (MODE5_START = On) For mode_dly Then 

 MODE5_STDY = On 
60

 Else 

 MODE5_STDY = Off 

 End If 

 

 // Mode Switch Counter 

 One Shot: If MODE1_START = On Then SW_COUNTER = SW_COUNTER + 1 

 One Shot: If MODE2_START = On Then SW_COUNTER = SW_COUNTER + 1 

 One Shot: If MODE3_START = On Then SW_COUNTER = SW_COUNTER + 1 

 One Shot: If MODE4_START = On Then SW_COUNTER = SW_COUNTER + 1 

 One Shot: If MODE5_START = On Then SW_COUNTER = SW_COUNTER + 1 

 

 

 //---------------------------------------------------- 

 // Calculate exponentially weighted moving averages 

 //---------------------------------------------------- 

 

 // Reset exponentially weighted moving averages upon mode switch 

 One Shot: If MODE1_START = On Then EWMA_RESET = On 

 One Shot: If MODE2_START = On Then EWMA_RESET = On 

 One Shot: If MODE3_START = On Then EWMA_RESET = On 

 One Shot: If MODE4_START = On Then EWMA_RESET = On 

 One Shot: If MODE5_START = On Then EWMA_RESET = On 

 

 // Supply Air Temperature 

 If EWMA_RESET = On Then 

 SAT_AVG = SAT 

 Else 

 SAT_AVG = (SAT * lambda) + (SAT_AVG * (1 - lambda)) 

 End If 

 

 // Supply Air Temperature Setpoint 

 If EWMA_RESET = On Then 

 SAT_SP_AVG = SAT_SP 

 Else 

 SAT_SP_AVG = (SAT_SP * lambda) + (SAT_SP_AVG * (1 - lambda)) 

 End If 

 

 // Return Air Temperature 

 If EWMA_RESET = On Then 

 RAT_AVG = RAT 

 Else 

 RAT_AVG = (RAT * lambda) + (RAT_AVG * (1 - lambda)) 

 End If 

 

 // Mixed Air Temperature 
61

 If EWMA_RESET = On Then 

 MAT_AVG = MAT 

 Else 

 MAT_AVG = (MAT * lambda) + (MAT_AVG * (1 - lambda)) 

 End If 

 

 // Outside Air Temperature 

 If EWMA_RESET = On Then 

 OAT_AVG = OAT 

 Else 

 OAT_AVG = (OAT * lambda) + (OAT_AVG * (1 - lambda)) 

 End If 

 

 // Return Air Enthalpy 

 If EWMA_RESET = On Then 

 RAE_AVG = RAE 

 Else 

 RAE_AVG = (RAE * lambda) + (RAE_AVG * (1 - lambda)) 

 End If 

 

 // Outdoor Air Enthalpy 

 If EWMA_RESET = On Then 

 OAE_AVG = OAE 

 Else 

 OAE_AVG = (OAE * lambda) + (OAE_AVG * (1 - lambda)) 

 End If 

 

 // Normalized Cooling Coil Control Signal 

 If EWMA_RESET = On Then 

 U_CC_AVG = ucc_norm 

 Else 

 U_CC_AVG = (ucc_norm * lambda) + (U_CC_AVG * (1 - lambda)) 

 End If 

 

 // Normalized Heating Coil Control Signal 

 If EWMA_RESET = On Then 

 U_HC_AVG = uhc_norm 

 Else 

 U_HC_AVG = (uhc_norm * lambda) + (U_HC_AVG * (1 - lambda)) 

 End If 

 

 // Normalized Mixing Box Damper Control Signal 

 If EWMA_RESET = On Then 

 U_D_AVG = ud_norm 

 Else 

 U_D_AVG = (ud_norm * lambda) + (U_D_AVG * (1 - lambda)) 
62

 End If 

 

 //---------------------------------------------------- 

 // Evaluate rules 

 //---------------------------------------------------- 

 

 // Mode 1: Heating 

 

 // Rule 1: In heating mode, SAT should be > MAT 

 If (RULE_1_ENABLE = On And MODE1_STDY = On And SAT_AVG < MAT_AVG 

+ del_t_sf - e_t) = On For rule_dly Then 

 VIOL_1 = On 

 Else 

 VIOL_1 = Off 

 End If 

 

 // Rule 2: Outdoor air fraction too low or too high 

 If (RULE_2_ENABLE = On And MODE1_STDY = On And Abs (RAT_AVG - 

OAT_AVG) > del_t_min And (Abs ((MAT_AVG - RAT_AVG) / (OAT_AVG - RAT_AVG))) - 

min_OA_frac > e_f) = On For rule_dly Then 

 VIOL_2 = On 

 Else 

 VIOL_2 = Off 

 End If 

 

 // Rule 3: Heating coil valve saturated fully open and persistent SAT error exists 

 If (RULE_3_ENABLE = On And MODE1_STDY = On And Abs (1 - U_HC_AVG) < 

e_hc And SAT_SP_AVG - SAT_AVG > e_t) = On For rule_dly Then 

 VIOL_3 = On 

 Else 

 VIOL_3 = Off 

 End If 

 

 // Rule 4: Heating coil valve saturated fully open, if heating load increases SAT will drift 

from setpoint 

 If (RULE_4_ENABLE = On And MODE1_STDY = On And VIOL_3 = Off And Abs (1 

- U_HC_AVG) < e_hc) = On For rule_dly Then 

 VIOL_4 = On 

 Else 

 VIOL_4 = Off 

 End If 

 

 // Mode 2: Cooling with OA 

 

 // Rule 5: OAT too warm for cooling with OA 
63

 If (RULE_5_ENABLE = On And MODE2_STDY = On And OAT_AVG > 

SAT_SP_AVG - del_t_sf + e_t) = On For rule_dly Then 

 VIOL_5 = On 

 Else 

 VIOL_5 = Off 

 End If 

 

 // Rule 6: SAT should be < RAT 

 If (RULE_6_ENABLE = On And MODE2_STDY = On And SAT_AVG > RAT_AVG - 

del_t_rf + e_t) = On For rule_dly Then 

 VIOL_6 = On 

 Else 

 VIOL_6 = Off 

 End If 

 

 // Rule 7: SAT and MAT should be nearly the same 

 If (RULE_7_ENABLE = On And MODE2_STDY = On And Abs (SAT_AVG - del_t_sf 

- MAT_AVG) > e_t) = On For rule_dly Then 

 VIOL_7 = On 

 Else 

 VIOL_7 = Off 

 End If 

 

 // Mode 3: Mechanical cooling with 100% OA 

 

 // Rule 8: OAT too cool for mech clg with 100% OA 

 If (RULE_8_ENABLE = On And MODE3_STDY = On And OAT_AVG < 

SAT_SP_AVG - del_t_sf - e_t) = On For rule_dly Then 

 VIOL_8 = On 

 Else 

 VIOL_8 = Off 

 End If 

 

 // Rule 9: OAE too high for mech clg with 100% OA, rule will vary depending on AHU 

sequencing as follows: 

 // 1. Is economizer enabled based on temperature or enthalpy? 

 // 2. Is economizer enabled based on return or fixed changeover condition? 

 If (RULE_9_ENABLE = On And MODE3_STDY = On And OAE_AVG > RAE_AVG 

+ e_h) = On For rule_dly Then 

 VIOL_9 = On 

 Else 

 VIOL_9 = Off 

 End If 

 

 // Rule 10: OAT and MAT should be nearly the same 
64

 If (RULE_10_ENABLE = On And MODE3_STDY = On And Abs (OAT_AVG - 

MAT_AVG) > e_t) = On For rule_dly Then 

 VIOL_10 = On 

 Else 

 VIOL_10 = Off 

 End If 

 

 // Rule 11: SAT should be < MAT 

 If (RULE_11_ENABLE = On And MODE3_STDY = On And SAT_AVG > MAT_AVG 

+ del_t_sf + e_t) = On For rule_dly Then 

 VIOL_11 = On 

 Else 

 VIOL_11 = Off 

 End If 

 

 // Rule 12: SAT should be < RAT 

 If (RULE_12_ENABLE = On And MODE3_STDY = On And SAT_AVG > RAT_AVG 

- del_t_rf + e_t) = On For rule_dly Then 

 VIOL_12 = On 

 Else 

 VIOL_12 = Off 

 End If 

 

 // Rule 13: Cooling coil valve saturated fully open and persistent SAT error exists 

 If (RULE_13_ENABLE = On And MODE3_STDY = On And Abs (1 - U_CC_AVG) < 

e_cc And SAT_AVG - SAT_SP_AVG > e_t) = On For rule_dly Then 

 VIOL_13 = On 

 Else 

 VIOL_13 = Off 

 End If 

 

 // Rule 14: Cooling coil valve saturated fully open, if cooling load increases SAT will 

drift from setpoint 

 If (RULE_14_ENABLE = On And MODE3_STDY = On And VIOL_13 = Off And Abs 

(1 - U_CC_AVG) < e_cc) = On For rule_dly Then 

 VIOL_14 = On 

 Else 

 VIOL_14 = Off 

 End If 

 

 // Mode 4: Mechanical cooling with minimum OA 

 

 // Rule 15: OAE too low for mech clg with min OA, rule will vary depending on AHU 

sequencing as follows: 

 // 1. Is economizer enabled based on temperature or enthalpy? 

 // 2. Is economizer enabled based on return or fixed changeover condition? 
65

 If (RULE_15_ENABLE = On And MODE4_STDY = On And OAE_AVG < RAE_AVG 

- e_h) = On For rule_dly Then 

 VIOL_15 = On 

 Else 

 VIOL_15 = Off 

 End If 

 

 // Rule 16: SAT should be < MAT 

 If (RULE_16_ENABLE = On And MODE4_STDY = On And SAT_AVG > MAT_AVG 

+ del_t_sf + e_t) = On For rule_dly Then 

 VIOL_16 = On 

 Else 

 VIOL_16 = Off 

 End If 

 

 // Rule 17: SAT should be < RAT 

 If (RULE_17_ENABLE = On And MODE4_STDY = On And SAT_AVG > RAT_AVG 

- del_t_rf + e_t) = On For rule_dly Then 

 VIOL_17 = On 

 Else 

 VIOL_17 = Off 

 End If 

 

 // Rule 18: %OA too low or too high 

 If (RULE_18_ENABLE = On And MODE4_STDY = On And Abs (RAT_AVG - 

OAT_AVG) > del_t_min And (Abs ((MAT_AVG - RAT_AVG) / (OAT_AVG - RAT_AVG))) - 

min_OA_frac > e_f) = On For rule_dly Then 

 VIOL_18 = On 

 Else 

 VIOL_18 = Off 

 End If 

 

 // Rule 19: Cooling coil valve saturated fully open and persistent SAT error exists 

 If (RULE_19_ENABLE = On And MODE4_STDY = On And Abs (1 - U_CC_AVG) < 

e_cc And SAT_AVG - SAT_SP_AVG > e_t) = On For rule_dly Then 

 VIOL_19 = On 

 Else 

 VIOL_19 = Off 

 End If 

 

 // Rule 20: Cooling coil valve saturated fully open, if cooling load increases SAT will 

drift from setpoint 

 If (RULE_20_ENABLE = On And MODE4_STDY = On And VIOL_19 = Off And Abs 

(1 - U_CC_AVG) < e_cc) = On For rule_dly Then 

 VIOL_20 = On 

 Else 
66

 VIOL_20 = Off 

 End If 

 

 // Mode 5: Unknown mode 

 

 // Rule 21: htg coil and clg coil valves and mixing box damper all modulating 

simultaneously 

 If (RULE_21_ENABLE = On And MODE5_STDY = On And U_HC_AVG > e_hc And 

U_D_AVG > e_d And U_D_AVG < (1 - e_d) And U_CC_AVG > e_cc) = On For rule_dly Then 

 VIOL_21 = On 

 Else 

 VIOL_21 = Off 

 End If 

 

 // Rule 22: htg coil and clg coil valves modulating simultaneously 

 If (RULE_22_ENABLE = On And MODE5_STDY = On And U_HC_AVG > e_hc And 

U_CC_AVG > e_cc) = On For rule_dly Then 

 VIOL_22 = On 

 Else 

 VIOL_22 = Off 

 End If 

 

 // Rule 23: htg coil valve and mixing box damper modulating simultaneously 

 If (RULE_23_ENABLE = On And MODE5_STDY = On And U_HC_AVG > e_hc And 

U_D_AVG > e_d) = On For rule_dly Then 

 VIOL_23 = On 

 Else 

 VIOL_23 = Off 

 End If 

 

 // Rule 24: clg coil valve and mixing box damper modulating simultaneously 

 If (RULE_24_ENABLE = On And MODE5_STDY = On And U_D_AVG > e_d And 

U_D_AVG < (1 - e_d) And U_CC_AVG > e_cc) = On For rule_dly Then 

 VIOL_24 = On 

 Else 

 VIOL_24 = Off 

 End If 

 

 // Rules that apply to multiple modes 

 

 // Rule 25: persistent SAT error exists 

 If (RULE_25_ENABLE = On And (MODE1_STDY = On Or MODE2_STDY = On Or 

MODE3_STDY = On Or MODE4_STDY = On Or MODE5_STDY = On) And Abs (SAT_AVG 

- SAT_SP_AVG) > e_t) = On For rule_dly Then 

 VIOL_25 = On 

 Else 
67

 VIOL_25 = Off 

 End If 

 

 // Rule 26: MAT should be between RAT and OAT (MAT too great) 

 If (RULE_26_ENABLE = On And (MODE1_STDY = On Or MODE2_STDY = On Or 

MODE3_STDY = On Or MODE4_STDY = On Or MODE5_STDY = On) And MAT_AVG > 

Max (RAT_AVG, OAT_AVG) + e_t) = On For rule_dly Then 

 VIOL_26 = On 

 Else 

 VIOL_26 = Off 

 End If 

 

 // Rule 27: MAT should be between RAT and OAT (MAT too low) 

 If (RULE_27_ENABLE = On And (MODE1_STDY = On Or MODE2_STDY = On Or 

MODE3_STDY = On Or MODE4_STDY = On Or MODE5_STDY = On) And MAT_AVG < 

Min (RAT_AVG, OAT_AVG) - e_t) = On For rule_dly Then 

 VIOL_27 = On 

 Else 

 VIOL_27 = Off 

 End If 

 

 // Rule 28: Too many mode switches 

 If (RULE_28_ENABLE = On And SW_COUNTER > sw_max) Then 

 VIOL_28 = On 

 Else 

 VIOL_28 = Off 

 End If 

 

 //---------------------------------------------------- 

 // Multiplex binary rule violations into analog fault codes 

 // Only necessary if fault code trend logs are desired 

 // Assumes 8-bit integers, therefore 8 faults per code 

 //---------------------------------------------------- 

 

 FAULT_CODE_1 = 0 

 If VIOL_1 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 1 

 End If 

 If VIOL_2 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 2 

 End If 

 If VIOL_3 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 4 

 End If 

 If VIOL_4 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 8 
68

 End If 

 If VIOL_5 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 16 

 End If 

 If VIOL_6 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 32 

 End If 

 If VIOL_7 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 64 

 End If 

 If VIOL_8 = On Then 

 FAULT_CODE_1 = FAULT_CODE_1 + 128 

 End If 

 

 FAULT_CODE_2 = 0 

 If VIOL_9 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 1 

 End If 

 If VIOL_10 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 2 

 End If 

 If VIOL_11 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 4 

 End If 

 If VIOL_12 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 8 

 End If 

 If VIOL_13 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 16 

 End If 

 If VIOL_14 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 32 

 End If 

 If VIOL_15 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 64 

 End If 

 If VIOL_16 = On Then 

 FAULT_CODE_2 = FAULT_CODE_2 + 128 

 End If 

 

 FAULT_CODE_3 = 0 

 If VIOL_17 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 1 

 End If 

 If VIOL_18 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 2 
69

 End If 

 If VIOL_19 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 4 

 End If 

 If VIOL_20 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 8 

 End If 

 If VIOL_21 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 16 

 End If 

 If VIOL_22 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 32 

 End If 

 If VIOL_23 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 64 

 End If 

 If VIOL_24 = On Then 

 FAULT_CODE_3 = FAULT_CODE_3 + 128 

 End If 

 

 FAULT_CODE_4 = 0 

 If VIOL_25 = On Then 

 FAULT_CODE_4 = FAULT_CODE_4 + 1 

 End If 

 If VIOL_26 = On Then 

 FAULT_CODE_4 = FAULT_CODE_4 + 2 

 End If 

 If VIOL_27 = On Then 

 FAULT_CODE_4 = FAULT_CODE_4 + 4 

 End If 

 If VIOL_28 Then 

 FAULT_CODE_4 = FAULT_CODE_4 + 8 

 End If 

 

 

//---------------------------------------------------- 

End Do // once every 60 seconds 

//---------------------------------------------------- 

Do // once every 60 minutes 

 One Shot: SW_COUNTER = 0 // reset mode switch counter 

End Do // once every 60 minutes
70

Appendix 2 VPACC Pseudocode 

A platform-independent pseudocode implementation of VPACC was developed as a 

programmer’s reference: 

//---------------------------------------------------- 

// VAV box Performance Assessment Control Charts = VPACC 

//---------------------------------------------------- 

// Inputs: local data from controller 

 // OCC = occupancy status (on/off) 

 // ZONE_TEMP = zone temperature sensor 

 // HSP = heating setpoint temperature 

 // CSP = cooling setpoint temperature 

 // FLOW = air flow rate (DP) sensor 

 // FLOW_SP = air flow rate setpoint 

 // MAX_FLOW = VAV box maximum airflow rate 

 // RHC = reheat coil valve position: 0 = fully closed, 100 = fully open 

 // DAT = discharge air temperature 

 // AHU_SAT = air handling unit supply air temperature (via BAS network) 

// VPACC variables 

 // steady = zone occupied and steady-state conditions exist (on/off) 

 // reset = timer to periodically reset CUSUMs 

 // temp_err = zone temperature error 

 // airflow_err = zone airflow error 

 // dat_err = discharge air temperature error 

 // norm_temp_err = normalized zone temperature error 

 // norm_airflow_err = normalized zone airflow error 

 // norm_dat_err = normalized discharge air temperature error 

 // TEMP_S = positive cumulative sum for the zone temperature error 

 // TEMP_T = negative cumulative sum for the zone temperature error 

 // AIRFLOW_S = positive cumulative sum for the zone airflow error 

 // AIRFLOW_T = negative cumulative sum for the zone airflow error 

 // ABS_AIRFLOW_S = absolute value cumulative sum for the zone airflow error 

 // DAT_S = positive cumulative sum for the discharge air temperature error 

 // DAT_T = negative cumulative sum for the discharge air temperature error 

 hi_temp_err_enable = On // allows selective disabling of zone temperature error to 

eliminate nuisance alarms 

 lo_temp_err_enable = On // allows selective disabling of zone temperature error to 

eliminate nuisance alarms 

 hi_airflow_err_enable = On // allows selective disabling of zone airflow error to 

eliminate nuisance alarms 

 lo_airflow_err_enable = On // allows selective disabling of zone airflow error to 

eliminate nuisance alarms 
71

 abs_airflow_err_enable = On // allows selective disabling of zone airflow error to 

eliminate nuisance alarms 

 hi_dat_err_enable = On // allows selective disabling of discharge air temperature error to 

eliminate nuisance alarms 

 lo_dat_err_enable = On // allows selective disabling of discharge air temperature error to 

eliminate nuisance alarms 

 

// Static parameters 

 temp_err_exp = 0.0 deg C (0.0 deg F) // expected zone temperature error 

 temp_err_stdev = 0.6 deg C (1.0 deg F) // expected zone temperature variation 

 airflow_err_exp = 0 * MAX_FLOW // expected zone airflow error (same units as 

MAX_FLOW) 

 airflow_err_stdev = 0.02 * MAX_FLOW // expected zone airflow variation (same units 

as MAX_FLOW) 

 dat_err_exp = 1.1 deg C (2.0 deg F) // expected discharge air temperature error 

 dat_err_stdev = 1.1 deg C (2.0 deg F) // expected discharge air temperature variation 

 slack_parameter = 3 (unitless) 

 alarm_limit = 1000 (unitless) 

 occ_dly = 90 min // occupancy delay (min) 

 rst_int = 360 min // CUSUM reset interval (min) 

// Delay for quasi-steady state conditions 

If OCC = On For occ_dly Then 

 steady = ON 

 Do // once every rst_int 

 One Shot: reset = ON // periodically reset CUSUMs 

 End Do 

Else 

 steady = OFF 

 reset = OFF 

End If 

 

//---------------------------------------------------- 

Do // once every 60 seconds 

//---------------------------------------------------- 

 If steady = On And reset = OFF // perform VPACC calculations 

 //---------------------------------------------------- 

 // Compute process errors 

 //---------------------------------------------------- 

 

 // Compute temperature error 

 If temp_err_enable = On Then 

 If ZONE_TEMP > CSP Then 

 temp_err = ZONE_TEMP - CSP 
72

 ElseIf ZONE_TEMP < HSP Then 

 temp_err = ZONE_TEMP - HSP 

 Else 

 temp_err = 0 

 End If 

 Else 

 temp_err = 0 

 End If 

 

 // Compute airflow error 

 If airflow_err_enable = On Then 

 airflow_err = FLOW - FLOW_SP 

 Else 

 airflow_err = 0 

 End If 

 

 // Compute discharge air temperature error 

 If (dat_err_enable = On) And (RHC = 0) Then 

 dat_err = DAT - AHU_SAT 

 Else 

 dat_err = 0 

 End If 

 

 //---------------------------------------------------- 

 // Normalize process errors 

 //---------------------------------------------------- 

 

 // Normalize temperature error 

 norm_temp_err = (temp_err - temp_err_exp) / temp_err_stdev 

 

 // Normalize airflow error 

 norm_airflow_err = (airflow_err - airflow_err_exp) / airflow_err_stdev 

 

 // Normalize discharge air temperature error 

 norm_dat_err = (dat_err - dat_err_exp) / dat_err_stdev 

 

 //---------------------------------------------------- 

 // Compute cumulative sums 

 //---------------------------------------------------- 

 

 // Calculate temperature cumulative sums 

 TEMP_S = Max (0, norm_temp_err - slack_parameter + TEMP_S) 

 TEMP_T = Max (0, - 1 * norm_temp_err - slack_parameter + TEMP_T) 

 

 // Calculate airflow cumulative sums 

 AIRFLOW_S = Max (0, norm_airflow_err - slack_parameter + AIRFLOW_S) 
73

 AIRFLOW_T = Max (0, - 1 * norm_airflow_err - slack_parameter + AIRFLOW_T) 

 ABS_AIRFLOW_S = Max (0, Abs (norm_airflow_err) - slack_parameter + 

ABS_AIRFLOW_S) 

 

 // Calculate dat cumulative sums 

 DAT_S = Max (0, norm_dat_err - slack_parameter + DAT_S) 

 DAT_T = Max (0, - 1 * norm_dat_err - slack_parameter + DAT_T) 

 

 //---------------------------------------------------- 

 // Check for alarm conditions 

 //---------------------------------------------------- 

 

 If TEMP_S > alarm_limit Then 

 HI_TEMP_ALARM = On 

 Else 

 HI_TEMP_ALARM = Off 

 End If 

 If TEMP_T > alarm_limit Then 

 LO_TEMP_ALARM = On 

 Else 

 LO_TEMP_ALARM = Off 

 End If 

 If AIRFLOW_S > alarm_limit Then 

 HI_AIRFLOW_ALARM = On 

 Else 

 HI_AIRFLOW_ALARM = Off 

 End If 

 If AIRFLOW_T > alarm_limit Then 

 LO_AIRFLOW_ALARM = On 

 Else 

 LO_AIRFLOW_ALARM = Off 

 End If 

 If ABS_AIRFLOW_S > alarm_limit Then 

 ABS_AIRFLOW_ALARM = On 

 Else 

 ABS_AIRFLOW_ALARM = Off 

 End If 

 If DAT_S > alarm_limit Then 

 HI_DAT_ALARM = On 

 Else 

 HI_DAT_ALARM = Off 

 End If 

 If DAT_T > alarm_limit Then 

 LO_DAT_ALARM = On 

 Else 

 LO_DAT_ALARM = Off 
74

 End If 

 

 //---------------------------------------------------- 

 // Multiplex binary alarms into analog fault code 

 // Only necessary if fault code trend logs are desired 

 // If integer is at least 7-bit, only one code is needed 

 //---------------------------------------------------- 

 FAULT_CODE = 0 

 If HI_TEMP_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 1 

 End If 

 If LO_TEMP_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 2 

 End If 

 If HI_AIRFLOW_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 4 

 End If 

 If LO_AIRFLOW_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 8 

 End If 

 If ABS_AIRFLOW_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 16 

 End If 

 If HI_DAT_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 32 

 End If 

 If LO_DAT_ALARM = On Then 

 FAULT_CODE = FAULT_CODE + 64 

 End If 

 

 Else // Quasi-steady state conditions do not exist, do not perform VPACC calculations 

 

 temp_err = 0 

 airflow_err = 0 

 dat_err = 0 

 norm_temp_err = 0 

 norm_airflow_err = 0 

 norm_dat_err = 0 

 TEMP_S = 0 

 TEMP_T = 0 

 AIRFLOW_S = 0 

 AIRFLOW_T = 0 

 ABS_AIRFLOW_S = 0 

 DAT_S = 0 

 DAT_T = 0 
75

 HI_TEMP_ALARM = Off 

 LO_TEMP_ALARM = Off 

 HI_AIRFLOW_ALARM = Off 

 LO_AIRFLOW_ALARM = Off 

 ABS_AIRFLOW_ALARM = Off 

 HI_DAT_ALARM = Off 

 LO_DAT_ALARM = Off 

 FAULT_CODE = 0 

 DIAGNOSTIC_CODE_1 = 0 

 DIAGNOSTIC_CODE_2 = 0 

 DIAGNOSTIC_CODE_3 = 0 

 

 End If 

//---------------------------------------------------- 

End Do // once every 60 seconds 

//----------------------------------------------------