完善流量控制前馈、稳态判定与阀门标定流程
- 前馈冻结改用可配置的 3 秒流量绝对误差滑窗,修复采样抖动造成的重复解冻,并保留下游扰动后的自动更新 - 支持非单调阀特性反解、最小可测面积以下直接全关,以及闭阀端精细扫点与辨识开关 - 调整双压力判稳、最长等待时间、在线入口全开收尾和闭环四联图 - 更新配置、README、阀模型及离线测试,归档本轮实验数据与诊断产物
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
from performance_reporter import PerformanceReporter
|
||||
|
||||
|
||||
class _Pid:
|
||||
kp = 1.0
|
||||
ki = 0.1
|
||||
kd = 0.0
|
||||
|
||||
|
||||
def _result(timestamp, flow, pressure_before, pressure_after, target=100.0):
|
||||
return SimpleNamespace(
|
||||
status="OK",
|
||||
timestamp=timestamp,
|
||||
measured_flow_slm=flow,
|
||||
target_flow_slm=target,
|
||||
pressure_before_kpa=pressure_before,
|
||||
pressure_kpa=pressure_after,
|
||||
)
|
||||
|
||||
|
||||
def _reporter():
|
||||
return PerformanceReporter(
|
||||
_Pid(),
|
||||
window_s=0.2,
|
||||
sample_period_s=0.1,
|
||||
band_pct=1.0,
|
||||
pressure_band_kpa=1.0,
|
||||
flow_range_min_slm=0.0,
|
||||
flow_range_max_slm=300.0,
|
||||
)
|
||||
|
||||
|
||||
def test_steady_uses_pressure_band_instead_of_flow_std():
|
||||
reporter = _reporter()
|
||||
# 流量标准差很大,但窗口均值为目标值;压力均在各自均值 ±1 kPa 内。
|
||||
reporter.observe(_result(0.0, 50.0, 200.0, 100.0))
|
||||
reporter.observe(_result(0.1, 150.0, 201.0, 99.0))
|
||||
|
||||
assert reporter.steady_reached
|
||||
assert reporter.steady_mean == 100.0
|
||||
assert reporter.steady_std == 50.0
|
||||
|
||||
|
||||
def test_pressure_outside_mean_band_prevents_steady_state():
|
||||
reporter = _reporter()
|
||||
reporter.observe(_result(0.0, 100.0, 200.0, 100.0))
|
||||
reporter.observe(_result(0.1, 100.0, 203.0, 100.0))
|
||||
|
||||
assert not reporter.steady_reached
|
||||
|
||||
|
||||
def test_missing_pressure_sample_is_not_used_for_steady_state():
|
||||
reporter = _reporter()
|
||||
reporter.observe(_result(0.0, 100.0, None, 100.0))
|
||||
reporter.observe(_result(0.1, 100.0, 200.0, 100.0))
|
||||
|
||||
assert not reporter.steady_reached
|
||||
Reference in New Issue
Block a user