HVAC
How to test temperature uniformity and fan failure in a BESS container
Measure battery temperature spread, high-ambient cooling margin and one-fan-unavailable performance with a complete fault and recovery record.
Direct answer
Test a BESS container by logging synchronized battery temperatures, local cooling-inlet conditions and actual delivered power through normal duty, an approved cooling-fan outage and recovery. Compare maximum and minimum battery temperatures and the simultaneous hottest-to-coldest spread with the installed model's limits throughout the required duty window. Accept full-duty fan redundancy only when the required power continues within all agreed limits after the designated fan becomes unavailable, including high ambient when that combined condition is specified.
On this page
What does a BESS thermal acceptance test prove?What temperature spread is acceptable?Which standards apply to this test?How do you establish high-ambient cooling margin?Where should temperature sensors be placed?How do you measure and calculate temperature spread?What load and stabilization period should you use?How do you test one fan unavailable?What belongs in the post-fault recovery record?Why did the container fail the thermal test?Worked example: a 23.39°C mean accompanies a 5.50°C spreadHow long does testing take, what does it cost, and when should it repeat?Field checklist and acceptance packageOpen the related tool for the calculation, checklist, or packet.
FieldOS by AnvilfieldOffline-first FieldOS for job photos, proof packets, property memory, calculations, teams, billing, and owner-ready reports.What does a BESS thermal acceptance test prove?
A thermal acceptance test proves the battery stays inside its agreed temperature envelope while delivering a defined duty. Its four records are baseline, high-ambient duty, one-fan-unavailable duty and restored operation. When the contract requires high ambient and a fan outage together, test that combination; separate passes establish only the separate conditions.
Keep charge and discharge results separate. Identify whether each temperature represents a cell core, cell surface, module sensor, rack inlet, room air or coolant. The sensor population defines the conclusion: a rack-air map cannot certify every cell. An all-cell guarantee needs a documented relationship between the monitored locations and the uninstrumented cells, accepted in the measurement plan.
The fan-array field guide covers airflow redundancy. Retain the battery acceptance evidence as an ambient matrix, sensor map, spread calculation, fan-out test and recovery record.
Define the acceptance boundary before loading the battery
Record battery and HVAC model, serial, firmware, cooling architecture, chemistry, rated current, state-of-charge (SOC) endpoints and sensor inventory. Name the fan function: circulation, condenser and radiator fans affect different paths. Emergency protective exhaust remains outside this normal-cooling fault test.
The battery/HVAC OEM defines permitted fault injection and operating limits; the commissioning team measures the response; the owner’s designated accepting authority signs the contractual disposition. Establish requested and delivered power at the same AC or DC meter boundary, with sign convention, tracking tolerance and actual rack currents. Agree abort and restart criteria before loading; the authority having jurisdiction (AHJ) retains responsibility for adopted-code and permit matters.
What temperature spread is acceptable?
CATL's May 11, 2022 EnerOne announcement describes cell-temperature differences within 3°C, while Sungrow's 2024 PowerTitan 2.0 white paper claims no more than 2.5°C; each figure belongs to its named product. Use the installed model’s guarantee at the specified load and ambient, supported by its acceptance schedule. Sources: CATL EnerOne and PowerTitan 2.0 white paper.
| Product/source | Published figure | What it measures | Acceptance consequence | Edition/date |
|---|---|---|---|---|
| CATL EnerOne | Cell difference within 3°C; ambient -30°C to +55°C | Liquid-cooled 372.7 kWh product claim and outdoor operating range | Match the installed model and documented duty; no one-fan-out guarantee is stated here | Manufacturer announcement, 2022-05-11 |
| Sungrow PowerTitan 2.0 | Cell difference ≤2.5°C | Manufacturer's all-cell balance claim | Obtain matching acceptance conditions and sensor coverage | Americas white paper, 2024 |
| Sungrow ST2752UX | Ambient -30°C to 50°C; derating above 45°C | System environmental envelope | Apply exact model's derated dispatch above 45°C | ST2752UX-SEN-Ver21-202204, §11.1 |
| Anvilfield worked acceptance plan | Battery maximum 35°C; spread 3°C | Selected project criteria for arithmetic and record design | Replace with the signed criteria for the installed system | 2026-11-05 |
Maximum temperature, minimum charging/discharging temperature, spatial spread, ambient range, alarms, trips and warranty conditions are separate checks. A uniformly cold battery can meet its spread limit while remaining outside its charging envelope. Record chemistry-specific limits and condensation constraints; the winding ratings explained in motor nameplate reading are not battery limits.
Set the measurement decision rule
Anvilfield’s proposed acceptance plan, dated November 5, 2026, selects a 35°C monitored-battery maximum, a 3°C spread limit and ±0.3°C bounded error per battery channel. Add the channel bound to the indicated maximum and both channel bounds to the indicated spread before comparing with the selected limits. For a contractual minimum temperature, subtract the channel bound from the indicated minimum and require that result to meet the minimum limit. These conservative bounds are distinct from statistical confidence intervals.
| Check | Selected limit/input | Calculation/decision | Result |
|---|---|---|---|
| Per-channel bounded error | ±0.3°C | Worst-case two-channel spread error: 0.3 + 0.3 | 0.6°C |
| Spread acceptance | 3.0°C limit | Indicated spread + 0.6 ≤ 3.0 | Pass at ≤2.4°C; acceptance unproven above 2.4°C through 3.6°C; definitely over limit above 3.6°C |
| Maximum acceptance | 35.0°C limit | Indicated maximum + 0.3 ≤ 35.0 | Pass at ≤34.7°C; acceptance unproven above 34.7°C through 35.3°C; definitely over limit above 35.3°C |
The bound must cover the measurement chain that decides acceptance, including attachment, logger and timing. Calibrating an air probe does not establish BMS accuracy or hidden-cell temperature; give each population its own documented basis. NIST’s thermocouple service description and NIST/SEMATECH’s calibration guidance support reference comparisons and uncertainty evaluation, not these selected error values.
Apply the same decision basis during the fault unless the contract specifies a separate degraded envelope. Resolve the uncertainty band with improved measurements or further evidence. Operational abort criteria apply immediately, including inside that band.
Which standards apply to this test?
IEC 62933-2-1:2017, edition 1.0 with the January 2019 corrigendum addresses EES system parameters and performance testing; its public scope excludes storage devices and technologies. IEC 62933-5-2:2025, edition 2.0, published December 9, 2025 addresses electrochemical grid-integrated system safety across the life cycle.
NFPA 855:2026, confirmed by official Errata 855-26-1, addresses stationary energy-storage installation; apply the edition invoked by the site’s adopted rules and permit. ANSI/CAN/UL 9540A, sixth edition, March 13, 2026 evaluates thermal-runaway fire and explosion hazards. UL Solutions’ large-scale fire-testing announcement confirms that fire-test purpose. The BESS installation guide covers the broader protection and permit context.
Use these standards for their stated system-performance, installation and safety scopes. Set the installed-model spread limit, probe layout and fan-out duration in the signed acceptance schedule; Anvilfield’s selected values below are project-planning inputs.
Keep performance testing separate from protection testing
Preserve detection, BMS trips, emergency ventilation and protective functions throughout the test. An alarm simulation verifies logic; an actual approved fan outage exposes the thermal response. A protective shutdown can satisfy its cause-and-effect requirement while leaving full-load thermal redundancy unproven.
Before testing, identify the site emergency plan, remote stop arrangements and response contacts. EPA’s BESS safety guidance calls for incident planning with local first responders; keep emergency response separate from routine test restoration.
OSHA 29 CFR 1910.333(b)(2), official 2025 compilation requires disconnection from all electrical sources, applicable lockout/tagging, stored-energy precautions and qualified verification for covered deenergized work. A control command can establish the approved operational test state; it does not establish electrical isolation for hands-on work. Follow the installed equipment’s isolation and restart procedures; never unplug energized fan wiring or restrain a rotating fan to create the fault.
How do you establish high-ambient cooling margin?
Sungrow's ST2752UX-SEN-Ver21-202204 system manual gives the ST2752UX an ambient operating range of -30°C to 50°C with derating above 45°C, so its upper ambient endpoint is not a full-power guarantee. Section 11.1, printed page 73 supplies that boundary, but no percentage-per-degree dispatch curve.
Measure shielded outdoor reference air and actual cooling-intake air simultaneously. Record solar exposure, wind, nearby discharge, filters, altitude, voltage and fan commands. MEGA Tech’s September 18, 2026 high-ambient discussion explains why the local intake can differ from remote weather.
Anvilfield estimates that 43°C outdoor air plus a 4°C local rise produces a 47°C intake: 2°C into the cited ST2752UX derating region and 3°C below its upper endpoint, when that intake is the OEM-defined ambient location. The following Anvilfield planning matrix applies to that liquid-cooled model’s heat-rejection assembly.
| Local/OEM-defined ambient | Relation to ST2752UX boundary | All-fans test duty | One-fan-unavailable duty | Current proof status and action |
|---|---|---|---|---|
| 25°C | Inside range; below >45°C derating threshold | 100% of approved test power | Same power if full-duty N+1 is specified | Planned baseline; record actual dispatch |
| 35°C | Inside range; below threshold | 100% of approved test power | Same approved duty | Planned intermediate point; not demonstrated |
| 45°C | At threshold; “above 45°C” wording matters | Approved model duty at 45°C | OEM-approved fault-state duty | Planned boundary point; not demonstrated |
| 47°C | 2°C above threshold; 3°C below upper endpoint | Manufacturer's 47°C derated power, numeric curve not provided in §11.1 | Separately approved degraded power | Obtain model curve before setting numeric dispatch |
| 50°C | Upper published ambient endpoint | Manufacturer's 50°C derated power | Only the specifically approved fault test | No full-power or fault guarantee inferred |
| 55°C | 5°C above this model's upper endpoint | Outside this cited model's published range | No field fan-out test under this plan | CATL's +55°C figure belongs to a different product |
Complete each row with the exact model, fan ID, source-curve revision, measured intake, actual delivered power, run ID and disposition. Obtain numerical power allowances from the matching curve or approved test record. If weather misses the required condition, retain “not demonstrated” and arrange a hot-season repeat or approved controlled environment; throttling an intake creates a different condition.
Calculate thermal reserve at the same operating boundary
Subtract coincident heat load from available net cooling capacity at the same indoor/return or coolant condition, local heat-rejection intake, altitude, coil/filter condition and fan state. Use the OEM battery-loss map at actual current, SOC, temperature and state of health, then add equipment losses and enclosure/solar gains inside that boundary. Round-trip electrical efficiency alone does not define instantaneous compartment heat load.
Anvilfield estimates 6 kW of reserve, or 25% of heat load, from selected net cooling of 30 kW against 24 kW of heat. Selected fault-state capacity of 22 kW leaves a 2 kW shortfall, or 8.33% of that heat load. Method: subtract load from capacity and divide the difference by heat load; converting this shortfall into electrical derating requires the battery-loss model.
Fan speed reserve is not thermal-capacity reserve. ebm-papst’s technical FAQ describes density and control effects on fan performance; the fan-laws guide explains the operating relationships. A free-air fan rating does not establish installed chiller capacity.
Where should temperature sensors be placed?
Anvilfield’s six-rack air-cooled sampling plan uses 40 independent air channels: 36 rack inlet/outlet points, two outdoor/intake references and two HVAC supply/return points. This selected layout covers air distribution; battery-temperature acceptance uses the separately mapped battery channels. Expand coverage for additional racks, cooling zones and observed hotspots.
| Measurement group | Count and IDs | Location | Recorded quantity/use |
|---|---|---|---|
| Rack inlet air | 18: R01 through R06, IN-L/M/H | Each rack's inlet at lower, middle and upper battery elevations | Local air delivered to the rack |
| Rack outlet air | 18: R01 through R06, OUT-L/M/H | Matching lower, middle and upper rack outlet elevations | Air rise and bypass/maldistribution diagnosis |
| Outdoor reference | 1: AMB-01 | Shielded, representative outdoor location away from discharge | Reference ambient |
| Cooling heat-rejection intake | 1: INTAKE-01 | Actual entering air to the selected heat-rejection assembly, protected from radiant bias | Recirculation rise versus AMB-01 |
| HVAC supply/return | 2: SUP-01, RET-01 | Main supply and return streams at repeatable documented locations | Delivered supply and return condition |
| Total independent air channels | 40 | 36 + 1 + 1 + 2 | Air-distribution coverage, not cell coverage |
| Battery channels | All available; count from BMS inventory | OEM-mapped rack/module/cell-group locations | Separate battery maximum/spread population |
| Independent battery-contact checks | Count set by approved accessible points | Selected hot/cold and fault-affected battery surfaces | Sensor cross-check; no sealed-module intrusion |
| Liquid-cooled alternative additions | 2 header temperatures plus actual flow and each available branch-temperature channel | Coolant supply/return headers and identified branches | Liquid-loop evidence; adapt rack-air mapping to the actual architecture |
PLAN: selected straight-row air-cooled layout
SUP-01 → supply path
↓ ↓ ↓ ↓ ↓ ↓
Door end R01 R02 R03 R04 R05 R06 Blind end
↓ ↓ ↓ ↓ ↓ ↓
RET-01 ← return path
HVAC heat-rejection inlet: INTAKE-01 Outdoor: AMB-01
ELEVATION: repeat for R01 through R06
Upper IN-H → [battery elevation] → OUT-H
Middle IN-M → [battery elevation] → OUT-M
Lower IN-L → [battery elevation] → OUT-LExport every available battery-temperature channel with its rack, module or cell-group identity and physical location. Preserve the OEM map even when a tag says “cell temperature”: that sensor may represent a module location. Add independent contact probes at approved accessible hot/cold points without opening sealed modules or placing conductive probes near live terminals.
Draw a plan view and elevation keyed to these IDs, showing cooling units, fan zones, supply/return paths, doors and obstructions. Cover top/bottom, near/far supply, door/blind end, perimeter/interior and the failed-fan zone. Save height, mounting photos, attachment method, sensor serial and calibration reference; use the air-balancing report procedure for supporting airflow records.
Thermal images locate accessible surface anomalies. Record emissivity, reflected-temperature setting, geometry and the compared surface. Use contact verification at approved accessible points; a camera sees the viewed surface, not room air or hidden cells through an opaque enclosure.
What changes with liquid cooling?
Add coolant supply/return temperatures, actual flow, pump state, branch IDs, chiller status and heat-rejection intake air. A normal header can conceal a starved branch, so retain branch-level channels and map each condenser/radiator fan to its served equipment. Pump loss is a separate fault class.
Check restrictions, entrained air, coolant condition and cold-plate contact under the installed product instructions. The liquid-loop commissioning guide supplies measurement terminology; battery-specific coolant and settings come from the OEM. Record local humidity and dew point alongside exposed cold-surface temperatures; apply the OEM condensation controls. Use the psychrometric guide to interpret that margin.
How do you measure and calculate temperature spread?
Anvilfield's 2026 thermal-acceptance method calculates spatial temperature spread from the hottest and coldest valid readings at the same timestamp within a declared battery-sensor population. Retain the largest simultaneous spread over the scored window, plus the highest absolute temperature and lowest battery temperature with their own timestamps and sensor IDs.
Subtract the coldest valid reading from the hottest at each common timestamp, then retain the largest result in the scored window: ΔT(t) = maxᵢ Tᵢ(t) − minᵢ Tᵢ(t); window spread = maxₜ ΔT(t). Keep battery spatial spread, air-side rise and coolant rise in separate fields, even though each is a temperature difference. A morning minimum subtracted from an afternoon maximum measures a different quantity.
Anvilfield’s worked sensor calculation uses a selected synchronized pair: R06-M12 at 34.2°C and R01-M01 at 31.9°C give a 2.3°C spread. Applying the selected bounds gives 2.9°C for spread and 34.5°C for maximum, meeting the 3°C and 35°C criteria if every required channel and the rest of the scored window also pass. The hottest channel can move during the outage; retain its identity at each timestamp.
Anvilfield’s plan requires every declared acceptance channel to be valid throughout the scored window. Missing, stale or excluded required channels make that window not demonstrated; restore coverage and repeat it. Preserve outliers and raw records until a documented sensor check establishes a measurement fault. Rack-level spreads aid diagnosis, but averages and reduced-channel spreads do not replace the contracted full-population result.
What logging interval is useful?
Anvilfield’s 2026 plan selects 5-second temperature/load samples, fault/status events at 1-second or faster OEM-native resolution, and source timestamps aligned within 1 second. Record native update periods, clock offsets, filtering and stale-tag timeouts. Faster polling does not create fresh BMS measurements; preserve source age and flag intervals whose scan skew or sensor lag prevents a common-time comparison.
Anvilfield’s plan verifies battery-contact channels together at 20°C, 30°C and 40°C against a traceable reference for the selected 20°C to 40°C application, then checks drift afterward. Verify logger channels and installed attachment effects separately. Ambient probes serving 47°C or 50°C runs need calibration coverage over those conditions.
The controls commissioning guide covers point and sequence verification; distinguish its building-management BMS from this battery-management BMS. Never interpolate across a fault to manufacture a passing record.
What load and stabilization period should you use?
Anvilfield’s plan budgets 10 minutes each at 25%, 50% and 75% of allowed test power, followed by 60 minutes at final duty after stabilization. Match the contract’s charge/discharge power, SOC window, ambient and duration, with doors and panels in normal closed positions. Elapsed time alone does not establish equilibrium.
The selected stabilization screen requires each battery channel’s highest minus lowest reading over a continuous 15-minute window to remain within 0.2°C at steady duty. Check resolution and noise against that band. Using the whole window catches cooling cycles concealed by matching endpoints; retain the OEM duty-cycle method where cycling makes this screen inappropriate.
Keep actual power, SOC, inlet temperature and compressor/pump cycling with the continuous record. For causal before/after comparisons, run separate tests at matched current, SOC and starting temperature: consecutive constant-power windows move through changing SOC and voltage. For cyclic dispatch, repeat the specified profile and watch for delayed peaks after power reduction.
Does the SOC window cover the complete test?
| Stage | Selected battery-side power | Duration | Calculated energy |
|---|---|---|---|
| First loading stage | 0.25 MW | 10 minutes | 0.04 MWh |
| Second loading stage | 0.50 MW | 10 minutes | 0.08 MWh |
| Third loading stage | 0.75 MW | 10 minutes | 0.13 MWh |
| Final baseline after stabilization | 1.00 MW | 60 minutes | 1.00 MWh |
| Fan unavailable | 1.00 MW | 30 minutes | 0.50 MWh |
| Recovery hold after thermal return | 1.00 MW | 30 minutes | 0.50 MWh |
| Fixed-sequence total | Same stated power boundary | 150 minutes | 2.25 MWh |
| 2 MWh available energy × 60% allowed window | Selected restricted-energy case | 72 minutes at 1 MW | 1.20 MWh available; 1.05 MWh short |
| 5 MWh available energy × 60% allowed window | Selected workable planning case | 180 minutes at 1 MW | 3.00 MWh available; 0.75 MWh remaining |
Anvilfield estimates the selected sequence needs 2.25 MWh over 150 minutes before stabilization and thermal-return delay. Method: multiply each stage’s battery-side MW by hours and sum before rounding. The 2 MWh and 5 MWh inputs are available full-window energy at the chosen boundary and condition; replace the selected linear 60-percentage-point SOC scaling with the OEM usable-energy map.
The 5 MWh planning case leaves 0.75 MWh, or 45 minutes at 1 MW, before further reserves. A 15-minute full-duty stabilization period alone consumes 0.25 MWh, leaving 0.50 MWh for thermal-return delay and reserve. Account for state of health, temperature, auxiliary/conversion losses and charging headroom at the same boundary. If the budget is insufficient, arrange approved matched runs with reset between them; reducing power changes the accepted duty.
How do you test one fan unavailable?
Choose the thermally worst credible fan from the cooling layout and baseline temperature map. Different zones and controls require separate failure classes or an OEM equivalence basis. A command-off test represents its actual controller and airflow state; it does not automatically represent electrical supply loss, a seized rotor or shared-drive failure.
- Match the fan ID and fault-injection method to the approved plan, including abort limits and restoration procedure.
- Verify valid battery channels, synchronized logging, active protection and sufficient SOC headroom for the complete duty.
- Establish the required baseline and save fan feedback, airflow/coolant response, maximum temperature and spread.
- Make the single approved fan unavailable, verify actual loss and timestamp it without bypassing battery protection.
- Observe alarms, surviving equipment, actual delivered power and thermal response; stop at the approved abort criterion and activate the emergency plan for smoke, venting or other emergency signs.
- Restore the fan, complete the recovery hold, remove test overrides and assign separate thermal-performance and protection dispositions.
Anvilfield’s plan budgets at least 30 minutes from verified fan loss, extended to the specified duty duration and stability requirement. Score the transition and entire degraded window, not just a later stable slice. Record command, RPM/current or approved feedback, alarm times, surviving-fan response and airflow/pressure or coolant flow; a 30-minute pass establishes only the tested duration.
What counts as an N+1 pass?
Anvilfield's 2026 acceptance method demonstrates N+1 cooling only when the specified duty continues with one designated fan unavailable and all agreed thermal and equipment limits satisfied throughout the required test window. Report the named failure class and design condition alongside that result. Full duty means the contracted electrical duty at that ambient; a pass at an ambient-derated duty does not establish nominal rated power.
Distinguish full duty, approved derated duty, controlled shutdown and aborted test. Verify backflow, windmilling and failed-path isolation where the installed system uses it; fan-array failure behavior explains the airflow issue. Check shared supplies, drives and controllers separately before extending the result to any-single-fan redundancy.
What belongs in the post-fault recovery record?
Record actual fan restoration, thermal return, the continuous in-limit hold and dispatch/redundancy restoration separately. Define t1 as verified fan restoration and t2 as the first return within the agreed restored-state thermal limits at or after t1. If already within those limits at t1, thermal recovery time is zero.
Use restored-state criteria even when the approved degraded envelope is wider. Successful recovery does not erase a fault-state exceedance or convert it into an N+1 pass.
| Record item | Filled plan value/rule | Evidence saved | Disposition rule |
|---|---|---|---|
| Fault identity | One approved cooling fan; asset ID and method identified before test | Asset tag, command and actual-status transition | Wrong fan/method: invalid run |
| Start reference | t0 = first verified fan-unavailable event | Native event timestamp and logger time offset | No verified event: not demonstrated |
| Degraded observation | At least 30 minutes from verified fan loss t0, extended for required duty/stability | Load, SOC, local inlet, extrema, spread and protection events | Exceedance: fail or abort as approved |
| Fan restoration | t1 = verified return of actual fan operation | Command plus RPM/status evidence | Command alone: restoration unverified |
| Thermal recovery | t2 = first at-or-after-t1 return within restored-state thermal limits; t2 = t1 if already within those limits | Timestamped maximum/spread with sensor IDs and valid coverage | Thermal return time = t2 − t1, never negative; compare with signed target |
| Recovery hold | 30 continuous minutes from t2 within restored-state limits at agreed restored duty | Entire hold trend, required-channel validity and actual dispatch | Recrossing restarts the hold at the next valid in-limit return; a data gap invalidates the scored hold |
| Protection restoration | Required protection active; zero test overrides left | Final controls export and alarm state | Unrestored protection: no closeout |
| Final state | Automatic mode; actual power and contracted redundancy restored | Separate dispatch/control-restoration timestamps and final configuration | Restriction remaining: document restricted duty; thermal return alone does not close restoration |
This recovery schedule is Anvilfield’s selected 2026 plan. Add expected, observed, pass_fail, witness and exception_id fields, and compare thermal-return time with the signed target.
Preserve separate dispatch/control restoration timestamps, the ambient/SOC trajectory, abort history and final configuration.
Why did the container fail the thermal test?
Compare actual load, SOC, local ambient and configuration before assigning a cooling defect. Changed current, cell condition, filters or the included inverter-loss boundary changes the heat load. Persistent location patterns distinguish local maldistribution from a container-wide capacity problem.
| Pattern | Likely cause to test | Discriminating measurement | Next action |
|---|---|---|---|
| Many battery channels rise together; supply also warms | Net cooling capacity or heat-rejection shortfall | Local intake, cooling status, actual load and rated capacity at that condition | Correct capacity/ambient issue or apply approved derating |
| One rack end/top region hot while supply remains stable | Air maldistribution, bypass or obstruction | Rack inlet/outlet map and flow/pressure distribution | Repair path/balance, then repeat fault-state test |
| Cooling intake rises above remote ambient | Discharge recirculation | Simultaneous shielded intake/reference temperatures with wind and layout | Correct approved discharge/intake geometry |
| One channel jumps without neighboring response | Sensor/contact/timebase problem | Co-located check and native timestamp history | Repair measurement chain and repeat affected record |
| One battery region hot despite normal inlet/coolant | Local battery heat generation or thermal-contact issue | Current/SOC/voltage context, local temperature verification | Follow OEM battery diagnostic method |
| Liquid branch hot while header supply is normal | Restricted flow, air or branch imbalance | Branch flow/temperature and pump state | Correct under OEM coolant procedure and retest |
| RPM increases but thermal performance worsens | Restricted or bypassed airflow, saturated cooling or changed load | Actual flow/pressure, load and inlet condition | Correct demonstrated cause; do not accept RPM alone |
Use the discriminating measurements in Anvilfield’s diagnostic table to verify the cause before changing hardware.
How do you verify the repair?
Repeat the failed baseline, degraded and recovery sequence at matched load, SOC, ambient and configuration. Preserve before/after datasets and every changed setpoint or component. Changes to resistance, fan selection, protective controls or coolant distribution require revalidation of the affected operating envelope.
Worked example: a 23.39°C mean accompanies a 5.50°C spread
In the KEPCO field study published in Energies 18(21), 5640 in 2025, Bank 03-01’s 2025 module-position temperature distribution had a mean of 23.39°C and a maximum-to-minimum spread of 5.50°C, in the reported post-fan-activation HPPC context. Mun, Noh and Lee’s Table 3 and Figure 10 describe Container 03/Bank 01, with 19 racks and 12 modules per rack.
| Study distribution | Maximum °C | Minimum °C | Mean °C | Calculated spread °C | Reported fan-state context |
|---|---|---|---|---|---|
| 2023, Figure 10g | 24.62 | 22.62 | 23.94 | 2.00 | Fan not operating |
| 2024, Figure 10h | 24.93 | 22.76 | 24.29 | 2.18 | Fan not operating |
| 2025, Figure 10i | 26.67 | 21.17 | 23.39 | 5.50 | After fan activation |
The annual hybrid pulse power characterization (HPPC) assessment used 70% SOC and approximately 10-second charge/discharge pulses; its 1-second voltage/current sampling statement does not establish temperature scan rate. The paper averages temperature over each HPPC pulse window, so treat these as module-position distributions for that assessment, not a continuous simultaneous acceptance trace. Keep each year and fan state attached: a fan idle below its control threshold is distinct from a failed fan.
Method note: the published maximum/minimum pairs are 24.6162/22.6162, 24.9330/22.7564 and 26.6709/21.1680°C. Subtraction gives 2.0000, 2.1766 and 5.5029°C; Anvilfield recalculates the paper’s reported ranges; Anvilfield estimates the 2025-to-2023 spread ratio at 2.75 using the unrounded ranges. The different years and operating states make this a spatial comparison, not a controlled causal estimate of fan activation.
Apply separate maximum and spread criteria
Anvilfield’s comparison using selected 2026 acceptance criteria places the published 5.50°C spread 2.50°C above a selected 3°C limit, while the 26.67°C maximum sits 8.33°C below a selected 35°C limit. Score maximum and spread separately, using the installed system’s contractual measurement basis. The selected field-channel error bound is not assigned to this study.
The study supplies published spatial evidence; the acceptance dataset below adds synchronized timestamps, delivered duty, channel coverage and fault/restoration events.
How long does testing take, what does it cost, and when should it repeat?
Anvilfield estimates a two-day site allowance and $7,000 for one accessible container, separate charge/discharge sequences, one ambient condition and one designated fault class. Its bottom-up planning range is $4,000 to $12,000, using 24 to 64 person-hours at $125 to $150/hour plus $1,000 to $2,000 instrumentation. Additional matrix points and fault classes add runs.
| Task | Quantity | Selected rate | Estimated cost |
|---|---|---|---|
| Procedure and data-map preparation | 6 person-hours | $150/hour | $900 |
| Installation, running and removal, two-person crew | 24 person-hours | $125/hour | $3,000 |
| Data analysis and report | 8 person-hours | $150/hour | $1,200 |
| Operator/witness coordination | 2 person-hours | $150/hour | $300 |
| Calibrated logger/probe campaign allowance | 1 allowance | $1,600 | $1,600 |
| Total | 40 person-hours plus instrumentation | Calculated | $7,000 |
Method note: Anvilfield estimates use selected November 5, 2026 labor quantities and billing allowances. The 24 site person-hours equal 12 elapsed hours for two people over two days; each direction needs 150 sequence minutes before stabilization, thermal return, reset and setup. Verify those tasks fit the site schedule. Eight additional person-hours at $150/hour add $1,200.
Travel, repairs, OEM charges, dispatch/import/export energy, temporary cooling and controlled high-ambient facilities are separate costs. Restricted access, weather retests and expanded sensor coverage change the allowance. The 5 MWh planning case is separate from the ST2752UX.
Build repeat testing around changes
Sungrow’s Ver21-202204 manual, §10.6.1, printed page 70 calls for six-month ambient and operating-record checks and adjusts maintenance frequency for environmental conditions. That is not a universal six-month fan-out-test interval. Anvilfield recommends first hot-season confirmation and affected-sequence repeats after fan/HVAC replacement, airflow changes, cooling-control firmware changes, persistent thermal alarms or relevant repairs.
Group repeat-test campaigns by cooling architecture, service area and hot-season dispatch window. Keep each container’s installed-model criteria and prior fault record attached to its work order. Regional testing programs use PorchRocket Asset Search to track new, removed or altered visible power sites with dated views.
Field checklist and acceptance package
Assign one of five performance dispositions: pass at stated duty; pass only at approved derated duty; fail; unresolved measurement decision; or not demonstrated because required conditions or valid data were absent. The owner’s accepting authority signs the demonstrated conditions, failure class and restrictions, with protection response scored separately.
- Pretest: match model, firmware, diagrams and manuals; sign temperature, spread, power-tracking, ambient, SOC, alarm and recovery criteria. Resolve mismatches before running.
- Energy: cover ramp, stabilization, baseline, outage, thermal return and hold; budget charge headroom and resets separately.
- Fault: identify the fan, failure class, shared services, worst-location rationale and approved restoration method.
- Measurement: map every required channel, calibration range, complete-chain bound, native updates, clock offsets and stale-data rule. Restore missing coverage before scoring.
- Configuration: verify normal filters, doors, panels, paths and coolant settings; keep protection active and follow applicable electrical isolation procedures.
- Running: record delivered power and complete temperature coverage; attach evidence or an explicit not-demonstrated status to every ambient-matrix row.
- Closeout: retain extrema, IDs, events and raw trends; link repairs to matched-condition retests and unresolved items to owners, dates and operating restrictions.
- Restoration: confirm automatic mode, actual dispatch, contracted redundancy and zero test overrides before sign-off.
Reusable thermal acceptance dataset
Keep three linked records using run_id. In the run header, save site/container identity, battery/HVAC serials, firmware, architecture, date/time zone, manual/curve and criteria revisions, accepting authority, fan/fault method, ambient target/band, power boundary/sign/tolerance, starting SOC and allowed window, initial thermal state, channel-map revision/count, sampling/skew/stale rules, uncertainty basis, abort limits, dwell and recovery target.
In the raw time series, save timestamp_utc, phase, battery sensor ID and rack/module/location, native timestamp, temperature, quality/age, requested/actual kW, SOC, intake/reference temperatures, cooling command/feedback, failed-fan status, surviving-fan RPM/current, applicable coolant flow/header/branch temperatures, alarms/trips and overrides. Append simultaneous extrema, sensor IDs, valid count and spread; retain the per-channel rows.
In the event/summary record, save fault-command time, verified loss t0, alarm/derate/trip times, restoration t1, thermal return t2, hold completion and dispatch/redundancy restoration. Include worst maximum, minimum and spread with separate times/IDs, tested ranges, excluded intervals/reasons, performance/protection dispositions, exception/repair/retest IDs and restoration acknowledgment.
Use baseline, fan_unavailable, thermal_return and recovery_hold as phase values; retain the missing-channel list with not_demonstrated. Keep published study rows separately identified by DOI, table/figure, year, fan state and calculation. Attach this package to the BESS commissioning punch list.
Anvilfield. Sources checked and reviewed November 5, 2026. Update log: final review clarifies HPPC temperature aggregation, electrical isolation, measurement coverage and fault/recovery decisions; adds a worked sensor calculation and emergency-planning source.
How to cite this page: Anvilfield, How to test temperature uniformity and fan failure in a BESS container, 2026, https://anvilfield.com/field-guides/hvac/bess-container-thermal-uniformity-acceptance/
FAQ
How do you test BESS cooling uniformity and fan-failure acceptance?
Log synchronized battery temperatures and actual delivered power through baseline, the approved single-fan outage and recovery, then apply installed-model limits. Score thermal performance and alarm/protection response separately.
How much high-ambient cooling margin does a BESS need?
Use installed-model net cooling capacity at measured local intake conditions against coincident heat load. Sungrow’s cited ST2752UX manual starts derating above 45°C within a -30°C to 50°C ambient range; its upper endpoint does not guarantee full power.
Can a battery container run with one fan unavailable?
Continued operation is accepted only at the duty and duration demonstrated within approved thermal and equipment limits. Report full duty, approved derated duty or shutdown explicitly.
How is cell-temperature spread measured?
Subtract the coldest from the hottest valid battery reading at each common timestamp within the declared sensor population. Retain both sensor IDs and the largest simultaneous spread over the scored window.
Is a 3°C spread mandatory for every BESS?
No. CATL’s 2022 EnerOne claim is within 3°C; Sungrow’s 2024 PowerTitan 2.0 claim is at most 2.5°C. Each belongs to its named product and acceptance conditions.
Can a thermal camera replace BMS temperatures?
A camera measures viewed surface temperatures. Use it to locate accessible anomalies; hidden cell/module temperatures require their own sensors or a validated measurement relationship.
Does fan RPM prove that cooling is adequate?
RPM establishes rotation. Cooling acceptance also requires the installed flow response, battery temperatures and delivered duty; blockages or bypass paths can defeat cooling despite increasing speed.
How long should a fan-out test run?
Anvilfield’s 2026 plan budgets at least 30 minutes from verified fan loss, extended to the approved duty duration and stability condition. Terminate earlier at the approved abort criterion.
Does UL 9540A prove normal cooling performance?
UL 9540A sixth edition addresses thermal-runaway fire/explosion testing. Normal cooling performance requires a separate duty-specific acceptance record.
When should thermal acceptance be repeated?
Anvilfield’s plan repeats affected sequences after cooling hardware, airflow or control changes, persistent thermal alarms or relevant repairs, and confirms untested hot-weather duty in season. Apply the actual OEM/owner maintenance schedule.
Can a 2 MWh BESS sustain the whole 1 MW acceptance sequence?
With Anvilfield’s selected 60-percentage-point SOC allowance, it supplies 1.2 MWh. The selected ramp, baseline, outage and recovery hold need 2.25 MWh before stabilization and thermal-return delay, leaving a 1.05 MWh deficit.
Can a test pass when one temperature channel is missing?
Anvilfield’s plan marks a scored window with a missing required temperature channel as not demonstrated. Restore valid coverage and repeat the window; dropping a hot channel cannot establish full-population acceptance.
People also ask
Codes cited in this guide
This guide is written and reviewed against the published standards below. Always confirm the current adopted edition with the authority having jurisdiction.
Sources checked
- CATL, EnerOne announcement, 2022-05-11. Product-specific 3°C cell difference and ambient envelope. Accessed with curl 2026-11-05.
- Sungrow Americas, PowerTitan 2.0 White Paper, 2024. Product-specific ≤2.5°C claim. Accessed with curl 2026-11-05.
- Sungrow PowerTitan system manual, ST2752UX-SEN-Ver21-202204. §11.1 ambient/derating; §10.6.1 maintenance records. Accessed with curl 2026-11-05.
- IEC 62933-2-1:2017, edition 1.0. Public scope and edition, including January 2019 corrigendum. Accessed with curl 2026-11-05.
- IEC 62933-5-2:2025, edition 2.0. Public lifecycle-safety scope; publication 2025-12-09. Accessed with curl 2026-11-05.
- UL Standards & Engagement, ANSI/CAN/UL 9540A, sixth edition. Edition 6, published 2026-03-13; fire/explosion-test scope. Accessed with curl 2026-11-05.
- UL Solutions, large-scale fire-testing announcement, 2026 (no day stated in retrieved body). Large-scale fire-test purpose. Accessed with curl 2026-11-05.
- NIST, Thermocouples Calibration Services, live service description. Reference comparison and ITS-90 traceability. Accessed with curl 2026-11-05.
- NIST/SEMATECH e-Handbook, §4.1.3.3 Calibration, live web edition. Calibration models and measurement uncertainty. Accessed with curl 2026-11-05.
- NFPA 855 standard-development page, 2026 edition. 2026 installation-standard edition, confirmed by official Errata 855-26-1. Development page returns an application shell. Both opened with curl 2026-11-05; site adoption is separate.
- NFPA 855, 2026 edition, Errata 855-26-1, issued 2025-10-13. Official edition confirmation. Opened with curl and PDF text read 2026-11-05; no errata table reproduced.
- ebm-papst US technical FAQ, undated live edition. Fan density, controls and feedback. Accessed with curl 2026-11-05.
- MEGA Tech, BESS Cooling at High Ambient, 2026-09-18. Local intake and installed cooling path. Accessed with curl 2026-11-05.
- Mun, Noh and Lee, Energies 2025, 18(21), 5640, original KEPCO field study. Table 3/Figure 10 and §2.2.2; DOI 10.3390/en18215640. Accessed with curl 2026-11-05.
- OSHA 29 CFR 1910.333, official 2025 CFR compilation. §1910.333(b)(2)(ii) through (iv): disconnection, stored energy, lockout/tagging and qualified verification for covered work. Official PDF opened with curl and current OSHA web text cross-checked 2026-11-05.
- US EPA, Battery Energy Storage Systems: Main Considerations for Safe Installation and Incident Response, live guidance. Emergency planning with local first responders. Opened with curl 2026-11-05; edition references in this undated guidance are not used for standards currency.
- Anvilfield thermal acceptance plan and estimates, 2026-11-05 Selected sampling, decision rules, energy budget and cost method, dated 2026-11-05. Citation line appears at the end of the article body.