'Program Name RTF_GSHP 'date 1/30/2014 'changed tables to RecBefore and After to 0 'installed new pump CTs, changed CT multiplier in program 'date 2.4.14 'changed tables with CS help to hopefully record only when running '2.6.14 'cleaned up tables, working with modbus on Bader meter '2.21.14 added table to look at 30 sec data in ground loop, will collect 2 hrs of data than delete table. '3.3.14 working on Badgermeter BACnet '3.24.14 added table for GL BTU meter with Jagan's specific heat numbers '4.14.14 fixed Badger table '4.15.14 added power table fixed Badger table to sample instead of average '10.14.14 changed tables to smooth anaylsis '10.15.14 changed tables to make more sense '10.23.14 added manimin table to get min manifolt temps, also added disableelec to get better electrical readings '4/2/2015 added BTU meters for the solar thermal Public StationID Public LoggerTemp_C, BattVolts_V Public Onicon(12), volt(12) Public ElectricalHP(7), Electricalpump1(7), Circpump(7), Electricalpump2(7),Electricalpump3(7) Public Therm_kOhm(6), Temp_C(6), therm(6) Public RTFGSHP_HPtoBuffer_kWh,RTFGSHP_boilerenergy_kWh Public RTFGSHP_GLenergy_kWh,RTFGSHP_tobuildingenergy_kWh Public RTFGSHP_HPenergy_kWh, RTFGSHP_pumpenergy_kWh, RTFGSHP_circenergy_kWh Public Badger(11), result Public RTFGSHP_HPPower_kw Public SOLAR_boiler_BTUhr, SOLAR_penthouse_BTUhr, SOLAR_infloor_BTUhr, SOLAR_solartobuffer_BTUhr Dim disable,disablemani,disablebldg,disableboiler,disableelec Dim i Dim D(6) ' For thermistors -- conversion of kOHM to deg C Const a = 0.00112538852122 Const b = 0.000234711863267 Const c = 0.000000085663516 Const BAUD_RATE = 9600 'baud rate to use for modbus Const SLAVE_MODBUS_ADDR = 1 'modbus address of the slave device Alias Temp_C (1)=RTFGSHP_loop5_C Alias Temp_C (2)=RTFGSHP_loop6west_C Alias Temp_C (3)=RTFGSHP_loop3_C Alias Temp_C (4)=RTFGSHP_loop4_C Alias Temp_C (5)=RTFGSHP_loop1east_C Alias Temp_C (6)=RTFGSHP_loop2_C Alias Onicon(1)=RTFGSHP_GLflowrate_lmin Alias Onicon(2)=RTFGSHP_GLenergyrate_kW Alias Onicon(3)=RTFGSHP_GLreturntemp_C Alias Onicon(4)=RTFGSHP_GLsupplytemp_C Alias Onicon(5)=RTFGSHP_boilerflowrate_lmin Alias Onicon(6)=RTFGSHP_boilerenergyrate_kW Alias Onicon(7)=RTFGSHP_boilerreturntemp_C Alias Onicon(8)=RTFGSHP_boilersupplytemp_C Alias Onicon(9)=RTFGSHP_tobuildingflowrate_lmin Alias Onicon(10)=RTFGSHP_tobuildingenergyrate_kW Alias Onicon(11)=RTFGSHP_tobuildingexittemp_C Alias Onicon(12)=RTFGSHP_tobuildingsupplytemp_C Alias ElectricalHP(1)= RTFGSHP_HPPower_watts Alias ElectricalHP(4)= RTFGSHP_HPcurrent_amps Alias Electricalpump1(1)=RTFGSHP_pump1power_watts Alias Electricalpump2(1)=RTFGSHP_pump2power_watts Alias Electricalpump3(1)=RTFGSHP_pump3power_watts Alias Electricalpump1(4)=RTFGSHP_pump1current_amps Alias Electricalpump2(4)=RTFGSHP_pump2current_amps Alias Electricalpump3(4)=RTFGSHP_pump3current_amps Alias Circpump(1)=RTFGSHP_circpumppower_watts Alias Circpump(4)=RTFGSHP_circpumpcurrent_amps Alias Badger(1) = RTFGSHP_buffersupplytemp_C Alias Badger(2) = RTFGSHP_bufferreturntemp_C Alias Badger(3) = RTFGSHP_bufferflowrate_lmin Alias Badger(4) = RTFGSHP_bufferenergyrate_kw Alias Badger(5) = RTFGSHP_buffervolumeflow_liters Alias Badger(6) = RTFGSHP_buffertotalenergy_kwh 'STATION ID StationName (RTF_GSHP) '\\\\\\\\\\\\\\\\\\\\\\\\ OUTPUT SECTION //////////////////////// DataTable(RTFGSHP_HourlyRAW, true, -1) DataInterval(0,60,Min,10) Sample(1, StationID, FP2) Average (1,LoggerTemp_C,FP2,False) Average (1,BattVolts_V,FP2,False) Average (12,Onicon(), FP2, False) Average (6, therm(), FP2, False) EndTable DataTable (RTFGSHP_GLmanifoldhr,true, -1) DataInterval(0,60,Min,10) Average (1,RTFGSHP_loop1east_C,FP2,disablemani) Average (1,RTFGSHP_loop2_C,FP2,disablemani) Average (1,RTFGSHP_loop3_C,FP2,disablemani) Average (1,RTFGSHP_loop4_C,FP2,disablemani) Average (1,RTFGSHP_loop5_C,FP2,disablemani) Average (1,RTFGSHP_loop6west_C,FP2,disablemani) Average (1,RTFGSHP_GLreturntemp_C,FP2,disablemani) Average (1,RTFGSHP_GLsupplytemp_C,FP2,disablemani) EndTable DataTable (RTFGSHP_GLmanimin,true, -1) DataInterval(0,60,Min,10) Minimum (1,RTFGSHP_loop1east_C,FP2,disablemani,False) Minimum (1,RTFGSHP_loop2_C,FP2,disablemani, False) Minimum (1,RTFGSHP_loop3_C,FP2,disablemani, false) Minimum (1,RTFGSHP_loop4_C,FP2,disablemani, false) Minimum (1,RTFGSHP_loop5_C,FP2,disablemani, false) Minimum (1,RTFGSHP_loop6west_C,FP2,disablemani, false) Minimum (1,RTFGSHP_GLreturntemp_C,FP2,disablemani, false) Minimum (1,RTFGSHP_GLsupplytemp_C,FP2,disablemani, false) EndTable DataTable (RTFGSHP_Energyday, true, -1) DataInterval(0,24,Hr,10) Totalize (1,RTFGSHP_GLenergy_kWh,FP2,disable) Totalize (1,RTFGSHP_HPenergy_kWh,FP2,disableelec) Totalize (1,RTFGSHP_HPtoBuffer_kWh,FP2,disable) Totalize (1,RTFGSHP_tobuildingenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_circenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_pumpenergy_kWh,FP2,disableelec) Sample (1,RTFGSHP_buffertotalenergy_kwh,IEEE4) EndTable DataTable (RTFGSHP_Energyhour, true, -1) DataInterval(0,60,min,10) Totalize (1,RTFGSHP_GLenergy_kWh,FP2,disable) Totalize (1,RTFGSHP_HPenergy_kWh,FP2,disableelec) Totalize (1,RTFGSHP_HPtoBuffer_kWh,FP2,disable) Totalize (1,RTFGSHP_tobuildingenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_circenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_pumpenergy_kWh,FP2,disableelec) Sample (1,RTFGSHP_buffertotalenergy_kwh,IEEE4) EndTable DataTable (RTFGSHP_Energy15min, true, -1) DataInterval(0,15,min,10) Totalize (1,RTFGSHP_GLenergy_kWh,FP2,disable) Totalize (1,RTFGSHP_HPenergy_kWh,FP2,disableelec) Totalize (1,RTFGSHP_HPtoBuffer_kWh,FP2,disable) Totalize (1,RTFGSHP_tobuildingenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_circenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_pumpenergy_kWh,FP2,disableelec) Sample (1,RTFGSHP_buffertotalenergy_kwh,IEEE4) EndTable DataTable (RTFGSHP_Powerhour, true, -1) DataInterval(0,60,min,10) Average (1,RTFGSHP_GLenergyrate_kW,FP2,disable) Average (1,RTFGSHP_HPPower_kw,FP2,disable) Average (1,RTFGSHP_bufferenergyrate_kw,FP2,disable) Average (1,RTFGSHP_tobuildingenergyrate_kW,FP2,disablebldg) Average (1,RTFGSHP_circpumppower_watts, FP2,disablebldg) Average (1,RTFGSHP_pump1power_watts, FP2,disable) Average (1,RTFGSHP_pump2power_watts, FP2,disable) Average (1,RTFGSHP_pump3power_watts, FP2,disable) EndTable DataTable (RTFGSHP_GSHPhour, true, -1) DataInterval(0,60,Min,10) Average (1,RTFGSHP_GLreturntemp_C,FP2,disable) Average (1,RTFGSHP_GLsupplytemp_C,FP2,disable) Average (1,RTFGSHP_GLflowrate_lmin,FP2,disable) Average (1,RTFGSHP_GLenergyrate_kW,FP2,disable) Average (1,RTFGSHP_tobuildingexittemp_C,FP2,disablebldg) Average (1,RTFGSHP_tobuildingsupplytemp_C,FP2,disablebldg) Average (1,RTFGSHP_tobuildingflowrate_lmin,FP2,disablebldg) Average (1,RTFGSHP_tobuildingenergyrate_kW,FP2,disablebldg) Average (1,RTFGSHP_buffersupplytemp_C,FP2,disable) Average (1,RTFGSHP_bufferreturntemp_C,FP2,disable) Average (1,RTFGSHP_bufferflowrate_lmin,FP2,disable) Average (1,RTFGSHP_bufferenergyrate_kw,FP2,disable) EndTable DataTable (RTFGSHP_Boiler, true, -1) DataInterval(0,15,Min,0) Average (1,RTFGSHP_boilerenergyrate_kW,FP2,disableboiler) Average (1,RTFGSHP_boilerflowrate_lmin,FP2,disableboiler) Average (1,RTFGSHP_boilerreturntemp_C,FP2,disableboiler) Average (1,RTFGSHP_boilersupplytemp_C,FP2,disableboiler) Totalize (1,RTFGSHP_boilerenergy_kWh,FP2,disableboiler) EndTable DataTable (RTFGSHP_Electrichour, true, -1) DataInterval(0,60,Min,10) Maximum (1,RTFGSHP_HPPower_watts,FP2,False,1) Average (1,RTFGSHP_HPPower_watts,FP2,disable) Average (1,RTFGSHP_HPcurrent_amps,FP2,disable) Average (1,RTFGSHP_pump1power_watts,FP2,disable) Average (1,RTFGSHP_pump1current_amps,FP2,disable) Average (1,RTFGSHP_pump2power_watts,FP2,disable) Average (1,RTFGSHP_pump2current_amps,FP2,disable) Average (1,RTFGSHP_pump3power_watts,FP2,disable) Average (1,RTFGSHP_pump3current_amps,FP2,disable) Average (1,RTFGSHP_circpumppower_watts,FP2,disablebldg) EndTable DataTable (twominutepower,true,-1) DataInterval (0,2,min,10) Average (1,RTFGSHP_HPPower_watts,FP2,False) Average (1,RTFGSHP_pump1power_watts,FP2,False) Average (1,RTFGSHP_pump2power_watts,FP2,False) Average (1,RTFGSHP_pump3power_watts,FP2,False) Average (1,RTFGSHP_GLflowrate_lmin,FP2,False) Average (1,RTFGSHP_GLenergyrate_kW,FP2,False) Average (1,RTFGSHP_GLreturntemp_C,FP2,false) Average (1,RTFGSHP_GLsupplytemp_C,FP2,false) Average (1,RTFGSHP_tobuildingenergyrate_kW,FP2,False) Average (1,RTFGSHP_tobuildingflowrate_lmin,FP2,False) Average (1,RTFGSHP_tobuildingexittemp_C,FP2,False) Average (1,RTFGSHP_tobuildingsupplytemp_C,FP2,False) Average (1,RTFGSHP_buffersupplytemp_C,FP2,false) Average (1,RTFGSHP_bufferreturntemp_C,FP2,false) Average (1,RTFGSHP_bufferenergyrate_kw,FP2,false) Average (1,RTFGSHP_bufferflowrate_lmin,FP2,false) EndTable DataTable (twominuteenergy,true,-1) DataInterval (0,2,min,10) Totalize (1,RTFGSHP_HPtoBuffer_kWh,FP2,disable) Sample (1,RTFGSHP_buffertotalenergy_kwh,IEEE4) Totalize (1,RTFGSHP_tobuildingenergy_kWh,FP2,disablebldg) Totalize (1,RTFGSHP_HPenergy_kWh,FP2,disableelec) Totalize (1,RTFGSHP_GLenergy_kWh,FP2,disable) EndTable DataTable (Solar_hr, true, -1) DataInterval (0,60, min, 10) Totalize (1,SOLAR_boiler_BTUhr,IEEE4,false) Totalize (1,SOLAR_infloor_BTUhr,IEEE4,false) Totalize (1,SOLAR_penthouse_BTUhr,IEEE4,false) Totalize (1,SOLAR_solartobuffer_BTUhr(),IEEE4,false) EndTable '\\\\\\\\\\\\\\\\\\\\\\\\\\\ PROGRAM //////////////////////////// BeginProg SerialOpen(ComME,BAUD_RATE,4,0,100) Scan(5,Sec,1, 0) Battery(BattVolts_V) PanelTemp(LoggerTemp_C, 250) 'Measure Electricals ACPower (ElectricalHP(),1,60,1,230/333,208,2,50/333,100,1) ACPower (Electricalpump1(),1,60,1,230/333,230,3,5/333,10,1) ACPower (Electricalpump2(),1,60,1,230/333,230,4,5/333,10,1) ACPower (Electricalpump3(),1,60,1,230/333,230,5,5/333,10,1) ACPower (Circpump(),1,60,6,115/333,115,7,5/333,10,1) 'measure Badger meter 380, to solar thermal BTU meters are pulsed every 100btu/hr PulseCount (RTFGSHP_HPtoBuffer_kWh,1,1 ,2,0,1.0,0) PulseCount (SOLAR_boiler_BTUhr,1,12,2,0,100,0) PulseCount (SOLAR_infloor_BTUhr,1,13,2,0,100,0) PulseCount (SOLAR_penthouse_BTUhr,1,15,2,0,100,0) PulseCount (SOLAR_solartobuffer_BTUhr,1,16,2,0,100,0) ModBusMaster(result,ComME,BAUD_RATE,SLAVE_MODBUS_ADDR,3,Badger(),1,11,3,100,0) 'measure manifold temperatures BrHalf(therm(),6,mV2500,11,Vx3,6,2500,True,0,_60Hz, 1.0, 0) For i=1 To 6 Therm_kOhm(i) = (10*therm(i))/(1-therm(i)) D(i) = LN (1000*Therm_kOhm(i)) 'ln resistance (ohm) Temp_C(i) = (1/(a + b*D(i) + c*(D(i))^3)) - 273.15 'Steinhart & Hart Equation Next i 'measure onicons PortSet (1,1) ' Turn on mux i = 1 SubScan (0,Sec,12) 'Delay (0,10,mSec) PulsePort(4,10000) ' Clock mux VoltDiff (volt(i),1,AutoRange,5,False,0,_60Hz,1,0) i=i+1 NextSubScan PortSet (1,0) ' turn mux off. Onicon(1)=(0.0473*volt(1)-18.927) Onicon(2)=(0.055*volt(2)-21.98) Onicon(3)=(0.0208*volt(3)-20.566) Onicon(4)=(0.0208*volt(4)-20.556) Onicon(5)=(0.0355*volt(5)-14.195) Onicon(6)=(0.0824*volt(6)-32.97) Onicon(7)=(0.0347*volt(7)-9.4444) Onicon(8)=(0.0347*volt(8)-9.4444) Onicon(9)=(0.0355*volt(9)-14.195) Onicon(10)=(0.055*volt(10)-21.98) Onicon(11)=(0.0347*volt(11)-9.4444) Onicon(12)=(0.0347*volt(12)-9.4444) 'Convert energy rate to total energy RTFGSHP_GLenergy_kWh=RTFGSHP_GLenergyrate_kW*5/3600 RTFGSHP_tobuildingenergy_kWh=RTFGSHP_tobuildingenergyrate_kW*5/3600 RTFGSHP_HPenergy_kWh=RTFGSHP_HPPower_watts*5/3600/1000 RTFGSHP_pumpenergy_kWh=(RTFGSHP_pump1power_watts+RTFGSHP_pump2power_watts+RTFGSHP_pump3power_watts)*5/3600/1000 RTFGSHP_circenergy_kWh=RTFGSHP_circpumppower_watts*5/3600/1000 RTFGSHP_boilerenergy_kWh=RTFGSHP_boilerenergyrate_kW*5/3600 RTFGSHP_HPPower_kw=RTFGSHP_HPPower_watts/1000 'tell tables to log on HP running disable = true If RTFGSHP_GLflowrate_lmin > 1 Then disable = false disablemani=true If RTFGSHP_GLflowrate_lmin > 55 Then disablemani = false disablebldg=true If RTFGSHP_tobuildingflowrate_lmin > .2 Then disablebldg = false disableboiler=true If RTFGSHP_boilerflowrate_lmin>1 Then disableboiler=false disableelec=true If RTFGSHP_HPPower_watts>.5 Then disableelec=false 'OUTPUT CallTable RTFGSHP_Boiler CallTable RTFGSHP_Energyday CallTable RTFGSHP_Energyhour CallTable RTFGSHP_GSHPhour CallTable RTFGSHP_Energy15min CallTable RTFGSHP_Electrichour CallTable RTFGSHP_GLmanifoldhr CallTable RTFGSHP_HourlyRaw CallTable twominuteenergy CallTable twominutepower CallTable RTFGSHP_Powerhour CallTable RTFGSHP_GLmanimin CallTable Solar_hr NextScan EndProg