from PySide6.QtCore import Signal, QObject from convert import int16_to_float, float_to_int16 class Reg(QObject): signal_val_updated = Signal() def __init__(self, addr, com_interface): # 通信地址 super().__init__() self.addr = addr self.val = 0 self.interface = com_interface # 从读取命令发送到消息队列 def read(self): self.interface.put(self.addr) # 将write命令发送到消息队列 def write(self, val): self.interface.put(self.addr, val) def update(self, val): self.val = val self.signal_val_updated.emit() class RegProxy(object): signal_val_updated = Signal() def __init__(self, name, start_id): self.name = name self.val = 0 self.set_val = 0 # 默认所有参数都是float型的,16-bits * 2 self.regs: list[Reg] =list([ Reg(start_id + i) for i in range(2)] ) for item_reg in self.regs: item_reg.signal_val_updated.connect(self.__compute) def set(self, val): self.set_val = val # unpack() 然后写入各个寄存器 # self.reg.write(self.set_val) def get(self): # self.reg.read() pass def __compute(self): self.val = int16_to_float(self.regs[0].val, self.regs[1].val) self.signal_val_updated.emit() def val(self): return self.val class Param(object): signal_val_updated = Signal() def __init__(self, name, _id, length): self.name = name self.id = _id self.len = length self.ele: [RegProxy] = [] def elements(self) -> list[RegProxy]: return self.ele def on_reg_proxy_updated(self): self.signal_val_updated.emit() # 从设备获取每个reg的值 def refresh(self): pass # 更新update的指 def update(self, val_list): pass # 更新指定的值 def update_one(self, idx, val): pass # 普通参数 - 单元素 class ParamNormal(Param): def __init__(self, name, _id): super().__init__(name, _id, 1) self.ele = [ RegProxy(name, self.id) ] # 数组参数 - 多元素 class ParamArray(Param): def __init__(self, name, _id, length): super().__init__(name, _id, length) self.len = length self.ele = [ RegProxy(f'{name}-{i}', self.id + (i*2)) for i in range(length) ] if __name__ == '__main__': array1 = ParamArray('test', 1000, 10) array2 = ParamArray('2', 2000, 125) for item in array1.elements(): print(item.name) print(item.val) for reg in item.regs: print(reg.addr)