I wanted to implement this circular buffer to see how it compared in an A/B test to a rolling average. I am having some difficulty when creating multiple sensor instances because the buffer(10) ends up containing all the sensor values rather than 10 values of the same sensor. I’m not sure if it’s an issue using static variables or my technique. Without over detailing these are my basic steps. I created two-class, Temp_Sensors which holds my read operations, averaging, and conversion methods, and Temp_Sensor which is a subclass of Temp_Sensors and has a constructor in which sensor instances send properties about the sensor. There are four flavors that require different processing. My constructor looks like this:
Self.Sensor_Name = Sensor_Name
Self.Sensor_Number = Sensor_Number
Self.Sensor_Bank = Sensor_Bank
Self.Sensor_Conversion_Type = Sensor_Conversion_Type
The instance of the sensors sent to the constructor look like this:
Sensors.Append(New Temp_Sensor(“Storage Area”,2,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Floor Intake Temp”,3,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Ceiling Temp”,4,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Kitchen Temp”,5,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Upstairs Temp”,6,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Bedroom Temp”,7,“PWA2”,“LowTemp”))
Sensors.Append(New Temp_Sensor(“Boiler Temp”,0,“PWA8”,“HighTemp”))
Sensors.Append(New Temp_Sensor(“Loop Pump Temp”,1,“PWA8”,“HighTemp”))
Sensors.Append(New Temp_Sensor(“DHW Tank Temp”,2,“PWA8”,“HighTemp”))
Sensors.Append(New Temp_Sensor(“Boiler Line Temp”,3,“PWA8”,“HighTemp”))
Sensors.Append(New Temp_Sensor(“Outside Temp”,7,“PWA8”,“HighTemp”))
Sensors.Append(New Temp_Sensor(“Cloud Sensor”,8,“PWA8”,“HighLight”))
Sensors.Append(New Temp_Sensor(“Dusk Sensor”,9,“PWA8”,“Dusk”))
Sensors.Append(New Temp_Sensor(“Cal Sensor 14”,14,“PWA8”,“None”))
Sensors.Append(New Temp_Sensor(“Cal Sensor 15”,9,“PWA8”,“None”))
The circular averaging method in Temp_Sensors looks like this:
Static buffer(10) As Double
Static sampleCount As Integer = 0
Static bPtr As Integer = 0
buffer(bPtr) = Sensor_Value
sampleCount = Min(10,sampleCount+1)
Dim sSum As Double = 0
For i As Integer = 0 To sampleCount-1
sSum = sSum + buffer(i)
Next
bPtr=(bPtr+1) Mod 10
Sensor_CircularAvg = sSum/sampleCount
I was thinking (Static buffer(10)) in the MovingAverage method in Temp_Sensors would hold a buffer for each individual sensor and that is not the case.
I need to have each static buffer(10) hold only one sensors values.