feat: 更新寄存器处理逻辑,添加故障类型映射,优化主窗口状态标签显示
This commit is contained in:
parent
60d1b51e5f
commit
8dbd10cb84
@ -3,11 +3,12 @@ from pymodbus.client import ModbusTcpClient
|
|||||||
client = ModbusTcpClient('localhost', port=5020)
|
client = ModbusTcpClient('localhost', port=5020)
|
||||||
client.connect()
|
client.connect()
|
||||||
# client.write_registers(address=11, values=[110])
|
# client.write_registers(address=11, values=[110])
|
||||||
client.write_registers(address=6, values=[1])
|
# client.write_registers(address=6, values=[1])
|
||||||
# client.write_registers(address=5, values=[16])
|
# client.write_registers(address=5, values=[16])
|
||||||
# client.write_registers(address=13, values=[1])
|
# client.write_registers(address=13, values=[1])
|
||||||
|
client.write_registers(address=24, values=[1])
|
||||||
|
|
||||||
|
|
||||||
result = client.read_holding_registers(address=6, count=1)
|
result = client.read_holding_registers(address=24, count=1)
|
||||||
print(result.registers[0],"123===")
|
print(result.registers[0],"123===")
|
||||||
client.close()
|
client.close()
|
||||||
@ -154,9 +154,16 @@ class Error1Handler(RegisterHandler):
|
|||||||
def __init__(self, callback=None):
|
def __init__(self, callback=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
|
self.error_map = {
|
||||||
|
0: "无报警",
|
||||||
|
1: "人工启动机器人后自复位",
|
||||||
|
2: "码垛真空压异常/报警 机器人暂停",
|
||||||
|
3: "拆垛真空压异常/报警 机器人暂停",
|
||||||
|
4: "机器人未收到CCD数据/机器人视觉通讯异常/报警 机器人暂停"
|
||||||
|
}
|
||||||
|
|
||||||
def handle_change(self, value):
|
def handle_change(self, value):
|
||||||
error_desc = "正常" if value == 0 else f"故障类型1-{value}"
|
error_desc = self.error_map.get(value, f"未知故障类型1-{value}")
|
||||||
logging.info(f"故障信息1: {error_desc}")
|
logging.info(f"故障信息1: {error_desc}")
|
||||||
|
|
||||||
# 如果有回调函数,则调用
|
# 如果有回调函数,则调用
|
||||||
@ -165,11 +172,15 @@ class Error1Handler(RegisterHandler):
|
|||||||
|
|
||||||
|
|
||||||
class Error2Handler(RegisterHandler):
|
class Error2Handler(RegisterHandler):
|
||||||
"""寄存器D23处理器,处理故障信息2"""
|
"""寄存器D23处理器,处理滚动线报警"""
|
||||||
def __init__(self, callback=None):
|
def __init__(self, callback=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
|
self.error_map = {
|
||||||
|
0: "无报警",
|
||||||
|
1: "急停报警",
|
||||||
|
2: "贴标故障"
|
||||||
|
}
|
||||||
def handle_change(self, value):
|
def handle_change(self, value):
|
||||||
error_desc = "正常" if value == 0 else f"故障类型2-{value}"
|
error_desc = "正常" if value == 0 else f"故障类型2-{value}"
|
||||||
logging.info(f"故障信息2: {error_desc}")
|
logging.info(f"故障信息2: {error_desc}")
|
||||||
@ -180,14 +191,19 @@ class Error2Handler(RegisterHandler):
|
|||||||
|
|
||||||
|
|
||||||
class Error3Handler(RegisterHandler):
|
class Error3Handler(RegisterHandler):
|
||||||
"""寄存器D24处理器,处理故障信息3"""
|
"""寄存器D24处理器,处理拆码垛报警"""
|
||||||
def __init__(self, callback=None):
|
def __init__(self, callback=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
|
self.error_map = {
|
||||||
|
0: "无报警",
|
||||||
|
1: "拆垛层数判断有误重新选择层数",
|
||||||
|
2: "码垛层数判断有误重新选择层数"
|
||||||
|
}
|
||||||
|
|
||||||
def handle_change(self, value):
|
def handle_change(self, value):
|
||||||
error_desc = "正常" if value == 0 else f"故障类型3-{value}"
|
error_desc = self.error_map.get(value, f"拆码垛报警-{value}")
|
||||||
logging.info(f"故障信息3: {error_desc}")
|
logging.info(f"拆码垛报警: {error_desc}")
|
||||||
|
|
||||||
# 如果有回调函数,则调用
|
# 如果有回调函数,则调用
|
||||||
if self.callback:
|
if self.callback:
|
||||||
|
|||||||
@ -1398,12 +1398,12 @@ class MainWindow(MainWindowUI):
|
|||||||
|
|
||||||
# 创建新的状态标签
|
# 创建新的状态标签
|
||||||
status_label = QLabel(f"{status}: {pallet_type}", container)
|
status_label = QLabel(f"{status}: {pallet_type}", container)
|
||||||
status_label.setFont(self.normal_font)
|
status_label.setFont(self.second_title_font)
|
||||||
status_label.setStyleSheet("color: red; background-color: transparent;")
|
status_label.setStyleSheet("color: red; background-color: transparent;")
|
||||||
status_label.setAlignment(Qt.AlignRight | Qt.AlignTop)
|
status_label.setAlignment(Qt.AlignRight | Qt.AlignTop)
|
||||||
|
|
||||||
# 使用绝对定位,放置在右上角
|
# 使用绝对定位,放置在右上角
|
||||||
status_label.setGeometry(container.width() - 200, 5, 190, 30)
|
status_label.setGeometry(container.width() - 250, 5, 240, 30)
|
||||||
|
|
||||||
# 确保标签始终保持在顶层显示
|
# 确保标签始终保持在顶层显示
|
||||||
status_label.raise_()
|
status_label.raise_()
|
||||||
@ -1428,7 +1428,7 @@ class MainWindow(MainWindowUI):
|
|||||||
label: 状态标签
|
label: 状态标签
|
||||||
"""
|
"""
|
||||||
# 更新标签位置,保持在右上角
|
# 更新标签位置,保持在右上角
|
||||||
label.setGeometry(container.width() - 200, 5, 190, 30)
|
label.setGeometry(container.width() - 250, 5, 240, 30)
|
||||||
|
|
||||||
# 调用原始的resizeEvent(如果有的话)
|
# 调用原始的resizeEvent(如果有的话)
|
||||||
original_resize = getattr(container, "_original_resize_event", None)
|
original_resize = getattr(container, "_original_resize_event", None)
|
||||||
@ -1621,7 +1621,7 @@ class MainWindow(MainWindowUI):
|
|||||||
label_col = 2 + len(enabled_configs)
|
label_col = 2 + len(enabled_configs)
|
||||||
|
|
||||||
# 生成贴标号(托盘号+序号)
|
# 生成贴标号(托盘号+序号)
|
||||||
label_value = f"{self.init_seq[tray_id]}"
|
label_value = f"{tray_id}-{self.init_seq[tray_id]}"
|
||||||
|
|
||||||
# 断开单元格变更信号,避免程序自动写入时触发
|
# 断开单元格变更信号,避免程序自动写入时触发
|
||||||
try:
|
try:
|
||||||
@ -1749,61 +1749,69 @@ class MainWindow(MainWindowUI):
|
|||||||
|
|
||||||
@Slot(int, str)
|
@Slot(int, str)
|
||||||
def handle_error_1(self, error_code, error_desc):
|
def handle_error_1(self, error_code, error_desc):
|
||||||
"""处理故障信息1"""
|
"""机器人视觉报警"""
|
||||||
logging.info(f"[处理] 故障信息1: {error_desc}")
|
logging.info(f"[处理] 机器人视觉报警: {error_desc}")
|
||||||
|
from utils.register_handlers import Error1Handler
|
||||||
|
error_handler = Error1Handler()
|
||||||
|
detailed_desc = error_handler.error_map.get(error_code, f"机器人视觉报警-{error_code}")
|
||||||
|
|
||||||
# 保存故障码
|
# 保存故障码
|
||||||
self.error_1 = error_code
|
self.error_1 = error_code
|
||||||
self._update_error_status()
|
self._update_error_status()
|
||||||
|
|
||||||
# 如果有故障,显示提示
|
# 如果有故障,显示提示
|
||||||
if error_code > 0:
|
if error_code in (2, 3):
|
||||||
QMessageBox.warning(self, "设备故障", f"故障1: {error_desc}")
|
QMessageBox.warning(self, "机器人视觉报警", f"机器人视觉报警: {detailed_desc}")
|
||||||
# error_1 属于上料故障,需要把上料寄存器置为 0
|
# error_1 属于上料故障,需要把上料寄存器置为 0
|
||||||
modbus = ModbusUtils()
|
modbus = ModbusUtils()
|
||||||
client = modbus.get_client()
|
client = modbus.get_client()
|
||||||
modbus.write_register_until_success(client, 2, 0)
|
modbus.write_register_until_success(client, 2, 0)
|
||||||
|
modbus.write_register_until_success(client, 3, 0)
|
||||||
modbus.close_client(client)
|
modbus.close_client(client)
|
||||||
self.show_operation_status("上料", "input", error_desc)
|
self.show_operation_status("异常", "", detailed_desc)
|
||||||
|
|
||||||
|
|
||||||
@Slot(int, str)
|
@Slot(int, str)
|
||||||
def handle_error_2(self, error_code, error_desc):
|
def handle_error_2(self, error_code, error_desc):
|
||||||
"""处理故障信息2"""
|
"""滚筒线报警"""
|
||||||
logging.info(f"[处理] 故障信息2: {error_desc}")
|
logging.info(f"[处理] 滚筒线报警: {error_desc}")
|
||||||
|
from utils.register_handlers import Error2Handler
|
||||||
|
error_handler = Error2Handler()
|
||||||
|
detailed_desc = error_handler.error_map.get(error_code, f"滚筒线报警-{error_code}")
|
||||||
# 保存故障码
|
# 保存故障码
|
||||||
self.error_2 = error_code
|
self.error_2 = error_code
|
||||||
self._update_error_status()
|
self._update_error_status()
|
||||||
|
|
||||||
# 如果有故障,显示提示
|
# 如果有故障,显示提示
|
||||||
if error_code > 0:
|
if error_code > 0:
|
||||||
QMessageBox.warning(self, "设备故障", f"故障2: {error_desc}")
|
|
||||||
# error_2 属于下料故障,需要把下料寄存器置为 0
|
# error_2 属于下料故障,需要把下料寄存器置为 0
|
||||||
modbus = ModbusUtils()
|
modbus = ModbusUtils()
|
||||||
client = modbus.get_client()
|
client = modbus.get_client()
|
||||||
modbus.write_register_until_success(client, 3, 0)
|
modbus.write_register_until_success(client, 3, 0)
|
||||||
modbus.close_client(client)
|
modbus.close_client(client)
|
||||||
self.show_operation_status("下料", "output", error_desc)
|
self.show_operation_status("异常", "", detailed_desc)
|
||||||
|
|
||||||
@Slot(int, str)
|
@Slot(int, str)
|
||||||
def handle_error_3(self, error_code, error_desc):
|
def handle_error_3(self, error_code, error_desc):
|
||||||
"""处理故障信息3"""
|
"""拆码垛报警"""
|
||||||
logging.info(f"[处理] 故障信息3: {error_desc}")
|
logging.info(f"[处理] 拆码垛报警: {error_desc}")
|
||||||
|
from utils.register_handlers import Error3Handler
|
||||||
|
error_handler = Error3Handler()
|
||||||
|
detailed_desc = error_handler.error_map.get(error_code, f"拆码垛报警-{error_code}")
|
||||||
# 保存故障码
|
# 保存故障码
|
||||||
self.error_3 = error_code
|
self.error_3 = error_code
|
||||||
self._update_error_status()
|
self._update_error_status()
|
||||||
|
modbus = ModbusUtils()
|
||||||
|
client = modbus.get_client()
|
||||||
# 如果有故障,显示提示
|
# 如果有故障,显示提示
|
||||||
if error_code > 0:
|
if error_code == 1:
|
||||||
QMessageBox.warning(self, "设备故障", f"故障3: {error_desc}")
|
QMessageBox.warning(self, "异常", f"异常: {detailed_desc}")
|
||||||
# error_3 属于全局故障,需要把上料和下料寄存器置为 0
|
|
||||||
modbus = ModbusUtils()
|
|
||||||
client = modbus.get_client()
|
|
||||||
modbus.write_register_until_success(client, 2, 0)
|
modbus.write_register_until_success(client, 2, 0)
|
||||||
|
modbus.close_client(client)
|
||||||
|
self.show_operation_status("异常", "", detailed_desc)
|
||||||
|
elif error_code == 2:
|
||||||
|
QMessageBox.warning(self, "异常", f"异常: {detailed_desc}")
|
||||||
modbus.write_register_until_success(client, 3, 0)
|
modbus.write_register_until_success(client, 3, 0)
|
||||||
modbus.close_client(client)
|
modbus.close_client(client)
|
||||||
self.show_operation_status("上料", "input", error_desc)
|
|
||||||
self.show_operation_status("下料", "output", error_desc)
|
|
||||||
|
|
||||||
@Slot(int)
|
@Slot(int)
|
||||||
def handle_unloading_level(self, level):
|
def handle_unloading_level(self, level):
|
||||||
"""处理下料层数信息"""
|
"""处理下料层数信息"""
|
||||||
@ -1873,8 +1881,8 @@ class MainWindow(MainWindowUI):
|
|||||||
if tray_id not in self.init_seq:
|
if tray_id not in self.init_seq:
|
||||||
self.init_seq[tray_id] = 1
|
self.init_seq[tray_id] = 1
|
||||||
|
|
||||||
# 生成贴标号(仅使用序号)
|
# 生成贴标号(托盘号+序号)
|
||||||
label_value = f"{self.init_seq[tray_id]}-NG"
|
label_value = f"{tray_id}-{self.init_seq[tray_id]}-NG"
|
||||||
self.init_seq[tray_id] += 1
|
self.init_seq[tray_id] += 1
|
||||||
|
|
||||||
# 保存贴标数据到数据库
|
# 保存贴标数据到数据库
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user