brisonus_app_eq/ERNCTuningTool/param/param_01.py
2025-02-18 22:05:52 +08:00

110 lines
2.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)