Pressure decay is the standard method for leak testing sealed pneumatic assemblies. Getting accurate leak rate figures requires more than just watching a pressure gauge fall — you need temperature compensation, correct volume calculation, and proper units conversion.
The Physics
Pressure decay in a sealed volume with a small leak follows:
dP/dt = -Q_leak × P_atm / V_system
Where Q_leak is volumetric leak rate (cc/s at atmospheric), P_atm is atmospheric pressure, V_system is system volume.
But temperature changes cause pressure changes too (ideal gas: PV = nRT). A temperature rise of just 0.1°C in a 350 bar system causes a pressure increase of ~0.3 bar — easily masking a small leak.
Temperature-Compensated Leak Rate
import numpy as np
def temp_compensated_leak_rate(
pressure_bar, # array: pressure measurements in bar absolute
temp_kelvin, # array: temperature measurements in K
time_s, # array: timestamps in seconds
system_volume_cc, # total sealed volume in cc
p_atm_bar=1.01325 # atmospheric pressure
):
"""
Calculate leak rate in standard cc/min (sccm) with temperature compensation.
"""
# Compensate pressure for temperature changes using ideal gas law
# P_corrected = P_measured × (T_reference / T_measured)
T_ref = temp_kelvin[0] # Use initial temperature as reference
P_corrected = pressure_bar * (T_ref / temp_kelvin)
# Fit linear trend to corrected pressure vs time
# Slope = dP/dt (bar/s)
coeffs = np.polyfit(time_s, P_corrected, 1)
dP_dt = coeffs[0] # bar/s (negative = pressure falling = leak present)
# Convert to volumetric leak rate at atmospheric conditions
# Q_leak (cc/s at atm) = |dP/dt| × V_system / P_atm
leak_rate_cc_per_s = abs(dP_dt) * system_volume_cc / p_atm_bar
leak_rate_sccm = leak_rate_cc_per_s * 60 # convert to per minute
return leak_rate_sccm, dP_dt
# Example usage:
# pressure = np.array([350.00, 349.97, 349.94, ...]) # bar abs
# temp = np.array([293.15, 293.18, 293.20, ...]) # Kelvin
# time = np.array([0, 10, 20, ...]) # seconds
# volume = 250 # cc
# rate, slope = temp_compensated_leak_rate(pressure, temp, time, volume)
# print(f"Leak rate: {rate:.2f} sccm")
Typical Aerospace Leak Specifications
| System | Max Leak Rate | Standard |
|---|---|---|
| Aircraft oxygen system | 1 sccm | MIL-PRF-27210 |
| Pneumatic brake line | 5 sccm | OEM specification |
| Missile actuation | 2 sccm | MIL-PRF-27422 |
| Aircraft tyre valve | 10 sccm | ASME |
Test Duration for Statistical Confidence
For very small leak rates, longer test duration improves detection confidence:
def min_test_duration(target_rate_sccm, volume_cc, resolution_bar=0.001):
"""
Calculate minimum test time to detect a target leak rate
given pressure measurement resolution.
"""
# Minimum detectable dP/dt based on sensor resolution
# Need at least 3× resolution change to distinguish from noise
min_detectable_dP_dt = 3 * resolution_bar / 60 # bar/s
# Required dP for target leak rate
required_dP_dt = target_rate_sccm * 1.01325 / (volume_cc * 60)
if required_dP_dt < min_detectable_dP_dt:
# Need to wait for enough pressure change to be statistically significant
min_time = (10 * resolution_bar) / required_dP_dt
return min_time
else:
return 60 # 60 seconds sufficient for detectable rates
Neometrix High Pressure Air Test Systems implement this compensation and calculation in the PLC for real-time leak rate display and automated pass/fail.
→ https://neometrixgroup.com/products/high-pressure-air-test-system
Top comments (0)