Gas Flow Normalization: DCS Transfer Functions for Orifice Meters
Table of Contents
Orifice flow transmitters (FTs) are significantly more cost-effective compared to other types of FTs, such as magnetic or vortex, as line sizes increase. For gases usage of this FT is not straightforward and requires calculated transfer functions in DCS as well as within the FT. Almost always this types of FT is used in conjunction with a pressure & temperature transmitters to calculate necessary volume compensation and display normalised or standarised gas flow (e.g., in \( \text{Nm}^3\text{/h} \)).
Understanding Vendor’s Calibration Certificate #
For an orifice plate flowmeter, the relationship between flow rate \( Q \) and differential pressure \( \Delta P \) is derived from Bernoulli’s principle.
Bernoulli’s Equation Assuming an incompressible and frictionless fluid: \[ P_1 + \frac{1}{2}\rho v_1^2 = P_2 + \frac{1}{2}\rho v_2^2 \]
Rearranging for Pressure Difference \[ P_1 - P_2 = \Delta P = \frac{1}{2}\rho (v_2^2 - v_1^2) \]
Applying the Continuity Equation Since \( Q = A_1v_1 = A_2v_2 \), we substitute velocity in terms of area and flow: \[ \Delta P = \frac{Q^2 \rho}{2} \left( \frac{1}{A_2^2} - \frac{1}{A_1^2} \right) \]
Solving for Flow Rate \( Q \) \[ Q = C_d A_2 \sqrt{\frac{2\Delta P}{\rho (1 - \beta^4)}} \]
Where:
- \( C_d \): Discharge coefficient (accounts for friction and turbulence).
- \( \beta \): The ratio of orifice diameter to pipe diameter (\( d/D \)).
- \( \Delta P \): The differential pressure measured across the orifice.
This confirms that \( Q \propto \sqrt{\Delta P} \). Consequently, to provide a linear flow signal, a DP transmitter must be configured for Square Root Extraction.

Transfer Function: Linear vs. Square Root #
It is extremely important that you configure this option in FT using selection buttons or HART communicator. The chart below compares the \( 4-20 \ \text{mA} \) output for a standard linear pressure signal versus the square root extracted flow signal.
Python code with vendor scaling #
# mA output standard
x = [4, 20]
# process parameter range (or scale) in kPa
# this scale can be read from a calibration certificate
y = [0, 4.877]
# range in terms of %age
z = [0, 100]
import itertools as it
import math as m
# preparing arbitrary 25 value array of process variable
# within LRV & URV instrument range
# lastly rounding-off for clean plots
y_sq= list( (it.takewhile(lambda x: x<=y[1], it.count(0,y[1]/26)) ) )
y_sq= [round (i,2) for i in y_sq]
# it generates 25 value array b/w 0 & 100%
z_sq= list( (it.takewhile(lambda x: x<=z[1], it.count(0,4)) ) )
z_sq= [round (i,2) for i in z_sq]
import matplotlib.pyplot as plt
fig = plt.figure( figsize=(5,4) )
# creating x2 graphs vertically aligned
ax1 = plt.subplot(2, 1, 1)
ax2 = ax1.twinx()
ax3 = plt.subplot(2, 1, 2)
ax4 = ax3.twinx()
# start of 1st graph
ax1.minorticks_on()
ax1.grid(which='both')
ax1.set_xlabel('mAmpere', fontweight='bold')
ax1.set_ylabel(r'$\sqrt{kPa}$', fontweight='bold')
ax2.set_ylabel('%age', fontweight='bold')
# sqrt 4-20mA calculated correponding to process variable
# https://www.sensorsone.com/linear-measurement-to-square-root-extraction-4-20ma-converter/
ax1.plot( [4+(16*m.sqrt( (i-y[0]) / (y[1]-y[0]) )) for i in y_sq], y_sq, 'b')
ax2.plot( [4+(16*m.sqrt( (i-y[0]) / (y[1]-y[0]) )) for i in y_sq], z_sq, 'b')
# start of 2nd graph
ax3.minorticks_on()
ax3.grid(which='both')
ax3.set_xlabel('mAmpere', fontweight='bold')
ax3.set_ylabel('kPa', fontweight='bold')
ax4.set_ylabel('%age', fontweight='bold')
# simple linear transfer function of mA output
ax3.plot( x, y, 'b' )
ax4.plot( x, z, 'b' )
fig.tight_layout()
plt.savefig('3.jpg', dpi=300)
Signal Scaling: 4-20 mA to Volumetric Flow #
For any transmitter calibrated from \( 0 \) to \( Q_{max} \) (in our case \( 1423.35 \ \text{m}^3\text{/h} \)) using a standard \( 4-20 \ \text{mA} \) signal, the linear scaling equation is:
\[ Q = \left( \frac{Q_{max}}{16} \right) \times (I - 4) \]
- At \( 4 \ \text{mA} \) (0%): \( Q = \frac{Q_{max}}{16} \times (4 - 4) = 0 \)
- At \( 12 \ \text{mA} \) (50%): \( Q = \frac{Q_{max}}{16} \times (8) = 0.5 \times Q_{max} \)
- At \( 20 \ \text{mA} \) (100%): \( Q = \frac{Q_{max}}{16} \times (16) = Q_{max} \)
Compensation Formula: Normalised Volumetric Flow #
For orifice-based flow measurement, the compensated flow must account for changes in gas density. The following formula is used in the DCS normalization block:
\[ F_{\text{comp}} = F_{\text{raw}} \times \sqrt{\frac{P + P_{0}}{P_{\text{ref}}} \times \frac{T_{\text{ref}}}{T + T_{0}}} \]
- \( F_{\text{comp}} \): Compensated flow (e.g., in \( \text{Nm}^3\text{/h} \)).
- \( F_{\text{raw}} \): Uncompensated flow scaled at design conditions (\( \text{m}^3\text{/h} \)).
- \( P \): Actual gauge pressure from the PT in \( \text{kPa g} \).
- \( P_{0} \): \( 101.325 \) constant used to convert gauge pressure to absolute pressure.
- \( P_{\text{ref}} \): Design/Reference absolute pressure (e.g., \( 101.325 \ \text{kPa abs} \)).
- \( T_{\text{ref}} \): Design/Reference absolute temperature (e.g., \( 273.15 \ \text{K} \)).
- \( T \): Actual temperature from the TT in \( ^\circ\text{C} \).
- \( T_{0} \): \( 273.15 \) constant used to convert Celsius to Kelvin.
Reference States for Gas Normalization #
When calculating Nm³/h, the values for \( P_{\text{ref}} \) and \( T_{\text{ref}} \) are typically fixed based on the DIN 1343 international standard:
- \( P_{\text{ref}} \): \( 101.325 \ \text{kPa abs} \)
- \( T_{\text{ref}} \): \( 273.15 \ \text{K} \) (equivalent to \( 0 \ ^\circ\text{C} \))
| Parameter | Normal (Nm³/h) | Standard (Sm³/h) |
|---|---|---|
| Reference Temp | \( 0 \ ^\circ\text{C} \) | \( 15 \ ^\circ\text{C} \) |
| Reference Press | \( 101.325 \ \text{kPa abs} \) | \( 101.325 \ \text{kPa abs} \) |
Bonus tip: Antoine equation is the standard engineering shortcut for calculating saturated steam properties. PT is almost always present on steam systems because of safety concerns. No TT is required as T can be calculated from PT: \[ T = \frac{B}{A - \log_{10}(P)} - C \] Where:
- \( T \) = Temperature in \( ^\circ\text{C} \)
- \( P \) = Absolute pressure in bar (\( P_{abs} = P_{gauge} + 1.013 \))
- \( A = 5.11564 \)
- \( B = 1687.537 \)
- \( C = 230.17 \)