新增一个py模块,在稳态后记录、输出到终端:
该次调节用的kp,ki,kd参数以及控制效果如何,包括调节时间(调节至稳态花的时间,稳态用两个条件判断:用滑动时间窗口的方差/标准差判断,或者用滑动窗口均值介于目标值上下2%误差带之间)、超调量(记录绝对数值和相对目标值的百分比)、该次控制所设置的控制范围。
This commit is contained in:
@@ -17,6 +17,7 @@ import config
|
||||
from controllers import IncrementalPID
|
||||
from data_logger import FlowRunRecorder
|
||||
from flow_control import FlowControlFault, FlowControlLoop
|
||||
from performance_reporter import PerformanceReporter
|
||||
|
||||
|
||||
def build_logger():
|
||||
@@ -133,6 +134,7 @@ def run(target_flow_slm):
|
||||
|
||||
connected = False
|
||||
recorder = None
|
||||
reporter = None
|
||||
exit_code = 0
|
||||
try:
|
||||
logger.info(
|
||||
@@ -162,6 +164,23 @@ def run(target_flow_slm):
|
||||
{"motor_closed_position": config.MOTOR_CLOSED_POSITION},
|
||||
)
|
||||
|
||||
# 控制前读取一次当前流量,作为超调量方向的基准。
|
||||
try:
|
||||
initial_flow_slm = hardware.get_flow(config.FLOW_INPUT_CHANNEL)
|
||||
except Exception:
|
||||
initial_flow_slm = None
|
||||
|
||||
reporter = PerformanceReporter(
|
||||
controller.pid,
|
||||
window_s=config.STEADY_STATE_WINDOW_S,
|
||||
band_pct=config.STEADY_STATE_BAND_PCT,
|
||||
std_pct=config.STEADY_STATE_STD_PCT,
|
||||
flow_range_min_slm=config.TARGET_FLOW_MIN_SLM,
|
||||
flow_range_max_slm=config.TARGET_FLOW_MAX_SLM,
|
||||
initial_flow_slm=initial_flow_slm,
|
||||
logger=logger,
|
||||
)
|
||||
|
||||
controller.start(initial_opening=0.0)
|
||||
recorder = FlowRunRecorder(
|
||||
Path(__file__).resolve().parent / config.DATA_DIRECTORY,
|
||||
@@ -176,6 +195,7 @@ def run(target_flow_slm):
|
||||
now = time.perf_counter()
|
||||
result = controller.step(now=now)
|
||||
recorder.record(result)
|
||||
reporter.observe(result)
|
||||
|
||||
if now >= next_status_time or result.status != "OK":
|
||||
logger.info(format_status(result))
|
||||
@@ -221,6 +241,13 @@ def run(target_flow_slm):
|
||||
recorder.close()
|
||||
exit_code = max(exit_code, 7)
|
||||
logger.exception("保存控制数据曲线图失败;CSV 数据仍保留")
|
||||
|
||||
if reporter is not None:
|
||||
try:
|
||||
reporter.finalize()
|
||||
except Exception:
|
||||
logger.exception("生成控制性能报告时发生异常")
|
||||
|
||||
logger.info("程序结束,退出码=%d", exit_code)
|
||||
return exit_code
|
||||
|
||||
|
||||
Reference in New Issue
Block a user