新增输出稳态时滑动窗口流量均值和标准差,以及稳态误差(判稳成功时目标流量减去当时流量)。
目前逻辑是「一直控制 + 每秒状态照常输出 + 稳态时额外多打印一次性能报告」。 新增一个可选的自动停止功能--config开关,「达到稳态后自动停止控制」,让 reporter 通知主循环退出。
This commit is contained in:
@@ -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