diff --git a/db/jtDB.db b/db/jtDB.db index 8b0a9fb..247974b 100644 Binary files a/db/jtDB.db and b/db/jtDB.db differ diff --git a/from pymodbus.py b/from pymodbus.py index a13ebc9..e434a61 100644 --- a/from pymodbus.py +++ b/from pymodbus.py @@ -3,11 +3,11 @@ from pymodbus.client import ModbusTcpClient client = ModbusTcpClient('localhost', port=5020) client.connect() # 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=13, values=[1]) +# client.write_registers(address=13, values=[1]) -result = client.read_holding_registers(address=13, count=1) +result = client.read_holding_registers(address=6, count=1) print(result.registers[0],"123===") client.close() \ No newline at end of file diff --git a/widgets/main_window.py b/widgets/main_window.py index d2c6919..d618001 100644 --- a/widgets/main_window.py +++ b/widgets/main_window.py @@ -1621,7 +1621,7 @@ class MainWindow(MainWindowUI): label_col = 2 + len(enabled_configs) # 生成贴标号(托盘号+序号) - label_value = f"{tray_id}-{self.init_seq[tray_id]}" + label_value = f"{self.init_seq[tray_id]}" # 断开单元格变更信号,避免程序自动写入时触发 try: @@ -1816,8 +1816,9 @@ class MainWindow(MainWindowUI): @Slot(int) def handle_ng(self, ng): - """处理NG信号, 删除当前在处理的数据(也就是第一条数据)""" + """处理NG信号, 将当前处理的数据添加到包装记录中,毛重和净重设为0""" if ng == 1: + """ # 获取当前选中的行或第一个数据行,并删除 try: order_id = self.process_table.item(2, 1).text().strip() @@ -1831,11 +1832,87 @@ class MainWindow(MainWindowUI): # 触发重新查询,更新数据 self.load_finished_inspection_data() logging.info(f"已删除当前在处理的数据: order_id: {order_id}, tray_id: {tray_id}") - # 复原NG信号 - modbus = ModbusUtils() - client = modbus.get_client() - modbus.write_register_until_success(client, 6, 0) - modbus.close_client(client) + """ + 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"{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) def register_serial_callbacks(self): """注册串口数据回调函数"""