Skip to content

Commit

Permalink
Smooth out noisy feedback from model fit
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeNaccarato committed Jul 19, 2024
1 parent 8597538 commit 8797e4f
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
21 changes: 16 additions & 5 deletions src/boilerdaq/daq.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from datetime import datetime, timedelta
from math import isnan
from pathlib import Path
from statistics import mean
from tempfile import NamedTemporaryFile
from textwrap import dedent
from typing import TYPE_CHECKING, Any, NamedTuple, Self
Expand Down Expand Up @@ -621,6 +622,7 @@ def __init__(
gains: tuple[float, float, float],
output_limits: tuple[float, float],
backup_feedback_result: Result | None = None,
periods: int = 1,
):
self.control_result: PowerResult = control_result # type: ignore
self.feedback_result: Result = feedback_result
Expand All @@ -635,6 +637,7 @@ def __init__(
self.feedback_value = (
self.feedback_result.value or self.backup_feedback_result.value
)
self.periods = periods

def start(self):
"""Start the controller."""
Expand All @@ -646,11 +649,19 @@ def close(self):

def update(self):
"""Update the PID controller."""
self.feedback_value = (
self.backup_feedback_result.value
if isnan(self.feedback_result.value)
else self.backup_feedback_result.value
)
if self.periods == 1:
self.feedback_value = (
self.backup_feedback_result.value
if isnan(self.feedback_result.value)
else self.feedback_result.value
)
else:
feedback_result = mean(list(self.feedback_result.history)[-self.periods :])
self.feedback_value = (
mean(list(self.backup_feedback_result.history)[-self.periods :])
if isnan(feedback_result)
else feedback_result
)
control_value = self.pid(self.feedback_value)
self.control_result.write(control_value)

Expand Down
1 change: 1 addition & 0 deletions src/boilerdaq/stages/controlled/surface_control.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def looper(surface_temp_setpoint: float = SURFACE_TEMP_SETPOINT) -> Looper: # n
control_result=get_result(name=CONTROL_SENSOR_NAME, results=results),
feedback_result=fit_result,
backup_feedback_result=get_result(name=BACKUP_TEMP, results=results),
periods=5,
setpoint=surface_temp_setpoint,
gains=PID_GAINS,
output_limits=OUTPUT_LIMITS,
Expand Down

0 comments on commit 8797e4f

Please sign in to comment.