完善流量控制前馈、稳态判定与阀门标定流程
- 前馈冻结改用可配置的 3 秒流量绝对误差滑窗,修复采样抖动造成的重复解冻,并保留下游扰动后的自动更新 - 支持非单调阀特性反解、最小可测面积以下直接全关,以及闭阀端精细扫点与辨识开关 - 调整双压力判稳、最长等待时间、在线入口全开收尾和闭环四联图 - 更新配置、README、阀模型及离线测试,归档本轮实验数据与诊断产物
This commit is contained in:
+12
-2
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user