' ============================================================================ ' Geokon 4500 Vibrating Wire Piezometer - CR6 Direct Connection ' Model: 4500AL-70 kPa | Serial: 2528061 | Cal Date: June 30, 2025 ' ============================================================================ ' ----- Calibration Constants (from Geokon calibration sheet) ----- Const G = -0.01490 ' Linear Gage Factor (kPa/digit) Const A_coef = -1.477E-08 ' Polynomial coefficient A Const B_coef = -0.01470 ' Polynomial coefficient B Const C_coef = 137.16 ' Polynomial coefficient C (REQUIRED!) Const K = 0.04907 ' Thermal Factor (kPa/°C) Const R0 = 9327 ' Factory Zero Reading (digits) Const T0 = 20.1 ' Reference Temperature (°C) ' ----- Steinhart-Hart Thermistor Coefficients ----- Const ThermA = 1.4051E-03 Const ThermB = 2.369E-04 Const ThermC = 1.019E-07 ' ----- Variable Declarations ----- Public VW(6) ' VW measurement array (6 values with thermistor) Public Freq_Hz As Float ' Frequency in Hz Public Digits As Float ' Reading in digits (Hz²/1000) - MUST BE FLOAT! Public Temp_C As Float ' Temperature (°C) Public Pressure_Lin ' Linear pressure (kPa) Public Pressure_Poly ' Polynomial pressure (kPa) Public BattV ' ----- Data Table ----- DataTable(TransducerData, True, -1) DataInterval(0, 5, Min, 10) Average(1, Pressure_Lin, FP2, False) Average(1, Pressure_Poly, FP2, False) Sample(1, Freq_Hz, FP2) Sample(1, Digits, IEEE4) ' Use IEEE4 for full precision Sample(1, Temp_C, FP2) Sample(1, BattV, FP2) EndTable ' ----- Main Program ----- BeginProg Scan(5, Min, 0, 0) ' Battery check Battery(BattV) ' Vibrating Wire Measurement - CR6 built-in VSPECT ' Wiring: VW+ to U1, VW- to U2, Therm+ to U3, Therm- to U4 VibratingWire(VW(), 1, U1, 450, 6000, 1, 0.01, "", _60Hz, ThermA, ThermB, ThermC) ' Extract values Freq_Hz = VW(1) ' Frequency in Hz Temp_C = VW(6) ' Temperature in °C ' CRITICAL FIX: Convert frequency to digits with explicit float math ' Digits = Frequency² ÷ 1000 Digits = (Freq_Hz * Freq_Hz) / 1000.0 ' Linear Pressure: P = G × (R1 - R0) + K × (T1 - T0) Pressure_Lin = G * (Digits - R0) + K * (Temp_C - T0) ' Polynomial Pressure: P = A×R1² + B×R1 + C + K×(T1 - T0) Pressure_Poly = A_coef * (Digits * Digits) + B_coef * Digits + C_coef + K * (Temp_C - T0) CallTable(TransducerData) NextScan EndProg