|
| 1 | +--- |
| 2 | +schema: cxf-library/fault-card/v1 |
| 3 | +id: HP-FC-053 |
| 4 | +name: Refrigerant undercharge — superheat/subcooling divergence |
| 5 | +equipment: hp |
| 6 | +status: verified |
| 7 | +phase: 2 |
| 8 | +method: rule |
| 9 | +severity: 3 |
| 10 | +category: EFFICIENCY_LOSS |
| 11 | +confidence: MEDIUM |
| 12 | +estimation_method: PROXY_ESTIMATION |
| 13 | +source: |
| 14 | + - "Library-authored — no reference card exists for this fault" |
| 15 | + - "NIST SP 1087, Kim, Yoon, Payne & Domanski, *Cooling Mode Fault Detection and Diagnosis Method for a Residential Heat Pump*, NIST, October 2008: §5.4.3 Table 5.2 (undercharge fault-direction rows, zones A and B), §5.4.2 and §5.4.4 (TXV control limits; the 0.5 °C upstream-subcooling test and its role in the method), §5.5.1 Figures 5.16-5.17 (fault level versus EER degradation), §5.5.2 Table 5.16 (undercharge diagnosis results)" |
| 16 | + - "Breuker & Braun 1998b and Rossi & Braun 1997, reproduced as SP 1087 Table 5.1(a) — the fixed-orifice refrigerant-leakage row this rule's pattern reproduces; the corroboration lineage HP-FC-050 draws on" |
| 17 | + - "Barandier 2023, Barandier & Mendes 2024 — undercharge prevalence on heat pumps (cited by HP-FC-050)" |
| 18 | + - "Li & Braun 2007, HVAC&R Research 13(2) — the multiple-simultaneous-fault caveat on single-fault pattern charts" |
| 19 | + - "Sibling precedent: HP-FC-050 (commissioning-set placeholder parameters), RTU-FC-051 (fixed bands named as a simplification of a regressed baseline), HP-FC-051 and HP-FC-052 (defrost and compressor gating as host preconditions)" |
| 20 | +g36: null |
| 21 | +clusters: [] |
| 22 | +suppresses: [] |
| 23 | +suppressed_by: [] |
| 24 | +related: [HP-FC-050, HP-FC-054, RTU-FC-051] |
| 25 | +playbooks: [heat-pump-faults] |
| 26 | +operating_states: "mechanical cooling, compressor running, unit not in defrost — all three host-gated" |
| 27 | +preconditions: "The compressor must be running and the unit must not be in defrost. Both are host gates on comp_status and defrost_status: with the compressor off all four temperatures equalise and both differences collapse to zero, and a defrost cycle deliberately reverses the circuit, which scrambles every refrigerant-side temperature this rule reads (HP-FC-051/052 precedent). The compressor must also have held its current capacity for min_runtime_for_eval (15 min); superheat overshoots for minutes after a start or a capacity step while the expansion valve catches up. evap_sat_temp and cond_sat_temp are host-derived P-T lookups and the lookup MUST be configured for the refrigerant actually in the machine — a wrong refrigerant biases both differences at once and in opposite directions, which is this rule's exact fault pattern. The suction and liquid probes must be in good contact with the line and insulated from ambient air; an uninsulated liquid-line probe reads high in a hot plant room and fabricates collapsed subcooling. Read yTxvSaturated as diagnostic context, NOT as an evaluability gate: this rule has no in-graph NO_EVAL test and false never means healthy (see Deviations)." |
| 28 | +points: |
| 29 | + - suction_temp |
| 30 | + - evap_sat_temp |
| 31 | + - cond_sat_temp |
| 32 | + - liquid_temp |
| 33 | +outputs: |
| 34 | + - name: yFault |
| 35 | + description: True while suction superheat has stayed above superheat_high_band and liquid subcooling below subcooling_low_band, both continuously for at least alarm_delay |
| 36 | + - name: yTxvSaturated |
| 37 | + description: Sub-condition flag (NOT an evaluability flag; false never means NO_EVAL) — true when liquid subcooling has fallen below subcooling_two_phase_floor, meaning the liquid line is no longer measurably subcooled and the expansion valve is at its control limit |
| 38 | +params: |
| 39 | + superheat_high_band: |
| 40 | + default: 15.0 |
| 41 | + unit: "°C" |
| 42 | + description: Suction superheat above which the evaporator is judged starved. COMMISSIONING-SET PLACEHOLDER — the shipped 15.0 sits just above the no-fault compressor-suction superheats NIST SP 1087 reports for its test unit (10.2-13.7 °C, against an 11.1 °C compressor-map standard). Set it from the unit's own charging chart plus a tolerance; a suction-line probe reads higher than an evaporator-exit probe on the same machine. |
| 43 | + cxf: shHigh.t |
| 44 | + subcooling_low_band: |
| 45 | + default: 3.0 |
| 46 | + unit: "°C" |
| 47 | + description: Liquid subcooling below which the condenser is judged short of liquid. COMMISSIONING-SET PLACEHOLDER on the same terms — published charging-chart targets for a TXV unit run roughly 8-11 °C at design, and this band is set well under the target so normal load swings do not reach it. |
| 48 | + cxf: scLow.t |
| 49 | + subcooling_two_phase_floor: |
| 50 | + default: 0.5 |
| 51 | + unit: "°C" |
| 52 | + description: "Subcooling below which the expansion-valve inlet is taken to be two-phase and the valve at its control limit. Drives yTxvSaturated only. 0.5 °C is SP 1087's own single-phase/two-phase test (§5.4.2), used there to pick which fault-direction chart applies; unlike the bands above it is a physical boundary, not a per-unit tuning." |
| 53 | + cxf: txvSat.t |
| 54 | + alarm_delay: |
| 55 | + default: 1800.0 |
| 56 | + unit: s |
| 57 | + description: Continuous divergence required before the alarm asserts (30 min). Long enough to outlast a thermostatic valve hunting after a load step, short enough that a real charge loss is reported within the hour |
| 58 | + cxf: persist.delayTime |
| 59 | +energy_impact: |
| 60 | + affected_subsystem: Heat pump compressor energy — capacity lost to reduced refrigerant mass flow |
| 61 | + savings_range: 5-13% of compressor energy at the charge losses this rule detects (NIST SP 1087 Fig. 5.16-5.17) |
| 62 | + climate_sensitivity: cooling-dominant |
| 63 | + runtime_estimation: "waste_kw = compressor_kw × d / (1 − d), where d is the EER-degradation fraction — the extra runtime needed to deliver the same cooling. SP 1087 puts d at roughly 0.065-0.13 for a 20% charge shortfall, so d = 0.10 is the default sizing until a site figure exists" |
| 64 | +emissions: |
| 65 | + scope: "2" |
| 66 | + method: PROXY_EMISSIONS |
| 67 | +verified: |
| 68 | + engine_rev: e2ff2f8 |
| 69 | + content_id: "cxf:fnv1a128:456b99147ff742525fe015d642f727d9" |
| 70 | + date: 2026-08-18 |
| 71 | +--- |
| 72 | + |
| 73 | +## Description |
| 74 | + |
| 75 | +A machine short of refrigerant runs short of liquid. The expansion valve opens |
| 76 | +further to keep the evaporator fed, and once it runs out of travel the |
| 77 | +evaporator starves while the condenser loses its liquid seal: superheat climbs |
| 78 | +and subcooling collapses at the same time. That divergence is the signature — |
| 79 | +capacity loss on its own says nothing about cause. NIST SP 1087 imposed graded |
| 80 | +charge faults on a TXV-equipped R410A heat pump in cooling and recorded exactly |
| 81 | +this pair once the valve saturated (§5.4.3, Table 5.2, zone B), matching the |
| 82 | +fixed-orifice charts of Breuker & Braun (1998b). This rule forms the two |
| 83 | +differences from four refrigerant-side temperatures and alarms when both sit |
| 84 | +past their commissioned bands for half an hour. |
| 85 | + |
| 86 | +## Detection Logic |
| 87 | + |
| 88 | +``` |
| 89 | +suction_superheat = suction_temp − evap_sat_temp |
| 90 | +liquid_subcooling = cond_sat_temp − liquid_temp |
| 91 | +
|
| 92 | +yTxvSaturated = liquid_subcooling < subcooling_two_phase_floor |
| 93 | + (sub-condition flag; false does NOT mean NO_EVAL) |
| 94 | +
|
| 95 | +yFault = suction_superheat > superheat_high_band |
| 96 | + AND liquid_subcooling < subcooling_low_band, |
| 97 | + sustained continuously for alarm_delay |
| 98 | +``` |
| 99 | + |
| 100 | +Block graph (`rule.cxf.jsonld`): |
| 101 | + |
| 102 | + |
| 103 | + |
| 104 | +The conjunction is the diagnosis, not a noise filter. High superheat with |
| 105 | +subcooling *high* is the liquid-line-restriction pattern (SP 1087 Table 5.2, |
| 106 | +zone B), where refrigerant backs up ahead of the restriction; low subcooling |
| 107 | +with superheat still normal is a valve that is compensating successfully. |
| 108 | +Only the two together indict the charge. |
| 109 | + |
| 110 | +Both comparisons are strict, so a unit exactly on either band reads healthy, |
| 111 | +and both bands are per-unit commissioning values — the shipped defaults are |
| 112 | +placeholders, not thresholds anyone measured on the machine in front of you. |
| 113 | +`persist` requires 30 continuous minutes; `delayOnInit = true` holds that |
| 114 | +window across a controller restart rather than alarming on the first tick. |
| 115 | +`yTxvSaturated` reports whether the liquid line is still measurably subcooled. |
| 116 | +It does not gate the alarm, and the reason it must not is the card's main |
| 117 | +deviation. |
| 118 | + |
| 119 | +## Possible Diagnoses |
| 120 | + |
| 121 | +1. Refrigerant leak — brazed joints, Schrader cores, service-valve packing and |
| 122 | + flare connections, in that order of prevalence; a charge top-up without a |
| 123 | + leak search buys months, not years |
| 124 | +2. The unit was charged short, at commissioning or after a repair that vented |
| 125 | + the circuit and was recharged by pressure rather than by weight |
| 126 | +3. Severe condenser airflow restriction — SP 1087's zone-B chart moves |
| 127 | + superheat up and subcooling down for this fault too, and it separates only |
| 128 | + on condensing temperature, which rises rather than falls; this rule cannot |
| 129 | + see that (see Deviations) |
| 130 | +4. Instrumentation: a P-T derivation configured for the wrong refrigerant, or a |
| 131 | + liquid-line probe with poor contact or missing insulation. Both fabricate |
| 132 | + the pattern on a correctly charged machine |
| 133 | + |
| 134 | +## Energy Impact |
| 135 | + |
| 136 | +EFFICIENCY_LOSS, MEDIUM confidence, PROXY_ESTIMATION. |
| 137 | +`waste_kw = compressor_kw × d / (1 − d)`, the extra compressor runtime needed |
| 138 | +to deliver the same cooling at a degraded EER. NIST SP 1087 sizes `d` directly: |
| 139 | +every fault it tested except compressor leakage needed a fault level above 10% |
| 140 | +to cost 5% of EER, and a 20% charge shortfall cost 6.5-13% of EER, the largest |
| 141 | +hit in its Figure 5.17. Confidence is MEDIUM because the rule fires on a pattern, |
| 142 | +not a severity — it reports that the charge is low, not by how much, so `d` is a |
| 143 | +population number until the technician's gauge set supplies a real one. |
| 144 | + |
| 145 | +## Emissions Impact |
| 146 | + |
| 147 | +Scope 2, PROXY_EMISSIONS, MEDIUM confidence; typically 300-2,000 kg CO₂e/yr for |
| 148 | +a commercial packaged heat pump, all of it compressor electricity, so the |
| 149 | +avoided-emissions basis is the marginal operating emissions rate (MOER). A |
| 150 | +leaking circuit also vents refrigerant, and R410A carries a GWP near 2,000 — |
| 151 | +that release is a scope 1 emission this card does not estimate, because the |
| 152 | +leak rate is not observable from any point the rule reads. A site with |
| 153 | +refrigerant-tracking obligations should account for it separately. |
| 154 | + |
| 155 | +## Deviations |
| 156 | + |
| 157 | +- **The 0.5 °C subcooling floor is a sub-condition flag, not an evaluability |
| 158 | + gate.** SP 1087 uses it (§5.4.4) to choose *which* fault-direction chart |
| 159 | + applies, never to suppress evaluation, and the zone-B chart this rule encodes |
| 160 | + still lists falling subcooling as an undercharge symptom. Gating `yFault` on it |
| 161 | + would silence the rule exactly when the liquid line has flashed to two-phase — |
| 162 | + severe undercharge, not missing data — so the flag is named `yTxvSaturated` |
| 163 | + rather than `y…Ok`. |
| 164 | +- **Fixed bands replace SP 1087's regressed no-fault baseline.** It compares each |
| 165 | + feature against a third-order polynomial regression on three variables (outdoor |
| 166 | + and indoor drybulb, indoor dew point); this library's only regression primitive |
| 167 | + is a host-fitted line (HP-FC-050). Charging-chart-style nominal targets stand in |
| 168 | + — a real simplification, named as one on RTU-FC-051's precedent, and the reason |
| 169 | + bands left at their defaults can alarm on a healthy machine forever. |
| 170 | +- **Only the TXV-saturated row of the chart is encoded.** In SP 1087's zone A |
| 171 | + (valve still in control) undercharge moves *no* superheat at all — only |
| 172 | + subcooling, condensing temperature and the two air-side deltas — so a mild |
| 173 | + charge loss the valve is absorbing reads healthy here. Earlier investigators |
| 174 | + reported difficulty detecting undercharge reliably below about 40% charge loss |
| 175 | + (Breuker & Braun 1998b; Stylianou & Nikanpour 1996, via SP 1087 §2). |
| 176 | +- **Two features, so severe condenser airflow restriction is not excluded.** It |
| 177 | + shares the zone-B superheat-up/subcooling-down pair and separates on condensing |
| 178 | + temperature moving up rather than down — a direction test that needs a baseline |
| 179 | + for the current operating condition, the same infrastructure gap that keeps |
| 180 | + RTU-FC-100 deferred. The card names it as diagnosis 3 rather than pretending |
| 181 | + to rule it out. |
| 182 | +- **Grounding is cooling-mode only.** SP 1087 tested cooling exclusively, and in |
| 183 | + heating the coils swap roles, so the sensors sit on different heat exchangers |
| 184 | + even though the arithmetic is unchanged. `operating_states` says cooling; a |
| 185 | + heating-mode instance is an extrapolation from charge-diagnosis practice and |
| 186 | + needs its own commissioned bands. |
| 187 | +- **Strict `>` and `<` at both bands.** CDL Reals has no `GreaterEqual` or |
| 188 | + `LessEqual`, so a unit sitting exactly on a band reads healthy. The |
| 189 | + disagreement is measure-zero on real-valued signals; both sides of both bands, |
| 190 | + and of the two-phase floor, are pinned by vectors. |
| 191 | +- **Superheat is measured at the compressor suction, not the evaporator exit.** |
| 192 | + The point dictionary's `suction_temp` is a suction-line probe, and SP 1087 |
| 193 | + notes suction superheat reads higher than evaporator-exit superheat on the same |
| 194 | + machine, which it attributes to heat transfer within the valve. Its 9 °C zone |
| 195 | + boundary is an evaporator-exit number fitted to one test rig and is |
| 196 | + deliberately not carried into this card as a parameter. |
| 197 | +- **Compressor, defrost and steady-state gating stay host preconditions.** The |
| 198 | + graph computes the fault given valid data, per SCHEMA.md; `comp_status`, |
| 199 | + `defrost_status` and time-since-capacity-change are not among its inputs. The |
| 200 | + 30-minute `alarm_delay` does not substitute — a post-start superheat overshoot |
| 201 | + starts the persistence timer rather than being excluded from it. |
| 202 | +- **The pattern chart is a single-fault chart.** SP 1087 imposed one fault at a |
| 203 | + time, and Li & Braun (2007) showed this whole family of charts misreads |
| 204 | + simultaneous faults, whose feature residuals superpose. Two faults at once can |
| 205 | + cancel this rule's pattern or fake it; the diagnosis text is a ranking, not a |
| 206 | + verdict. |
| 207 | +- `persist.delayOnInit = true` (CDL default is `false`), the library's standing |
| 208 | + choice. Severity 3 and `category: EFFICIENCY_LOSS` follow HP-FC-050 and |
| 209 | + RTU-FC-051, the library's other charge-and-capacity cards; no reference card |
| 210 | + exists to inherit them from. |
| 211 | + |
| 212 | +## Notes |
| 213 | + |
| 214 | +Do not read a cleared alarm as a repaired machine. The host gates this rule on |
| 215 | +the compressor running, so every stop drops `yFault` for the same reason a |
| 216 | +recharge does — the falling edge means "no longer diverging", nothing more. When |
| 217 | +`yTxvSaturated` is true the technician should expect flash gas at the sight |
| 218 | +glass and should weigh the recovered charge rather than trusting subcooling to |
| 219 | +confirm the fix. HP-FC-050 sees the same fault as a COP shortfall without |
| 220 | +naming it, and HP-FC-054 is the overcharge branch, which is why the three carry |
| 221 | +each other in `related`. The |
| 222 | +[heat-pump-faults](../../../playbooks/heat-pump-faults.md) playbook orders the |
| 223 | +on-site work; its step 1 already sends the technician to superheat and |
| 224 | +subcooling, which is the measurement this rule automates. |
0 commit comments