added new device types

This commit is contained in:
Nico Melone
2024-10-04 18:56:11 -05:00
parent 79b2f149df
commit 7c3f3519a4
24 changed files with 80728 additions and 1424 deletions

BIN
Pub_Sub/.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@@ -1,190 +1,213 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
a_current,ek_facility,default,periodic,,FLOAT,,,,,Val_A_Current,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
ab_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AB_Volt,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
ac_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
ait_102a_turbitity,ek_facility,default,periodic,,FLOAT,,,,,AI_102A.Scaled_Out,2,,ro,,Inlet Turbitity Value,none,,,,,,,,,,,,,,,0,,,,,,,
ait_102b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_102B.Scaled_Out,2,,ro,,Inlet H2S Value,none,,,,,,,,,,,,,,,0,,,,,,,
ait_102c_ph,ek_facility,default,periodic,,FLOAT,,,,,AI_102C.Scaled_Out,2,,ro,,Inlet pH Value,none,,,,,,,,,,,,,,,0,,,,,,,
ait_102d_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_102D.Scaled_Out,2,,ro,,Inlet Oil In Water,none,,,,,,,,,,,,,,,0,,,,,,,
ait_114a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ait_114b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ait_114c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ait_114d_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114D.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ait_114e_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114E.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
at_109a_turbidity,ek_facility,default,periodic,,FLOAT,,,,,AI_109A.Scaled_Out,2,,ro,,Outlet Turbidity Value,none,,,,,,,,,,,,,,,0,,,,,,,
at_109b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_109B.Scaled_Out,2,,ro,,Outlet H2S Value,none,,,,,,,,,,,,,,,0,,,,,,,
at_109c_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109C.Scaled_Out,2,,ro,,Outlet Oil In Water Value,none,,,,,,,,,,,,,,,0,,,,,,,
at_109d_o2_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109D.Scaled_Out,2,,ro,,Outlet O2 In Water Value,none,,,,,,,,,,,,,,,0,,,,,,,
at_109e_orp,ek_facility,default,periodic,,FLOAT,,,,,AI_109E.Scaled_Out,2,,ro,,Outlet ORP Value,none,,,,,,,,,,,,,,,0,,,,,,,
b_current,ek_facility,default,periodic,,FLOAT,,,,,Val_B_Current,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
bc_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_BC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
bp_3a_auto,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Auto,,,ro,,M107A HOA Hand Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3a_fault,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Fault_FBK,,,ro,,M107A Fault Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3a_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Hand,,,ro,,M107A HOA Auto Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3a_run,ek_facility,default,periodic,,BIT,,,,0,BP_3A_RUN_FDBK,,,ro,,M107A Run Status,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3a_run_cmd,ek_facility,default,periodic,,BIT,,,,0,BP_3A,,,ro,,M107A Run Command,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3a_run_fail_alm,ek_facility,default,periodic,,BIT,,,,0,BP_3A_RUN_FAIL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_auto,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Auto,,,ro,,M107B HOA Hand Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_fault,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Fault_FBK,,,ro,,M107B Fault Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Hand,,,ro,,M107B HOA Auto Feedback,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_run,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FDBK,,,ro,,M107B Run Status,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_run_cmd,ek_facility,default,periodic,,BIT,,,,0,BP_3B,,,ro,,M107B Run Command,none,,,,,,,,,,,,,0,,0,,,,,,,
bp_3b_run_fail_alm,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FAIL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
c_current,ek_facility,default,periodic,,FLOAT,,,,,Val_C_Current,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
chemical_pump_01_rate_offset,ek_facility,default,periodic,,FLOAT,,,,,SPT_Chemical_Pump_1_Rate_Offset,2,,ro,%,Operator Adjustment,none,,,,,,,,,,,,,,,0,,,,,,,
chemical_pump_01_run_status,ek_facility,default,periodic,,BIT,,,,0,FBK_Chemical_Pump_1_Running,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
chemical_pump_auto,ek_facility,default,periodic,,BIT,,,,0,CMD_Chemical_Pump_Auto,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
compressor_ambient_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Ambient_Temp,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
compressor_controller_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Controller_Temp,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
compressor_outlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Outlet_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
compressor_outlet_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Outlet_Element_Temp,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
ct_200_current,ek_facility,default,periodic,,FLOAT,,,,,CT_200.Scaled_Out,2,,ro,,M-105 Motor Amperage,none,,,,,,,,,,,,,,,0,,,,,,,
dpi_108a_pressure,ek_facility,default,periodic,,FLOAT,,,,,DPI_108A,2,,ro,,Differential PSI Across Sock Filter,none,,,,,,,,,,,,,,,0,,,,,,,
dpi_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,DPI_108B,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
esd_exists,ek_facility,default,periodic,,BIT,,,,0,ESD_Exists,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fcv_001_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_001_PRESCALE,2,,ro,,M107A Control Valve Setpoint,none,,,,,,,,,,,,,,,0,,,,,,,
fcv_002_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_002_PRESCALE,2,,ro,,M107B Control Valve Setpoint,none,,,,,,,,,,,,,,,0,,,,,,,
fcv_101a_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_101A.Scaled_Out,2,,ro,,Reject Stream Throttling Valve Position Feedback,none,,,,,,,,,,,,,,,0,,,,,,,
fcv_101b_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_101B.Scaled_Out,2,,ro,,Inlet Stream Throttling Valve Position Feedback,none,,,,,,,,,,,,,,,0,,,,,,,
fi_101b_popoff,ek_facility,default,periodic,,BIT,,,,0,FI_101B.Discrete_Input,,,ro,,Reject Stream Popoff Flow Switch,none,,,,,,,,,,,,,0,,0,,,,,,,
fis_112_h2o2_popoff,ek_facility,default,periodic,,BIT,,,,0,FIS_112_FBK,,,ro,,H2O2 Popoff Flow Switch,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_004_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_004.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_100_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_100.Scaled_Out,2,,ro,,Inlet Flow Rate To ACW,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_hi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AH,,,ro,,Inlet Flow Rate To ACW Hi,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_100_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AHH,,,ro,,Inlet Flow Rate To ACW HiHi,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_100_lo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AL,,,ro,,Inlet Flow Rate To ACW Lo,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_100_water_job,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Job_Total,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_water_last_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_LastMonth,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_water_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_water_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Month,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_water_today,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Todays,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_100_water_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Yest,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_101_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_101.Scaled_Out,2,,ro,bbls,Reject Stream Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_102_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_102.Scaled_Out,2,,ro,,Inlet Slip Stream Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_104_n2_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_004.Scaled_Out,2,,ro,,M-104 Onyx Pump N2 Injection Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_106a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106A.Scaled_Out,2,,ro,,M-106A Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_106a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_106b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106B.Scaled_Out,2,,ro,,M-106B Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_106b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_107a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107A.Scaled_Out,2,,ro,,M107A Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_107a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_107A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_107b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107B.Scaled_Out,2,,ro,,M107B Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_107b_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_107B.ALL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
fit_109a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_109A.Scaled_Out,2,,ro,,Outlet Slip Stream Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_109B.Scaled_Out,2,,ro,,Outlet Sales Meter,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_job,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Job_Total,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_last_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_LastMonth,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Month,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_today,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Todays,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_109b_water_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Yest,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fit_111_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_111.Scaled_Out,2,,ro,,FIT_111 Inlet Gas Flow Rate To ACW,none,,,,,,,,,,,,,,,0,,,,,,,
fit_112a_h2o2_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112A.Scaled_Out,2,,ro,,H2O2 Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
fit_112b_nahso3_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112B.Scaled_Out,2,,ro,,NaHSO3 Flow Rate,none,,,,,,,,,,,,,,,0,,,,,,,
h2o2_chemical_rate,ek_facility,default,periodic,,INT,,0,,,Chemical_Pump_1_Rate,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
li_103D_level_alm,ek_facility,default,periodic,,BIT,,,,0,LI_103D_FBK,,,ro,,ACW Containment Level Tripped (Red When Tripped Please),none,,,,,,,,,,,,,0,,0,,,,,,,
lit_101_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_101.Scaled_Out,2,,ro,,Chamber 5 Skim Level In Weir,none,,,,,,,,,,,,,,,0,,,,,,,
lit_112a_h2o2_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112A.Scaled_Out,2,,ro,,H2O2 Chemical Level,none,,,,,,,,,,,,,,,0,,,,,,,
lit_112b_nahso3_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112B.Scaled_Out,2,,ro,,NaHSO3 Chemical Level,none,,,,,,,,,,,,,,,0,,,,,,,
lit_170_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_170.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
lit_170_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_170.Scaled_Out,2,,ro,,Chamber 5 Level GWR,none,,,,,,,,,,,,,,,0,,,,,,,
lit_200_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_200.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
lit_200_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_200.Scaled_Out,2,,ro,,Chamber 5 Level DP,none,,,,,,,,,,,,,,,0,,,,,,,
lsh_114_alm,ek_facility,default,periodic,,BIT,,,,0,LSH_114.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
lsh_120_alm,ek_facility,default,periodic,,BIT,,,,0,LSH-120.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
lsh_120_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LSH_120,,,ro,,ACW Chamber 5 Level HiHi Switch Tripped (Red When Tripped Please),none,,,,,,,,,,,,,0,,0,,,,,,,
m106a_vfd_active,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:I.Active,,,ro,,M-106A Run Status,none,,,,,,,,,,,,,0,,0,,,,,,,
m106a_vfd_faulted_alm,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:I.Faulted,,,ro,,M-106A Fault Status,none,,,,,,,,,,,,,0,,0,,,,,,,
m106a_vfd_frequency,ek_facility,default,periodic,,INT,,0,,,M106A_VFD:I.OutputFreq,,,ro,,M-106A Current Output Frequency,none,,,,,,,,,,,,,,,0,,,,,,,
m106a_vfd_start,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:O.Start,,,ro,,M-106A Start Command,none,,,,,,,,,,,,,0,,0,,,,,,,
m106a_vfd_stop,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:O.Stop,,,ro,,M-106A Stop Command,none,,,,,,,,,,,,,0,,0,,,,,,,
m106b_vfd_active,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:I.Active,,,ro,,M-106B Run Status,none,,,,,,,,,,,,,0,,0,,,,,,,
m106b_vfd_faulted_alm,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:I.Faulted,,,ro,,M-106B Fault Status,none,,,,,,,,,,,,,0,,0,,,,,,,
m106b_vfd_frequency,ek_facility,default,periodic,,INT,,0,,,M106B_VFD:I.OutputFreq,,,ro,,M-106B Current Output Frequency,none,,,,,,,,,,,,,,,0,,,,,,,
m106b_vfd_start,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:O.Start,,,ro,,M-106B Start Command,none,,,,,,,,,,,,,0,,0,,,,,,,
m106b_vfd_stop,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:O.Stop,,,ro,,M-106B Stop Command,none,,,,,,,,,,,,,0,,0,,,,,,,
n2_inlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Inlet_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
n2_outlet_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_Flow_Rate,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
n2_outlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_ N2_Outlet_ PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
n2_outlet_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_Temp,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
n2_purity,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_N2_Purity,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
p100_auto,ek_facility,default,periodic,,BIT,,,,0,P100_Auto,,,ro,,M-104 Onyx Pump HOA Auto Status,none,,,,,,,,,,,,,0,,0,,,,,,,
p100_hand,ek_facility,default,periodic,,BIT,,,,0,P100_Hand,,,ro,,M-104 Onyx Pump HOA Hand Status,none,,,,,,,,,,,,,0,,0,,,,,,,
p200_auto,ek_facility,default,periodic,,BIT,,,,0,P200_Auto,,,ro,,M-105 Skim Pump HOA Hand Status,none,,,,,,,,,,,,,0,,0,,,,,,,
p200_hand,ek_facility,default,periodic,,BIT,,,,0,P200_Hand,,,ro,,M-105 Skim Pump HOA Auto Status,none,,,,,,,,,,,,,0,,0,,,,,,,
pdi_065_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pdi_065_lo_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.AL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pdi_065_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.ALL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pdi_065_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDI_065.AI_Scaled,2,,ro,,M-104 Onyx Pump Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pdt_108a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108A.AH,,,ro,,Sock Filter High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108A.AHH,,,ro,,Sock Filter High High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108b_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108B.AH,,,ro,,Cartrige Filter #1 High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108B.AHH,,,ro,,Cartrige Filter #1 High High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDT_108B.AI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pdt_108c_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108C.AH,,,ro,,Cartrige Filter #2 High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108C.AHH,,,ro,,Cartrige Filter #2 High High Differential PSI,none,,,,,,,,,,,,,0,,0,,,,,,,
pdt_108c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDT_108C.AI_Scaled,2,,ro,,Differential PSI Across Cartrige Filter #2,none,,,,,,,,,,,,,,,0,,,,,,,
pit_050_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_050.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_050_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_050.Scaled_Out,2,,ro,,PIT-104A Onyx Pump Suction PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_065_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_065.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_065_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_065.Scaled_Out,2,,ro,,PIT_104D Onyx Pump Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_100_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_100.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_100_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_100.Scaled_Out,2,,ro,,M-105 Skim Pump Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_100a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_100A.Scaled_Out,2,,ro,psi,Inlet PSI External To ACW,none,,,,,,,,,,,,,,,0,,,,,,,
pit_101a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.AH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101A.Scaled_Out,2,,ro,psi,"Inlet PSI Internal To ACW, Before SDV-101A",none,,,,,,,,,,,,,,,0,,,,,,,
pit_101a_transmitter_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.XFail,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101b_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_P101B.AH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101B.Scaled_Out,2,,ro,psi,"Inlet PSI Internal To ACW, After SDV-101A",none,,,,,,,,,,,,,,,0,,,,,,,
pit_101b_transmitter_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101B.XFail,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_101c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101C.Scaled_Out,2,,ro,psi,Reject Stream PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_102_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AH,,,ro,,Indicated if PIT102 is in Hi alarm state,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_102_hi_spt,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AH_SP,,,ro,,"PIT_102 Hi Alarm Setpoint, If needed",none,,,,,,,,,,,,,0,,0,,,,,,,
pit_102_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AHH,,,ro,,Indicates if PIT102 is in HiHi alarm state,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_102_hihi_spt,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AHH_SP,,,ro,,PIT_102 HiHi Alarm Setpoint If Needed,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_102_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_102.Scaled_Out,2,,ro,,Inlet PSI To Reaction Tank,none,,,,,,,,,,,,,,,0,,,,,,,
pit_106a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_106A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_106a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106A.Scaled_Out,2,,ro,,M-106A Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_106b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_106B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_106b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106B.Scaled_Out,2,,ro,,M-106B Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_106c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106C.Scaled_Out,2,,ro,,"Reject Stream Discharge Header PSI, Pre SDV 106",none,,,,,,,,,,,,,,,0,,,,,,,
pit_106d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106D.Scaled_Out,2,,ro,,"Reject Stream Discharge Header PSI, Post SDV106",none,,,,,,,,,,,,,,,0,,,,,,,
pit_107a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_107A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_107a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107A.Scaled_Out,2,,ro,,M107A & M107B Suction Header PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_107b_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_107B.ALL,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_107b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107B.Scaled_Out,2,,ro,,M107A Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_107c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107C.Scaled_Out,2,,ro,,M107A and M107B Discharge Flow Line PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_107d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107D.Scaled_Out,2,,ro,,M107B Discharge PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108G.Scaled_Out,2,,ro,,Post Filter Flow Line PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_108a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108A.Scaled_Out,2,,ro,,Pre Sock Filter PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108B.Scaled_Out,2,,ro,,Post Sock Filter PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_108c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108C.Scaled_Out,2,,ro,,Pre Cartrige Filter #1 PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108D.Scaled_Out,2,,ro,,Post Cartrige Filter #1 PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108e_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108E.Scaled_Out,2,,ro,,Pre Cartrige Filter #2 PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108f_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108F.Scaled_Out,2,,ro,,Post Cartrige Filter #2 PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_108g_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108G.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_110_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_110.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_110_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_110.Scaled_Out,2,,ro,,PIT_103 ACW Vapor Space Pressure,none,,,,,,,,,,,,,,,0,,,,,,,
pit_111a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_111a_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111A.Scaled_Out,2,,ro,,N2 System PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_111b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_111b_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111B.Scaled_Out,2,,ro,,Inlet Skid N2 PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pit_111c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pit_111c_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111C.Scaled_Out,2,,ro,,N2 Outlet Skid PSI,none,,,,,,,,,,,,,,,0,,,,,,,
pnl_esd_alm,ek_facility,default,periodic,,BIT,,,,0,PNL_ESD.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
rmt_sd_alm,ek_facility,default,periodic,,BIT,,,,0,RMT_SD.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
scada_stop_cmd,ek_facility,default,periodic,,BIT,,,,0,CMD_Scada_Stop,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
sdv_101a,ek_facility,default,periodic,,INT,,1,7,0,Local:12:I.Data,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
sdv106_closed,ek_facility,default,periodic,,BIT,,,,0,SDV106_Closed_FBK,,,ro,,SDV106 Closed Feedback Status,none,,,,,,,,,,,,,0,,0,,,,,,,
sdv106_open,ek_facility,default,periodic,,BIT,,,,0,SDV106_Open_FBK,,,ro,,SDV106 Open Feedback Status,none,,,,,,,,,,,,,0,,0,,,,,,,
skim_total_barrels,ek_facility,default,periodic,,FLOAT,,,,,SKIM_TOTAL_BARRELS,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
spt_chemical_manual_rate,ek_facility,default,periodic,,FLOAT,,,,,SPT_Chemical_Manual_Rate,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
xy_100_run,ek_facility,default,periodic,,BIT,,,,0,XY_100,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
xy_200_run,ek_facility,default,periodic,,BIT,,,,0,XY_200,,,ro,,M-105 Run Command,none,,,,,,,,,,,,,0,,0,,,,,,,
zae_111a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,ZAE_111A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
zae_111b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,ZAE_111B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
a_current,ek_facility,default,periodic,,FLOAT,,,,,Val_A_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
ab_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AB_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
ac_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_AC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102a_turbitity,ek_facility,default,periodic,,FLOAT,,,,,AI_102A.Scaled_Out,2,,ro,,Inlet Turbitity Value,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_102B.Scaled_Out,2,,ro,,Inlet H2S Value,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102c_ph,ek_facility,default,periodic,,FLOAT,,,,,AI_102C.Scaled_Out,2,,ro,,Inlet pH Value,none,,,,,,,,,,,,,,,1,,,,,,,
ait_102d_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_102D.Scaled_Out,2,,ro,,Inlet Oil In Water,none,,,,,,,,,,,,,,,1,,,,,,,
ait_114a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114a_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114c_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114C.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114c_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114C.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114d_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114D.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114e_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114E.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114l_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114L.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114l_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114L.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114r_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114R.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114r_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114R.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114x_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114X.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114x_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114X.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114z_lo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114Z.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
ait_114z_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,AIT_114Z.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
at_109a_turbidity,ek_facility,default,periodic,,FLOAT,,,,,AI_109A.Scaled_Out,2,,ro,,Outlet Turbidity Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109b_h2s,ek_facility,default,periodic,,FLOAT,,,,,AI_109B.Scaled_Out,2,,ro,,Outlet H2S Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109c_oil_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109C.Scaled_Out,2,,ro,,Outlet Oil In Water Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109d_o2_in_water,ek_facility,default,periodic,,FLOAT,,,,,AI_109D.Scaled_Out,2,,ro,,Outlet O2 In Water Value,none,,,,,,,,,,,,,,,1,,,,,,,
at_109e_orp,ek_facility,default,periodic,,FLOAT,,,,,AI_109E.Scaled_Out,2,,ro,,Outlet ORP Value,none,,,,,,,,,,,,,,,1,,,,,,,
b_current,ek_facility,default,periodic,,FLOAT,,,,,Val_B_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
bc_volt,ek_facility,default,periodic,,FLOAT,,,,,Val_BC_Volt,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
bp_3a_auto,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Auto,,,ro,,M107A HOA Hand Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_fault,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Fault_FBK,,,ro,,M107A Fault Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3A_Hand,,,ro,,M107A HOA Auto Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_run,ek_facility,default,periodic,,BIT,,,,0,BP_3A_RUN_FDBK,,,ro,,M107A Run Status,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_run_cmd,ek_facility,default,periodic,,BIT,,,,0,BP_3A,,,ro,,M107A Run Command,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3a_run_fail_alm,ek_facility,default,periodic,,BIT,,,,0,BP_3A_RUN_FAIL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_auto,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Auto,,,ro,,M107B HOA Hand Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_fault,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Fault_FBK,,,ro,,M107B Fault Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_hand,ek_facility,default,periodic,,BIT,,,,0,BP_3B_Hand,,,ro,,M107B HOA Auto Feedback,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_run,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FDBK,,,ro,,M107B Run Status,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_run_cmd,ek_facility,default,periodic,,BIT,,,,0,BP_3B,,,ro,,M107B Run Command,none,,,,,,,,,,,,,0,,1,,,,,,,
bp_3b_run_fail_alm,ek_facility,default,periodic,,BIT,,,,0,BP_3B_RUN_FAIL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
c_current,ek_facility,default,periodic,,FLOAT,,,,,Val_C_Current,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
chemical_pump_01_rate_offset,ek_facility,default,periodic,,FLOAT,,,,,SPT_Chemical_Pump_1_Rate_Offset,2,,ro,%,Operator Adjustment,none,,,,,,,,,,,,,,,1,,,,,,,
chemical_pump_01_run_status,ek_facility,default,periodic,,BIT,,,,0,FBK_Chemical_Pump_1_Running,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
chemical_pump_auto,ek_facility,default,periodic,,BIT,,,,0,CMD_Chemical_Pump_Auto,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
compressor_ambient_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Ambient_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
compressor_controller_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Controller_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
compressor_outlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Outlet_PSI,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
compressor_outlet_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Air_Compressor_Outlet_Element_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
ct_200_current,ek_facility,default,periodic,,FLOAT,,,,,CT_200.Scaled_Out,2,,ro,,M-105 Motor Amperage,none,,,,,,,,,,,,,,,1,,,,,,,
dpi_108a_pressure,ek_facility,default,periodic,,FLOAT,,,,,DPI_108A,2,,ro,,Differential PSI Across Sock Filter,none,,,,,,,,,,,,,,,1,,,,,,,
dpi_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,DPI_108B,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
esd_exists,ek_facility,default,periodic,,BIT,,,,0,ESD_Exists,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fcv_001_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_001_PRESCALE,2,,ro,,M107A Control Valve Setpoint,none,,,,,,,,,,,,,,,1,,,,,,,
fcv_002_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_002_PRESCALE,2,,ro,,M107B Control Valve Setpoint,none,,,,,,,,,,,,,,,1,,,,,,,
fcv_101a_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_101A.Scaled_Out,2,,ro,,Reject Stream Throttling Valve Position Feedback,none,,,,,,,,,,,,,,,1,,,,,,,
fcv_101b_valve,ek_facility,default,periodic,,FLOAT,,,,,FCV_101B.Scaled_Out,2,,ro,,Inlet Stream Throttling Valve Position Feedback,none,,,,,,,,,,,,,,,1,,,,,,,
fi_101b_popoff,ek_facility,default,periodic,,BIT,,,,0,FI_101B.Discrete_Input,,,ro,,Reject Stream Popoff Flow Switch,none,,,,,,,,,,,,,0,,1,,,,,,,
fis_112_h2o2_popoff,ek_facility,default,periodic,,BIT,,,,0,FIS_112_FBK,,,ro,,H2O2 Popoff Flow Switch,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_004_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_004.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_100_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_100.Scaled_Out,2,,ro,,Inlet Flow Rate To ACW,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_hi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AH,,,ro,,Inlet Flow Rate To ACW Hi,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_100_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AHH,,,ro,,Inlet Flow Rate To ACW HiHi,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_100_lo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_100.AL,,,ro,,Inlet Flow Rate To ACW Lo,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_100_water_job,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Job_Total,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_water_last_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_LastMonth,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_water_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_T1,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_water_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Month,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_water_today,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Todays,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_100_water_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_100_Water_Yest,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_101_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_101.Scaled_Out,2,,ro,bbls,Reject Stream Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_102_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_102.Scaled_Out,2,,ro,,Inlet Slip Stream Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_104_n2_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_004.Scaled_Out,2,,ro,,M-104 Onyx Pump N2 Injection Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_106a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106A.Scaled_Out,2,,ro,,M-106A Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_106a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_106b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_106B.Scaled_Out,2,,ro,,M-106B Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_106b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_106B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_107a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107A.Scaled_Out,2,,ro,,M107A Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_107a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_107A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_107b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_107B.Scaled_Out,2,,ro,,M107B Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_107b_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,FIT_107B.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
fit_109a_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_109A.Scaled_Out,2,,ro,,Outlet Slip Stream Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_109B.Scaled_Out,2,,ro,,Outlet Sales Meter,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_job,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Job_Total,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_last_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_LastMonth,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_lifetime,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_T1,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_month,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Month,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_today,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Todays,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_109b_water_yesterday,ek_facility,default,periodic,,FLOAT,,,,,Val_FIT_109B_Water_Yest,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
fit_111_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_111.Scaled_Out,2,,ro,,FIT_111 Inlet Gas Flow Rate To ACW,none,,,,,,,,,,,,,,,1,,,,,,,
fit_112a_h2o2_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112A.Scaled_Out,2,,ro,,H2O2 Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
fit_112b_nahso3_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,FIT_112B.Scaled_Out,2,,ro,,NaHSO3 Flow Rate,none,,,,,,,,,,,,,,,1,,,,,,,
h2o2_chemical_rate,ek_facility,default,periodic,,INT,,0,,,Chemical_Pump_1_Rate,,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
li_103D_level_alm,ek_facility,default,periodic,,BIT,,,,0,LI_103D_FBK,,,ro,,ACW Containment Level Tripped (Red When Tripped Please),none,,,,,,,,,,,,,0,,1,,,,,,,
lit_101_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_101.Scaled_Out,2,,ro,,Chamber 5 Skim Level In Weir,none,,,,,,,,,,,,,,,1,,,,,,,
lit_112a_h2o2_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112A.Scaled_Out,2,,ro,,H2O2 Chemical Level,none,,,,,,,,,,,,,,,1,,,,,,,
lit_112b_nahso3_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_112B.Scaled_Out,2,,ro,,NaHSO3 Chemical Level,none,,,,,,,,,,,,,,,1,,,,,,,
lit_116a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_116A.AH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_116a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_116A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_116a_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_116A.Scaled_Out,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
lit_116b_hi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_116B.AH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_116b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_116B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_116b_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_116B.Scaled_Out,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
lit_170_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_170.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_170_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_170.Scaled_Out,2,,ro,,Chamber 5 Level GWR,none,,,,,,,,,,,,,,,1,,,,,,,
lit_200_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LIT_200.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lit_200_level,ek_facility,default,periodic,,FLOAT,,,,,LIT_200.Scaled_Out,2,,ro,,Chamber 5 Level DP,none,,,,,,,,,,,,,,,1,,,,,,,
lsh_114_alm,ek_facility,default,periodic,,BIT,,,,0,LSH_114.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lsh_120_alm,ek_facility,default,periodic,,BIT,,,,0,LSH-120.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
lsh_120_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,LSH_120,,,ro,,ACW Chamber 5 Level HiHi Switch Tripped (Red When Tripped Please),none,,,,,,,,,,,,,0,,1,,,,,,,
m106a_vfd_active,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:I.Active,,,ro,,M-106A Run Status,none,,,,,,,,,,,,,0,,1,,,,,,,
m106a_vfd_faulted_alm,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:I.Faulted,,,ro,,M-106A Fault Status,none,,,,,,,,,,,,,0,,1,,,,,,,
m106a_vfd_frequency,ek_facility,default,periodic,,INT,,0,,,M106A_VFD:I.OutputFreq,,,ro,,M-106A Current Output Frequency,none,,,,,,,,,,,,,,,1,,,,,,,
m106a_vfd_start,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:O.Start,,,ro,,M-106A Start Command,none,,,,,,,,,,,,,0,,1,,,,,,,
m106a_vfd_stop,ek_facility,default,periodic,,BIT,,,,0,M106A_VFD:O.Stop,,,ro,,M-106A Stop Command,none,,,,,,,,,,,,,0,,1,,,,,,,
m106b_vfd_active,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:I.Active,,,ro,,M-106B Run Status,none,,,,,,,,,,,,,0,,1,,,,,,,
m106b_vfd_faulted_alm,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:I.Faulted,,,ro,,M-106B Fault Status,none,,,,,,,,,,,,,0,,1,,,,,,,
m106b_vfd_frequency,ek_facility,default,periodic,,INT,,0,,,M106B_VFD:I.OutputFreq,,,ro,,M-106B Current Output Frequency,none,,,,,,,,,,,,,,,1,,,,,,,
m106b_vfd_start,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:O.Start,,,ro,,M-106B Start Command,none,,,,,,,,,,,,,0,,1,,,,,,,
m106b_vfd_stop,ek_facility,default,periodic,,BIT,,,,0,M106B_VFD:O.Stop,,,ro,,M-106B Stop Command,none,,,,,,,,,,,,,0,,1,,,,,,,
n2_inlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Inlet_PSI,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_outlet_flow_rate,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_Flow_Rate,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_outlet_pressure,ek_facility,default,periodic,,FLOAT,,,,,Val_ N2_Outlet_ PSI,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_outlet_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_Outlet_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
n2_purity,ek_facility,default,periodic,,FLOAT,,,,,Val_N2_N2_Purity,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
p100_auto,ek_facility,default,periodic,,BIT,,,,0,P100_Auto,,,ro,,M-104 Onyx Pump HOA Auto Status,none,,,,,,,,,,,,,0,,1,,,,,,,
p100_hand,ek_facility,default,periodic,,BIT,,,,0,P100_Hand,,,ro,,M-104 Onyx Pump HOA Hand Status,none,,,,,,,,,,,,,0,,1,,,,,,,
p200_auto,ek_facility,default,periodic,,BIT,,,,0,P200_Auto,,,ro,,M-105 Skim Pump HOA Hand Status,none,,,,,,,,,,,,,0,,1,,,,,,,
p200_hand,ek_facility,default,periodic,,BIT,,,,0,P200_Hand,,,ro,,M-105 Skim Pump HOA Auto Status,none,,,,,,,,,,,,,0,,1,,,,,,,
pdi_065_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pdi_065_lo_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.AL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pdi_065_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PDI_065.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pdi_065_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDI_065.AI_Scaled,2,,ro,,M-104 Onyx Pump Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pdt_108a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108A.AH,,,ro,,Sock Filter High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108A.AHH,,,ro,,Sock Filter High High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108b_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108B.AH,,,ro,,Cartrige Filter #1 High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108B.AHH,,,ro,,Cartrige Filter #1 High High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDT_108B.AI_Scaled,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
pdt_108c_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108C.AH,,,ro,,Cartrige Filter #2 High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PDT_108C.AHH,,,ro,,Cartrige Filter #2 High High Differential PSI,none,,,,,,,,,,,,,0,,1,,,,,,,
pdt_108c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PDT_108C.AI_Scaled,2,,ro,,Differential PSI Across Cartrige Filter #2,none,,,,,,,,,,,,,,,1,,,,,,,
pit_050_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_050.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_050_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_050.Scaled_Out,2,,ro,,PIT-104A Onyx Pump Suction PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_065_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_065.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_065_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_065.Scaled_Out,2,,ro,,PIT_104D Onyx Pump Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_100_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_100.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_100_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_100.Scaled_Out,2,,ro,,M-105 Skim Pump Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_100a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_100A.Scaled_Out,2,,ro,psi,Inlet PSI External To ACW,none,,,,,,,,,,,,,,,1,,,,,,,
pit_101a_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.AH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101A.Scaled_Out,2,,ro,psi,"Inlet PSI Internal To ACW, Before SDV-101A",none,,,,,,,,,,,,,,,1,,,,,,,
pit_101a_transmitter_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101A.XFail,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101b_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_P101B.AH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101B.Scaled_Out,2,,ro,psi,"Inlet PSI Internal To ACW, After SDV-101A",none,,,,,,,,,,,,,,,1,,,,,,,
pit_101b_transmitter_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_101B.XFail,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_101c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_101C.Scaled_Out,2,,ro,psi,Reject Stream PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_102_hi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AH,,,ro,,Indicated if PIT102 is in Hi alarm state,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_102_hi_spt,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AH_SP,,,ro,,"PIT_102 Hi Alarm Setpoint, If needed",none,,,,,,,,,,,,,0,,1,,,,,,,
pit_102_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AHH,,,ro,,Indicates if PIT102 is in HiHi alarm state,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_102_hihi_spt,ek_facility,default,periodic,,BIT,,,,0,PIT_102.AHH_SP,,,ro,,PIT_102 HiHi Alarm Setpoint If Needed,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_102_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_102.Scaled_Out,2,,ro,,Inlet PSI To Reaction Tank,none,,,,,,,,,,,,,,,1,,,,,,,
pit_106a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_106A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_106a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106A.Scaled_Out,2,,ro,,M-106A Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_106b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_106B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_106b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106B.Scaled_Out,2,,ro,,M-106B Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_106c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106C.Scaled_Out,2,,ro,,"Reject Stream Discharge Header PSI, Pre SDV 106",none,,,,,,,,,,,,,,,1,,,,,,,
pit_106d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_106D.Scaled_Out,2,,ro,,"Reject Stream Discharge Header PSI, Post SDV106",none,,,,,,,,,,,,,,,1,,,,,,,
pit_107a_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_107A.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_107a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107A.Scaled_Out,2,,ro,,M107A & M107B Suction Header PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_107b_lolo_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_107B.ALL,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_107b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107B.Scaled_Out,2,,ro,,M107A Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_107c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107C.Scaled_Out,2,,ro,,M107A and M107B Discharge Flow Line PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_107d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_107D.Scaled_Out,2,,ro,,M107B Discharge PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108G.Scaled_Out,2,,ro,,Post Filter Flow Line PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_108a_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108A.Scaled_Out,2,,ro,,Pre Sock Filter PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_108b_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108B.Scaled_Out,2,,ro,,Post Sock Filter PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_108c_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108C.Scaled_Out,2,,ro,,Pre Cartrige Filter #1 PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108d_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108D.Scaled_Out,2,,ro,,Post Cartrige Filter #1 PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108e_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108E.Scaled_Out,2,,ro,,Pre Cartrige Filter #2 PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108f_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_108F.Scaled_Out,2,,ro,,Post Cartrige Filter #2 PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_108g_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_108G.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_110_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_110.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_110_pressure,ek_facility,default,periodic,,FLOAT,,,,,PIT_110.Scaled_Out,2,,ro,,PIT_103 ACW Vapor Space Pressure,none,,,,,,,,,,,,,,,1,,,,,,,
pit_111a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_111a_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111A.Scaled_Out,2,,ro,,N2 System PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_111b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_111b_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111B.Scaled_Out,2,,ro,,Inlet Skid N2 PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pit_111c_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,PIT_111C.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pit_111c_n2,ek_facility,default,periodic,,FLOAT,,,,,PIT_111C.Scaled_Out,2,,ro,,N2 Outlet Skid PSI,none,,,,,,,,,,,,,,,1,,,,,,,
pnl_esd_alm,ek_facility,default,periodic,,BIT,,,,0,PNL_ESD.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
psd_alm,ek_facility,default,periodic,,BIT,,,,0,CMD_PSD,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
rmt_sd_alm,ek_facility,default,periodic,,BIT,,,,0,RMT_SD.ALARM,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
scada_stop_cmd,ek_facility,default,periodic,,BIT,,,,0,CMD_Scada_Stop,,,rw,,,none,,,,,,,,,,,,,0,,1,,,,,,,
sdv_101a,ek_facility,default,periodic,,INT,,1,7,0,Local:12:I.Data,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
sdv106_closed,ek_facility,default,periodic,,BIT,,,,0,SDV106_Closed_FBK,,,ro,,SDV106 Closed Feedback Status,none,,,,,,,,,,,,,0,,1,,,,,,,
sdv106_open,ek_facility,default,periodic,,BIT,,,,0,SDV106_Open_FBK,,,ro,,SDV106 Open Feedback Status,none,,,,,,,,,,,,,0,,1,,,,,,,
skim_total_barrels,ek_facility,default,periodic,,FLOAT,,,,,SKIM_TOTAL_BARRELS,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
spt_chemical_manual_rate,ek_facility,default,periodic,,FLOAT,,,,,SPT_Chemical_Manual_Rate,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
xy_100_run,ek_facility,default,periodic,,BIT,,,,0,XY_100,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
xy_200_run,ek_facility,default,periodic,,BIT,,,,0,XY_200,,,ro,,M-105 Run Command,none,,,,,,,,,,,,,0,,1,,,,,,,
zae_111a_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,ZAE_111A.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
zae_111b_hihi_alm,ek_facility,default,periodic,,BIT,,,,0,ZAE_111B.AHH,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
inlet_ph_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Inlet_PH_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
inlet_turbidity_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Inlet_Turbidity_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
outlet_orp_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_ORP_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
outlet_turbidity_temp,ek_facility,default,periodic,,FLOAT,,,,,Val_Outlet_Turbidity_Temp,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId
2 a_current ek_facility default periodic FLOAT Val_A_Current 2 ro none 0 1
3 ab_volt ek_facility default periodic FLOAT Val_AB_Volt 2 ro none 0 1
4 ac_volt ek_facility default periodic FLOAT Val_AC_Volt 2 ro none 0 1
5 ait_102a_turbitity ek_facility default periodic FLOAT AI_102A.Scaled_Out 2 ro Inlet Turbitity Value none 0 1
6 ait_102b_h2s ek_facility default periodic FLOAT AI_102B.Scaled_Out 2 ro Inlet H2S Value none 0 1
7 ait_102c_ph ek_facility default periodic FLOAT AI_102C.Scaled_Out 2 ro Inlet pH Value none 0 1
8 ait_102d_oil_in_water ek_facility default periodic FLOAT AI_102D.Scaled_Out 2 ro Inlet Oil In Water none 0 1
9 ait_114a_hihi_alm ek_facility default periodic BIT 0 AIT_114A.AHH ro none 0 0 1
10 ait_114b_hihi_alm ait_114a_lo_alm ek_facility default periodic BIT 0 AIT_114B.AHH AIT_114A.AL ro none 0 0 1
11 ait_114c_hihi_alm ait_114a_lolo_alm ek_facility default periodic BIT 0 AIT_114C.AHH AIT_114A.ALL ro none 0 0 1
12 ait_114d_hihi_alm ait_114b_hihi_alm ek_facility default periodic BIT 0 AIT_114D.AHH AIT_114B.AHH ro none 0 0 1
13 ait_114e_hihi_alm ait_114c_hihi_alm ek_facility default periodic BIT 0 AIT_114E.AHH AIT_114C.AHH ro none 0 0 1
14 at_109a_turbidity ait_114c_lo_alm ek_facility default periodic FLOAT BIT 0 AI_109A.Scaled_Out AIT_114C.AL 2 ro Outlet Turbidity Value none 0 0 1
15 at_109b_h2s ait_114c_lolo_alm ek_facility default periodic FLOAT BIT 0 AI_109B.Scaled_Out AIT_114C.ALL 2 ro Outlet H2S Value none 0 0 1
16 at_109c_oil_in_water ait_114d_hihi_alm ek_facility default periodic FLOAT BIT 0 AI_109C.Scaled_Out AIT_114D.AHH 2 ro Outlet Oil In Water Value none 0 0 1
17 at_109d_o2_in_water ait_114e_hihi_alm ek_facility default periodic FLOAT BIT 0 AI_109D.Scaled_Out AIT_114E.AHH 2 ro Outlet O2 In Water Value none 0 0 1
18 at_109e_orp ait_114l_lo_alm ek_facility default periodic FLOAT BIT 0 AI_109E.Scaled_Out AIT_114L.AL 2 ro Outlet ORP Value none 0 0 1
19 b_current ait_114l_lolo_alm ek_facility default periodic FLOAT BIT 0 Val_B_Current AIT_114L.ALL 2 ro none 0 0 1
20 bc_volt ait_114r_lo_alm ek_facility default periodic FLOAT BIT 0 Val_BC_Volt AIT_114R.AL 2 ro none 0 0 1
21 bp_3a_auto ait_114r_lolo_alm ek_facility default periodic BIT 0 BP_3A_Auto AIT_114R.ALL ro M107A HOA Hand Feedback none 0 0 1
22 bp_3a_fault ait_114x_lo_alm ek_facility default periodic BIT 0 BP_3A_Fault_FBK AIT_114X.AL ro M107A Fault Feedback none 0 0 1
23 bp_3a_hand ait_114x_lolo_alm ek_facility default periodic BIT 0 BP_3A_Hand AIT_114X.ALL ro M107A HOA Auto Feedback none 0 0 1
24 bp_3a_run ait_114z_lo_alm ek_facility default periodic BIT 0 BP_3A_RUN_FDBK AIT_114Z.AL ro M107A Run Status none 0 0 1
25 bp_3a_run_cmd ait_114z_lolo_alm ek_facility default periodic BIT 0 BP_3A AIT_114Z.ALL ro M107A Run Command none 0 0 1
26 bp_3a_run_fail_alm at_109a_turbidity ek_facility default periodic BIT FLOAT 0 BP_3A_RUN_FAIL AI_109A.Scaled_Out 2 ro Outlet Turbidity Value none 0 0 1
27 bp_3b_auto at_109b_h2s ek_facility default periodic BIT FLOAT 0 BP_3B_Auto AI_109B.Scaled_Out 2 ro M107B HOA Hand Feedback Outlet H2S Value none 0 0 1
28 bp_3b_fault at_109c_oil_in_water ek_facility default periodic BIT FLOAT 0 BP_3B_Fault_FBK AI_109C.Scaled_Out 2 ro M107B Fault Feedback Outlet Oil In Water Value none 0 0 1
29 bp_3b_hand at_109d_o2_in_water ek_facility default periodic BIT FLOAT 0 BP_3B_Hand AI_109D.Scaled_Out 2 ro M107B HOA Auto Feedback Outlet O2 In Water Value none 0 0 1
30 bp_3b_run at_109e_orp ek_facility default periodic BIT FLOAT 0 BP_3B_RUN_FDBK AI_109E.Scaled_Out 2 ro M107B Run Status Outlet ORP Value none 0 0 1
31 bp_3b_run_cmd b_current ek_facility default periodic BIT FLOAT 0 BP_3B Val_B_Current 2 ro M107B Run Command none 0 0 1
32 bp_3b_run_fail_alm bc_volt ek_facility default periodic BIT FLOAT 0 BP_3B_RUN_FAIL Val_BC_Volt 2 ro none 0 0 1
33 c_current bp_3a_auto ek_facility default periodic FLOAT BIT 0 Val_C_Current BP_3A_Auto 2 ro M107A HOA Hand Feedback none 0 0 1
34 chemical_pump_01_rate_offset bp_3a_fault ek_facility default periodic FLOAT BIT 0 SPT_Chemical_Pump_1_Rate_Offset BP_3A_Fault_FBK 2 ro % Operator Adjustment M107A Fault Feedback none 0 0 1
35 chemical_pump_01_run_status bp_3a_hand ek_facility default periodic BIT 0 FBK_Chemical_Pump_1_Running BP_3A_Hand ro M107A HOA Auto Feedback none 0 0 1
36 chemical_pump_auto bp_3a_run ek_facility default periodic BIT 0 CMD_Chemical_Pump_Auto BP_3A_RUN_FDBK ro M107A Run Status none 0 0 1
37 compressor_ambient_temp bp_3a_run_cmd ek_facility default periodic FLOAT BIT 0 Val_Air_Compressor_Ambient_Temp BP_3A 2 ro M107A Run Command none 0 0 1
38 compressor_controller_temp bp_3a_run_fail_alm ek_facility default periodic FLOAT BIT 0 Val_Air_Compressor_Controller_Temp BP_3A_RUN_FAIL 2 ro none 0 0 1
39 compressor_outlet_pressure bp_3b_auto ek_facility default periodic FLOAT BIT 0 Val_Air_Compressor_Outlet_PSI BP_3B_Auto 2 ro M107B HOA Hand Feedback none 0 0 1
40 compressor_outlet_temp bp_3b_fault ek_facility default periodic FLOAT BIT 0 Val_Air_Compressor_Outlet_Element_Temp BP_3B_Fault_FBK 2 ro M107B Fault Feedback none 0 0 1
41 ct_200_current bp_3b_hand ek_facility default periodic FLOAT BIT 0 CT_200.Scaled_Out BP_3B_Hand 2 ro M-105 Motor Amperage M107B HOA Auto Feedback none 0 0 1
42 dpi_108a_pressure bp_3b_run ek_facility default periodic FLOAT BIT 0 DPI_108A BP_3B_RUN_FDBK 2 ro Differential PSI Across Sock Filter M107B Run Status none 0 0 1
43 dpi_108b_pressure bp_3b_run_cmd ek_facility default periodic FLOAT BIT 0 DPI_108B BP_3B 2 ro M107B Run Command none 0 0 1
44 esd_exists bp_3b_run_fail_alm ek_facility default periodic BIT 0 ESD_Exists BP_3B_RUN_FAIL ro none 0 0 1
45 fcv_001_valve c_current ek_facility default periodic FLOAT FCV_001_PRESCALE Val_C_Current 2 ro M107A Control Valve Setpoint none 0 1
46 fcv_002_valve chemical_pump_01_rate_offset ek_facility default periodic FLOAT FCV_002_PRESCALE SPT_Chemical_Pump_1_Rate_Offset 2 ro % M107B Control Valve Setpoint Operator Adjustment none 0 1
47 fcv_101a_valve chemical_pump_01_run_status ek_facility default periodic FLOAT BIT 0 FCV_101A.Scaled_Out FBK_Chemical_Pump_1_Running 2 ro Reject Stream Throttling Valve Position Feedback none 0 0 1
48 fcv_101b_valve chemical_pump_auto ek_facility default periodic FLOAT BIT 0 FCV_101B.Scaled_Out CMD_Chemical_Pump_Auto 2 ro Inlet Stream Throttling Valve Position Feedback none 0 0 1
49 fi_101b_popoff compressor_ambient_temp ek_facility default periodic BIT FLOAT 0 FI_101B.Discrete_Input Val_Air_Compressor_Ambient_Temp 2 ro Reject Stream Popoff Flow Switch none 0 0 1
50 fis_112_h2o2_popoff compressor_controller_temp ek_facility default periodic BIT FLOAT 0 FIS_112_FBK Val_Air_Compressor_Controller_Temp 2 ro H2O2 Popoff Flow Switch none 0 0 1
51 fit_004_hihi_alm compressor_outlet_pressure ek_facility default periodic BIT FLOAT 0 FIT_004.AHH Val_Air_Compressor_Outlet_PSI 2 ro none 0 0 1
52 fit_100_flow_rate compressor_outlet_temp ek_facility default periodic FLOAT FIT_100.Scaled_Out Val_Air_Compressor_Outlet_Element_Temp 2 ro Inlet Flow Rate To ACW none 0 1
53 fit_100_hi_alm ct_200_current ek_facility default periodic BIT FLOAT 0 FIT_100.AH CT_200.Scaled_Out 2 ro Inlet Flow Rate To ACW Hi M-105 Motor Amperage none 0 0 1
54 fit_100_hihi_alm dpi_108a_pressure ek_facility default periodic BIT FLOAT 0 FIT_100.AHH DPI_108A 2 ro Inlet Flow Rate To ACW HiHi Differential PSI Across Sock Filter none 0 0 1
55 fit_100_lo_alm dpi_108b_pressure ek_facility default periodic BIT FLOAT 0 FIT_100.AL DPI_108B 2 ro Inlet Flow Rate To ACW Lo none 0 0 1
56 fit_100_water_job esd_exists ek_facility default periodic FLOAT BIT 0 Val_FIT_100_Job_Total ESD_Exists 2 ro none 0 0 1
57 fit_100_water_last_month fcv_001_valve ek_facility default periodic FLOAT Val_FIT_100_Water_LastMonth FCV_001_PRESCALE 2 ro M107A Control Valve Setpoint none 0 1
58 fit_100_water_lifetime fcv_002_valve ek_facility default periodic FLOAT Val_FIT_100_Water_T1 FCV_002_PRESCALE 2 ro M107B Control Valve Setpoint none 0 1
59 fit_100_water_month fcv_101a_valve ek_facility default periodic FLOAT Val_FIT_100_Water_Month FCV_101A.Scaled_Out 2 ro Reject Stream Throttling Valve Position Feedback none 0 1
60 fit_100_water_today fcv_101b_valve ek_facility default periodic FLOAT Val_FIT_100_Water_Todays FCV_101B.Scaled_Out 2 ro Inlet Stream Throttling Valve Position Feedback none 0 1
61 fit_100_water_yesterday fi_101b_popoff ek_facility default periodic FLOAT BIT 0 Val_FIT_100_Water_Yest FI_101B.Discrete_Input 2 ro Reject Stream Popoff Flow Switch none 0 0 1
62 fit_101_flow_rate fis_112_h2o2_popoff ek_facility default periodic FLOAT BIT 0 FIT_101.Scaled_Out FIS_112_FBK 2 ro bbls Reject Stream Flow Rate H2O2 Popoff Flow Switch none 0 0 1
63 fit_102_flow_rate fit_004_hihi_alm ek_facility default periodic FLOAT BIT 0 FIT_102.Scaled_Out FIT_004.AHH 2 ro Inlet Slip Stream Flow Rate none 0 0 1
64 fit_104_n2_rate fit_100_flow_rate ek_facility default periodic FLOAT FIT_004.Scaled_Out FIT_100.Scaled_Out 2 ro M-104 Onyx Pump N2 Injection Rate Inlet Flow Rate To ACW none 0 1
65 fit_106a_flow_rate fit_100_hi_alm ek_facility default periodic FLOAT BIT 0 FIT_106A.Scaled_Out FIT_100.AH 2 ro M-106A Flow Rate Inlet Flow Rate To ACW Hi none 0 0 1
66 fit_106a_hihi_alm fit_100_hihi_alm ek_facility default periodic BIT 0 FIT_106A.AHH FIT_100.AHH ro Inlet Flow Rate To ACW HiHi none 0 0 1
67 fit_106b_flow_rate fit_100_lo_alm ek_facility default periodic FLOAT BIT 0 FIT_106B.Scaled_Out FIT_100.AL 2 ro M-106B Flow Rate Inlet Flow Rate To ACW Lo none 0 0 1
68 fit_106b_hihi_alm fit_100_water_job ek_facility default periodic BIT FLOAT 0 FIT_106B.AHH Val_FIT_100_Job_Total 2 ro none 0 0 1
69 fit_107a_flow_rate fit_100_water_last_month ek_facility default periodic FLOAT FIT_107A.Scaled_Out Val_FIT_100_Water_LastMonth 2 ro M107A Flow Rate none 0 1
70 fit_107a_lolo_alm fit_100_water_lifetime ek_facility default periodic BIT FLOAT 0 FIT_107A.ALL Val_FIT_100_Water_T1 2 ro none 0 0 1
71 fit_107b_flow_rate fit_100_water_month ek_facility default periodic FLOAT FIT_107B.Scaled_Out Val_FIT_100_Water_Month 2 ro M107B Flow Rate none 0 1
72 fit_107b_lolo_alm fit_100_water_today ek_facility default periodic BIT FLOAT 0 FIT_107B.ALL Val_FIT_100_Water_Todays 2 ro none 0 0 1
73 fit_109a_flow_rate fit_100_water_yesterday ek_facility default periodic FLOAT FIT_109A.Scaled_Out Val_FIT_100_Water_Yest 2 ro Outlet Slip Stream Flow Rate none 0 1
74 fit_109b_flow_rate fit_101_flow_rate ek_facility default periodic FLOAT FIT_109B.Scaled_Out FIT_101.Scaled_Out 2 ro bbls Outlet Sales Meter Reject Stream Flow Rate none 0 1
75 fit_109b_water_job fit_102_flow_rate ek_facility default periodic FLOAT Val_FIT_109B_Job_Total FIT_102.Scaled_Out 2 ro Inlet Slip Stream Flow Rate none 0 1
76 fit_109b_water_last_month fit_104_n2_rate ek_facility default periodic FLOAT Val_FIT_109B_Water_LastMonth FIT_004.Scaled_Out 2 ro M-104 Onyx Pump N2 Injection Rate none 0 1
77 fit_109b_water_lifetime fit_106a_flow_rate ek_facility default periodic FLOAT Val_FIT_109B_Water_T1 FIT_106A.Scaled_Out 2 ro M-106A Flow Rate none 0 1
78 fit_109b_water_month fit_106a_hihi_alm ek_facility default periodic FLOAT BIT 0 Val_FIT_109B_Water_Month FIT_106A.AHH 2 ro none 0 0 1
79 fit_109b_water_today fit_106b_flow_rate ek_facility default periodic FLOAT Val_FIT_109B_Water_Todays FIT_106B.Scaled_Out 2 ro M-106B Flow Rate none 0 1
80 fit_109b_water_yesterday fit_106b_hihi_alm ek_facility default periodic FLOAT BIT 0 Val_FIT_109B_Water_Yest FIT_106B.AHH 2 ro none 0 0 1
81 fit_111_flow_rate fit_107a_flow_rate ek_facility default periodic FLOAT FIT_111.Scaled_Out FIT_107A.Scaled_Out 2 ro FIT_111 Inlet Gas Flow Rate To ACW M107A Flow Rate none 0 1
82 fit_112a_h2o2_flow_rate fit_107a_lolo_alm ek_facility default periodic FLOAT BIT 0 FIT_112A.Scaled_Out FIT_107A.ALL 2 ro H2O2 Flow Rate none 0 0 1
83 fit_112b_nahso3_flow_rate fit_107b_flow_rate ek_facility default periodic FLOAT FIT_112B.Scaled_Out FIT_107B.Scaled_Out 2 ro NaHSO3 Flow Rate M107B Flow Rate none 0 1
84 h2o2_chemical_rate fit_107b_lolo_alm ek_facility default periodic INT BIT 0 0 Chemical_Pump_1_Rate FIT_107B.ALL ro none 0 0 1
85 li_103D_level_alm fit_109a_flow_rate ek_facility default periodic BIT FLOAT 0 LI_103D_FBK FIT_109A.Scaled_Out 2 ro ACW Containment Level Tripped (Red When Tripped Please) Outlet Slip Stream Flow Rate none 0 0 1
86 lit_101_level fit_109b_flow_rate ek_facility default periodic FLOAT LIT_101.Scaled_Out FIT_109B.Scaled_Out 2 ro Chamber 5 Skim Level In Weir Outlet Sales Meter none 0 1
87 lit_112a_h2o2_level fit_109b_water_job ek_facility default periodic FLOAT LIT_112A.Scaled_Out Val_FIT_109B_Job_Total 2 ro H2O2 Chemical Level none 0 1
88 lit_112b_nahso3_level fit_109b_water_last_month ek_facility default periodic FLOAT LIT_112B.Scaled_Out Val_FIT_109B_Water_LastMonth 2 ro NaHSO3 Chemical Level none 0 1
89 lit_170_hihi_alm fit_109b_water_lifetime ek_facility default periodic BIT FLOAT 0 LIT_170.AHH Val_FIT_109B_Water_T1 2 ro none 0 0 1
90 lit_170_level fit_109b_water_month ek_facility default periodic FLOAT LIT_170.Scaled_Out Val_FIT_109B_Water_Month 2 ro Chamber 5 Level GWR none 0 1
91 lit_200_hihi_alm fit_109b_water_today ek_facility default periodic BIT FLOAT 0 LIT_200.AHH Val_FIT_109B_Water_Todays 2 ro none 0 0 1
92 lit_200_level fit_109b_water_yesterday ek_facility default periodic FLOAT LIT_200.Scaled_Out Val_FIT_109B_Water_Yest 2 ro Chamber 5 Level DP none 0 1
93 lsh_114_alm fit_111_flow_rate ek_facility default periodic BIT FLOAT 0 LSH_114.ALARM FIT_111.Scaled_Out 2 ro FIT_111 Inlet Gas Flow Rate To ACW none 0 0 1
94 lsh_120_alm fit_112a_h2o2_flow_rate ek_facility default periodic BIT FLOAT 0 LSH-120.ALARM FIT_112A.Scaled_Out 2 ro H2O2 Flow Rate none 0 0 1
95 lsh_120_hihi_alm fit_112b_nahso3_flow_rate ek_facility default periodic BIT FLOAT 0 LSH_120 FIT_112B.Scaled_Out 2 ro ACW Chamber 5 Level HiHi Switch Tripped (Red When Tripped Please) NaHSO3 Flow Rate none 0 0 1
96 m106a_vfd_active h2o2_chemical_rate ek_facility default periodic BIT INT 0 0 M106A_VFD:I.Active Chemical_Pump_1_Rate ro M-106A Run Status none 0 0 1
97 m106a_vfd_faulted_alm li_103D_level_alm ek_facility default periodic BIT 0 M106A_VFD:I.Faulted LI_103D_FBK ro M-106A Fault Status ACW Containment Level Tripped (Red When Tripped Please) none 0 0 1
98 m106a_vfd_frequency lit_101_level ek_facility default periodic INT FLOAT 0 M106A_VFD:I.OutputFreq LIT_101.Scaled_Out 2 ro M-106A Current Output Frequency Chamber 5 Skim Level In Weir none 0 1
99 m106a_vfd_start lit_112a_h2o2_level ek_facility default periodic BIT FLOAT 0 M106A_VFD:O.Start LIT_112A.Scaled_Out 2 ro M-106A Start Command H2O2 Chemical Level none 0 0 1
100 m106a_vfd_stop lit_112b_nahso3_level ek_facility default periodic BIT FLOAT 0 M106A_VFD:O.Stop LIT_112B.Scaled_Out 2 ro M-106A Stop Command NaHSO3 Chemical Level none 0 0 1
101 m106b_vfd_active lit_116a_hi_alm ek_facility default periodic BIT 0 M106B_VFD:I.Active LIT_116A.AH ro M-106B Run Status none 0 0 1
102 m106b_vfd_faulted_alm lit_116a_hihi_alm ek_facility default periodic BIT 0 M106B_VFD:I.Faulted LIT_116A.AHH ro M-106B Fault Status none 0 0 1
103 m106b_vfd_frequency lit_116a_level ek_facility default periodic INT FLOAT 0 M106B_VFD:I.OutputFreq LIT_116A.Scaled_Out 2 ro M-106B Current Output Frequency none 0 1
104 m106b_vfd_start lit_116b_hi_alm ek_facility default periodic BIT 0 M106B_VFD:O.Start LIT_116B.AH ro M-106B Start Command none 0 0 1
105 m106b_vfd_stop lit_116b_hihi_alm ek_facility default periodic BIT 0 M106B_VFD:O.Stop LIT_116B.AHH ro M-106B Stop Command none 0 0 1
106 n2_inlet_pressure lit_116b_level ek_facility default periodic FLOAT Val_N2_Inlet_PSI LIT_116B.Scaled_Out 2 ro none 0 1
107 n2_outlet_flow_rate lit_170_hihi_alm ek_facility default periodic FLOAT BIT 0 Val_N2_Outlet_Flow_Rate LIT_170.AHH 2 ro none 0 0 1
108 n2_outlet_pressure lit_170_level ek_facility default periodic FLOAT Val_ N2_Outlet_ PSI LIT_170.Scaled_Out 2 ro Chamber 5 Level GWR none 0 1
109 n2_outlet_temp lit_200_hihi_alm ek_facility default periodic FLOAT BIT 0 Val_N2_Outlet_Temp LIT_200.AHH 2 ro none 0 0 1
110 n2_purity lit_200_level ek_facility default periodic FLOAT Val_N2_N2_Purity LIT_200.Scaled_Out 2 ro Chamber 5 Level DP none 0 1
111 p100_auto lsh_114_alm ek_facility default periodic BIT 0 P100_Auto LSH_114.ALARM ro M-104 Onyx Pump HOA Auto Status none 0 0 1
112 p100_hand lsh_120_alm ek_facility default periodic BIT 0 P100_Hand LSH-120.ALARM ro M-104 Onyx Pump HOA Hand Status none 0 0 1
113 p200_auto lsh_120_hihi_alm ek_facility default periodic BIT 0 P200_Auto LSH_120 ro M-105 Skim Pump HOA Hand Status ACW Chamber 5 Level HiHi Switch Tripped (Red When Tripped Please) none 0 0 1
114 p200_hand m106a_vfd_active ek_facility default periodic BIT 0 P200_Hand M106A_VFD:I.Active ro M-105 Skim Pump HOA Auto Status M-106A Run Status none 0 0 1
115 pdi_065_hihi_alm m106a_vfd_faulted_alm ek_facility default periodic BIT 0 PDI_065.AHH M106A_VFD:I.Faulted ro M-106A Fault Status none 0 0 1
116 pdi_065_lo_alm m106a_vfd_frequency ek_facility default periodic BIT INT 0 0 PDI_065.AL M106A_VFD:I.OutputFreq ro M-106A Current Output Frequency none 0 0 1
117 pdi_065_lolo_alm m106a_vfd_start ek_facility default periodic BIT 0 PDI_065.ALL M106A_VFD:O.Start ro M-106A Start Command none 0 0 1
118 pdi_065_pressure m106a_vfd_stop ek_facility default periodic FLOAT BIT 0 PDI_065.AI_Scaled M106A_VFD:O.Stop 2 ro M-104 Onyx Pump Discharge PSI M-106A Stop Command none 0 0 1
119 pdt_108a_hi_alm m106b_vfd_active ek_facility default periodic BIT 0 PDT_108A.AH M106B_VFD:I.Active ro Sock Filter High Differential PSI M-106B Run Status none 0 0 1
120 pdt_108a_hihi_alm m106b_vfd_faulted_alm ek_facility default periodic BIT 0 PDT_108A.AHH M106B_VFD:I.Faulted ro Sock Filter High High Differential PSI M-106B Fault Status none 0 0 1
121 pdt_108b_hi_alm m106b_vfd_frequency ek_facility default periodic BIT INT 0 0 PDT_108B.AH M106B_VFD:I.OutputFreq ro Cartrige Filter #1 High Differential PSI M-106B Current Output Frequency none 0 0 1
122 pdt_108b_hihi_alm m106b_vfd_start ek_facility default periodic BIT 0 PDT_108B.AHH M106B_VFD:O.Start ro Cartrige Filter #1 High High Differential PSI M-106B Start Command none 0 0 1
123 pdt_108b_pressure m106b_vfd_stop ek_facility default periodic FLOAT BIT 0 PDT_108B.AI_Scaled M106B_VFD:O.Stop 2 ro M-106B Stop Command none 0 0 1
124 pdt_108c_hi_alm n2_inlet_pressure ek_facility default periodic BIT FLOAT 0 PDT_108C.AH Val_N2_Inlet_PSI 2 ro Cartrige Filter #2 High Differential PSI none 0 0 1
125 pdt_108c_hihi_alm n2_outlet_flow_rate ek_facility default periodic BIT FLOAT 0 PDT_108C.AHH Val_N2_Outlet_Flow_Rate 2 ro Cartrige Filter #2 High High Differential PSI none 0 0 1
126 pdt_108c_pressure n2_outlet_pressure ek_facility default periodic FLOAT PDT_108C.AI_Scaled Val_ N2_Outlet_ PSI 2 ro Differential PSI Across Cartrige Filter #2 none 0 1
127 pit_050_hihi_alm n2_outlet_temp ek_facility default periodic BIT FLOAT 0 PIT_050.AHH Val_N2_Outlet_Temp 2 ro none 0 0 1
128 pit_050_pressure n2_purity ek_facility default periodic FLOAT PIT_050.Scaled_Out Val_N2_N2_Purity 2 ro PIT-104A Onyx Pump Suction PSI none 0 1
129 pit_065_hihi_alm p100_auto ek_facility default periodic BIT 0 PIT_065.AHH P100_Auto ro M-104 Onyx Pump HOA Auto Status none 0 0 1
130 pit_065_pressure p100_hand ek_facility default periodic FLOAT BIT 0 PIT_065.Scaled_Out P100_Hand 2 ro PIT_104D Onyx Pump Discharge PSI M-104 Onyx Pump HOA Hand Status none 0 0 1
131 pit_100_hihi_alm p200_auto ek_facility default periodic BIT 0 PIT_100.AHH P200_Auto ro M-105 Skim Pump HOA Hand Status none 0 0 1
132 pit_100_pressure p200_hand ek_facility default periodic FLOAT BIT 0 PIT_100.Scaled_Out P200_Hand 2 ro M-105 Skim Pump Discharge PSI M-105 Skim Pump HOA Auto Status none 0 0 1
133 pit_100a_pressure pdi_065_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_100A.Scaled_Out PDI_065.AHH 2 ro psi Inlet PSI External To ACW none 0 0 1
134 pit_101a_hi_alm pdi_065_lo_alm ek_facility default periodic BIT 0 PIT_101A.AH PDI_065.AL ro none 0 0 1
135 pit_101a_hihi_alm pdi_065_lolo_alm ek_facility default periodic BIT 0 PIT_101A.AHH PDI_065.ALL ro none 0 0 1
136 pit_101a_pressure pdi_065_pressure ek_facility default periodic FLOAT PIT_101A.Scaled_Out PDI_065.AI_Scaled 2 ro psi Inlet PSI Internal To ACW, Before SDV-101A M-104 Onyx Pump Discharge PSI none 0 1
137 pit_101a_transmitter_alm pdt_108a_hi_alm ek_facility default periodic BIT 0 PIT_101A.XFail PDT_108A.AH ro Sock Filter High Differential PSI none 0 0 1
138 pit_101b_hi_alm pdt_108a_hihi_alm ek_facility default periodic BIT 0 PIT_P101B.AH PDT_108A.AHH ro Sock Filter High High Differential PSI none 0 0 1
139 pit_101b_hihi_alm pdt_108b_hi_alm ek_facility default periodic BIT 0 PIT_101B.AHH PDT_108B.AH ro Cartrige Filter #1 High Differential PSI none 0 0 1
140 pit_101b_pressure pdt_108b_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_101B.Scaled_Out PDT_108B.AHH 2 ro psi Inlet PSI Internal To ACW, After SDV-101A Cartrige Filter #1 High High Differential PSI none 0 0 1
141 pit_101b_transmitter_alm pdt_108b_pressure ek_facility default periodic BIT FLOAT 0 PIT_101B.XFail PDT_108B.AI_Scaled 2 ro none 0 0 1
142 pit_101c_pressure pdt_108c_hi_alm ek_facility default periodic FLOAT BIT 0 PIT_101C.Scaled_Out PDT_108C.AH 2 ro psi Reject Stream PSI Cartrige Filter #2 High Differential PSI none 0 0 1
143 pit_102_hi_alm pdt_108c_hihi_alm ek_facility default periodic BIT 0 PIT_102.AH PDT_108C.AHH ro Indicated if PIT102 is in Hi alarm state Cartrige Filter #2 High High Differential PSI none 0 0 1
144 pit_102_hi_spt pdt_108c_pressure ek_facility default periodic BIT FLOAT 0 PIT_102.AH_SP PDT_108C.AI_Scaled 2 ro PIT_102 Hi Alarm Setpoint, If needed Differential PSI Across Cartrige Filter #2 none 0 0 1
145 pit_102_hihi_alm pit_050_hihi_alm ek_facility default periodic BIT 0 PIT_102.AHH PIT_050.AHH ro Indicates if PIT102 is in HiHi alarm state none 0 0 1
146 pit_102_hihi_spt pit_050_pressure ek_facility default periodic BIT FLOAT 0 PIT_102.AHH_SP PIT_050.Scaled_Out 2 ro PIT_102 HiHi Alarm Setpoint If Needed PIT-104A Onyx Pump Suction PSI none 0 0 1
147 pit_102_pressure pit_065_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_102.Scaled_Out PIT_065.AHH 2 ro Inlet PSI To Reaction Tank none 0 0 1
148 pit_106a_hihi_alm pit_065_pressure ek_facility default periodic BIT FLOAT 0 PIT_106A.AHH PIT_065.Scaled_Out 2 ro PIT_104D Onyx Pump Discharge PSI none 0 0 1
149 pit_106a_pressure pit_100_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_106A.Scaled_Out PIT_100.AHH 2 ro M-106A Discharge PSI none 0 0 1
150 pit_106b_hihi_alm pit_100_pressure ek_facility default periodic BIT FLOAT 0 PIT_106B.AHH PIT_100.Scaled_Out 2 ro M-105 Skim Pump Discharge PSI none 0 0 1
151 pit_106b_pressure pit_100a_pressure ek_facility default periodic FLOAT PIT_106B.Scaled_Out PIT_100A.Scaled_Out 2 ro psi M-106B Discharge PSI Inlet PSI External To ACW none 0 1
152 pit_106c_pressure pit_101a_hi_alm ek_facility default periodic FLOAT BIT 0 PIT_106C.Scaled_Out PIT_101A.AH 2 ro Reject Stream Discharge Header PSI, Pre SDV 106 none 0 0 1
153 pit_106d_pressure pit_101a_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_106D.Scaled_Out PIT_101A.AHH 2 ro Reject Stream Discharge Header PSI, Post SDV106 none 0 0 1
154 pit_107a_lolo_alm pit_101a_pressure ek_facility default periodic BIT FLOAT 0 PIT_107A.ALL PIT_101A.Scaled_Out 2 ro psi Inlet PSI Internal To ACW, Before SDV-101A none 0 0 1
155 pit_107a_pressure pit_101a_transmitter_alm ek_facility default periodic FLOAT BIT 0 PIT_107A.Scaled_Out PIT_101A.XFail 2 ro M107A & M107B Suction Header PSI none 0 0 1
156 pit_107b_lolo_alm pit_101b_hi_alm ek_facility default periodic BIT 0 PIT_107B.ALL PIT_P101B.AH ro none 0 0 1
157 pit_107b_pressure pit_101b_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_107B.Scaled_Out PIT_101B.AHH 2 ro M107A Discharge PSI none 0 0 1
158 pit_107c_pressure pit_101b_pressure ek_facility default periodic FLOAT PIT_107C.Scaled_Out PIT_101B.Scaled_Out 2 ro psi M107A and M107B Discharge Flow Line PSI Inlet PSI Internal To ACW, After SDV-101A none 0 1
159 pit_107d_pressure pit_101b_transmitter_alm ek_facility default periodic FLOAT BIT 0 PIT_107D.Scaled_Out PIT_101B.XFail 2 ro M107B Discharge PSI none 0 0 1
160 pit_108_pressure pit_101c_pressure ek_facility default periodic FLOAT PIT_108G.Scaled_Out PIT_101C.Scaled_Out 2 ro psi Post Filter Flow Line PSI Reject Stream PSI none 0 1
161 pit_108a_hihi_alm pit_102_hi_alm ek_facility default periodic BIT 0 PIT_108A.AHH PIT_102.AH ro Indicated if PIT102 is in Hi alarm state none 0 0 1
162 pit_108a_pressure pit_102_hi_spt ek_facility default periodic FLOAT BIT 0 PIT_108A.Scaled_Out PIT_102.AH_SP 2 ro Pre Sock Filter PSI PIT_102 Hi Alarm Setpoint, If needed none 0 0 1
163 pit_108b_hihi_alm pit_102_hihi_alm ek_facility default periodic BIT 0 PIT_108B.AHH PIT_102.AHH ro Indicates if PIT102 is in HiHi alarm state none 0 0 1
164 pit_108b_pressure pit_102_hihi_spt ek_facility default periodic FLOAT BIT 0 PIT_108B.Scaled_Out PIT_102.AHH_SP 2 ro Post Sock Filter PSI PIT_102 HiHi Alarm Setpoint If Needed none 0 0 1
165 pit_108c_hihi_alm pit_102_pressure ek_facility default periodic BIT FLOAT 0 PIT_108C.AHH PIT_102.Scaled_Out 2 ro Inlet PSI To Reaction Tank none 0 0 1
166 pit_108c_pressure pit_106a_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_108C.Scaled_Out PIT_106A.AHH 2 ro Pre Cartrige Filter #1 PSI none 0 0 1
167 pit_108d_pressure pit_106a_pressure ek_facility default periodic FLOAT PIT_108D.Scaled_Out PIT_106A.Scaled_Out 2 ro Post Cartrige Filter #1 PSI M-106A Discharge PSI none 0 1
168 pit_108e_pressure pit_106b_hihi_alm ek_facility default periodic FLOAT BIT 0 PIT_108E.Scaled_Out PIT_106B.AHH 2 ro Pre Cartrige Filter #2 PSI none 0 0 1
169 pit_108f_pressure pit_106b_pressure ek_facility default periodic FLOAT PIT_108F.Scaled_Out PIT_106B.Scaled_Out 2 ro Post Cartrige Filter #2 PSI M-106B Discharge PSI none 0 1
170 pit_108g_hihi_alm pit_106c_pressure ek_facility default periodic BIT FLOAT 0 PIT_108G.AHH PIT_106C.Scaled_Out 2 ro Reject Stream Discharge Header PSI, Pre SDV 106 none 0 0 1
171 pit_110_hihi_alm pit_106d_pressure ek_facility default periodic BIT FLOAT 0 PIT_110.AHH PIT_106D.Scaled_Out 2 ro Reject Stream Discharge Header PSI, Post SDV106 none 0 0 1
172 pit_110_pressure pit_107a_lolo_alm ek_facility default periodic FLOAT BIT 0 PIT_110.Scaled_Out PIT_107A.ALL 2 ro PIT_103 ACW Vapor Space Pressure none 0 0 1
173 pit_111a_hihi_alm pit_107a_pressure ek_facility default periodic BIT FLOAT 0 PIT_111A.AHH PIT_107A.Scaled_Out 2 ro M107A & M107B Suction Header PSI none 0 0 1
174 pit_111a_n2 pit_107b_lolo_alm ek_facility default periodic FLOAT BIT 0 PIT_111A.Scaled_Out PIT_107B.ALL 2 ro N2 System PSI none 0 0 1
175 pit_111b_hihi_alm pit_107b_pressure ek_facility default periodic BIT FLOAT 0 PIT_111B.AHH PIT_107B.Scaled_Out 2 ro M107A Discharge PSI none 0 0 1
176 pit_111b_n2 pit_107c_pressure ek_facility default periodic FLOAT PIT_111B.Scaled_Out PIT_107C.Scaled_Out 2 ro Inlet Skid N2 PSI M107A and M107B Discharge Flow Line PSI none 0 1
177 pit_111c_hihi_alm pit_107d_pressure ek_facility default periodic BIT FLOAT 0 PIT_111C.AHH PIT_107D.Scaled_Out 2 ro M107B Discharge PSI none 0 0 1
178 pit_111c_n2 pit_108_pressure ek_facility default periodic FLOAT PIT_111C.Scaled_Out PIT_108G.Scaled_Out 2 ro N2 Outlet Skid PSI Post Filter Flow Line PSI none 0 1
179 pnl_esd_alm pit_108a_hihi_alm ek_facility default periodic BIT 0 PNL_ESD.ALARM PIT_108A.AHH ro none 0 0 1
180 rmt_sd_alm pit_108a_pressure ek_facility default periodic BIT FLOAT 0 RMT_SD.ALARM PIT_108A.Scaled_Out 2 ro Pre Sock Filter PSI none 0 0 1
181 scada_stop_cmd pit_108b_hihi_alm ek_facility default periodic BIT 0 CMD_Scada_Stop PIT_108B.AHH rw ro none 0 0 1
182 sdv_101a pit_108b_pressure ek_facility default periodic INT FLOAT 1 7 0 Local:12:I.Data PIT_108B.Scaled_Out 2 ro Post Sock Filter PSI none 0 0 1
183 sdv106_closed pit_108c_hihi_alm ek_facility default periodic BIT 0 SDV106_Closed_FBK PIT_108C.AHH ro SDV106 Closed Feedback Status none 0 0 1
184 sdv106_open pit_108c_pressure ek_facility default periodic BIT FLOAT 0 SDV106_Open_FBK PIT_108C.Scaled_Out 2 ro SDV106 Open Feedback Status Pre Cartrige Filter #1 PSI none 0 0 1
185 skim_total_barrels pit_108d_pressure ek_facility default periodic FLOAT SKIM_TOTAL_BARRELS PIT_108D.Scaled_Out 2 ro Post Cartrige Filter #1 PSI none 0 1
186 spt_chemical_manual_rate pit_108e_pressure ek_facility default periodic FLOAT SPT_Chemical_Manual_Rate PIT_108E.Scaled_Out 2 ro Pre Cartrige Filter #2 PSI none 0 1
187 xy_100_run pit_108f_pressure ek_facility default periodic BIT FLOAT 0 XY_100 PIT_108F.Scaled_Out 2 ro Post Cartrige Filter #2 PSI none 0 0 1
188 xy_200_run pit_108g_hihi_alm ek_facility default periodic BIT 0 XY_200 PIT_108G.AHH ro M-105 Run Command none 0 0 1
189 zae_111a_hihi_alm pit_110_hihi_alm ek_facility default periodic BIT 0 ZAE_111A.AHH PIT_110.AHH ro none 0 0 1
190 zae_111b_hihi_alm pit_110_pressure ek_facility default periodic BIT FLOAT 0 ZAE_111B.AHH PIT_110.Scaled_Out 2 ro PIT_103 ACW Vapor Space Pressure none 0 0 1
191 pit_111a_hihi_alm ek_facility default periodic BIT 0 PIT_111A.AHH ro none 0 1
192 pit_111a_n2 ek_facility default periodic FLOAT PIT_111A.Scaled_Out 2 ro N2 System PSI none 1
193 pit_111b_hihi_alm ek_facility default periodic BIT 0 PIT_111B.AHH ro none 0 1
194 pit_111b_n2 ek_facility default periodic FLOAT PIT_111B.Scaled_Out 2 ro Inlet Skid N2 PSI none 1
195 pit_111c_hihi_alm ek_facility default periodic BIT 0 PIT_111C.AHH ro none 0 1
196 pit_111c_n2 ek_facility default periodic FLOAT PIT_111C.Scaled_Out 2 ro N2 Outlet Skid PSI none 1
197 pnl_esd_alm ek_facility default periodic BIT 0 PNL_ESD.ALARM ro none 0 1
198 psd_alm ek_facility default periodic BIT 0 CMD_PSD ro none 0 1
199 rmt_sd_alm ek_facility default periodic BIT 0 RMT_SD.ALARM ro none 0 1
200 scada_stop_cmd ek_facility default periodic BIT 0 CMD_Scada_Stop rw none 0 1
201 sdv_101a ek_facility default periodic INT 1 7 0 Local:12:I.Data ro none 0 1
202 sdv106_closed ek_facility default periodic BIT 0 SDV106_Closed_FBK ro SDV106 Closed Feedback Status none 0 1
203 sdv106_open ek_facility default periodic BIT 0 SDV106_Open_FBK ro SDV106 Open Feedback Status none 0 1
204 skim_total_barrels ek_facility default periodic FLOAT SKIM_TOTAL_BARRELS 2 ro none 1
205 spt_chemical_manual_rate ek_facility default periodic FLOAT SPT_Chemical_Manual_Rate 2 ro none 1
206 xy_100_run ek_facility default periodic BIT 0 XY_100 ro none 0 1
207 xy_200_run ek_facility default periodic BIT 0 XY_200 ro M-105 Run Command none 0 1
208 zae_111a_hihi_alm ek_facility default periodic BIT 0 ZAE_111A.AHH ro none 0 1
209 zae_111b_hihi_alm ek_facility default periodic BIT 0 ZAE_111B.AHH ro none 0 1
210 inlet_ph_temp ek_facility default periodic FLOAT Val_Inlet_PH_Temp 2 ro none 1
211 inlet_turbidity_temp ek_facility default periodic FLOAT Val_Inlet_Turbidity_Temp 2 ro none 1
212 outlet_orp_temp ek_facility default periodic FLOAT Val_Outlet_ORP_Temp 2 ro none 1
213 outlet_turbidity_temp ek_facility default periodic FLOAT Val_Outlet_Turbidity_Temp 2 ro none 1

View File

@@ -0,0 +1,27 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
discharge_in,AA_Transfer,default,periodic,,FLOAT,,,,,DisPSI_In,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
discharge_out,AA_Transfer,default,periodic,,FLOAT,,,,,DisPSI_Out,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
discharge_hi_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_DisPSI_Hi,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
discharge_lo_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_DisPSI_Lo,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
discharge_hi_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_DisPSI_Hi,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
discharge_lo_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_DisPSI_Lo,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
alarm_enable_cmd,AA_Transfer,default,periodic,,INT,,0,,,Alarm_Enable,,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
aa_flow_rate,AA_Transfer,default,periodic,,FLOAT,,,,,Flow_Rate_AA,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
aa_totalizer_1,AA_Transfer,default,periodic,,FLOAT,,,,,Totalizer_1_AA,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
flow_rate_hi_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_FlowRate_Hi,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
flow_rate_lo_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_FlowRate_Lo,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
flow_rate_hi_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_FlowRate_Hi,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
flow_rate_lo_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_FlowRate_Lo,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pond_level,AA_Transfer,default,periodic,,FLOAT,,,,,PondLvl,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
pond_level_hi_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_PondLvl_Hi,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
pond_level_lo_spt,AA_Transfer,default,periodic,,FLOAT,,,,,AlarmSpt_PondLvl_Lo,2,,rw,,,none,,,,,,,,,,,,,,,1,,,,,,,
pond_level_hi_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_PondLvl_Hi,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
pond_level_lo_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_Pondlvl_Lo,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
power_loss_120v_alm,AA_Transfer,default,periodic,,BIT,,,,0,Alarm_PowerLoss_120V,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
vfd_ready,AA_Transfer,default,periodic,,BIT,,,,0,VFD_Ready,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
vfd_warning,AA_Transfer,default,periodic,,BIT,,,,0,VFD_Warning,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
vfd_faulted,AA_Transfer,default,periodic,,BIT,,,,0,VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
vfd_running,AA_Transfer,default,periodic,,BIT,,,,0,VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,1,,,,,,,
vfd_frequency_reference,AA_Transfer,default,periodic,,FLOAT,,,,,VFD_Freq_Ref,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
vfd_frequency_output,AA_Transfer,default,periodic,,FLOAT,,,,,VFD_Output_Freq,2,,ro,,,none,,,,,,,,,,,,,,,1,,,,,,,
vfd_start_stop,AA_Transfer,default,periodic,,BIT,,,,0,VFD_Start_Stop_Pushbutton,,,rw,,,none,,,,,,,,,,,,,0,,1,,,,,,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId
2 discharge_in AA_Transfer default periodic FLOAT DisPSI_In 2 ro none 1
3 discharge_out AA_Transfer default periodic FLOAT DisPSI_Out 2 ro none 1
4 discharge_hi_spt AA_Transfer default periodic FLOAT AlarmSpt_DisPSI_Hi 2 rw none 1
5 discharge_lo_spt AA_Transfer default periodic FLOAT AlarmSpt_DisPSI_Lo 2 rw none 1
6 discharge_hi_alm AA_Transfer default periodic BIT 0 Alarm_DisPSI_Hi ro none 0 1
7 discharge_lo_alm AA_Transfer default periodic BIT 0 Alarm_DisPSI_Lo ro none 0 1
8 alarm_enable_cmd AA_Transfer default periodic INT 0 Alarm_Enable rw none 1
9 aa_flow_rate AA_Transfer default periodic FLOAT Flow_Rate_AA 2 ro none 1
10 aa_totalizer_1 AA_Transfer default periodic FLOAT Totalizer_1_AA 2 ro none 1
11 flow_rate_hi_spt AA_Transfer default periodic FLOAT AlarmSpt_FlowRate_Hi 2 rw none 1
12 flow_rate_lo_spt AA_Transfer default periodic FLOAT AlarmSpt_FlowRate_Lo 2 rw none 1
13 flow_rate_hi_alm AA_Transfer default periodic BIT 0 Alarm_FlowRate_Hi ro none 0 1
14 flow_rate_lo_alm AA_Transfer default periodic BIT 0 Alarm_FlowRate_Lo ro none 0 1
15 pond_level AA_Transfer default periodic FLOAT PondLvl 2 ro none 1
16 pond_level_hi_spt AA_Transfer default periodic FLOAT AlarmSpt_PondLvl_Hi 2 rw none 1
17 pond_level_lo_spt AA_Transfer default periodic FLOAT AlarmSpt_PondLvl_Lo 2 rw none 1
18 pond_level_hi_alm AA_Transfer default periodic BIT 0 Alarm_PondLvl_Hi ro none 0 1
19 pond_level_lo_alm AA_Transfer default periodic BIT 0 Alarm_Pondlvl_Lo ro none 0 1
20 power_loss_120v_alm AA_Transfer default periodic BIT 0 Alarm_PowerLoss_120V ro none 0 1
21 vfd_ready AA_Transfer default periodic BIT 0 VFD_Ready ro none 0 1
22 vfd_warning AA_Transfer default periodic BIT 0 VFD_Warning ro none 0 1
23 vfd_faulted AA_Transfer default periodic BIT 0 VFD_Faulted ro none 0 1
24 vfd_running AA_Transfer default periodic BIT 0 VFD_Running ro none 0 1
25 vfd_frequency_reference AA_Transfer default periodic FLOAT VFD_Freq_Ref 2 ro none 1
26 vfd_frequency_output AA_Transfer default periodic FLOAT VFD_Output_Freq 2 ro none 1
27 vfd_start_stop AA_Transfer default periodic BIT 0 VFD_Start_Stop_Pushbutton rw none 0 1

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,292 @@
# Enter your python code.
import json, os, time
from datetime import datetime as dt
from common.Logger import logger
from quickfaas.remotebus import publish
from quickfaas.global_dict import get as get_params
from quickfaas.global_dict import _set_global_args
def chunk_payload(payload, chunk_size=20, is_attributes_payload=False):
if is_attributes_payload:
# For attributes payload, chunk the controllers
controllers = list(payload.items())
for i in range(0, len(controllers), chunk_size):
yield dict(controllers[i:i + chunk_size])
else:
# For data payload, chunk the values within each controller
for controller, data in payload.items():
for entry in data:
ts = entry['ts']
values = entry['values']
chunked_values = list(values.items())
for i in range(0, len(chunked_values), chunk_size):
yield {
controller:[
{
"ts": ts,
"values": dict(chunked_values[i:i + chunk_size])}
]
}
def sendData(message):
#logger.info(message)
# Extract measures and group by ctrlName
grouped_data = {}
grouped_attributes = {}
now = (round(dt.timestamp(dt.now())/600)*600)*1000
resetPayload = {"ts": "", "values": {}}
dayReset, weekReset, monthReset, yearReset = False, False, False, False
for measure in message['measures']:
ctrlName = " ".join(measure['ctrlName'].split("_"))
name = measure['name']
value = measure['value']
health = measure['health']
#Add controller for telemetry if it doesn't exist
if ctrlName not in grouped_data:
grouped_data[ctrlName] = {}
#Add controller for attributes if it doesn't exist
if ctrlName not in grouped_attributes:
grouped_attributes[ctrlName] = {}
#Add data to temp payload if datapoint health is good
if health:
if "_spt" in name:
grouped_attributes[ctrlName][name] = value
elif "totalizer_1" in name:
grouped_data[ctrlName]["day_volume"], dayReset = totalizeDay(value)
grouped_data[ctrlName]["week_volume"], weekReset = totalizeWeek(value)
grouped_data[ctrlName]["month_volume"], monthReset = totalizeMonth(value)
grouped_data[ctrlName]["year_volume"], yearReset = totalizeYear(value)
elif name == "alarm_enable_cmd":
gatewayData = {"ts": now, "values": {name: value, "connected": True}}
grouped_data[ctrlName][name] = value
grouped_attributes[ctrlName]["latestReportTime"] = now
#logger.info(grouped_data)
# Transform the grouped data to desired structure
payload = {}
for key, value in grouped_data.items():
if value:
payload[key] = [{"ts": now ,"values": value}]
attributes_payload = {}
for key, value in grouped_attributes.items():
if value:
attributes_payload[key] = value
if dayReset:
logger.info("MADE IT TO DAY RESET")
resetPayload["values"]["yesterday_volume"] = payload["values"]["day_volume"]
resetPayload["values"]["day_volume"] = 0
if weekReset:
resetPayload["values"]["last_week_volume"] = payload["values"]["week_volume"]
resetPayload["values"]["week_volume"] = 0
if monthReset:
resetPayload["values"]["last_month_volume"] = payload["values"]["month_volume"]
resetPayload["values"]["month_volume"] = 0
if yearReset:
resetPayload["values"]["last_year_volume"] = payload["values"]["year_volume"]
resetPayload["values"]["year_volume"] = 0
if resetPayload["values"]:
logger.info("MADE IT TO APPEND RESET")
payload["AA Transfer"].append({"ts": now + 1000 ,"values": resetPayload["values"]})
logger.info(json.dumps(payload, indent=4))
#logger.info(json.dumps(payload, indent=4))
#logger.debug(payload)
#publish(__topic__, json.dumps(payload), __qos__,cloud_name="default")
publish("v1/gateway/attributes", json.dumps(attributes_payload), __qos__,cloud_name="default")
publish("v1/devices/me/telemetry", json.dumps(gatewayData), __qos__, cloud_name="default")
for chunk in chunk_payload(payload=payload):
publish(__topic__, json.dumps(chunk), __qos__, cloud_name="default")
#logger.info(json.dumps(chunk, indent=4))
time.sleep(2)
"""
for chunk in chunk_payload(payload=attributes_payload, is_attributes_payload=True):
publish("v1/gateway/attributes", json.dumps(chunk), __qos__, cloud_name="default")
logger.info(json.dumps(chunk, indent=4))
time.sleep(2)
"""
def initialize_totalizers():
return {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
def getTotalizers(file_path="/var/user/files/totalizers.json"):
"""
Retrieves totalizer data from a JSON file.
:param file_path: Path to the JSON file storing totalizer data.
:return: Dictionary containing totalizer values.
"""
try:
with open(file_path, "r") as t:
totalizers = json.load(t)
if not totalizers or not isinstance(totalizers, dict):
logger.info("Invalid data format in the file. Initializing totalizers.")
totalizers = initialize_totalizers()
except FileNotFoundError:
logger.info("File not found. Initializing totalizers.")
totalizers = initialize_totalizers()
except json.JSONDecodeError:
timestamp = dt.now().strftime("%Y%m%d_%H%M%S")
# Split the file path and insert the timestamp before the extension
file_name, file_extension = os.path.splitext(file_path)
backup_file_path = f"{file_name}_{timestamp}{file_extension}"
shutil.copyfile(file_path, backup_file_path)
logger.error(f"Error decoding JSON. A backup of the file is created at {backup_file_path}. Initializing totalizers.")
totalizers = initialize_totalizers()
return totalizers
def saveTotalizers(totalizers, file_path="/var/user/files/totalizers.json"):
"""
Saves totalizer data to a JSON file.
:param totalizers: Dictionary containing totalizer values to be saved.
:param file_path: Path to the JSON file where totalizer data will be saved.
"""
try:
with open(file_path, "w") as t:
json.dump(totalizers, t)
except (IOError, OSError, json.JSONEncodeError) as e:
logger.error(f"Error saving totalizers to {file_path}: {e}")
raise # Optionally re-raise the exception if it should be handled by the caller
def totalizeDay(lifetime, max_retries=3, retry_delay=2):
"""
Update and save daily totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["dayHolding"]
if not int(now.strftime("%d")) == int(totalizers["day"]):
totalizers["dayHolding"] = lifetime
totalizers["day"] = int(now.strftime("%d"))
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)
def totalizeWeek(lifetime, max_retries=3, retry_delay=2):
"""
Update and save weekly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["weekHolding"]
if (not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun") or totalizers["week"] == 0:
totalizers["weekHolding"] = lifetime
totalizers["week"] = now.strftime("%U")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)
def totalizeMonth(lifetime, max_retries=3, retry_delay=2):
"""
Update and save monthly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["monthHolding"]
if not int(now.strftime("%m")) == int(totalizers["month"]):
totalizers["monthHolding"] = lifetime
totalizers["month"] = now.strftime("%m")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value,reset)
def totalizeYear(lifetime, max_retries=3, retry_delay=2):
"""
Update and save yearly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["yearHolding"]
if not int(now.strftime("%Y")) == int(totalizers["year"]):
totalizers["yearHolding"] = lifetime
totalizers["year"] = now.strftime("%Y")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)

View File

@@ -0,0 +1,97 @@
import json, time
from datetime import datetime as dt
from quickfaas.measure import recall, write
from quickfaas.remotebus import publish
from common.Logger import logger
def chunk_payload(payload, chunk_size=20, is_attributes_payload=False):
if is_attributes_payload:
# For attributes payload, chunk the controllers
controllers = list(payload.items())
for i in range(0, len(controllers), chunk_size):
yield dict(controllers[i:i + chunk_size])
else:
# For data payload, chunk the values within each controller
for controller, data in payload.items():
for entry in data:
ts = entry['ts']
values = entry['values']
chunked_values = list(values.items())
for i in range(0, len(chunked_values), chunk_size):
yield {
controller:[
{
"ts": ts,
"values": dict(chunked_values[i:i + chunk_size])}
]
}
def sync():
#get new values and send
now = round(dt.timestamp(dt.now()))*1000
topic = "v1/gateway/telemetry"
try:
data = recall()#json.loads(recall().decode("utf-8"))
except Exception as e:
logger.error(e)
logger.debug(data)
logger.info("SYNCING")
grouped_data = {}
try:
for controller in data:
ctrlName = " ".join(controller['name'].split("_"))
for measure in controller["measures"]:
if ctrlName not in grouped_data:
grouped_data[ctrlName] = {}
if measure["health"]:
if measure["name"] == "alarm_enable_cmd":
gatewayPayload = {"ts": now, "values": {measure["name"]: measure["value"]}}
grouped_data[ctrlName][measure["name"]] = measure["value"]
except Exception as e:
logger.error(e)
try:
payload = {}
for key, value in grouped_data.items():
if value:
payload[key] = [{"ts": now ,"values": value}]
publish("v1/devices/me/telemetry", json.dumps(gatewayPayload), qos=1,cloud_name="default")
for chunk in chunk_payload(payload=payload):
publish(topic, json.dumps(chunk), qos=1, cloud_name="default")
logger.info(json.dumps(chunk, indent=4))
time.sleep(2)
except Exception as e:
logger.error(e)
def writeplctag(value):
#value in the form {"measurement": <measurement_name>, "value": <value to write>}
try:
#value = json.loads(value.replace("'",'"'))
logger.debug(value)
#payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}]
message = [{"name": "AA_Transfer", "measures":[{"name":value["measurement"], "value": value["value"]}]}]
resp = write(message)
logger.debug("RETURN FROM WRITE: {}".format(resp))
return True
except Exception as e:
logger.debug(e)
return False
def receiveAttributes(topic, payload):
try:
logger.debug(topic)
logger.debug(json.loads(payload))
p = json.loads(payload)
for key, value in p.items():
try:
result = writeplctag({"measurement":key, "value":value})
logger.debug(result)
except Exception as e:
logger.error(e)
#logger.debug(command)
sync()
except Exception as e:
logger.debug(e)

View File

@@ -0,0 +1,104 @@
import json, time
from datetime import datetime as dt
from quickfaas.measure import recall, write
from quickfaas.remotebus import publish
from common.Logger import logger
def chunk_payload(payload, chunk_size=20, is_attributes_payload=False):
if is_attributes_payload:
# For attributes payload, chunk the controllers
controllers = list(payload.items())
for i in range(0, len(controllers), chunk_size):
yield dict(controllers[i:i + chunk_size])
else:
# For data payload, chunk the values within each controller
for controller, data in payload.items():
for entry in data:
ts = entry['ts']
values = entry['values']
chunked_values = list(values.items())
for i in range(0, len(chunked_values), chunk_size):
yield {
controller:[
{
"ts": ts,
"values": dict(chunked_values[i:i + chunk_size])}
]
}
def sync():
#get new values and send
now = round(dt.timestamp(dt.now()))*1000
topic = "v1/gateway/telemetry"
try:
data = recall()#json.loads(recall().decode("utf-8"))
except Exception as e:
logger.error(e)
logger.debug(data)
logger.info("SYNCING")
grouped_data = {}
try:
for controller in data:
ctrlName = " ".join(controller['name'].split("_"))
for measure in controller["measures"]:
if ctrlName not in grouped_data:
grouped_data[ctrlName] = {}
if measure["health"]:
if measure["name"] == "alarm_enable_cmd":
gatewayPayload = {"ts": now, "values": {measure["name"]: measure["value"]}}
grouped_data[ctrlName][measure["name"]] = measure["value"]
except Exception as e:
logger.error(e)
try:
payload = {}
for key, value in grouped_data.items():
if value:
payload[key] = [{"ts": now ,"values": value}]
publish("v1/devices/me/telemetry", json.dumps(gatewayPayload), qos=1,cloud_name="default")
for chunk in chunk_payload(payload=payload):
publish(topic, json.dumps(chunk), qos=1, cloud_name="default")
logger.info(json.dumps(chunk, indent=4))
time.sleep(2)
except Exception as e:
logger.error(e)
def writeplctag(value):
#value in the form {"measurement": <measurement_name>, "value": <value to write>}
try:
logger.debug(value)
#payload format: [{"name": "advvfdipp", "measures": [{"name": "manualfrequencysetpoint", "value": 49}]}]
message = [{"name": value["entityName"], "measures":[{"name":value["measurement"], "value": value["value"]}]}]
resp = write(message)
logger.debug("RETURN FROM WRITE: {}".format(resp))
return True
except Exception as e:
logger.error(e)
return False
def receiveCommand(topic, payload):
try:
logger.debug(topic)
logger.debug(json.loads(payload))
p = json.loads(payload)
command = p["method"]
commands = {
"sync": sync,
"writeplctag": writeplctag,
}
if command == "setPLCTag":
try:
result = commands["writeplctag"](p["params"])
logger.debug(result)
except Exception as e:
logger.error(e)
ack(topic.split("/")[-1])
time.sleep(5)
sync()
except Exception as e:
logger.error(e)
def ack(msgid):
publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": time.time()}, "metadata": "", "msgType": ""}), 1, cloud_name="default")

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,515 @@
import json, os, time, math, uuid
from datetime import datetime as dt
from common.Logger import logger
from quickfaas.remotebus import publish
from quickfaas.global_dict import get as get_params
from quickfaas.global_dict import _set_global_args
class RuntimeStats:
def __init__(self):
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
def manageTime(self):
if self.todayString != dt.strftime(dt.today(), "%Y-%m-%d"):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.mktime(dt.strptime(self.todayString + " 23:59:59", "%Y-%m-%d %H:%M:%S").timetuple())
self.addDay()
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
days = list(self.runs.keys())
days.sort()
while (dt.strptime(days[-1],"%Y-%m-%d") - dt.strptime(days[0], "%Y-%m-%d")).days > 30:
self.removeDay(day=days[0])
days = list(self.runs.keys())
days.sort()
def addHertzDataPoint(self, frequency):
if frequency > 0:
self.manageTime()
try:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"].append(frequency)
except:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"] = [frequency]
def startRun(self):
if self.checkRunning():
self.endRun()
self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] = time.time()
def endRun(self):
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.time()
self.currentRun += 1
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def checkRunning(self):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
return True
return False
def addDay(self):
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
self.currentRun = 1
self.runs[self.todayString] = {}
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def countRunsDay(self, day=None):
if not day:
day = self.todayString
return len(self.runs[day].keys())
def countRunsMultiDay(self, numDays=30):
total_runs = 0
for day in list(self.runs.keys()):
total_runs += self.countRunsDay(day=day)
return total_runs
def calculateAverageHertzDay(self, day=None, returnArray=False):
dayFrequencies = []
if not day:
day = self.todayString
for run in list(self.runs[day].keys()):
try:
dayFrequencies += self.runs[day][run]["frequencies"]
except Exception as e:
print("{} missing frequency data for {}".format(day,run))
if returnArray:
return dayFrequencies
return round(math.fsum(dayFrequencies)/len(dayFrequencies),2)
def calculateAverageHertzMultiDay(self, numDays=30):
self.manageTime()
frequencies = []
for day in list(self.runs.keys()):
if not day == self.todayString and (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
try:
frequencies += self.calculateAverageHertzDay(day=day, returnArray=True)
except Exception as e:
print("{} missing frequency data".format(day))
if len(frequencies):
return round(math.fsum(frequencies)/len(frequencies), 2)
return 0
def calculateRunTimeDay(self, day=None, convertToHours=True):
total_time = 0
if not day:
day = self.todayString
for run in list(self.runs[day].keys()):
total_time = self.runs[day][run]["end"] - self.runs[day][run]["start"] + total_time
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunTimeMultiDay(self, numDays=30, convertToHours=True):
total_time = 0
for day in list(self.runs.keys()):
if not day == self.todayString and (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
total_time += self.calculateRunTimeDay(day=day, convertToHours=False)
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunPercentDay(self, day=None, precise=False):
if not day:
day = self.todayString
if precise:
return (self.calculateRunTimeDay(day=day)/24) * 100
return round((self.calculateRunTimeDay(day=day)/24) * 100, 2)
def calculateRunPercentMultiDay(self, numDays=30, precise=False):
self.manageTime()
if precise:
return (self.calculateRunTimeMultiDay()/(24*numDays)) * 100
return round((self.calculateRunTimeMultiDay()/(24*numDays)) * 100,2)
def removeDay(self, day=None):
if not day:
raise Exception("Day can not be None")
print("removing day {}".format(day))
del self.runs[day]
def convertSecondstoHours(self, seconds):
return round(seconds / (60*60),2)
def loadDataFromFile(self, filePath="/var/user/files/runtimestats.json"):
try:
with open(filePath, "r") as f:
temp = json.load(f)
self.runs = temp["data"]
self.currentRun = temp["current_run"]
self.today = dt.strptime(temp["current_day"], "%Y-%m-%d")
self.todayString = temp["current_day"]
self.manageTime()
except:
print("Could not find file at {}".format(filePath))
print("creating file")
self.addDay()
try:
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
print(e)
def saveDataToFile(self, filePath="/var/user/files/runtimestats.json"):
try:
print("Saving Runs")
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
print(e)
try:
rts_path = "/var/user/files/runtimestats_tb.json"
rts = RuntimeStats()
rts.loadDataFromFile(filePath=rts_path)
rts.saveDataToFile(filePath=rts_path)
except Exception as e:
logger.error(f"Error in TB start RTS: {e}" )
def reboot(reason="Rebooting for config file update"):
#basic = Basic()
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
logger.info(reason)
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
logger.info(f"REBOOT : {r}")
def checkFileExist(filename):
path = "/var/user/files"
if not os.path.exists(path):
logger.debug("no folder making files folder in var/user")
os.makedirs(path)
with open(path + "/" + filename, "a") as f:
json.dump({}, f)
if not os.path.exists(path + "/" + filename):
logger.debug("no creds file making creds file")
with open(path + "/" + filename, "a") as f:
json.dump({}, f)
def convertDStoJSON(ds):
j = dict()
for x in ds:
j[x["key"]] = x["value"]
return j
def convertJSONtoDS(j):
d = []
for key in j.keys():
d.append({"key": key, "value": j[key]})
return d
def checkCredentialConfig():
logger.debug("CHECKING CONFIG")
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
credspath = "/var/user/files/creds.json"
cfg = dict()
with open(cfgpath, "r") as f:
cfg = json.load(f)
clouds = cfg.get("clouds")
logger.debug(clouds)
#if not configured then try to configure from stored values
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
checkFileExist("creds.json")
with open(credspath, "r") as c:
creds = json.load(c)
if creds:
logger.debug("updating config with stored data")
clouds[0]["args"]["clientId"] = creds["clientId"]
clouds[0]["args"]["username"] = creds["userName"]
clouds[0]["args"]["passwd"] = creds["password"]
cfg["clouds"] = clouds
cfg = checkParameterConfig(cfg)
with open(cfgpath, "w", encoding='utf-8') as n:
json.dump(cfg, n, indent=1, ensure_ascii=False)
reboot()
else:
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
checkFileExist("creds.json")
with open(credspath, "r") as c:
logger.debug("updating stored file with new data")
cfg = checkParameterConfig(cfg)
with open(cfgpath, "w", encoding='utf-8') as n:
json.dump(cfg, n, indent=1, ensure_ascii=False)
creds = json.load(c)
if creds:
if creds["clientId"] != clouds[0]["args"]["clientId"]:
creds["clientId"] = clouds[0]["args"]["clientId"]
if creds["userName"] != clouds[0]["args"]["username"]:
creds["userName"] = clouds[0]["args"]["username"]
if creds["password"] != clouds[0]["args"]["passwd"]:
creds["password"] = clouds[0]["args"]["passwd"]
else:
creds["clientId"] = clouds[0]["args"]["clientId"]
creds["userName"] = clouds[0]["args"]["username"]
creds["password"] = clouds[0]["args"]["passwd"]
with open(credspath, "w") as cw:
json.dump(creds,cw)
def checkParameterConfig(cfg):
logger.debug("Checking Parameters!!!!")
paramspath = "/var/user/files/params.json"
cfgparams = convertDStoJSON(cfg.get("labels"))
#check stored values
checkFileExist("params.json")
with open(paramspath, "r") as f:
logger.debug("Opened param storage file")
params = json.load(f)
if params:
if cfgparams != params:
#go through each param
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
#if key in cfg but not in params copy to params
logger.debug("equalizing params between cfg and stored")
for key in cfgparams.keys():
try:
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
params[key] = cfgparams[key]
except:
params[key] = cfgparams[key]
cfg["labels"] = convertJSONtoDS(params)
_set_global_args(convertJSONtoDS(params))
with open(paramspath, "w") as p:
json.dump(params, p)
else:
with open(paramspath, "w") as p:
logger.debug("initializing param file with params in memory")
json.dump(convertDStoJSON(get_params()), p)
cfg["labels"] = get_params()
return cfg
# Helper function to split the payload into chunks
def chunk_payload(payload, chunk_size=20):
chunked_values = list(payload["values"].items())
for i in range(0, len(chunked_values), chunk_size):
yield {
"ts": payload["ts"],
"values": dict(chunked_values[i:i+chunk_size])
}
def sendData(message):
#logger.debug(message)
try:
checkCredentialConfig()
except Exception as e:
logger.error(e)
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
for measure in message["measures"]:
try:
logger.debug(measure)
if abs(payload["ts"]/1000 - measure["timestamp"]) > 3600:
reboot(reason="Poll timestamp and actual timestamp out of sync. Actual: {} Poll: {}".format(payload["ts"]/1000,measure["timestamp"]))
if measure["name"] in ["wellstatus","pidcontrolmode","downholesensorstatus","alarmflowrate","alarmintakepressure","alarmintaketemperature","alarmtubingpressure","alarmvfd","alarmlockout","alarmfluidlevel","runpermissive","startpermissive","last_vfd_fault_code","vfd_fault", "flowmeter_fault"]:
logger.debug("Converting DINT/BOOL to STRING")
value = convert_int(measure["name"], measure["value"])
logger.debug("Converted {} to {}".format(measure["value"], value))
payload["values"][measure["name"]] = value
payload["values"][measure["name"] + "_int"] = measure["value"]
else:
payload["values"][measure["name"]] = measure["value"]
if measure["name"] == "wellstatus":
if measure["value"] == 0 and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"]:
rts.startRun()
rts.saveDataToFile(filePath=rts_path)
elif measure["value"] > 0 and rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"] and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["end"]:
rts.endRun()
rts.saveDataToFile(filePath=rts_path)
logger.info(f"Adding {rts.calculateRunPercentMultiDay()} to payload as percentRunTime30Days")
payload["values"]["percentRunTime30Days"] = rts.calculateRunPercentMultiDay()
if measure["name"] == "vfdfrequency":
if measure["value"] > 0:
rts.addHertzDataPoint(measure["value"])
rts.saveDataToFile(filePath=rts_path)
logger.info(f"Adding {rts.calculateAverageHertzMultiDay()} to payload as avgFrequency30Days")
payload["values"]["avgFrequency30Days"] = rts.calculateAverageHertzMultiDay()
except Exception as e:
logger.error(e)
for chunk in chunk_payload(payload=payload):
publish(__topic__, json.dumps(chunk), __qos__, cloud_name="ThingsBoard")
time.sleep(2)
publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__, cloud_name="ThingsBoard")
def convert_int(plc_tag, value):
well_status_codes = {
0: "Running",
1: "Pumped Off",
2: "Alarmed",
3: "Locked Out",
4: "Stopped"
}
pid_control_codes = {
0: "Flow",
1: "Fluid Level",
2: "Tubing Pressure",
3: "Manual"
}
downhole_codes = {
0: "OK",
1: "Connecting",
2: "Open Circuit",
3: "Shorted",
4: "Cannot Decode"
}
permissive_codes = {
0: "OK",
1: "Flow",
2: "Intake Pressure",
3: "Intake Temperature",
4: "Tubing Pressure",
5: "VFD",
6: "Fluid Level",
7: "Min. Downtime"
}
alarm_codes = {
0: "OK",
1: "Alarm"
}
alarm_vfd_codes = {
0: "OK",
1: "Locked Out"
}
vfd_fault_codes = {
0: "No Fault",
2: "Auxiliary Input",
3: "Power Loss",
4: "UnderVoltage",
5: "OverVoltage",
7: "Motor Overload",
8: "Heatsink OverTemp",
9: "Thermister OverTemp",
10: "Dynamic Brake OverTemp",
12: "Hardware OverCurrent",
13: "Ground Fault",
14: "Ground Warning",
15: "Load Loss",
17: "Input Phase Loss",
18: "Motor PTC Trip",
19: "Task Overrun",
20: "Torque Prove Speed Band",
21: "Output Phase Loss",
24: "Decel Inhibit",
25: "OverSpeed Limit",
26: "Brake Slipped",
27: "Torque Prove Conflict",
28: "TP Encls Confict",
29: "Analog In Loss",
33: "Auto Restarts Exhausted",
35: "IPM OverCurrent",
36: "SW OverCurrent",
38: "Phase U to Ground",
39: "Phase V to Ground",
40: "Phase W to Ground",
41: "Phase UV Short",
42: "Phase VW Short",
43: "Phase WU Short",
44: "Phase UNeg to Ground",
45: "Phase VNeg to Ground",
46: "Phase WNeg to Ground",
48: "System Defaulted",
49: "Drive Powerup",
51: "Clear Fault Queue",
55: "Control Board Overtemp",
59: "Invalid Code",
61: "Shear Pin 1",
62: "Shear Pin 2",
64: "Drive Overload",
66: "OW Torque Level",
67: "Pump Off",
71: "Port 1 Adapter",
72: "Port 2 Adapter",
73: "Port 3 Adapter",
74: "Port 4 Adapter",
75: "Port 5 Adapter",
76: "Port 6 Adapter",
77: "IR Volts Range",
78: "FluxAmps Ref Range",
79: "Excessive Load",
80: "AutoTune Aborted",
81: "Port 1 DPI Loss",
82: "Port 2 DPI Loss",
83: "Port 3 DPI Loss",
84: "Port 4 DPI Loss",
85: "Port 5 DPI Loss",
86: "Port 6 DPI Loss",
87: "IXo Voltage Range",
91: "Primary Velocity Feedback Loss",
93: "Hardware Enable Check",
94: "Alternate Velocity Feedback Loss",
95: "Auxiliary Velocity Feedback Loss",
96: "Position Feedback Loss",
97: "Auto Tach Switch",
100: "Parameter Checksum",
101: "Power Down NVS Blank",
102: "NVS Not Blank",
103: "Power Down NVS Incompatible",
104: "Power Board Checksum",
106: "Incompat MCB-PB",
107: "Replaced MCB-PB",
108: "Analog Calibration Checksum",
110: "Invalid Power Board Data",
111: "Power Board Invalid ID",
112: "Power Board App Min Version",
113: "Tracking DataError",
115: "Power Down Table Full",
116: "Power Down Entry Too Large",
117: "Power Down Data Checksum",
118: "Power Board Power Down Checksum",
124: "App ID Changed",
125: "Using Backup App",
134: "Start on Power Up",
137: "External Precharge Error",
138: "Precharge Open",
141: "Autotune Enc Angle",
142: "Autotune Speed Restricted",
143: "Autotune Current Regulator",
144: "Autotune Inertia",
145: "Autotune Travel",
13035: "Net IO Timeout",
13037: "Net IO Timeout"
}
plc_tags = {
"wellstatus": well_status_codes.get(value, "Invalid Code"),
"pidcontrolmode": pid_control_codes.get(value, "Invalid Code"),
"downholesensorstatus": downhole_codes.get(value, "Invalid Code"),
"alarmflowrate": alarm_codes.get(value, "Invalid Code"),
"alarmintakepressure": alarm_codes.get(value, "Invalid Code"),
"alarmintaketemperature": alarm_codes.get(value, "Invalid Code"),
"alarmtubingpressure": alarm_codes.get(value, "Invalid Code"),
"alarmvfd": alarm_codes.get(value, "Invalid Code"),
"alarmlockout": alarm_vfd_codes.get(value, "Invalid Code"),
"alarmfluidlevel": alarm_codes.get(value, "Invalid Code"),
"runpermissive": permissive_codes.get(value, "Invalid Code"),
"startpermissive": permissive_codes.get(value, "Invalid Code"),
"last_vfd_fault_code": vfd_fault_codes.get(value, "Invalid Code"),
"vfd_fault": vfd_fault_codes.get(value, "Invalid Code"),
"flowmeter_fault": alarm_codes.get(value, "Invalid Code")
}
return plc_tags.get(plc_tag, "Invalid Tag")

Binary file not shown.

View File

@@ -1,4 +1,4 @@
import json, time
import json, time, os
from datetime import datetime as dt
from quickfaas.measure import recall, write
from quickfaas.remotebus import publish
@@ -48,7 +48,13 @@ def writeplctag(value):
except Exception as e:
logger.debug(e)
return False
def reboot():
#basic = Basic()
logger.info("!" * 10 + "REBOOTING DEVICE FROM CLOUD" + "!"*10)
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
logger.info(f"REBOOT : {r}")
def receiveCommand(topic, payload):
try:
logger.debug(topic)
@@ -58,6 +64,7 @@ def receiveCommand(topic, payload):
commands = {
"sync": sync,
"writeplctag": writeplctag,
"reboot": reboot
}
if command == "setPLCTag":
try:
@@ -65,6 +72,12 @@ def receiveCommand(topic, payload):
logger.debug(result)
except Exception as e:
logger.error(e)
elif command == "reboot":
try:
ack(topic.split("/")[-1])
commands["reboot"]()
except Exception as e:
logger.error(e)
#logger.debug(command)
ack(topic.split("/")[-1])
time.sleep(2)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,111 @@
{
"Gateway": [
"Bluetooth enabled",
"gatewayID",
"Productid",
"MachineName",
"Fw Version",
"Fw Build date",
"Machine serial number",
"Hardware revision",
"Remote ip address",
"SIM card identifier",
"Auto update",
"Update to",
"Update status",
"Voltage",
"Internal temperature",
"Antenna Type",
"Signal RSSI",
"VRM Log time offset",
"VRM Log interval",
"Network name",
"Latitude",
"Longitude",
"Relay 1 state"
],
"Battery Monitor": [
"Battery custom name",
"Model",
"Firmware version",
"Voltage",
"Current",
"Consumed Amphours",
"State of charge",
"Time to go",
"Low voltage alarm",
"High voltage alarm",
"Low starter-voltage alarm",
"High starter-voltage alarm",
"Low state-of-charge alarm",
"Low battery temperature alarm",
"High battery temperature alarm",
"Mid-voltage alarm",
"Deepest discharge",
"Last discharge",
"Average discharge",
"Charge cycles",
"Full discharges",
"Total Ah drawn",
"Minimum voltage",
"Maximum voltage",
"Time since last full charge",
"Automatic syncs",
"Low voltage alarms",
"High voltage alarms",
"Minimum starter voltage",
"Maximum starter voltage",
"Discharged Energy",
"Charged Energy"
],
"Solar Charger": [
"Solar charger off reason",
"Solar charger custom name",
"Solarcharger model",
"Solar charger version",
"Solar charger serial number",
"Voltage",
"Current",
"Battery watts",
"Load state",
"Charge state",
"PV voltage",
"PV power",
"MPPT State",
"Yield today",
"Maximum charge power today",
"Yield yesterday",
"Maximum charge power yesterday",
"Error code",
"User yield"
],
"System overview": [
"Solar Yield (delta)",
"PV - DC-coupled",
"Voltage",
"Current",
"Battery Power",
"Battery SOC",
"Battery state"
],
"Digital input": [
"Digital input product id",
"Digital input state",
"Digital input count",
"Digital input type",
"Digital input product id",
"Digital input state",
"Digital input count",
"Digital input type"
],
"SmartBatteryProtect": [
"Product ID",
"State",
"Output state",
"Error",
"Input voltage",
"Output voltage",
"Off reason",
"Custom name"
]
}

View File

@@ -0,0 +1,215 @@
# Enter your python code.
import json, time, math
from datetime import datetime as dt
from datetime import timedelta as td
from common.Logger import logger
from quickfaas.remotebus import publish
class RuntimeStats:
def __init__(self):
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
def manageTime(self):
if self.todayString != dt.strftime(dt.today(), "%Y-%m-%d"):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.mktime(dt.strptime(self.todayString + " 23:59:59", "%Y-%m-%d %H:%M:%S").timetuple())
self.addDay()
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
days = list(self.runs.keys())
days.sort()
while (dt.strptime(days[-1],"%Y-%m-%d") - dt.strptime(days[0], "%Y-%m-%d")).days > 40:
self.removeDay(day=days[0])
days = list(self.runs.keys())
days.sort()
self.saveDataToFile()
def addHertzDataPoint(self, frequency):
if frequency > 0:
self.manageTime()
try:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"].append(frequency)
except:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"] = [frequency]
def startRun(self):
if self.checkRunning():
self.endRun()
self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] = time.time()
def endRun(self):
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.time()
self.currentRun += 1
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def checkRunning(self):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
return True
return False
def addDay(self):
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
self.currentRun = 1
self.runs[self.todayString] = {}
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def countRunsDay(self, day=None):
if not day:
day = self.todayString
return len(self.runs[day].keys())
def countRunsMultiDay(self, numDays=30):
total_runs = 0
for day in list(self.runs.keys()):
total_runs += self.countRunsDay(day=day)
return total_runs
def calculateAverageHertzDay(self, day=None, returnArray=False):
dayFrequencies = []
if not day:
day = self.todayString
for run in list(self.runs[day].keys()):
try:
dayFrequencies += self.runs[day][run]["frequencies"]
except Exception as e:
logger.debug("{} missing frequency data for {}".format(day,run))
if returnArray:
return dayFrequencies
return round(math.fsum(dayFrequencies)/len(dayFrequencies),2)
def calculateAverageHertzMultiDay(self, numDays=30):
self.manageTime()
frequencies = []
for day in list(self.runs.keys()):
if not day == self.todayString and (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
try:
frequencies += self.calculateAverageHertzDay(day=day, returnArray=True)
except Exception as e:
logger.debug("{} missing frequency data".format(day))
if len(frequencies):
return round(math.fsum(frequencies)/len(frequencies), 2)
return 0
def calculateRunTimeDay(self, day=None, convertToHours=True):
self.manageTime()
total_time = 0
if not day:
day = self.todayString
for run in list(self.runs.get(day,{}).keys()):
if self.runs[day][run]["end"] == 0 and self.runs[day][run]["start"] != 0:
total_time = time.time() - self.runs[day][run]["start"] + total_time
else:
total_time = self.runs[day][run]["end"] - self.runs[day][run]["start"] + total_time
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunTimeMultiDay(self, numDays=30, convertToHours=True):
total_time = 0
for day in list(self.runs.keys()):
if (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
total_time += self.calculateRunTimeDay(day=day, convertToHours=False)
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunPercentDay(self, day=None, precise=False):
if not day:
day = self.todayString
if precise:
return (self.calculateRunTimeDay(day=day)/24) * 100
return round((self.calculateRunTimeDay(day=day)/24) * 100, 2)
def calculateRunPercentMultiDay(self, numDays=30, precise=False):
self.manageTime()
if precise:
return (self.calculateRunTimeMultiDay()/(24*numDays)) * 100
return round((self.calculateRunTimeMultiDay()/(24*numDays)) * 100,2)
def removeDay(self, day=None):
if not day:
raise Exception("Day can not be None")
logger.debug("removing day {}".format(day))
del self.runs[day]
self.saveDataToFile()
def convertSecondstoHours(self, seconds):
return round(seconds / (60*60),2)
def resetData(self):
logger.debug("clearing database")
try:
for day in list(self.runs.keys()):
self.removeDay(day=day)
except Exception as e:
logger.error(e)
return False
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
self.manageTime()
return True
def loadDataFromFile(self, filePath="/var/user/files/runtimestats.json"):
try:
with open(filePath, "r") as f:
temp = json.load(f)
self.runs = temp["data"]
self.currentRun = temp["current_run"]
self.today = dt.strptime(temp["current_day"], "%Y-%m-%d")
self.todayString = temp["current_day"]
self.manageTime()
except:
logger.debug("Could not find file at {}".format(filePath))
logger.debug("creating file")
self.addDay()
try:
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
def saveDataToFile(self, filePath="/var/user/files/runtimestats.json"):
try:
logger.debug("Saving Runs")
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
rts = RuntimeStats()
def runTime(message, wizard_api, cloudName):
rts.loadDataFromFile()
rts.saveDataToFile()
logger.debug("publish topic:%s, payload: %s, cloudName: %s" % (__topic__, message, cloudName))
payload = {}
payload["ts"] = time.time()*1000
payload["values"] = {message["values"]["running"]["measureName"]: message["values"]["running"]["value"]}
rts.manageTime()
if message["values"]["running"]["value"] == 1 and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"]:
rts.startRun()
rts.saveDataToFile()
elif message["values"]["running"]["value"] == 0 and rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"] and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["end"]:
rts.endRun()
rts.saveDataToFile()
payload["values"]["today_running_hours"] = rts.calculateRunTimeDay()
payload["values"]["month_running_hours"] = rts.calculateRunTimeMultiDay(numDays=dt.today().day)
publish(__topic__, json.dumps(payload), __qos__, cloud_name=cloudName)

View File

@@ -0,0 +1,613 @@
import json, os, time, shutil, math
from datetime import datetime as dt
from datetime import timedelta as td
from calendar import monthrange
from common.Logger import logger
from quickfaas.remotebus import publish
from mobiuspi_lib.gps import GPS
from quickfaas.global_dict import get as get_params
from quickfaas.global_dict import _set_global_args
class RuntimeStats:
def __init__(self):
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
def manageTime(self):
if self.todayString != dt.strftime(dt.today(), "%Y-%m-%d"):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.mktime(dt.strptime(self.todayString + " 23:59:59", "%Y-%m-%d %H:%M:%S").timetuple())
self.addDay()
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
days = list(self.runs.keys())
days.sort()
while (dt.strptime(days[-1],"%Y-%m-%d") - dt.strptime(days[0], "%Y-%m-%d")).days > 40:
self.removeDay(day=days[0])
days = list(self.runs.keys())
days.sort()
def addHertzDataPoint(self, frequency):
if frequency > 0:
self.manageTime()
try:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"].append(frequency)
except:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"] = [frequency]
def startRun(self):
if self.checkRunning():
self.endRun()
self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] = time.time()
def endRun(self):
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.time()
self.currentRun += 1
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def checkRunning(self):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
return True
return False
def addDay(self):
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
self.currentRun = 1
self.runs[self.todayString] = {}
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def countRunsDay(self, day=None):
if not day:
day = self.todayString
return len(self.runs[day].keys())
def countRunsMultiDay(self, numDays=30):
total_runs = 0
for day in list(self.runs.keys()):
total_runs += self.countRunsDay(day=day)
return total_runs
def calculateAverageHertzDay(self, day=None, returnArray=False):
dayFrequencies = []
if not day:
day = self.todayString
for run in list(self.runs[day].keys()):
try:
dayFrequencies += self.runs[day][run]["frequencies"]
except Exception as e:
logger.debug("{} missing frequency data for {}".format(day,run))
if returnArray:
return dayFrequencies
return round(math.fsum(dayFrequencies)/len(dayFrequencies),2)
def calculateAverageHertzMultiDay(self, numDays=30):
self.manageTime()
frequencies = []
for day in list(self.runs.keys()):
if not day == self.todayString and (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
try:
frequencies += self.calculateAverageHertzDay(day=day, returnArray=True)
except Exception as e:
logger.debug("{} missing frequency data".format(day))
if len(frequencies):
return round(math.fsum(frequencies)/len(frequencies), 2)
return 0
def calculateRunTimeDay(self, day=None, convertToHours=True):
self.manageTime()
total_time = 0
if not day:
day = self.todayString
for run in list(self.runs.get(day,{}).keys()):
if self.runs[day][run]["end"] == 0 and self.runs[day][run]["start"] != 0:
total_time = time.time() - self.runs[day][run]["start"] + total_time
else:
total_time = self.runs[day][run]["end"] - self.runs[day][run]["start"] + total_time
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunTimeMultiDay(self, numDays=30, convertToHours=True):
total_time = 0
for day in list(self.runs.keys()):
if (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
total_time += self.calculateRunTimeDay(day=day, convertToHours=False)
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunPercentDay(self, day=None, precise=False):
if not day:
day = self.todayString
if precise:
return (self.calculateRunTimeDay(day=day)/24) * 100
return round((self.calculateRunTimeDay(day=day)/24) * 100, 2)
def calculateRunPercentMultiDay(self, numDays=30, precise=False):
self.manageTime()
if precise:
return (self.calculateRunTimeMultiDay()/(24*numDays)) * 100
return round((self.calculateRunTimeMultiDay()/(24*numDays)) * 100,2)
def removeDay(self, day=None):
if not day:
raise Exception("Day can not be None")
logger.debug("removing day {}".format(day))
del self.runs[day]
self.saveDataToFile()
def convertSecondstoHours(self, seconds):
return round(seconds / (60*60),2)
def resetData(self):
logger.debug("clearing database")
try:
for day in list(self.runs.keys()):
self.removeDay(day=day)
except Exception as e:
logger.error(e)
return False
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
self.manageTime()
return True
def loadDataFromFile(self, filePath="/var/user/files/runtimestats.json"):
try:
with open(filePath, "r") as f:
temp = json.load(f)
self.runs = temp["data"]
self.currentRun = temp["current_run"]
self.today = dt.strptime(temp["current_day"], "%Y-%m-%d")
self.todayString = temp["current_day"]
self.manageTime()
except:
logger.debug("Could not find file at {}".format(filePath))
logger.debug("creating file")
self.addDay()
try:
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
def saveDataToFile(self, filePath="/var/user/files/runtimestats.json"):
try:
logger.debug("Saving Runs")
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
rts = RuntimeStats()
rts.loadDataFromFile()
rts.saveDataToFile()
def reboot(reason="Rebooting for config file update"):
#basic = Basic()
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
logger.info(reason)
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
logger.info(f"REBOOT : {r}")
def checkFileExist(filename):
path = "/var/user/files"
try:
if not os.path.exists(path):
logger.debug("no folder making files folder in var/user")
os.makedirs(path)
with open(path + "/" + filename, "a") as f:
json.dump({}, f)
except Exception as e:
logger.error(f"Something went wrong in checkFileExist while making folder: {e}")
try:
if not os.path.exists(path + "/" + filename):
logger.debug("no creds file making creds file")
with open(path + "/" + filename, "a") as f:
json.dump({}, f)
except Exception as e:
logger.error(f"Something went wrong in checkFileExist wihle making file: {e}")
def convertDStoJSON(ds):
j = dict()
try:
for x in ds:
j[x["key"]] = x["value"]
except Exception as e:
logger.error(f"Something went wrong in convertDStoJSON: {e}")
return j
def convertJSONtoDS(j):
d = []
try:
for key in j.keys():
d.append({"key": key, "value": j[key]})
except Exception as e:
logger.error(f"Something went wrong in convertJSONtoDS: {e}")
return d
def checkCredentialConfig():
logger.debug("CHECKING CONFIG")
cfgpath = "/var/user/cfg/device_supervisor/device_supervisor.cfg"
credspath = "/var/user/files/creds.json"
cfg = dict()
with open(cfgpath, "r") as f:
try:
cfg = json.load(f)
clouds = cfg.get("clouds")
logger.debug(clouds)
#if not configured then try to configure from stored values
if clouds[0]["args"]["clientId"] == "unknown" or clouds[0]["args"]["username"] == "unknown" or not clouds[0]["args"]["passwd"] or clouds[0]["args"]["passwd"] == "unknown":
try:
checkFileExist("creds.json")
except Exception as e:
logger.error(f"Error in checkFileExist: {e}")
with open(credspath, "r") as c:
try:
creds = json.load(c)
if creds:
logger.debug("updating config with stored data")
clouds[0]["args"]["clientId"] = creds["clientId"]
clouds[0]["args"]["username"] = creds["userName"]
clouds[0]["args"]["passwd"] = creds["password"]
cfg["clouds"] = clouds
cfg = checkParameterConfig(cfg)
with open(cfgpath, "w", encoding='utf-8') as n:
json.dump(cfg, n, indent=1, ensure_ascii=False)
reboot()
except Exception as e:
logger.error(f"Error trying to load credentials from file: {e}")
else:
#assuming clouds is filled out, if data is different then assume someone typed in something new and store it, if creds is empty fill with clouds' data
checkFileExist("creds.json")
with open(credspath, "r") as c:
logger.debug("updating stored file with new data")
cfg = checkParameterConfig(cfg)
with open(cfgpath, "w", encoding='utf-8') as n:
json.dump(cfg, n, indent=1, ensure_ascii=False)
creds = json.load(c)
if creds:
if creds["clientId"] != clouds[0]["args"]["clientId"]:
creds["clientId"] = clouds[0]["args"]["clientId"]
if creds["userName"] != clouds[0]["args"]["username"]:
creds["userName"] = clouds[0]["args"]["username"]
if creds["password"] != clouds[0]["args"]["passwd"]:
creds["password"] = clouds[0]["args"]["passwd"]
else:
creds["clientId"] = clouds[0]["args"]["clientId"]
creds["userName"] = clouds[0]["args"]["username"]
creds["password"] = clouds[0]["args"]["passwd"]
with open(credspath, "w") as cw:
json.dump(creds,cw)
except Exception as e:
logger.error(f"Somethign went wrong in checkCredentialConfig: {e}")
def checkParameterConfig(cfg):
try:
logger.debug("Checking Parameters!!!!")
paramspath = "/var/user/files/params.json"
cfgparams = convertDStoJSON(cfg.get("labels"))
#check stored values
checkFileExist("params.json")
with open(paramspath, "r") as f:
logger.debug("Opened param storage file")
params = json.load(f)
if params:
if cfgparams != params:
#go through each param
#if not "unknown" and cfg and params aren't the same take from cfg likely updated manually
#if key in cfg but not in params copy to params
logger.debug("equalizing params between cfg and stored")
for key in cfgparams.keys():
try:
if cfgparams[key] != params[key] and cfgparams[key] != "unknown":
params[key] = cfgparams[key]
except:
params[key] = cfgparams[key]
cfg["labels"] = convertJSONtoDS(params)
_set_global_args(convertJSONtoDS(params))
with open(paramspath, "w") as p:
json.dump(params, p)
else:
with open(paramspath, "w") as p:
logger.debug("initializing param file with params in memory")
json.dump(convertDStoJSON(get_params()), p)
cfg["labels"] = get_params()
return cfg
except Exception as e:
logger.error(f"Something went wrong in checkParameterConfig: {e}")
os.system(f'rm {paramspath}')
return cfg
payload = {}
def initialize_totalizers():
return {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
def getTotalizers(file_path="/var/user/files/totalizers.json"):
"""
Retrieves totalizer data from a JSON file.
:param file_path: Path to the JSON file storing totalizer data.
:return: Dictionary containing totalizer values.
"""
try:
with open(file_path, "r") as t:
totalizers = json.load(t)
if not totalizers or not isinstance(totalizers, dict):
logger.info("Invalid data format in the file. Initializing totalizers.")
totalizers = initialize_totalizers()
except FileNotFoundError:
logger.info("File not found. Initializing totalizers.")
totalizers = initialize_totalizers()
except json.JSONDecodeError:
timestamp = dt.now().strftime("%Y%m%d_%H%M%S")
# Split the file path and insert the timestamp before the extension
file_name, file_extension = os.path.splitext(file_path)
backup_file_path = f"{file_name}_{timestamp}{file_extension}"
shutil.copyfile(file_path, backup_file_path)
logger.error(f"Error decoding JSON. A backup of the file is created at {backup_file_path}. Initializing totalizers.")
totalizers = initialize_totalizers()
return totalizers
# Helper function to split the payload into chunks
def chunk_payload(payload, chunk_size=20):
chunked_values = list(payload["values"].items())
for i in range(0, len(chunked_values), chunk_size):
yield {
"ts": payload["ts"],
"values": dict(chunked_values[i:i+chunk_size])
}
def sendData(message,wizard_api):
rts.loadDataFromFile()
logger.debug(message)
checkCredentialConfig()
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
resetPayload = {"ts": "", "values": {}}
dayReset, weekReset, monthReset, yearReset = False, False, False, False
for controller, measures in message["values"].items():
for measure, values in measures.items():
try:
if values.get("status") == 1:
if measure in ["totalizer_1"]:
payload["values"]["day_volume"], dayReset = totalizeDay(values.get("raw_data"))
payload["values"]["week_volume"], weekReset = totalizeWeek(values.get("raw_data"))
payload["values"]["month_volume"], monthReset = totalizeMonth(values.get("raw_data"))
payload["values"]["year_volume"], yearReset = totalizeYear(values.get("raw_data"))
if measure in ["running"]:
rts.manageTime()
if values.get("raw_data") == 1 and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"]:
rts.startRun()
rts.saveDataToFile()
elif values.get("raw_data") == 0 and rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["start"] and not rts.runs[rts.todayString]["run_" + str(rts.currentRun)]["end"]:
rts.endRun()
rts.saveDataToFile()
payload["values"]["today_running_hours"] = rts.calculateRunTimeDay()
payload["values"]["month_running_hours"] = rts.calculateRunTimeMultiDay(numDays=dt.today().day)
payload["values"][measure] = values.get("raw_data")
except Exception as e:
logger.error(e)
try:
payload["values"]["latitude"], payload["values"]["longitude"], payload["values"]["speed"] = getGPS()
except:
logger.error("Could not get GPS coordinates")
for chunk in chunk_payload(payload=payload):
publish(__topic__, json.dumps(chunk), __qos__)
time.sleep(2)
publish("v1/devices/me/attributes", json.dumps({"latestReportTime": (round(dt.timestamp(dt.now())/600)*600)*1000}), __qos__)
if dayReset:
resetPayload["values"]["yesterday_volume"] = payload["values"]["day_volume"]
resetPayload["values"]["day_volume"] = 0
resetPayload["values"]["yesterday_running_hours"] = rts.calculateRunTimeDay(day=dt.strftime(dt.today() - td(days=1) , "%Y-%m-%d"))
if weekReset:
resetPayload["values"]["last_week_volume"] = payload["values"]["week_volume"]
resetPayload["values"]["week_volume"] = 0
if monthReset:
resetPayload["values"]["last_month_volume"] = payload["values"]["month_volume"]
resetPayload["values"]["month_volume"] = 0
resetPayload["values"]["last_month_running_hours"] = rts.calculateRunTimeMultiDay(numDays=monthrange(dt.today().year, (dt.today() - td(days=1)).month)[1])
if yearReset:
resetPayload["values"]["last_year_volume"] = payload["values"]["year_volume"]
resetPayload["values"]["year_volume"] = 0
if resetPayload["values"]:
resetPayload["ts"] = 1 + (round(dt.timestamp(dt.now())/600)*600)*1000
publish(__topic__, json.dumps(resetPayload), __qos__)
def saveTotalizers(totalizers, file_path="/var/user/files/totalizers.json"):
"""
Saves totalizer data to a JSON file.
:param totalizers: Dictionary containing totalizer values to be saved.
:param file_path: Path to the JSON file where totalizer data will be saved.
"""
try:
with open(file_path, "w") as t:
json.dump(totalizers, t)
except (IOError, OSError, json.JSONEncodeError) as e:
logger.error(f"Error saving totalizers to {file_path}: {e}")
raise # Optionally re-raise the exception if it should be handled by the caller
def getGPS():
# Create a gps instance
gps = GPS()
# Retrieve GPS information
position_status = gps.get_position_status()
logger.debug("position_status: ")
logger.debug(position_status)
latitude = position_status["latitude"].split(" ")
longitude = position_status["longitude"].split(" ")
lat_dec = int(latitude[0][:-1]) + (float(latitude[1][:-1])/60)
lon_dec = int(longitude[0][:-1]) + (float(longitude[1][:-1])/60)
if latitude[2] == "S":
lat_dec = lat_dec * -1
if longitude[2] == "W":
lon_dec = lon_dec * -1
#lat_dec = round(lat_dec, 7)
#lon_dec = round(lon_dec, 7)
logger.info("HERE IS THE GPS COORDS")
logger.info(f"LATITUDE: {lat_dec}, LONGITUDE: {lon_dec}")
speedKnots = position_status["speed"].split(" ")
speedMPH = float(speedKnots[0]) * 1.151
return (f"{lat_dec:.8f}",f"{lon_dec:.8f}",f"{speedMPH:.2f}")
def totalizeDay(lifetime, max_retries=3, retry_delay=2):
"""
Update and save daily totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["dayHolding"]
if not int(now.strftime("%d")) == int(totalizers["day"]):
totalizers["dayHolding"] = lifetime
totalizers["day"] = int(now.strftime("%d"))
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)
def totalizeWeek(lifetime, max_retries=3, retry_delay=2):
"""
Update and save weekly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["weekHolding"]
if (not now.strftime("%U") == totalizers["week"] and now.strftime("%a") == "Sun") or totalizers["week"] == 0:
totalizers["weekHolding"] = lifetime
totalizers["week"] = now.strftime("%U")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)
def totalizeMonth(lifetime, max_retries=3, retry_delay=2):
"""
Update and save monthly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["monthHolding"]
if not int(now.strftime("%m")) == int(totalizers["month"]):
totalizers["monthHolding"] = lifetime
totalizers["month"] = now.strftime("%m")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value,reset)
def totalizeYear(lifetime, max_retries=3, retry_delay=2):
"""
Update and save yearly totalizers based on the lifetime value.
:param lifetime: The current lifetime total.
:param max_retries: Maximum number of save attempts.
:param retry_delay: Delay in seconds between retries.
:return: A tuple containing the calculated value and a boolean indicating if a reset occurred, or (None, False) if save fails.
"""
totalizers = getTotalizers()
now = dt.fromtimestamp(round(dt.timestamp(dt.now())/600)*600)
reset = False
value = lifetime - totalizers["yearHolding"]
if not int(now.strftime("%Y")) == int(totalizers["year"]):
totalizers["yearHolding"] = lifetime
totalizers["year"] = now.strftime("%Y")
for attempt in range(max_retries):
try:
saveTotalizers(totalizers)
reset = True
return (value, reset)
except Exception as e:
logger.error(f"Attempt {attempt + 1} failed to save totalizers: {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay)
else:
logger.error("All attempts to save totalizers failed.")
return (None, False)
return (value, reset)

View File

@@ -0,0 +1,309 @@
import json, math, time, os
from datetime import datetime as dt
from common.Logger import logger
from quickfaas.measure import write
from quickfaas.remotebus import publish
class RuntimeStats:
def __init__(self):
self.runs = {}
self.currentRun = 0
self.today = ""
self.todayString = ""
def manageTime(self):
if self.todayString != dt.strftime(dt.today(), "%Y-%m-%d"):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.mktime(dt.strptime(self.todayString + " 23:59:59", "%Y-%m-%d %H:%M:%S").timetuple())
self.addDay()
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
days = list(self.runs.keys())
days.sort()
while (dt.strptime(days[-1],"%Y-%m-%d") - dt.strptime(days[0], "%Y-%m-%d")).days > 40:
self.removeDay(day=days[0])
days = list(self.runs.keys())
days.sort()
def addHertzDataPoint(self, frequency):
if frequency > 0:
self.manageTime()
try:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"].append(frequency)
except:
self.runs[self.todayString]["run_" + str(self.currentRun)]["frequencies"] = [frequency]
def startRun(self):
if self.checkRunning():
self.endRun()
self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] = time.time()
def endRun(self):
self.runs[self.todayString]["run_" + str(self.currentRun)]["end"] = time.time()
self.currentRun += 1
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def checkRunning(self):
if self.runs[self.todayString]["run_" + str(self.currentRun)]["start"] and not self.runs[self.todayString]["run_" + str(self.currentRun)]["end"]:
return True
return False
def addDay(self):
self.today = dt.today()
self.todayString = dt.strftime(self.today, "%Y-%m-%d")
self.currentRun = 1
self.runs[self.todayString] = {}
self.runs[self.todayString]["run_" + str(self.currentRun)] = {"start":0, "end": 0, "frequencies":[]}
def countRunsDay(self, day=None):
if not day:
day = self.todayString
return len(self.runs[day].keys())
def countRunsMultiDay(self, numDays=30):
total_runs = 0
for day in list(self.runs.keys()):
total_runs += self.countRunsDay(day=day)
return total_runs
def calculateAverageHertzDay(self, day=None, returnArray=False):
dayFrequencies = []
if not day:
day = self.todayString
for run in list(self.runs[day].keys()):
try:
dayFrequencies += self.runs[day][run]["frequencies"]
except Exception as e:
logger.debug("{} missing frequency data for {}".format(day,run))
if returnArray:
return dayFrequencies
return round(math.fsum(dayFrequencies)/len(dayFrequencies),2)
def calculateAverageHertzMultiDay(self, numDays=30):
self.manageTime()
frequencies = []
for day in list(self.runs.keys()):
if not day == self.todayString and (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
try:
frequencies += self.calculateAverageHertzDay(day=day, returnArray=True)
except Exception as e:
logger.debug("{} missing frequency data".format(day))
if len(frequencies):
return round(math.fsum(frequencies)/len(frequencies), 2)
return 0
def calculateRunTimeDay(self, day=None, convertToHours=True):
self.manageTime()
total_time = 0
if not day:
day = self.todayString
for run in list(self.runs.get(day,{}).keys()):
if self.runs[day][run]["end"] == 0 and self.runs[day][run]["start"] != 0:
total_time = time.time() - self.runs[day][run]["start"] + total_time
else:
total_time = self.runs[day][run]["end"] - self.runs[day][run]["start"] + total_time
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunTimeMultiDay(self, numDays=30, convertToHours=True):
total_time = 0
for day in list(self.runs.keys()):
if (dt.strptime(self.todayString, "%Y-%m-%d") - dt.strptime(day, "%Y-%m-%d")).days <= numDays:
total_time += self.calculateRunTimeDay(day=day, convertToHours=False)
if convertToHours:
return self.convertSecondstoHours(total_time)
return total_time
def calculateRunPercentDay(self, day=None, precise=False):
if not day:
day = self.todayString
if precise:
return (self.calculateRunTimeDay(day=day)/24) * 100
return round((self.calculateRunTimeDay(day=day)/24) * 100, 2)
def calculateRunPercentMultiDay(self, numDays=30, precise=False):
self.manageTime()
if precise:
return (self.calculateRunTimeMultiDay()/(24*numDays)) * 100
return round((self.calculateRunTimeMultiDay()/(24*numDays)) * 100,2)
def removeDay(self, day=None):
if not day:
raise Exception("Day can not be None")
logger.debug("removing day {}".format(day))
try:
del self.runs[day]
except Exception as e:
logger.error(f"Wasn't able to delete day {day}")
logger.error(e)
def convertSecondstoHours(self, seconds):
return round(seconds / (60*60),2)
def resetData(self):
logger.debug("clearing database")
try:
os.remove("/var/user/files/runtimestats.json")
except Exception as e:
logger.error(e)
return False
self.loadDataFromFile()
return True
def loadDataFromFile(self, filePath="/var/user/files/runtimestats.json"):
try:
with open(filePath, "r") as f:
temp = json.load(f)
self.runs = temp["data"]
self.currentRun = temp["current_run"]
self.today = dt.strptime(temp["current_day"], "%Y-%m-%d")
self.todayString = temp["current_day"]
self.manageTime()
except:
logger.debug("Could not find file at {}".format(filePath))
logger.debug("creating file")
self.addDay()
try:
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
def saveDataToFile(self, filePath="/var/user/files/runtimestats.json"):
try:
logger.debug("Saving Runs")
with open(filePath, "w") as f:
d = {
"current_run": self.currentRun,
"current_day": self.todayString,
"data": self.runs
}
json.dump(d, f, indent=4)
except Exception as e:
logger.error(e)
rts = RuntimeStats()
def reboot(reason="Rebooting for config file update"):
#basic = Basic()
logger.info("!" * 10 + "REBOOTING DEVICE" + "!"*10)
logger.info(reason)
r = os.popen("kill -s SIGHUP `cat /var/run/python/supervisord.pid`").read()
logger.info(f"REBOOT : {r}")
def get_totalizers():
try:
with open("/var/user/files/totalizers.json", "r") as t:
totalizers = json.load(t)
if not totalizers:
logger.info("-----INITIALIZING TOTALIZERS-----")
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
except:
totalizers = {
"day": 0,
"week": 0,
"month": 0,
"year": 0,
"lifetime": 0,
"dayHolding": 0,
"weekHolding": 0,
"monthHolding": 0,
"yearHolding": 0
}
return totalizers
def saveTotalizers(totalizers):
try:
with open("/var/user/files/totalizers.json", "w") as t:
json.dump(totalizers,t)
except Exception as e:
logger.error(e)
def resetTotalizers():
try:
totalizers = get_totalizers()
totalizers["dayHolding"] = 0
totalizers["weekHolding"] = 0
totalizers["monthHolding"] = 0
totalizers["yearHolding"] = 0
saveTotalizers(totalizers)
return True
except Exception as e:
logger.error(e)
return e
def receiveCommand(topic, payload):
logger.debug(topic)
logger.debug(json.loads(payload))
p = json.loads(payload)
command = p["method"]
if command == "resetTotalizers":
r = resetTotalizers()
if r == True:
message = [{"name": "flowmeter", "measures":[{"name":"reset_totalizers", "value": 1}]}]
try:
resp = write(message)
payload = {
"ts": (round(dt.timestamp(dt.now())/600)*600)*1000,
"values": {
"day_volume": 0,
"yesterday_volume": 0,
"week_volume": 0,
"last_week_volume": 0,
"month_volume": 0,
"last_month_volume": 0,
"year_volume": 0,
"last_year_volume": 0
}
}
publish("v1/devices/me/telemetry",json.dumps(payload))
except Exception as e:
logger.error("Failed to write message")
logger.error(e)
elif command == "resetRunTimeStats":
rts.loadDataFromFile()
r = rts.resetData()
if r == True:
payload = {
"ts": (round(dt.timestamp(dt.now())/600)*600)*1000,
"values": {
"today_running_hours": 0,
"yesterday_running_hours": 0,
"month_running_hours": 0,
"last_month_running_hours": 0
}
}
publish("v1/devices/me/telemetry",json.dumps(payload))
ack(topic.split("/")[-1], r)
reboot("need to reset all softwares")
ack(topic.split("/")[-1], r)
def ack(msgid, r):
#logger.debug(msgid)
#logger.debug(mac)
#logger.debug(name)
#logger.debug(value)
publish("v1/devices/me/rpc/response/" + str(msgid), json.dumps({"msg": {"time": (round(dt.timestamp(dt.now())/600)*600)*1000, "response": r}, "metadata": "", "msgType": ""}))

File diff suppressed because it is too large Load Diff

View File

@@ -200,7 +200,7 @@ def sendData(message):
checkCredentialConfig()
payload = {"ts": (round(dt.timestamp(dt.now())/600)*600)*1000, "values": {}}
resetPayload = {"ts": "", "values": {}}
regexPattern = r"fm_\d{2}_t\d"
regexPattern = r"fm_\d{2}_\w*_t\d"
pondLevels = {}
for measure in message["measures"]:
try:

View File

@@ -1,185 +1,189 @@
MeasuringPointName,ControllerName,GroupName,UploadType,DataType,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,DataEndianReverse,ReadOffset,ReadLength,DataParseMethod,BitId,storageLwTSDB
cp_01_auto,sp_pond,default,periodic,BIT,,,0,FBK_Charge_Pump_Auto,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_auto_alm,sp_pond,default,periodic,BIT,,,0,AL0_CP1_Not_in_Auto,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_discharge_lo_alm,sp_pond,default,periodic,BIT,,,0,AL0_CP1_Discharge_PSI_Lo,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_discharge_lo_lockout_alm,sp_pond,default,periodic,BIT,,,0,AL0_CP1_Low_Disch_PSI_Lock_Out,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_discharge_lo_spt,sp_pond,default,periodic,FLOAT,,,,SPT_CP1_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
cp_01_discharge_psi,sp_pond,default,periodic,FLOAT,,,,Val_CP1_Disch_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
cp_01_faulted,sp_pond,default,periodic,BIT,,,0,FBK_Charge_Pump_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_hand,sp_pond,default,periodic,BIT,,,0,FBK_Charge_Pump_Hand,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_hoa_alm,sp_pond,default,periodic,BIT,,,0,AL0_CP1_HOA_Off,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_in_hand_alm,sp_pond,default,periodic,BIT,,,0,AL0_Charge_Pump_In_Hand,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_lo_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_CP1_LO_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_run_cmd,sp_pond,default,periodic,BIT,,,0,CMD_CP1_Run,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_01_run_permissive,sp_pond,default,periodic,DINT,0,,,CP1_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
cp_01_running,sp_pond,default,periodic,BIT,,,0,FBK_Charge_Pump_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
cp_02_discharge_psi,sp_pond,default,periodic,FLOAT,,,,Val_CP2_Disch_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_10_fr,sp_pond,default,periodic,FLOAT,,,,Val_FM_10in_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_10_t1,sp_pond,default,periodic,FLOAT,,,,Val_FM_10in_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_10_t2,sp_pond,default,periodic,FLOAT,,,,Val_FM_10in_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_10_t3,sp_pond,default,periodic,FLOAT,,,,Val_FM_10in_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_12_fr,sp_pond,default,periodic,FLOAT,,,,Val_FM_12in_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_12_t1,sp_pond,default,periodic,FLOAT,,,,Val_FM_12in_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_12_t2,sp_pond,default,periodic,FLOAT,,,,Val_FM_12in_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
fm_12_t3,sp_pond,default,periodic,FLOAT,,,,Val_FM_12in_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
hmi_fault_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_HMI_Fault_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
hmi_system_start_cmd,sp_pond,default,periodic,BIT,,,0,CMD_HMI_System_Start,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
hmi_system_stop_cmd,sp_pond,default,periodic,BIT,,,0,CMD_HMI_System_Stop,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
pod_01_enable,sp_pond,default,periodic,BIT,,,0,CFG_Remote_Pod_1_Enable,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
pod_01_fm_01_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_01_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_01_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_01_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_02_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_02_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_02_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_02_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_03_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_03_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_03_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_03_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_04_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_04_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_04_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_fm_04_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_pond_level_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_pond_level_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod1_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_pond_volume_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod_1_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_01_pond_volume_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod_1_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_enable,sp_pond,default,periodic,BIT,,,0,CFG_Remote_Pod_2_Enable,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
pod_02_fm_01_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_01_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_01_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_01_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_02_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_02_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_02_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_02_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_03_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_03_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_03_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_03_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_04_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_04_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_04_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_fm_04_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_pond_level_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_pond_level_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod2_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_pond_volume_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod_2_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_02_pond_volume_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod_2_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_enable,sp_pond,default,periodic,BIT,,,0,CFG_Remote_Pod_3_Enable,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
pod_03_fm_01_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_01_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_01_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_01_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_02_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_02_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_02_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_02_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_03_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_03_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_03_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_03_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_04_fr,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_04_t1,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_04_t2,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_fm_04_t3,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_pond_level_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_pond_level_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod3_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_pond_volume_01,sp_pond,default,periodic,FLOAT,,,,Val_Pod_3_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
pod_03_pond_volume_02,sp_pond,default,periodic,FLOAT,,,,Val_Pod_3_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
power_supply_faulted,sp_pond,default,periodic,BIT,,,0,FBK_Power_Supply_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
power_suppy_faulted,sp_pond,default,periodic,BIT,,,0,AL0_PS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
scada_fault_clear_cmd,sp_pond,default,periodic,BIT,,,0,cmd_Scada_clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
scada_start_cmd,sp_pond,default,periodic,BIT,,,0,CMD_Scada_Start,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
scada_stop_cmd,sp_pond,default,periodic,BIT,,,0,CMD_Scada_Stop,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_01_discharge_hi_lockout,sp_pond,default,periodic,BIT,,,0,TP1_Lockout_Counter_Hi_Disch,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_01_hi_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP1_Hi_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_01_lo_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP1_Lo_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_01_pid_manual_spt,sp_pond,default,periodic,FLOAT,,,,SPT_TP1_PID_Manual_Speed,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_01_pid_mode_spt,sp_pond,default,periodic,INT,0,,,SPT_TP1_Mode,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_01_pid_spt,sp_pond,default,periodic,FLOAT,,,,SPT_TP1_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_02_hi_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP2_Hi_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_02_lo_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP2_Lo_Clear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_02_pid_inverse_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP2_PID_Inverse,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_02_pid_loop_pv,sp_pond,default,periodic,FLOAT,,,,TP2_PID_Loop_PV,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
tp_02_pid_manual_cmd,sp_pond,default,periodic,BIT,,,0,CMD_TP2_PID_Manual,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
tp_02_pid_manual_spt,sp_pond,default,periodic,FLOAT,,,,SPT_TP2_PID_Manual_Speed,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_02_pid_mode_spt,sp_pond,default,periodic,INT,0,,,SPT_TP2_Mode,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_02_pid_spt,sp_pond,default,periodic,FLOAT,,,,SPT_TP2_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
tp_vfds_faulted_alm,sp_pond,default,periodic,BIT,,,0,AL0_Both_TP_VFDs_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
ups_faulted,sp_pond,default,periodic,BIT,,,0,FBK_UPS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
ups_faulted_alm,sp_pond,default,periodic,BIT,,,0,AL0_UPS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_alarm_lockout,sp_pond,default,periodic,INT,0,,,WTP1_Alarm_Lockout,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_discharge_hi_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP1_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_discharge_hi_lockout_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP1_Hi_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_discharge_hi_spt,sp_pond,default,periodic,FLOAT,,,,SPT_WTP1_High_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_discharge_lo_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP1_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_discharge_lo_lockout_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP1_Lo_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_discharge_lo_spt,sp_pond,default,periodic,FLOAT,,,,SPT_WTP1_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_discharge_psi,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fault_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP1_FaultClear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_fault_code,sp_pond,default,periodic,INT,0,,,FBK_WTP1_FaultCode,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_01_fr,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_01_t1,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_01_t2,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_01_t3,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_02_fr,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_02_t1,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_02_t2,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_02_t3,sp_pond,default,periodic,FLOAT,,,,Val_WTP1_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_fm_active_spt,sp_pond,default,periodic,INT,0,,,SPT_WTP1_FM_Active,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_jog_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP1_Jog,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_run_permissive,sp_pond,default,periodic,DINT,0,,,WTP1_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_speed_ref_cmd,sp_pond,default,periodic,FLOAT,,,,WTP1_Speed_Ref,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_start_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP1_Start,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_stop_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP1_Stop,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_actual_speed,sp_pond,default,periodic,FLOAT,,,,FBK_WTP1_VFD_Actual_Speed,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_cmd_speed,sp_pond,default,periodic,FLOAT,,,,FBK_WTP1_VFD_CMD_Speed,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_commsloss,sp_pond,default,periodic,BIT,,,0,FBK_WTP1_VFD_CommsLoss,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_dc_bus,sp_pond,default,periodic,FLOAT,,,,FBK_WTP1_VFD_DCBus,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_error,sp_pond,default,periodic,BIT,,,0,FBK_WTP1_VFD_Error,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_faulted,sp_pond,default,periodic,BIT,,,0,FBK_WTP1_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_output_current,sp_pond,default,periodic,FLOAT,,,,FBK_WTP1_VFD_OutputCurrent,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_output_voltage,sp_pond,default,periodic,FLOAT,,,,FBK_WTP1_VFD_OutputVoltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_ready,sp_pond,default,periodic,BIT,,,0,FBK_WTP1_VFD_Ready,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_running,sp_pond,default,periodic,BIT,,,0,FBK_WTP1_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_01_vfd_timeout_spt,sp_pond,default,periodic,SINT,0,,,SPT_WTP1_VFD_TimeOut,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_01_vfd_type,sp_pond,default,periodic,STRING,,,,FBK_WTP1_VFD_Type,,16,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_alarm_lockout,sp_pond,default,periodic,INT,0,,,WTP2_Alarm_Lockout,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_discharge_hi_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP2_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_discharge_hi_lockout_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP2_Hi_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_discharge_hi_spt,sp_pond,default,periodic,FLOAT,,,,SPT_WTP2_High_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_discharge_lo_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP2_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_discharge_lo_lockout_alm,sp_pond,default,periodic,BIT,,,0,AL0_WTP2_Lo_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_discharge_lo_spt,sp_pond,default,periodic,FLOAT,,,,SPT_WTP2_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_discharge_psi,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fault_clear_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP2_FaultClear,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_fault_code,sp_pond,default,periodic,INT,0,,,FBK_WTP2_FaultCode,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_01_fr,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_01_t1,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_01_t2,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_01_t3,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_02_fr,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_02_t1,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_02_t2,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_02_t3,sp_pond,default,periodic,FLOAT,,,,Val_WTP2_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_fm_active_spt,sp_pond,default,periodic,INT,0,,,SPT_WTP2_FM_Active,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_jog_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP2_Jog,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_run_permissive,sp_pond,default,periodic,DINT,0,,,WTP2_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_speed_ref_cmd,sp_pond,default,periodic,FLOAT,,,,WTP2_Speed_Ref,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_start_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP2_Start,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_stop_cmd,sp_pond,default,periodic,BIT,,,0,CMD_WTP2_Stop,,,rw,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_actual_speed,sp_pond,default,periodic,FLOAT,,,,FBK_WTP2_VFD_Actual_Speed,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_cmd_speed,sp_pond,default,periodic,FLOAT,,,,FBK_WTP2_VFD_CMD_Speed,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_commsloss,sp_pond,default,periodic,BIT,,,0,FBK_WTP2_VFD_CommsLoss,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_dc_bus,sp_pond,default,periodic,FLOAT,,,,FBK_WTP2_VFD_DCBus,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_error,sp_pond,default,periodic,BIT,,,0,FBK_WTP2_VFD_Error,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_faulted,sp_pond,default,periodic,BIT,,,0,FBK_WTP2_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_output_current,sp_pond,default,periodic,FLOAT,,,,FBK_WTP2_VFD_OutputCurrent,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_output_voltage,sp_pond,default,periodic,FLOAT,,,,FBK_WTP2_VFD_OutputVoltage,2,,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_ready,sp_pond,default,periodic,BIT,,,0,FBK_WTP2_VFD_Ready,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_running,sp_pond,default,periodic,BIT,,,0,FBK_WTP2_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,,,,,,0
wtp_02_vfd_timeout_spt,sp_pond,default,periodic,SINT,0,,,SPT_WTP2_VFD_TimeOut,,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_02_vfd_type,sp_pond,default,periodic,STRING,,,,FBK_WTP2_VFD_Type,,16,ro,,,none,,,,,,,,,,,,,,,,,,,,0
wtp_system_start_spt,sp_pond,default,periodic,FLOAT,,,,SPT_WTP_System_Start,2,,rw,,,none,,,,,,,,,,,,,,,,,,,,0
MeasuringPointName,ControllerName,GroupName,UploadType,DeadZonePercent,DataType,ArrayIndex,EnableBit,BitIndex,reverseBit,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit,Pt,Ct,Mapping_table,TransDecimal,bitMap,msecSample,storageLwTSDB,DataEndianReverse,ReadOffset,ReadLength,WriteOffset,WriteLength,DataParseMethod,BitId
cp_01_auto,sp_pond,default,periodic,,BIT,,,,0,FBK_Charge_Pump_Auto,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_auto_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_CP1_Not_in_Auto,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_discharge_lo_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_CP1_Discharge_PSI_Lo,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_discharge_lo_lockout_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_CP1_Low_Disch_PSI_Lock_Out,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_discharge_lo_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_CP1_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
cp_01_discharge_psi,sp_pond,default,periodic,,FLOAT,,,,,Val_CP1_Disch_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
cp_01_faulted,sp_pond,default,periodic,,BIT,,,,0,FBK_Charge_Pump_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_hand,sp_pond,default,periodic,,BIT,,,,0,FBK_Charge_Pump_Hand,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_hoa_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_CP1_HOA_Off,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_in_hand_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_Charge_Pump_In_Hand,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_lo_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_CP1_LO_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_run_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_CP1_Run,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_01_run_permissive,sp_pond,default,periodic,,DINT,,0,,,CP1_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
cp_01_running,sp_pond,default,periodic,,BIT,,,,0,FBK_Charge_Pump_Running,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
cp_02_discharge_psi,sp_pond,default,periodic,,FLOAT,,,,,Val_CP2_Disch_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_10_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_10in_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_10_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_10in_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_10_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_10in_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_10_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_10in_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_12in_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_12in_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_12in_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_12in_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_b_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_B_12in_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_b_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_B_12in_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_b_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_B_12in_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
fm_12_b_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_FM_B_12in_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
hmi_fault_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_HMI_Fault_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
hmi_system_start_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_HMI_System_Start,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
hmi_system_stop_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_HMI_System_Stop,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pod_01_enable,sp_pond,default,periodic,,BIT,,,,0,CFG_Remote_Pod_1_Enable,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pod_01_fm_01_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_01_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_01_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_01_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_02_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_02_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_02_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_02_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_03_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_03_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_03_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_03_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_04_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_04_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_04_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_fm_04_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_pond_level_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_pond_level_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod1_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_pond_volume_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_1_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_01_pond_volume_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_1_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_enable,sp_pond,default,periodic,,BIT,,,,0,CFG_Remote_Pod_2_Enable,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pod_02_fm_01_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_01_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_01_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_01_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_02_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_02_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_02_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_02_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_03_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_03_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_03_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_03_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_04_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_04_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_04_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_fm_04_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_pond_level_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_pond_level_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod2_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_pond_volume_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_2_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_02_pond_volume_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_2_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_enable,sp_pond,default,periodic,,BIT,,,,0,CFG_Remote_Pod_3_Enable,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
pod_03_fm_01_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_01_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_01_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_01_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_02_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_02_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_02_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_02_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_03_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM3_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_03_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM3_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_03_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM3_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_03_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM3_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_04_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM4_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_04_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM4_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_04_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM4_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_fm_04_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_FM4_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_pond_level_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_Pond_Level_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_pond_level_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod3_Pond_Level_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_pond_volume_01,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_3_Pond_Volume_1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
pod_03_pond_volume_02,sp_pond,default,periodic,,FLOAT,,,,,Val_Pod_3_Pond_Volume_2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
power_supply_faulted,sp_pond,default,periodic,,BIT,,,,0,FBK_Power_Supply_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
power_suppy_faulted,sp_pond,default,periodic,,BIT,,,,0,AL0_PS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
scada_fault_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,cmd_Scada_clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
scada_start_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_Scada_Start,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
scada_stop_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_Scada_Stop,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_01_discharge_hi_lockout,sp_pond,default,periodic,,BIT,,,,0,TP1_Lockout_Counter_Hi_Disch,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_01_hi_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP1_Hi_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_01_lo_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP1_Lo_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_01_pid_manual_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_TP1_PID_Manual_Speed,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_01_pid_mode_spt,sp_pond,default,periodic,,INT,,0,,,SPT_TP1_Mode,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_01_pid_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_TP1_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_02_hi_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP2_Hi_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_02_lo_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP2_Lo_Clear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_02_pid_inverse_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP2_PID_Inverse,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_02_pid_loop_pv,sp_pond,default,periodic,,FLOAT,,,,,TP2_PID_Loop_PV,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_02_pid_manual_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_TP2_PID_Manual,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
tp_02_pid_manual_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_TP2_PID_Manual_Speed,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_02_pid_mode_spt,sp_pond,default,periodic,,INT,,0,,,SPT_TP2_Mode,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_02_pid_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_TP2_PID_Setpoint,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
tp_vfds_faulted_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_Both_TP_VFDs_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ups_faulted,sp_pond,default,periodic,,BIT,,,,0,FBK_UPS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
ups_faulted_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_UPS_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_alarm_lockout,sp_pond,default,periodic,,INT,,0,,,WTP1_Alarm_Lockout,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_discharge_hi_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP1_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_discharge_hi_lockout_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP1_Hi_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_discharge_hi_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_WTP1_High_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_discharge_lo_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP1_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_discharge_lo_lockout_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP1_Lo_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_discharge_lo_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_WTP1_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_discharge_psi,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fault_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP1_FaultClear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_fault_code,sp_pond,default,periodic,,INT,,0,,,FBK_WTP1_FaultCode,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_01_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_01_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_01_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_01_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_02_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_02_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_02_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_02_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP1_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_fm_active_spt,sp_pond,default,periodic,,INT,,0,,,SPT_WTP1_FM_Active,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_jog_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP1_Jog,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_run_permissive,sp_pond,default,periodic,,DINT,,0,,,WTP1_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_speed_ref_cmd,sp_pond,default,periodic,,FLOAT,,,,,WTP1_Speed_Ref,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_start_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP1_Start,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_stop_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP1_Stop,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_actual_speed,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP1_VFD_Actual_Speed,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_cmd_speed,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP1_VFD_CMD_Speed,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_commsloss,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP1_VFD_CommsLoss,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_dc_bus,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP1_VFD_DCBus,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_error,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP1_VFD_Error,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_faulted,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP1_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_output_current,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP1_VFD_OutputCurrent,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_output_voltage,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP1_VFD_OutputVoltage,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_ready,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP1_VFD_Ready,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_running,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP1_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_01_vfd_timeout_spt,sp_pond,default,periodic,,SINT,,0,,,SPT_WTP1_VFD_TimeOut,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_01_vfd_type,sp_pond,default,periodic,,STRING,,,,,FBK_WTP1_VFD_Type,,16,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_alarm_lockout,sp_pond,default,periodic,,INT,,0,,,WTP2_Alarm_Lockout,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_discharge_hi_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP2_High_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_discharge_hi_lockout_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP2_Hi_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_discharge_hi_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_WTP2_High_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_discharge_lo_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP2_Low_Discharge_PSI,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_discharge_lo_lockout_alm,sp_pond,default,periodic,,BIT,,,,0,AL0_WTP2_Lo_Disch_Lockout,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_discharge_lo_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_WTP2_Low_Discharge_PSI,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_discharge_psi,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_Discharge_PSI,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fault_clear_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP2_FaultClear,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_fault_code,sp_pond,default,periodic,,INT,,0,,,FBK_WTP2_FaultCode,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_01_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM1_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_01_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM1_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_01_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM1_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_01_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM1_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_02_fr,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM2_FR,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_02_t1,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM2_T1,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_02_t2,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM2_T2,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_02_t3,sp_pond,default,periodic,,FLOAT,,,,,Val_WTP2_FM2_T3,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_fm_active_spt,sp_pond,default,periodic,,INT,,0,,,SPT_WTP2_FM_Active,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_jog_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP2_Jog,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_run_permissive,sp_pond,default,periodic,,DINT,,0,,,WTP2_Run_Permissive,,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_speed_ref_cmd,sp_pond,default,periodic,,FLOAT,,,,,WTP2_Speed_Ref,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_start_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP2_Start,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_stop_cmd,sp_pond,default,periodic,,BIT,,,,0,CMD_WTP2_Stop,,,rw,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_actual_speed,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP2_VFD_Actual_Speed,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_cmd_speed,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP2_VFD_CMD_Speed,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_commsloss,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP2_VFD_CommsLoss,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_dc_bus,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP2_VFD_DCBus,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_error,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP2_VFD_Error,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_faulted,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP2_VFD_Faulted,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_output_current,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP2_VFD_OutputCurrent,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_output_voltage,sp_pond,default,periodic,,FLOAT,,,,,FBK_WTP2_VFD_OutputVoltage,2,,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_ready,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP2_VFD_Ready,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_running,sp_pond,default,periodic,,BIT,,,,0,FBK_WTP2_VFD_Running,,,ro,,,none,,,,,,,,,,,,,0,,0,,,,,,,
wtp_02_vfd_timeout_spt,sp_pond,default,periodic,,SINT,,0,,,SPT_WTP2_VFD_TimeOut,,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_02_vfd_type,sp_pond,default,periodic,,STRING,,,,,FBK_WTP2_VFD_Type,,16,ro,,,none,,,,,,,,,,,,,,,0,,,,,,,
wtp_system_start_spt,sp_pond,default,periodic,,FLOAT,,,,,SPT_WTP_System_Start,2,,rw,,,none,,,,,,,,,,,,,,,0,,,,,,,
1 MeasuringPointName ControllerName GroupName UploadType DeadZonePercent DataType ArrayIndex EnableBit BitIndex reverseBit Address Decimal Len ReadWrite Unit Description Transform Type MaxValue MinValue MaxScale MinScale Gain Offset startBit endBit Pt Ct Mapping_table TransDecimal bitMap msecSample storageLwTSDB DataEndianReverse ReadOffset ReadLength WriteOffset WriteLength DataParseMethod BitId
2 cp_01_auto sp_pond default periodic BIT 0 FBK_Charge_Pump_Auto ro none 0 0
3 cp_01_auto_alm sp_pond default periodic BIT 0 AL0_CP1_Not_in_Auto ro none 0 0
4 cp_01_discharge_lo_alm sp_pond default periodic BIT 0 AL0_CP1_Discharge_PSI_Lo ro none 0 0
5 cp_01_discharge_lo_lockout_alm sp_pond default periodic BIT 0 AL0_CP1_Low_Disch_PSI_Lock_Out ro none 0 0
6 cp_01_discharge_lo_spt sp_pond default periodic FLOAT SPT_CP1_Low_Discharge_PSI 2 rw none 0
7 cp_01_discharge_psi sp_pond default periodic FLOAT Val_CP1_Disch_PSI 2 ro none 0
8 cp_01_faulted sp_pond default periodic BIT 0 FBK_Charge_Pump_Faulted ro none 0 0
9 cp_01_hand sp_pond default periodic BIT 0 FBK_Charge_Pump_Hand ro none 0 0
10 cp_01_hoa_alm sp_pond default periodic BIT 0 AL0_CP1_HOA_Off ro none 0 0
11 cp_01_in_hand_alm sp_pond default periodic BIT 0 AL0_Charge_Pump_In_Hand ro none 0 0
12 cp_01_lo_clear_cmd sp_pond default periodic BIT 0 CMD_CP1_LO_Clear rw none 0 0
13 cp_01_run_cmd sp_pond default periodic BIT 0 CMD_CP1_Run rw none 0 0
14 cp_01_run_permissive sp_pond default periodic DINT 0 CP1_Run_Permissive ro none 0
15 cp_01_running sp_pond default periodic BIT 0 FBK_Charge_Pump_Running ro none 0 0
16 cp_02_discharge_psi sp_pond default periodic FLOAT Val_CP2_Disch_PSI 2 ro none 0
17 fm_10_fr sp_pond default periodic FLOAT Val_FM_10in_FR 2 ro none 0
18 fm_10_t1 sp_pond default periodic FLOAT Val_FM_10in_T1 2 ro none 0
19 fm_10_t2 sp_pond default periodic FLOAT Val_FM_10in_T2 2 ro none 0
20 fm_10_t3 sp_pond default periodic FLOAT Val_FM_10in_T3 2 ro none 0
21 fm_12_fr sp_pond default periodic FLOAT Val_FM_12in_FR 2 ro none 0
22 fm_12_t1 sp_pond default periodic FLOAT Val_FM_12in_T1 2 ro none 0
23 fm_12_t2 sp_pond default periodic FLOAT Val_FM_12in_T2 2 ro none 0
24 fm_12_t3 sp_pond default periodic FLOAT Val_FM_12in_T3 2 ro none 0
25 hmi_fault_clear_cmd fm_12_b_fr sp_pond default periodic BIT FLOAT 0 CMD_HMI_Fault_Clear Val_FM_B_12in_FR 2 rw ro none 0 0
26 hmi_system_start_cmd fm_12_b_t1 sp_pond default periodic BIT FLOAT 0 CMD_HMI_System_Start Val_FM_B_12in_T1 2 rw ro none 0 0
27 hmi_system_stop_cmd fm_12_b_t2 sp_pond default periodic BIT FLOAT 0 CMD_HMI_System_Stop Val_FM_B_12in_T2 2 rw ro none 0 0
28 pod_01_enable fm_12_b_t3 sp_pond default periodic BIT FLOAT 0 CFG_Remote_Pod_1_Enable Val_FM_B_12in_T3 2 rw ro none 0 0
29 pod_01_fm_01_fr hmi_fault_clear_cmd sp_pond default periodic FLOAT BIT 0 Val_Pod1_FM1_FR CMD_HMI_Fault_Clear 2 ro rw none 0 0
30 pod_01_fm_01_t1 hmi_system_start_cmd sp_pond default periodic FLOAT BIT 0 Val_Pod1_FM1_T1 CMD_HMI_System_Start 2 ro rw none 0 0
31 pod_01_fm_01_t2 hmi_system_stop_cmd sp_pond default periodic FLOAT BIT 0 Val_Pod1_FM1_T2 CMD_HMI_System_Stop 2 ro rw none 0 0
32 pod_01_fm_01_t3 pod_01_enable sp_pond default periodic FLOAT BIT 0 Val_Pod1_FM1_T3 CFG_Remote_Pod_1_Enable 2 ro rw none 0 0
33 pod_01_fm_02_fr pod_01_fm_01_fr sp_pond default periodic FLOAT Val_Pod1_FM2_FR Val_Pod1_FM1_FR 2 ro none 0
34 pod_01_fm_02_t1 pod_01_fm_01_t1 sp_pond default periodic FLOAT Val_Pod1_FM2_T1 Val_Pod1_FM1_T1 2 ro none 0
35 pod_01_fm_02_t2 pod_01_fm_01_t2 sp_pond default periodic FLOAT Val_Pod1_FM2_T2 Val_Pod1_FM1_T2 2 ro none 0
36 pod_01_fm_02_t3 pod_01_fm_01_t3 sp_pond default periodic FLOAT Val_Pod1_FM2_T3 Val_Pod1_FM1_T3 2 ro none 0
37 pod_01_fm_03_fr pod_01_fm_02_fr sp_pond default periodic FLOAT Val_Pod1_FM3_FR Val_Pod1_FM2_FR 2 ro none 0
38 pod_01_fm_03_t1 pod_01_fm_02_t1 sp_pond default periodic FLOAT Val_Pod1_FM3_T1 Val_Pod1_FM2_T1 2 ro none 0
39 pod_01_fm_03_t2 pod_01_fm_02_t2 sp_pond default periodic FLOAT Val_Pod1_FM3_T2 Val_Pod1_FM2_T2 2 ro none 0
40 pod_01_fm_03_t3 pod_01_fm_02_t3 sp_pond default periodic FLOAT Val_Pod1_FM3_T3 Val_Pod1_FM2_T3 2 ro none 0
41 pod_01_fm_04_fr pod_01_fm_03_fr sp_pond default periodic FLOAT Val_Pod1_FM4_FR Val_Pod1_FM3_FR 2 ro none 0
42 pod_01_fm_04_t1 pod_01_fm_03_t1 sp_pond default periodic FLOAT Val_Pod1_FM4_T1 Val_Pod1_FM3_T1 2 ro none 0
43 pod_01_fm_04_t2 pod_01_fm_03_t2 sp_pond default periodic FLOAT Val_Pod1_FM4_T2 Val_Pod1_FM3_T2 2 ro none 0
44 pod_01_fm_04_t3 pod_01_fm_03_t3 sp_pond default periodic FLOAT Val_Pod1_FM4_T3 Val_Pod1_FM3_T3 2 ro none 0
45 pod_01_pond_level_01 pod_01_fm_04_fr sp_pond default periodic FLOAT Val_Pod1_Pond_Level_1 Val_Pod1_FM4_FR 2 ro none 0
46 pod_01_pond_level_02 pod_01_fm_04_t1 sp_pond default periodic FLOAT Val_Pod1_Pond_Level_2 Val_Pod1_FM4_T1 2 ro none 0
47 pod_01_pond_volume_01 pod_01_fm_04_t2 sp_pond default periodic FLOAT Val_Pod_1_Pond_Volume_1 Val_Pod1_FM4_T2 2 ro none 0
48 pod_01_pond_volume_02 pod_01_fm_04_t3 sp_pond default periodic FLOAT Val_Pod_1_Pond_Volume_2 Val_Pod1_FM4_T3 2 ro none 0
49 pod_02_enable pod_01_pond_level_01 sp_pond default periodic BIT FLOAT 0 CFG_Remote_Pod_2_Enable Val_Pod1_Pond_Level_1 2 rw ro none 0 0
50 pod_02_fm_01_fr pod_01_pond_level_02 sp_pond default periodic FLOAT Val_Pod2_FM1_FR Val_Pod1_Pond_Level_2 2 ro none 0
51 pod_02_fm_01_t1 pod_01_pond_volume_01 sp_pond default periodic FLOAT Val_Pod2_FM1_T1 Val_Pod_1_Pond_Volume_1 2 ro none 0
52 pod_02_fm_01_t2 pod_01_pond_volume_02 sp_pond default periodic FLOAT Val_Pod2_FM1_T2 Val_Pod_1_Pond_Volume_2 2 ro none 0
53 pod_02_fm_01_t3 pod_02_enable sp_pond default periodic FLOAT BIT 0 Val_Pod2_FM1_T3 CFG_Remote_Pod_2_Enable 2 ro rw none 0 0
54 pod_02_fm_02_fr pod_02_fm_01_fr sp_pond default periodic FLOAT Val_Pod2_FM2_FR Val_Pod2_FM1_FR 2 ro none 0
55 pod_02_fm_02_t1 pod_02_fm_01_t1 sp_pond default periodic FLOAT Val_Pod2_FM2_T1 Val_Pod2_FM1_T1 2 ro none 0
56 pod_02_fm_02_t2 pod_02_fm_01_t2 sp_pond default periodic FLOAT Val_Pod2_FM2_T2 Val_Pod2_FM1_T2 2 ro none 0
57 pod_02_fm_02_t3 pod_02_fm_01_t3 sp_pond default periodic FLOAT Val_Pod2_FM2_T3 Val_Pod2_FM1_T3 2 ro none 0
58 pod_02_fm_03_fr pod_02_fm_02_fr sp_pond default periodic FLOAT Val_Pod2_FM3_FR Val_Pod2_FM2_FR 2 ro none 0
59 pod_02_fm_03_t1 pod_02_fm_02_t1 sp_pond default periodic FLOAT Val_Pod2_FM3_T1 Val_Pod2_FM2_T1 2 ro none 0
60 pod_02_fm_03_t2 pod_02_fm_02_t2 sp_pond default periodic FLOAT Val_Pod2_FM3_T2 Val_Pod2_FM2_T2 2 ro none 0
61 pod_02_fm_03_t3 pod_02_fm_02_t3 sp_pond default periodic FLOAT Val_Pod2_FM3_T3 Val_Pod2_FM2_T3 2 ro none 0
62 pod_02_fm_04_fr pod_02_fm_03_fr sp_pond default periodic FLOAT Val_Pod2_FM4_FR Val_Pod2_FM3_FR 2 ro none 0
63 pod_02_fm_04_t1 pod_02_fm_03_t1 sp_pond default periodic FLOAT Val_Pod2_FM4_T1 Val_Pod2_FM3_T1 2 ro none 0
64 pod_02_fm_04_t2 pod_02_fm_03_t2 sp_pond default periodic FLOAT Val_Pod2_FM4_T2 Val_Pod2_FM3_T2 2 ro none 0
65 pod_02_fm_04_t3 pod_02_fm_03_t3 sp_pond default periodic FLOAT Val_Pod2_FM4_T3 Val_Pod2_FM3_T3 2 ro none 0
66 pod_02_pond_level_01 pod_02_fm_04_fr sp_pond default periodic FLOAT Val_Pod2_Pond_Level_1 Val_Pod2_FM4_FR 2 ro none 0
67 pod_02_pond_level_02 pod_02_fm_04_t1 sp_pond default periodic FLOAT Val_Pod2_Pond_Level_2 Val_Pod2_FM4_T1 2 ro none 0
68 pod_02_pond_volume_01 pod_02_fm_04_t2 sp_pond default periodic FLOAT Val_Pod_2_Pond_Volume_1 Val_Pod2_FM4_T2 2 ro none 0
69 pod_02_pond_volume_02 pod_02_fm_04_t3 sp_pond default periodic FLOAT Val_Pod_2_Pond_Volume_2 Val_Pod2_FM4_T3 2 ro none 0
70 pod_03_enable pod_02_pond_level_01 sp_pond default periodic BIT FLOAT 0 CFG_Remote_Pod_3_Enable Val_Pod2_Pond_Level_1 2 rw ro none 0 0
71 pod_03_fm_01_fr pod_02_pond_level_02 sp_pond default periodic FLOAT Val_Pod3_FM1_FR Val_Pod2_Pond_Level_2 2 ro none 0
72 pod_03_fm_01_t1 pod_02_pond_volume_01 sp_pond default periodic FLOAT Val_Pod3_FM1_T1 Val_Pod_2_Pond_Volume_1 2 ro none 0
73 pod_03_fm_01_t2 pod_02_pond_volume_02 sp_pond default periodic FLOAT Val_Pod3_FM1_T2 Val_Pod_2_Pond_Volume_2 2 ro none 0
74 pod_03_fm_01_t3 pod_03_enable sp_pond default periodic FLOAT BIT 0 Val_Pod3_FM1_T3 CFG_Remote_Pod_3_Enable 2 ro rw none 0 0
75 pod_03_fm_02_fr pod_03_fm_01_fr sp_pond default periodic FLOAT Val_Pod3_FM2_FR Val_Pod3_FM1_FR 2 ro none 0
76 pod_03_fm_02_t1 pod_03_fm_01_t1 sp_pond default periodic FLOAT Val_Pod3_FM2_T1 Val_Pod3_FM1_T1 2 ro none 0
77 pod_03_fm_02_t2 pod_03_fm_01_t2 sp_pond default periodic FLOAT Val_Pod3_FM2_T2 Val_Pod3_FM1_T2 2 ro none 0
78 pod_03_fm_02_t3 pod_03_fm_01_t3 sp_pond default periodic FLOAT Val_Pod3_FM2_T3 Val_Pod3_FM1_T3 2 ro none 0
79 pod_03_fm_03_fr pod_03_fm_02_fr sp_pond default periodic FLOAT Val_Pod3_FM3_FR Val_Pod3_FM2_FR 2 ro none 0
80 pod_03_fm_03_t1 pod_03_fm_02_t1 sp_pond default periodic FLOAT Val_Pod3_FM3_T1 Val_Pod3_FM2_T1 2 ro none 0
81 pod_03_fm_03_t2 pod_03_fm_02_t2 sp_pond default periodic FLOAT Val_Pod3_FM3_T2 Val_Pod3_FM2_T2 2 ro none 0
82 pod_03_fm_03_t3 pod_03_fm_02_t3 sp_pond default periodic FLOAT Val_Pod3_FM3_T3 Val_Pod3_FM2_T3 2 ro none 0
83 pod_03_fm_04_fr pod_03_fm_03_fr sp_pond default periodic FLOAT Val_Pod3_FM4_FR Val_Pod3_FM3_FR 2 ro none 0
84 pod_03_fm_04_t1 pod_03_fm_03_t1 sp_pond default periodic FLOAT Val_Pod3_FM4_T1 Val_Pod3_FM3_T1 2 ro none 0
85 pod_03_fm_04_t2 pod_03_fm_03_t2 sp_pond default periodic FLOAT Val_Pod3_FM4_T2 Val_Pod3_FM3_T2 2 ro none 0
86 pod_03_fm_04_t3 pod_03_fm_03_t3 sp_pond default periodic FLOAT Val_Pod3_FM4_T3 Val_Pod3_FM3_T3 2 ro none 0
87 pod_03_pond_level_01 pod_03_fm_04_fr sp_pond default periodic FLOAT Val_Pod3_Pond_Level_1 Val_Pod3_FM4_FR 2 ro none 0
88 pod_03_pond_level_02 pod_03_fm_04_t1 sp_pond default periodic FLOAT Val_Pod3_Pond_Level_2 Val_Pod3_FM4_T1 2 ro none 0
89 pod_03_pond_volume_01 pod_03_fm_04_t2 sp_pond default periodic FLOAT Val_Pod_3_Pond_Volume_1 Val_Pod3_FM4_T2 2 ro none 0
90 pod_03_pond_volume_02 pod_03_fm_04_t3 sp_pond default periodic FLOAT Val_Pod_3_Pond_Volume_2 Val_Pod3_FM4_T3 2 ro none 0
91 power_supply_faulted pod_03_pond_level_01 sp_pond default periodic BIT FLOAT 0 FBK_Power_Supply_Faulted Val_Pod3_Pond_Level_1 2 ro none 0 0
92 power_suppy_faulted pod_03_pond_level_02 sp_pond default periodic BIT FLOAT 0 AL0_PS_Faulted Val_Pod3_Pond_Level_2 2 ro none 0 0
93 scada_fault_clear_cmd pod_03_pond_volume_01 sp_pond default periodic BIT FLOAT 0 cmd_Scada_clear Val_Pod_3_Pond_Volume_1 2 rw ro none 0 0
94 scada_start_cmd pod_03_pond_volume_02 sp_pond default periodic BIT FLOAT 0 CMD_Scada_Start Val_Pod_3_Pond_Volume_2 2 rw ro none 0 0
95 scada_stop_cmd power_supply_faulted sp_pond default periodic BIT 0 CMD_Scada_Stop FBK_Power_Supply_Faulted rw ro none 0 0
96 tp_01_discharge_hi_lockout power_suppy_faulted sp_pond default periodic BIT 0 TP1_Lockout_Counter_Hi_Disch AL0_PS_Faulted ro none 0 0
97 tp_01_hi_clear_cmd scada_fault_clear_cmd sp_pond default periodic BIT 0 CMD_TP1_Hi_Clear cmd_Scada_clear rw none 0 0
98 tp_01_lo_clear_cmd scada_start_cmd sp_pond default periodic BIT 0 CMD_TP1_Lo_Clear CMD_Scada_Start rw none 0 0
99 tp_01_pid_manual_spt scada_stop_cmd sp_pond default periodic FLOAT BIT 0 SPT_TP1_PID_Manual_Speed CMD_Scada_Stop 2 rw none 0 0
100 tp_01_pid_mode_spt tp_01_discharge_hi_lockout sp_pond default periodic INT BIT 0 0 SPT_TP1_Mode TP1_Lockout_Counter_Hi_Disch rw ro none 0 0
101 tp_01_pid_spt tp_01_hi_clear_cmd sp_pond default periodic FLOAT BIT 0 SPT_TP1_PID_Setpoint CMD_TP1_Hi_Clear 2 rw none 0 0
102 tp_02_hi_clear_cmd tp_01_lo_clear_cmd sp_pond default periodic BIT 0 CMD_TP2_Hi_Clear CMD_TP1_Lo_Clear rw none 0 0
103 tp_02_lo_clear_cmd tp_01_pid_manual_spt sp_pond default periodic BIT FLOAT 0 CMD_TP2_Lo_Clear SPT_TP1_PID_Manual_Speed 2 rw none 0 0
104 tp_02_pid_inverse_cmd tp_01_pid_mode_spt sp_pond default periodic BIT INT 0 0 CMD_TP2_PID_Inverse SPT_TP1_Mode rw none 0 0
105 tp_02_pid_loop_pv tp_01_pid_spt sp_pond default periodic FLOAT TP2_PID_Loop_PV SPT_TP1_PID_Setpoint 2 ro rw none 0
106 tp_02_pid_manual_cmd tp_02_hi_clear_cmd sp_pond default periodic BIT 0 CMD_TP2_PID_Manual CMD_TP2_Hi_Clear rw none 0 0
107 tp_02_pid_manual_spt tp_02_lo_clear_cmd sp_pond default periodic FLOAT BIT 0 SPT_TP2_PID_Manual_Speed CMD_TP2_Lo_Clear 2 rw none 0 0
108 tp_02_pid_mode_spt tp_02_pid_inverse_cmd sp_pond default periodic INT BIT 0 0 SPT_TP2_Mode CMD_TP2_PID_Inverse rw none 0 0
109 tp_02_pid_spt tp_02_pid_loop_pv sp_pond default periodic FLOAT SPT_TP2_PID_Setpoint TP2_PID_Loop_PV 2 rw ro none 0
110 tp_vfds_faulted_alm tp_02_pid_manual_cmd sp_pond default periodic BIT 0 AL0_Both_TP_VFDs_Faulted CMD_TP2_PID_Manual ro rw none 0 0
111 ups_faulted tp_02_pid_manual_spt sp_pond default periodic BIT FLOAT 0 FBK_UPS_Faulted SPT_TP2_PID_Manual_Speed 2 ro rw none 0 0
112 ups_faulted_alm tp_02_pid_mode_spt sp_pond default periodic BIT INT 0 0 AL0_UPS_Faulted SPT_TP2_Mode ro rw none 0 0
113 wtp_01_alarm_lockout tp_02_pid_spt sp_pond default periodic INT FLOAT 0 WTP1_Alarm_Lockout SPT_TP2_PID_Setpoint 2 ro rw none 0
114 wtp_01_discharge_hi_alm tp_vfds_faulted_alm sp_pond default periodic BIT 0 AL0_WTP1_High_Discharge_PSI AL0_Both_TP_VFDs_Faulted ro none 0 0
115 wtp_01_discharge_hi_lockout_alm ups_faulted sp_pond default periodic BIT 0 AL0_WTP1_Hi_Disch_Lockout FBK_UPS_Faulted ro none 0 0
116 wtp_01_discharge_hi_spt ups_faulted_alm sp_pond default periodic FLOAT BIT 0 SPT_WTP1_High_Discharge_PSI AL0_UPS_Faulted 2 rw ro none 0 0
117 wtp_01_discharge_lo_alm wtp_01_alarm_lockout sp_pond default periodic BIT INT 0 0 AL0_WTP1_Low_Discharge_PSI WTP1_Alarm_Lockout ro none 0 0
118 wtp_01_discharge_lo_lockout_alm wtp_01_discharge_hi_alm sp_pond default periodic BIT 0 AL0_WTP1_Lo_Disch_Lockout AL0_WTP1_High_Discharge_PSI ro none 0 0
119 wtp_01_discharge_lo_spt wtp_01_discharge_hi_lockout_alm sp_pond default periodic FLOAT BIT 0 SPT_WTP1_Low_Discharge_PSI AL0_WTP1_Hi_Disch_Lockout 2 rw ro none 0 0
120 wtp_01_discharge_psi wtp_01_discharge_hi_spt sp_pond default periodic FLOAT Val_WTP1_Discharge_PSI SPT_WTP1_High_Discharge_PSI 2 ro rw none 0
121 wtp_01_fault_clear_cmd wtp_01_discharge_lo_alm sp_pond default periodic BIT 0 CMD_WTP1_FaultClear AL0_WTP1_Low_Discharge_PSI rw ro none 0 0
122 wtp_01_fault_code wtp_01_discharge_lo_lockout_alm sp_pond default periodic INT BIT 0 0 FBK_WTP1_FaultCode AL0_WTP1_Lo_Disch_Lockout ro none 0 0
123 wtp_01_fm_01_fr wtp_01_discharge_lo_spt sp_pond default periodic FLOAT Val_WTP1_FM1_FR SPT_WTP1_Low_Discharge_PSI 2 ro rw none 0
124 wtp_01_fm_01_t1 wtp_01_discharge_psi sp_pond default periodic FLOAT Val_WTP1_FM1_T1 Val_WTP1_Discharge_PSI 2 ro none 0
125 wtp_01_fm_01_t2 wtp_01_fault_clear_cmd sp_pond default periodic FLOAT BIT 0 Val_WTP1_FM1_T2 CMD_WTP1_FaultClear 2 ro rw none 0 0
126 wtp_01_fm_01_t3 wtp_01_fault_code sp_pond default periodic FLOAT INT 0 Val_WTP1_FM1_T3 FBK_WTP1_FaultCode 2 ro none 0
127 wtp_01_fm_02_fr wtp_01_fm_01_fr sp_pond default periodic FLOAT Val_WTP1_FM2_FR Val_WTP1_FM1_FR 2 ro none 0
128 wtp_01_fm_02_t1 wtp_01_fm_01_t1 sp_pond default periodic FLOAT Val_WTP1_FM2_T1 Val_WTP1_FM1_T1 2 ro none 0
129 wtp_01_fm_02_t2 wtp_01_fm_01_t2 sp_pond default periodic FLOAT Val_WTP1_FM2_T2 Val_WTP1_FM1_T2 2 ro none 0
130 wtp_01_fm_02_t3 wtp_01_fm_01_t3 sp_pond default periodic FLOAT Val_WTP1_FM2_T3 Val_WTP1_FM1_T3 2 ro none 0
131 wtp_01_fm_active_spt wtp_01_fm_02_fr sp_pond default periodic INT FLOAT 0 SPT_WTP1_FM_Active Val_WTP1_FM2_FR 2 rw ro none 0
132 wtp_01_jog_cmd wtp_01_fm_02_t1 sp_pond default periodic BIT FLOAT 0 CMD_WTP1_Jog Val_WTP1_FM2_T1 2 rw ro none 0 0
133 wtp_01_run_permissive wtp_01_fm_02_t2 sp_pond default periodic DINT FLOAT 0 WTP1_Run_Permissive Val_WTP1_FM2_T2 2 ro none 0
134 wtp_01_speed_ref_cmd wtp_01_fm_02_t3 sp_pond default periodic FLOAT WTP1_Speed_Ref Val_WTP1_FM2_T3 2 ro none 0
135 wtp_01_start_cmd wtp_01_fm_active_spt sp_pond default periodic BIT INT 0 0 CMD_WTP1_Start SPT_WTP1_FM_Active rw none 0 0
136 wtp_01_stop_cmd wtp_01_jog_cmd sp_pond default periodic BIT 0 CMD_WTP1_Stop CMD_WTP1_Jog rw none 0 0
137 wtp_01_vfd_actual_speed wtp_01_run_permissive sp_pond default periodic FLOAT DINT 0 FBK_WTP1_VFD_Actual_Speed WTP1_Run_Permissive 2 ro none 0
138 wtp_01_vfd_cmd_speed wtp_01_speed_ref_cmd sp_pond default periodic FLOAT FBK_WTP1_VFD_CMD_Speed WTP1_Speed_Ref 2 ro none 0
139 wtp_01_vfd_commsloss wtp_01_start_cmd sp_pond default periodic BIT 0 FBK_WTP1_VFD_CommsLoss CMD_WTP1_Start ro rw none 0 0
140 wtp_01_vfd_dc_bus wtp_01_stop_cmd sp_pond default periodic FLOAT BIT 0 FBK_WTP1_VFD_DCBus CMD_WTP1_Stop 2 ro rw none 0 0
141 wtp_01_vfd_error wtp_01_vfd_actual_speed sp_pond default periodic BIT FLOAT 0 FBK_WTP1_VFD_Error FBK_WTP1_VFD_Actual_Speed 2 ro none 0 0
142 wtp_01_vfd_faulted wtp_01_vfd_cmd_speed sp_pond default periodic BIT FLOAT 0 FBK_WTP1_VFD_Faulted FBK_WTP1_VFD_CMD_Speed 2 ro none 0 0
143 wtp_01_vfd_output_current wtp_01_vfd_commsloss sp_pond default periodic FLOAT BIT 0 FBK_WTP1_VFD_OutputCurrent FBK_WTP1_VFD_CommsLoss 2 ro none 0 0
144 wtp_01_vfd_output_voltage wtp_01_vfd_dc_bus sp_pond default periodic FLOAT FBK_WTP1_VFD_OutputVoltage FBK_WTP1_VFD_DCBus 2 ro none 0
145 wtp_01_vfd_ready wtp_01_vfd_error sp_pond default periodic BIT 0 FBK_WTP1_VFD_Ready FBK_WTP1_VFD_Error ro none 0 0
146 wtp_01_vfd_running wtp_01_vfd_faulted sp_pond default periodic BIT 0 FBK_WTP1_VFD_Running FBK_WTP1_VFD_Faulted ro none 0 0
147 wtp_01_vfd_timeout_spt wtp_01_vfd_output_current sp_pond default periodic SINT FLOAT 0 SPT_WTP1_VFD_TimeOut FBK_WTP1_VFD_OutputCurrent 2 rw ro none 0
148 wtp_01_vfd_type wtp_01_vfd_output_voltage sp_pond default periodic STRING FLOAT FBK_WTP1_VFD_Type FBK_WTP1_VFD_OutputVoltage 2 16 ro none 0
149 wtp_02_alarm_lockout wtp_01_vfd_ready sp_pond default periodic INT BIT 0 0 WTP2_Alarm_Lockout FBK_WTP1_VFD_Ready ro none 0 0
150 wtp_02_discharge_hi_alm wtp_01_vfd_running sp_pond default periodic BIT 0 AL0_WTP2_High_Discharge_PSI FBK_WTP1_VFD_Running ro none 0 0
151 wtp_02_discharge_hi_lockout_alm wtp_01_vfd_timeout_spt sp_pond default periodic BIT SINT 0 0 AL0_WTP2_Hi_Disch_Lockout SPT_WTP1_VFD_TimeOut ro rw none 0 0
152 wtp_02_discharge_hi_spt wtp_01_vfd_type sp_pond default periodic FLOAT STRING SPT_WTP2_High_Discharge_PSI FBK_WTP1_VFD_Type 2 16 rw ro none 0
153 wtp_02_discharge_lo_alm wtp_02_alarm_lockout sp_pond default periodic BIT INT 0 0 AL0_WTP2_Low_Discharge_PSI WTP2_Alarm_Lockout ro none 0 0
154 wtp_02_discharge_lo_lockout_alm wtp_02_discharge_hi_alm sp_pond default periodic BIT 0 AL0_WTP2_Lo_Disch_Lockout AL0_WTP2_High_Discharge_PSI ro none 0 0
155 wtp_02_discharge_lo_spt wtp_02_discharge_hi_lockout_alm sp_pond default periodic FLOAT BIT 0 SPT_WTP2_Low_Discharge_PSI AL0_WTP2_Hi_Disch_Lockout 2 rw ro none 0 0
156 wtp_02_discharge_psi wtp_02_discharge_hi_spt sp_pond default periodic FLOAT Val_WTP2_Discharge_PSI SPT_WTP2_High_Discharge_PSI 2 ro rw none 0
157 wtp_02_fault_clear_cmd wtp_02_discharge_lo_alm sp_pond default periodic BIT 0 CMD_WTP2_FaultClear AL0_WTP2_Low_Discharge_PSI rw ro none 0 0
158 wtp_02_fault_code wtp_02_discharge_lo_lockout_alm sp_pond default periodic INT BIT 0 0 FBK_WTP2_FaultCode AL0_WTP2_Lo_Disch_Lockout ro none 0 0
159 wtp_02_fm_01_fr wtp_02_discharge_lo_spt sp_pond default periodic FLOAT Val_WTP2_FM1_FR SPT_WTP2_Low_Discharge_PSI 2 ro rw none 0
160 wtp_02_fm_01_t1 wtp_02_discharge_psi sp_pond default periodic FLOAT Val_WTP2_FM1_T1 Val_WTP2_Discharge_PSI 2 ro none 0
161 wtp_02_fm_01_t2 wtp_02_fault_clear_cmd sp_pond default periodic FLOAT BIT 0 Val_WTP2_FM1_T2 CMD_WTP2_FaultClear 2 ro rw none 0 0
162 wtp_02_fm_01_t3 wtp_02_fault_code sp_pond default periodic FLOAT INT 0 Val_WTP2_FM1_T3 FBK_WTP2_FaultCode 2 ro none 0
163 wtp_02_fm_02_fr wtp_02_fm_01_fr sp_pond default periodic FLOAT Val_WTP2_FM2_FR Val_WTP2_FM1_FR 2 ro none 0
164 wtp_02_fm_02_t1 wtp_02_fm_01_t1 sp_pond default periodic FLOAT Val_WTP2_FM2_T1 Val_WTP2_FM1_T1 2 ro none 0
165 wtp_02_fm_02_t2 wtp_02_fm_01_t2 sp_pond default periodic FLOAT Val_WTP2_FM2_T2 Val_WTP2_FM1_T2 2 ro none 0
166 wtp_02_fm_02_t3 wtp_02_fm_01_t3 sp_pond default periodic FLOAT Val_WTP2_FM2_T3 Val_WTP2_FM1_T3 2 ro none 0
167 wtp_02_fm_active_spt wtp_02_fm_02_fr sp_pond default periodic INT FLOAT 0 SPT_WTP2_FM_Active Val_WTP2_FM2_FR 2 rw ro none 0
168 wtp_02_jog_cmd wtp_02_fm_02_t1 sp_pond default periodic BIT FLOAT 0 CMD_WTP2_Jog Val_WTP2_FM2_T1 2 rw ro none 0 0
169 wtp_02_run_permissive wtp_02_fm_02_t2 sp_pond default periodic DINT FLOAT 0 WTP2_Run_Permissive Val_WTP2_FM2_T2 2 ro none 0
170 wtp_02_speed_ref_cmd wtp_02_fm_02_t3 sp_pond default periodic FLOAT WTP2_Speed_Ref Val_WTP2_FM2_T3 2 ro none 0
171 wtp_02_start_cmd wtp_02_fm_active_spt sp_pond default periodic BIT INT 0 0 CMD_WTP2_Start SPT_WTP2_FM_Active rw none 0 0
172 wtp_02_stop_cmd wtp_02_jog_cmd sp_pond default periodic BIT 0 CMD_WTP2_Stop CMD_WTP2_Jog rw none 0 0
173 wtp_02_vfd_actual_speed wtp_02_run_permissive sp_pond default periodic FLOAT DINT 0 FBK_WTP2_VFD_Actual_Speed WTP2_Run_Permissive 2 ro none 0
174 wtp_02_vfd_cmd_speed wtp_02_speed_ref_cmd sp_pond default periodic FLOAT FBK_WTP2_VFD_CMD_Speed WTP2_Speed_Ref 2 ro none 0
175 wtp_02_vfd_commsloss wtp_02_start_cmd sp_pond default periodic BIT 0 FBK_WTP2_VFD_CommsLoss CMD_WTP2_Start ro rw none 0 0
176 wtp_02_vfd_dc_bus wtp_02_stop_cmd sp_pond default periodic FLOAT BIT 0 FBK_WTP2_VFD_DCBus CMD_WTP2_Stop 2 ro rw none 0 0
177 wtp_02_vfd_error wtp_02_vfd_actual_speed sp_pond default periodic BIT FLOAT 0 FBK_WTP2_VFD_Error FBK_WTP2_VFD_Actual_Speed 2 ro none 0 0
178 wtp_02_vfd_faulted wtp_02_vfd_cmd_speed sp_pond default periodic BIT FLOAT 0 FBK_WTP2_VFD_Faulted FBK_WTP2_VFD_CMD_Speed 2 ro none 0 0
179 wtp_02_vfd_output_current wtp_02_vfd_commsloss sp_pond default periodic FLOAT BIT 0 FBK_WTP2_VFD_OutputCurrent FBK_WTP2_VFD_CommsLoss 2 ro none 0 0
180 wtp_02_vfd_output_voltage wtp_02_vfd_dc_bus sp_pond default periodic FLOAT FBK_WTP2_VFD_OutputVoltage FBK_WTP2_VFD_DCBus 2 ro none 0
181 wtp_02_vfd_ready wtp_02_vfd_error sp_pond default periodic BIT 0 FBK_WTP2_VFD_Ready FBK_WTP2_VFD_Error ro none 0 0
182 wtp_02_vfd_running wtp_02_vfd_faulted sp_pond default periodic BIT 0 FBK_WTP2_VFD_Running FBK_WTP2_VFD_Faulted ro none 0 0
183 wtp_02_vfd_timeout_spt wtp_02_vfd_output_current sp_pond default periodic SINT FLOAT 0 SPT_WTP2_VFD_TimeOut FBK_WTP2_VFD_OutputCurrent 2 rw ro none 0
184 wtp_02_vfd_type wtp_02_vfd_output_voltage sp_pond default periodic STRING FLOAT FBK_WTP2_VFD_Type FBK_WTP2_VFD_OutputVoltage 2 16 ro none 0
185 wtp_system_start_spt wtp_02_vfd_ready sp_pond default periodic FLOAT BIT 0 SPT_WTP_System_Start FBK_WTP2_VFD_Ready 2 rw ro none 0 0
186 wtp_02_vfd_running sp_pond default periodic BIT 0 FBK_WTP2_VFD_Running ro none 0 0
187 wtp_02_vfd_timeout_spt sp_pond default periodic SINT 0 SPT_WTP2_VFD_TimeOut rw none 0
188 wtp_02_vfd_type sp_pond default periodic STRING FBK_WTP2_VFD_Type 16 ro none 0
189 wtp_system_start_spt sp_pond default periodic FLOAT SPT_WTP_System_Start 2 rw none 0