50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import menu_utils as utils
|
|
from print_color import *
|
|
from comm_protocol_modbus import class_protocol_modbus
|
|
|
|
class class_comm_cycle_item() :
|
|
def __init__(self, name = "", reg_addr = 0, reg_count = 0, cycle = 0, mqtt_pack = None, remap_addr = 0):
|
|
self.reg_addr = reg_addr
|
|
self.reg_count = reg_count
|
|
self.cycle = cycle
|
|
self.name = name
|
|
self.remain_cycle = 0
|
|
self.comm_delay = 0
|
|
self.comm_count = 0
|
|
self.comm_fail_count = 0
|
|
self.comm_success_count = 0
|
|
self.comm_success = False
|
|
self.comm_trigger = False
|
|
self.mqtt_pack = mqtt_pack
|
|
self.remap_addr = remap_addr
|
|
self.reg_buf = []
|
|
|
|
def in_range(self, reg_addr, reg_count) :
|
|
reg_addr_begin = self.reg_addr
|
|
reg_addr_end = self.reg_addr + self.reg_count
|
|
if reg_addr >= reg_addr_begin and reg_addr + reg_count <= reg_addr_end :
|
|
return True
|
|
return False
|
|
|
|
def update_item_value(self, reg_addr, reg_count, new_value) :
|
|
if self.in_range(reg_addr, reg_count) and len(self.reg_buf) :
|
|
reg_off = reg_addr - self.reg_addr
|
|
new_reg = list(self.reg_buf)
|
|
for i in range(reg_count) :
|
|
new_reg[reg_off + i] = new_value[i]
|
|
self.reg_buf = new_reg
|
|
self.comm_trigger = True
|
|
|
|
def read_register_count(self, reg_addr, reg_count) :
|
|
reg_addr_begin = self.reg_addr
|
|
reg_addr_end = self.reg_addr + self.reg_count
|
|
result = None
|
|
if reg_addr >= reg_addr_begin and reg_addr + reg_count <= reg_addr_end :
|
|
if len(self.reg_buf) >= self.reg_count:
|
|
result = []
|
|
reg_off = reg_addr - self.reg_addr
|
|
for i in range(reg_count):
|
|
result.append(self.reg_buf[reg_off + i])
|
|
|
|
return result
|