feat(DLPilot): M305 实测负载功率对接(功率检测三步序列)

This commit is contained in:
2026-09-18 15:10:14 +08:00
parent 6d1e2c6f8d
commit 511e7dfa44
6 changed files with 52 additions and 20 deletions
+16 -9
View File
@@ -997,22 +997,22 @@ class App(ctk.CTk):
self.var_fpdo.set(f'FPDO: {gear}V@{a_txt}A')
def _pwr_query(self):
"""功率检测: M303 实测电压 + M304 实测电流(按有符号); 功率值待固件功率命令"""
"""功率检测: M303 电压 + M304 电流(按有符号) + M305 功率(u32 mW)"""
if not self.dlpc.is_connected():
self.lbl_dlpc_st.configure(text='未连接串口', text_color='#E07A3F')
return
if self._pwr_seq:
return
self._pwr_seq = [('M303', 'mv'), ('M304', 'ma')]
self._pwr_seq = [('M303', 'mv'), ('M304', 'ma'), ('M305', 'mw')]
self._pwr_values = {}
self._dlpc_log('功率检测: 开始')
self._pwr_step_next()
def _pwr_step_next(self):
if not self._pwr_seq:
v_mv = self._pwr_values.get('mv', 0)
ma = self._pwr_values.get('ma', 0)
self._pwr_update(v_mv, ma)
self._pwr_update(self._pwr_values.get('mv'),
self._pwr_values.get('ma'),
self._pwr_values.get('mw'))
self._dlpc_log('功率检测: 完成')
return
self.dlpc.send(self._pwr_seq[0][0])
@@ -1025,8 +1025,10 @@ class App(ctk.CTk):
self.after_cancel(self._pwr_timer)
self._pwr_timer = None
cmd, kind = self._pwr_seq.pop(0)
# 各步载荷长度: 电压/电流 2 字节, 功率 4 字节(u32)
want_len = {'mv': 2, 'ma': 2, 'mw': 4}[kind]
raw = dlpc_rs485.payload_bytes(fr) if fr is not None else b''
if fr is None or fr.type_code != 0xF0 or len(raw) != 2:
if fr is None or fr.type_code != 0xF0 or len(raw) != want_len:
self._pwr_seq.clear()
self.var_pwr.set('电压: ERR 电流: — 功率: —')
self._dlpc_log('功率检测: 应答错误/超时, 中止')
@@ -1035,11 +1037,16 @@ class App(ctk.CTk):
self._pwr_values['mv'] = dlpc_rs485.payload_u16_be(raw)
elif kind == 'ma':
self._pwr_values['ma'] = dlpc_rs485.payload_s16_be(raw)
elif kind == 'mw':
self._pwr_values['mw'] = dlpc_rs485.payload_u32_be(raw)
self._pwr_step_next()
def _pwr_update(self, v_mv, ma):
"""功率读数框更新: 电压 V / 电流 mA; 功率暂不计算(待固件功率命令返回后填充)"""
self.var_pwr.set(f'电压: {v_mv / 1000:.2f} V 电流: {ma} mA 功率: —')
def _pwr_update(self, v_mv, ma, mw):
"""功率读数框更新: 电压 V / 电流 mA / 功率 W(mW 换算, 两位小数; 缺项显示 —)"""
v = f'{v_mv / 1000:.2f} V' if v_mv is not None else '—'
a = f'{ma} mA' if ma is not None else '—'
w = f'{mw / 1000:.2f} W' if mw is not None else '—'
self.var_pwr.set(f'电压: {v} 电流: {a} 功率: {w}')
def _light_entry_apply(self, _evt=None):
"""滑条数值输入框回车: 校验并限幅 54-800, 同步回滑条"""