调整版本,实现wifi认证
This commit is contained in:
78
comm_thread.py
Normal file
78
comm_thread.py
Normal file
@ -0,0 +1,78 @@
|
||||
import threading
|
||||
from threading import Thread
|
||||
import time
|
||||
import menu_utils as utils
|
||||
from comm_device import class_comm_device
|
||||
from print_color import *
|
||||
|
||||
class class_comm_master_thread(Thread):
|
||||
thread_object_id = 0
|
||||
CHECK_INTERVAL = 0.05 # 检查间隔(秒)
|
||||
MAX_FAIL_TIME = 5 # 最大失败时间(秒)
|
||||
|
||||
def __init__(self,
|
||||
device_comm_object_list=None,
|
||||
thread_name="device"):
|
||||
super().__init__()
|
||||
self.stop_request = False
|
||||
self.device_comm_object_list = device_comm_object_list if device_comm_object_list is not None else []
|
||||
|
||||
if thread_name is None:
|
||||
thread_name = "device" + str(class_comm_master_thread.thread_object_id)
|
||||
class_comm_master_thread.thread_object_id += 1
|
||||
|
||||
self.thread_name = thread_name
|
||||
|
||||
def close(self):
|
||||
self.stop_request = True
|
||||
|
||||
def run(self):
|
||||
print_inform_msg(f"{self.thread_name} modbus 主线程启动")
|
||||
|
||||
total_fail_time = 0
|
||||
base_time = time.time()
|
||||
|
||||
while not self.stop_request:
|
||||
comm_success_count = 0
|
||||
total_comm_count = 0
|
||||
|
||||
for device in self.device_comm_object_list:
|
||||
try:
|
||||
if device.comm_active:
|
||||
success_count, comm_count = device.device_comm_cycle()
|
||||
comm_success_count += success_count
|
||||
total_comm_count += comm_count
|
||||
except Exception as err:
|
||||
print_error_msg(err)
|
||||
|
||||
cur_time = time.time()
|
||||
|
||||
if comm_success_count > 0:
|
||||
total_fail_time = 0
|
||||
elif total_comm_count > 0:
|
||||
total_fail_time += cur_time - base_time
|
||||
base_time = cur_time
|
||||
|
||||
if total_fail_time >= self.MAX_FAIL_TIME:
|
||||
self.reconnect_devices()
|
||||
total_fail_time = 0
|
||||
|
||||
time.sleep(self.CHECK_INTERVAL)
|
||||
|
||||
print_error_msg(f"{self.thread_name} modbus 主线程停止")
|
||||
|
||||
def reconnect_devices(self):
|
||||
"""重新连接所有设备的协议"""
|
||||
for device in self.device_comm_object_list:
|
||||
try:
|
||||
device.protocol.close()
|
||||
except Exception as err:
|
||||
print_error_msg(f"关闭协议时出错: {err}")
|
||||
|
||||
for device in self.device_comm_object_list:
|
||||
try:
|
||||
device.protocol.open(device.protocol.mode)
|
||||
except Exception as err:
|
||||
print_error_msg(f"重新打开协议时出错: {err}")
|
||||
|
||||
print_warning_msg("与保护器连接超时, 重新进行连接")
|
||||
Reference in New Issue
Block a user