完善流量控制前馈、稳态判定与阀门标定流程

- 前馈冻结改用可配置的 3 秒流量绝对误差滑窗,修复采样抖动造成的重复解冻,并保留下游扰动后的自动更新
- 支持非单调阀特性反解、最小可测面积以下直接全关,以及闭阀端精细扫点与辨识开关
- 调整双压力判稳、最长等待时间、在线入口全开收尾和闭环四联图
- 更新配置、README、阀模型及离线测试,归档本轮实验数据与诊断产物
This commit is contained in:
2026-09-02 16:14:42 +08:00
parent 5888b4ccce
commit cfeedcf887
80 changed files with 40473 additions and 171 deletions
+12 -2
View File
@@ -27,6 +27,14 @@ raw_max = 32000 # PLC 模拟量映射最大值(0~32000,对应量程满量
impulse_max = 163840 # 电机脉冲最大值(对应 x_max
def decode_signed_16(value):
"""将 Modbus 返回的 0~65535 解码为 16 位有符号整数。"""
raw = int(value)
if not 0 <= raw <= 0xFFFF:
raise ValueError("16 位寄存器值必须在 0~65535 之间")
return raw - 0x10000 if raw >= 0x8000 else raw
def set_motor_limits(volthege_min_val=None, volthege_max_val=None, x_max_val=None):
"""更新电机限幅参数(由 GUI 高级设置页面调用)
@@ -140,14 +148,15 @@ class Easy521ModbusClient:
return False
def get_flow(self, address):
"""读阀后流量,raw / raw_max * flow_range -> SLM。"""
"""读阀后流量,按 16 位有符号模拟量换算为 SLM。"""
raw = self._read_register(address)
if raw is None:
return None
raw = decode_signed_16(raw)
return raw / raw_max * self.flow_range
def get_pressure(self, address):
"""读压力,按寄存器地址匹配量程(阀前 300 / 阀后 400-> kPa。"""
"""读压力,按 16 位有符号模拟量及通道量程换算为 kPa。"""
address = int(address)
if address == self.pressure_before_addr:
rng = self.pressure_before_range
@@ -159,6 +168,7 @@ class Easy521ModbusClient:
raw = self._read_register(address)
if raw is None:
return None
raw = decode_signed_16(raw)
return raw / raw_max * rng
def set_motor_position(self, position, channel=None):