brisonus_app_eq/ERNCTuningTool/param/param_01.py

110 lines
2.7 KiB
Python
Raw Permalink Normal View History

2025-02-18 22:05:52 +08:00
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)