control_loop_health
control_loop_health ¤
ControlLoopHealthEvents ¤
ControlLoopHealthEvents(
dataframe: DataFrame,
setpoint_uuid: str,
actual_uuid: str,
*,
output_uuid: Optional[str] = None,
event_uuid: str = "eng:control_loop_health",
value_column: str = "value_double",
time_column: str = "systime"
)
Bases: Base
Engineering: Control Loop Health
Continuously assess PID/control loop health from setpoint + actual pairs, independent of setpoint changes. Computes error integrals, detects oscillation in the error signal, and checks for valve saturation.
Methods: - error_integrals: Per-window IAE, ISE, ITAE, bias. - detect_oscillation: Sustained oscillation in the error signal. - output_saturation: Valve pegged at limits. - loop_health_summary: Shift-level report card.
error_integrals ¤
error_integrals(window: str = '1h') -> pd.DataFrame
Per-window error integrals for control loop performance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
window
|
str
|
Resample window (e.g. '1h', '8h'). |
'1h'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: window_start, iae, ise, itae, bias, |
DataFrame
|
sample_count. |
detect_oscillation ¤
detect_oscillation(
window: str = "5min", min_crossings: int = 4
) -> pd.DataFrame
Detect sustained oscillation in the error signal.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
window
|
str
|
Analysis window size. |
'5min'
|
min_crossings
|
int
|
Minimum zero-crossings to flag oscillation. |
4
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: start, end, uuid, is_delta, |
DataFrame
|
crossing_count, estimated_period_seconds, amplitude, |
DataFrame
|
damping_direction. |
output_saturation ¤
output_saturation(
high_limit: float = 100.0,
low_limit: float = 0.0,
window: str = "1h",
) -> pd.DataFrame
Detect when controller output is pegged at limits.
Requires output_uuid in constructor.
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: window_start, pct_time_at_high, |
DataFrame
|
pct_time_at_low, pct_time_saturated, longest_saturation_seconds. |
loop_health_summary ¤
loop_health_summary(window: str = '8h') -> pd.DataFrame
Shift-level report card combining all loop health metrics.
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame with columns: window_start, iae, bias, |
DataFrame
|
oscillation_count, pct_saturated, health_grade. |