Compare commits

..

No commits in common. "0e73fc96aecfc0ff56f2aa462f4508f5a49c20f8" and "cc33d9318ddf279ce0ab56bd9bf741e737f4a09b" have entirely different histories.

4 changed files with 39 additions and 141 deletions

Binary file not shown.

View File

@ -5,10 +5,9 @@ client.connect()
# client.write_registers(address=11, values=[110])
# client.write_registers(address=6, values=[1])
# client.write_registers(address=5, values=[16])
# client.write_registers(address=13, values=[1])
client.write_registers(address=24, values=[1])
client.write_registers(address=13, values=[1])
result = client.read_holding_registers(address=24, count=1)
result = client.read_holding_registers(address=13, count=1)
print(result.registers[0],"123===")
client.close()

View File

@ -154,16 +154,9 @@ class Error1Handler(RegisterHandler):
def __init__(self, callback=None):
super().__init__()
self.callback = callback
self.error_map = {
0: "无报警",
1: "人工启动机器人后自复位",
2: "码垛真空压异常/报警 机器人暂停",
3: "拆垛真空压异常/报警 机器人暂停",
4: "机器人未收到CCD数据/机器人视觉通讯异常/报警 机器人暂停"
}
def handle_change(self, value):
error_desc = self.error_map.get(value, f"未知故障类型1-{value}")
error_desc = "正常" if value == 0 else f"故障类型1-{value}"
logging.info(f"故障信息1: {error_desc}")
# 如果有回调函数,则调用
@ -172,15 +165,11 @@ class Error1Handler(RegisterHandler):
class Error2Handler(RegisterHandler):
"""寄存器D23处理器处理滚动线报警"""
"""寄存器D23处理器处理故障信息2"""
def __init__(self, callback=None):
super().__init__()
self.callback = callback
self.error_map = {
0: "无报警",
1: "急停报警",
2: "贴标故障"
}
def handle_change(self, value):
error_desc = "正常" if value == 0 else f"故障类型2-{value}"
logging.info(f"故障信息2: {error_desc}")
@ -191,19 +180,14 @@ class Error2Handler(RegisterHandler):
class Error3Handler(RegisterHandler):
"""寄存器D24处理器处理拆码垛报警"""
"""寄存器D24处理器处理故障信息3"""
def __init__(self, callback=None):
super().__init__()
self.callback = callback
self.error_map = {
0: "无报警",
1: "拆垛层数判断有误重新选择层数",
2: "码垛层数判断有误重新选择层数"
}
def handle_change(self, value):
error_desc = self.error_map.get(value, f"拆码垛报警-{value}")
logging.info(f"拆码垛报警: {error_desc}")
error_desc = "正常" if value == 0 else f"故障类型3-{value}"
logging.info(f"故障信息3: {error_desc}")
# 如果有回调函数,则调用
if self.callback:

View File

@ -1398,12 +1398,12 @@ class MainWindow(MainWindowUI):
# 创建新的状态标签
status_label = QLabel(f"{status}: {pallet_type}", container)
status_label.setFont(self.second_title_font)
status_label.setFont(self.normal_font)
status_label.setStyleSheet("color: red; background-color: transparent;")
status_label.setAlignment(Qt.AlignRight | Qt.AlignTop)
# 使用绝对定位,放置在右上角
status_label.setGeometry(container.width() - 250, 5, 240, 30)
status_label.setGeometry(container.width() - 200, 5, 190, 30)
# 确保标签始终保持在顶层显示
status_label.raise_()
@ -1428,7 +1428,7 @@ class MainWindow(MainWindowUI):
label: 状态标签
"""
# 更新标签位置,保持在右上角
label.setGeometry(container.width() - 250, 5, 240, 30)
label.setGeometry(container.width() - 200, 5, 190, 30)
# 调用原始的resizeEvent如果有的话
original_resize = getattr(container, "_original_resize_event", None)
@ -1749,69 +1749,61 @@ class MainWindow(MainWindowUI):
@Slot(int, str)
def handle_error_1(self, error_code, 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}")
"""处理故障信息1"""
logging.info(f"[处理] 故障信息1: {error_desc}")
# 保存故障码
self.error_1 = error_code
self._update_error_status()
# 如果有故障,显示提示
if error_code in (2, 3):
QMessageBox.warning(self, "机器人视觉报警", f"机器人视觉报警: {detailed_desc}")
if error_code > 0:
QMessageBox.warning(self, "设备故障", f"故障1: {error_desc}")
# error_1 属于上料故障,需要把上料寄存器置为 0
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 2, 0)
modbus.write_register_until_success(client, 3, 0)
modbus.close_client(client)
self.show_operation_status("异常", "", detailed_desc)
self.show_operation_status("上料", "input", error_desc)
@Slot(int, str)
def handle_error_2(self, error_code, 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}")
"""处理故障信息2"""
logging.info(f"[处理] 故障信息2: {error_desc}")
# 保存故障码
self.error_2 = error_code
self._update_error_status()
# 如果有故障,显示提示
if error_code > 0:
QMessageBox.warning(self, "设备故障", f"故障2: {error_desc}")
# error_2 属于下料故障,需要把下料寄存器置为 0
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 3, 0)
modbus.close_client(client)
self.show_operation_status("异常", "", detailed_desc)
self.show_operation_status("下料", "output", error_desc)
@Slot(int, str)
def handle_error_3(self, error_code, 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}")
"""处理故障信息3"""
logging.info(f"[处理] 故障信息3: {error_desc}")
# 保存故障码
self.error_3 = error_code
self._update_error_status()
modbus = ModbusUtils()
client = modbus.get_client()
# 如果有故障,显示提示
if error_code == 1:
QMessageBox.warning(self, "异常", f"异常: {detailed_desc}")
if error_code > 0:
QMessageBox.warning(self, "设备故障", f"故障3: {error_desc}")
# error_3 属于全局故障,需要把上料和下料寄存器置为 0
modbus = ModbusUtils()
client = modbus.get_client()
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.close_client(client)
modbus.close_client(client)
self.show_operation_status("上料", "input", error_desc)
self.show_operation_status("下料", "output", error_desc)
@Slot(int)
def handle_unloading_level(self, level):
"""处理下料层数信息"""
@ -1824,9 +1816,8 @@ class MainWindow(MainWindowUI):
@Slot(int)
def handle_ng(self, ng):
"""处理NG信号, 将当前处理的数据添加到包装记录中毛重和净重设为0"""
"""处理NG信号, 删除当前在处理的数据(也就是第一条数据)"""
if ng == 1:
"""
# 获取当前选中的行或第一个数据行,并删除
try:
order_id = self.process_table.item(2, 1).text().strip()
@ -1840,87 +1831,11 @@ class MainWindow(MainWindowUI):
# 触发重新查询,更新数据
self.load_finished_inspection_data()
logging.info(f"已删除当前在处理的数据: order_id: {order_id}, tray_id: {tray_id}")
"""
try:
# 获取最后一条数据行
total_rows = self.process_table.rowCount()
if total_rows <= 2: # 只有表头行,没有数据行
logging.warning("没有可用的数据行来处理NG信号")
return
# 使用最后一条数据行
data_row = total_rows - 1
# 获取工程号
order_id_item = self.process_table.item(data_row, 1)
if not order_id_item:
logging.warning("无法获取工程号")
return
order_id = order_id_item.text().strip()
if not order_id:
logging.warning("工程号为空")
return
# 获取托盘号
tray_id = self.tray_edit.currentText()
# 获取启用的检验配置
enabled_configs = self.inspection_manager.get_enabled_configs()
# 计算贴标列索引
label_col = 2 + len(enabled_configs)
# 获取贴标值
label_item = self.process_table.item(data_row, label_col)
label_value = label_item.text() if label_item else ""
# 如果贴标值为空,生成一个新的贴标值
if not label_value:
# 初始化托盘号对应的序号
if tray_id not in self.init_seq:
self.init_seq[tray_id] = 1
# 生成贴标号(托盘号+序号)
label_value = f"{tray_id}-{self.init_seq[tray_id]}-NG"
self.init_seq[tray_id] += 1
# 保存贴标数据到数据库
self.save_inspection_data(order_id, tray_id, 11, 11, label_value, "pass")
else:
# 如果贴标值已存在但不包含NG标记添加NG标记
if "NG" not in label_value:
label_value = f"{label_value}-NG"
# 更新贴标数据
self.save_inspection_data(order_id, tray_id, 11, 11, label_value, "pass")
# 设置毛重和净重为0
self.save_inspection_data(order_id, tray_id, 12, 12, "0", "pass")
self.save_inspection_data(order_id, tray_id, 13, 13, "0", "pass")
# 获取当前时间作为完成时间
finish_time = datetime.now()
# 将数据写入到数据库表 inspection_pack_data
from dao.inspection_dao import InspectionDAO
inspection_dao = InspectionDAO()
inspection_dao.save_package_record(order_id, tray_id, label_value, "0", "0", finish_time)
# 删除当前处理的行
self.process_table.removeRow(data_row)
# 回显数据
self.show_pack_item()
logging.info(f"NG信号处理完成: 工程号={order_id}, 托盘号={tray_id}, 贴标值={label_value}")
except Exception as e:
logging.error(f"处理NG信号时发生错误: {str(e)}")
finally:
# 复原NG信号
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 6, 0)
modbus.close_client(client)
# 复原NG信号
modbus = ModbusUtils()
client = modbus.get_client()
modbus.write_register_until_success(client, 6, 0)
modbus.close_client(client)
def register_serial_callbacks(self):
"""注册串口数据回调函数"""