新增输出稳态时滑动窗口流量均值和标准差,以及稳态误差(判稳成功时目标流量减去当时流量)。
目前逻辑是「一直控制 + 每秒状态照常输出 + 稳态时额外多打印一次性能报告」。 新增一个可选的自动停止功能--config开关,「达到稳态后自动停止控制」,让 reporter 通知主循环退出。
This commit is contained in:
@@ -54,6 +54,8 @@ STEADY_STATE_WINDOW_S = 2.0 # 滑动时间窗口长度
|
||||
STEADY_STATE_BAND_PCT = 2.0 # 滑窗均值相对目标的允许误差带(±2%)
|
||||
STEADY_STATE_STD_PCT = 2.0 # 滑窗标准差阈值(相对目标百分比)
|
||||
|
||||
AUTO_STOP_ON_STEADY = True # 达到稳态后是否自动停止控制(False 则持续控制)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 阀门执行机构
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -189,6 +189,10 @@ def run(target_flow_slm):
|
||||
recorder.record(result)
|
||||
reporter.observe(result)
|
||||
|
||||
if config.AUTO_STOP_ON_STEADY and reporter.steady_reached:
|
||||
logger.info("已达到稳态,自动停止控制")
|
||||
break
|
||||
|
||||
if now >= next_status_time or result.status != "OK":
|
||||
logger.info(format_status(result))
|
||||
next_status_time = now + config.STATUS_PRINT_PERIOD_S
|
||||
|
||||
@@ -43,6 +43,9 @@ class PerformanceReporter:
|
||||
|
||||
self.target_flow_slm = None
|
||||
self.settling_time_s = None
|
||||
self.steady_mean = None
|
||||
self.steady_std = None
|
||||
self.steady_error_slm = None
|
||||
self._first_timestamp = None
|
||||
self._peak_flow_slm = None
|
||||
self._min_flow_slm = None
|
||||
@@ -94,6 +97,9 @@ class PerformanceReporter:
|
||||
if abs(mean - target) <= band and std <= std_threshold:
|
||||
self._reached = True
|
||||
self.settling_time_s = elapsed_s
|
||||
self.steady_mean = mean
|
||||
self.steady_std = std
|
||||
self.steady_error_slm = target - mean
|
||||
self._report()
|
||||
|
||||
def finalize(self):
|
||||
@@ -101,6 +107,11 @@ class PerformanceReporter:
|
||||
if not self._reached and self.target_flow_slm is not None:
|
||||
self._log("info", "本次运行未达到稳态,未生成控制性能报告")
|
||||
|
||||
@property
|
||||
def steady_reached(self):
|
||||
"""是否已判定达到稳态(供主循环决定是否自动停止)。"""
|
||||
return self._reached
|
||||
|
||||
def _report(self):
|
||||
target = self.target_flow_slm
|
||||
initial = self.initial_flow_slm
|
||||
@@ -134,6 +145,12 @@ class PerformanceReporter:
|
||||
f"{self.flow_range_max_slm:.3f} SLM"
|
||||
),
|
||||
f"调节时间(至稳态): {self.settling_time_s:.3f} s",
|
||||
f"稳态流量(窗口均值): {self.steady_mean:.3f} SLM",
|
||||
f"稳态标准差(窗口): {self.steady_std:.3f} SLM",
|
||||
(
|
||||
f"稳态误差: {self.steady_error_slm:+.3f} SLM "
|
||||
f"(目标 - 稳态均值)"
|
||||
),
|
||||
f"初始流量: {initial:.3f} SLM",
|
||||
(
|
||||
f"超调量: {extremum_text},{direction} "
|
||||
|
||||
Reference in New Issue
Block a user