完成自动检测贴标信号后自动回填到包装区域中
This commit is contained in:
parent
266380f43f
commit
fddb83dcce
BIN
db/jtDB.db
BIN
db/jtDB.db
Binary file not shown.
@ -2,8 +2,11 @@ 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=[15])
|
# client.write_registers(address=11, values=[117])
|
||||||
|
client.write_registers(address=13, values=[1])
|
||||||
|
# client.write_registers(address=13, values=[1])
|
||||||
|
|
||||||
result = client.read_holding_registers(address=11, count=1)
|
|
||||||
|
result = client.read_holding_registers(address=13, count=1)
|
||||||
print(result,"123===")
|
print(result,"123===")
|
||||||
client.close()
|
client.close()
|
||||||
@ -26,9 +26,7 @@ class LabelSignalHandler(RegisterHandler):
|
|||||||
self.callback = callback
|
self.callback = callback
|
||||||
self.status_map = {
|
self.status_map = {
|
||||||
0: "无贴标",
|
0: "无贴标",
|
||||||
1: "贴标中",
|
1: "贴标完成"
|
||||||
2: "贴标完成",
|
|
||||||
3: "贴标错误"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def handle_change(self, value):
|
def handle_change(self, value):
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class MainWindow(MainWindowUI):
|
|||||||
self.corp_name = corp_name
|
self.corp_name = corp_name
|
||||||
self.corp_id = corp_id
|
self.corp_id = corp_id
|
||||||
self.position_id = position_id
|
self.position_id = position_id
|
||||||
|
self.init_seq = {} # 初始化轴包装的序号
|
||||||
# 设置窗口标题
|
# 设置窗口标题
|
||||||
if user_name and corp_name:
|
if user_name and corp_name:
|
||||||
self.setWindowTitle(f"腾智微丝产线包装系统 - {user_name} ({corp_name})")
|
self.setWindowTitle(f"腾智微丝产线包装系统 - {user_name} ({corp_name})")
|
||||||
@ -117,7 +117,24 @@ class MainWindow(MainWindowUI):
|
|||||||
|
|
||||||
# 加载已完成检验数据
|
# 加载已完成检验数据
|
||||||
self.show_pack_item()
|
self.show_pack_item()
|
||||||
|
# 创建状态处理器实例
|
||||||
|
self.machine_handlers = MachineStatusHandlers()
|
||||||
|
|
||||||
|
# 添加状态显示到状态栏
|
||||||
|
self.modbus_status_label = QLabel("Modbus: 未连接")
|
||||||
|
self.weight_label = QLabel("重量: --")
|
||||||
|
self.label_status_label = QLabel("贴标: 无贴标")
|
||||||
|
self.error_status_label = QLabel("故障: 无")
|
||||||
|
|
||||||
|
# 设置样式
|
||||||
|
self.error_status_label.setStyleSheet("color: green; font-weight: bold;")
|
||||||
|
|
||||||
|
# 添加到状态栏
|
||||||
|
self.statusBar().addPermanentWidget(self.modbus_status_label)
|
||||||
|
self.statusBar().addPermanentWidget(self.weight_label)
|
||||||
|
self.statusBar().addPermanentWidget(self.label_status_label)
|
||||||
|
self.statusBar().addPermanentWidget(self.error_status_label)
|
||||||
|
self.statusBar().addPermanentWidget(QLabel(" "))
|
||||||
logging.info(f"主窗口已创建,用户: {user_name}")
|
logging.info(f"主窗口已创建,用户: {user_name}")
|
||||||
|
|
||||||
def add_pallet_type_selectors(self):
|
def add_pallet_type_selectors(self):
|
||||||
@ -203,8 +220,7 @@ class MainWindow(MainWindowUI):
|
|||||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||||
self.camera_display.signal_camera_status.connect(self.handle_camera_status)
|
self.camera_display.signal_camera_status.connect(self.handle_camera_status)
|
||||||
|
|
||||||
# 初始化后检查是否有已完成的记录
|
|
||||||
QTimer.singleShot(1000, self.check_and_process_finished_records)
|
|
||||||
|
|
||||||
def update_inspection_columns(self):
|
def update_inspection_columns(self):
|
||||||
"""更新检验列配置 - 使用检验配置管理器获取启用的列数和标题"""
|
"""更新检验列配置 - 使用检验配置管理器获取启用的列数和标题"""
|
||||||
@ -445,6 +461,10 @@ class MainWindow(MainWindowUI):
|
|||||||
# 获取托盘号对应的托盘类型
|
# 获取托盘号对应的托盘类型
|
||||||
tray_id = self.tray_edit.currentText()
|
tray_id = self.tray_edit.currentText()
|
||||||
pallet_type = self.pallet_type_manager.get_pallet_type_by_pallet_id(tray_id)
|
pallet_type = self.pallet_type_manager.get_pallet_type_by_pallet_id(tray_id)
|
||||||
|
# 初始化托盘号对应的序号
|
||||||
|
if tray_id not in self.init_seq:
|
||||||
|
self.init_seq[tray_id] = 1
|
||||||
|
|
||||||
if not pallet_type:
|
if not pallet_type:
|
||||||
QMessageBox.warning(self, "错误", "未查到对应下料托盘类型")
|
QMessageBox.warning(self, "错误", "未查到对应下料托盘类型")
|
||||||
return
|
return
|
||||||
@ -884,23 +904,7 @@ class MainWindow(MainWindowUI):
|
|||||||
|
|
||||||
# 保存到数据库
|
# 保存到数据库
|
||||||
inspection_dao.save_inspection_data(order_id, data)
|
inspection_dao.save_inspection_data(order_id, data)
|
||||||
# if result:
|
|
||||||
# logging.info(f"已成功保存工程号 {order_id} 的检验数据,位置: {position}, 值: {value}")
|
|
||||||
# # 显示临时状态消息
|
|
||||||
# self.statusBar().showMessage(f"已保存检验数据:{value}", 3000)
|
|
||||||
|
|
||||||
# #TODO: 如果是称重字段,生成贴标号,然后给打印机信号,进行贴标
|
|
||||||
# if position == 12 and value:
|
|
||||||
# # 直接调用加载到包装记录的方法
|
|
||||||
# self.load_finished_record_to_package_record(order_id, tray_id)
|
|
||||||
# logging.info(f"检测到称重字段有值,已自动写入包装记录")
|
|
||||||
# else:
|
|
||||||
# # 使用延迟调用,避免频繁刷新UI
|
|
||||||
# QTimer.singleShot(500, self.check_and_process_finished_records)
|
|
||||||
# else:
|
|
||||||
# logging.warning(f"保存工程号 {order_id} 的检验数据失败")
|
|
||||||
# # 显示错误消息
|
|
||||||
# self.statusBar().showMessage(f"保存检验数据失败", 3000)
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"保存检验数据失败: {str(e)}")
|
logging.error(f"保存检验数据失败: {str(e)}")
|
||||||
@ -1174,52 +1178,6 @@ class MainWindow(MainWindowUI):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"更新包装记录统计数据失败: {str(e)}")
|
logging.error(f"更新包装记录统计数据失败: {str(e)}")
|
||||||
|
|
||||||
def check_and_process_finished_records(self):
|
|
||||||
"""检查并处理所有已完成的检验记录"""
|
|
||||||
try:
|
|
||||||
# 获取当前托盘号
|
|
||||||
tray_id = self.tray_edit.currentText()
|
|
||||||
|
|
||||||
# 使用InspectionDAO获取未完成的检验数据
|
|
||||||
from dao.inspection_dao import InspectionDAO
|
|
||||||
inspection_dao = InspectionDAO()
|
|
||||||
|
|
||||||
# 获取所有检验数据
|
|
||||||
all_data = inspection_dao.get_inspection_data_unfinished(tray_id)
|
|
||||||
|
|
||||||
# 按工程号分组
|
|
||||||
orders_data = {}
|
|
||||||
for data in all_data:
|
|
||||||
order_id = data['order_id']
|
|
||||||
if order_id not in orders_data:
|
|
||||||
orders_data[order_id] = []
|
|
||||||
orders_data[order_id].append(data)
|
|
||||||
|
|
||||||
# 检查每个工程号是否有贴标数据
|
|
||||||
for order_id, items in orders_data.items():
|
|
||||||
# 查找贴标数据
|
|
||||||
has_label = False
|
|
||||||
label_value = ""
|
|
||||||
|
|
||||||
for item in items:
|
|
||||||
if item['position'] == 11: # 贴标
|
|
||||||
label_value = item['value']
|
|
||||||
if label_value:
|
|
||||||
has_label = True
|
|
||||||
break
|
|
||||||
|
|
||||||
if has_label:
|
|
||||||
# 将已有贴标的记录添加到包装记录
|
|
||||||
self.load_finished_record_to_package_record(order_id, tray_id)
|
|
||||||
logging.info(f"已将工程号 {order_id} 的贴标记录添加到包装记录")
|
|
||||||
|
|
||||||
# 重新加载检验数据
|
|
||||||
self.load_finished_inspection_data()
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"检查并处理已完成的检验记录失败: {str(e)}")
|
|
||||||
QMessageBox.warning(self, "处理失败", f"检查并处理已完成的检验记录失败: {str(e)}")
|
|
||||||
|
|
||||||
def show_table_context_menu(self, pos):
|
def show_table_context_menu(self, pos):
|
||||||
"""显示表格上下文菜单
|
"""显示表格上下文菜单
|
||||||
|
|
||||||
@ -1383,24 +1341,6 @@ class MainWindow(MainWindowUI):
|
|||||||
# 获取Modbus监控器实例
|
# 获取Modbus监控器实例
|
||||||
self.modbus_monitor = get_modbus_monitor()
|
self.modbus_monitor = get_modbus_monitor()
|
||||||
|
|
||||||
# 创建机器状态处理器实例
|
|
||||||
self.machine_handlers = MachineStatusHandlers()
|
|
||||||
|
|
||||||
# 添加状态显示到状态栏
|
|
||||||
self.modbus_status_label = QLabel("Modbus: 未连接")
|
|
||||||
self.weight_label = QLabel("重量: --")
|
|
||||||
self.label_status_label = QLabel("贴标: 无贴标")
|
|
||||||
self.error_status_label = QLabel("故障: 无")
|
|
||||||
|
|
||||||
# 设置样式
|
|
||||||
self.error_status_label.setStyleSheet("color: green; font-weight: bold;")
|
|
||||||
|
|
||||||
# 添加到状态栏
|
|
||||||
self.statusBar().addPermanentWidget(self.modbus_status_label)
|
|
||||||
self.statusBar().addPermanentWidget(self.weight_label)
|
|
||||||
self.statusBar().addPermanentWidget(self.label_status_label)
|
|
||||||
self.statusBar().addPermanentWidget(self.error_status_label)
|
|
||||||
|
|
||||||
# 注册寄存器处理器
|
# 注册寄存器处理器
|
||||||
self._register_modbus_handlers()
|
self._register_modbus_handlers()
|
||||||
|
|
||||||
@ -1482,6 +1422,9 @@ class MainWindow(MainWindowUI):
|
|||||||
logging.warning("工程号为空")
|
logging.warning("工程号为空")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# 获取托盘号
|
||||||
|
tray_id = self.tray_edit.currentText()
|
||||||
|
|
||||||
# 断开单元格变更信号,避免程序自动写入时触发
|
# 断开单元格变更信号,避免程序自动写入时触发
|
||||||
try:
|
try:
|
||||||
self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed)
|
self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed)
|
||||||
@ -1496,12 +1439,27 @@ class MainWindow(MainWindowUI):
|
|||||||
self.process_table.setItem(data_row, weight_col, weight_item)
|
self.process_table.setItem(data_row, weight_col, weight_item)
|
||||||
logging.info(f"已将称重数据 {weight}g 写入表格单元格 [{data_row}, {weight_col}]")
|
logging.info(f"已将称重数据 {weight}g 写入表格单元格 [{data_row}, {weight_col}]")
|
||||||
|
|
||||||
|
# 保存称重数据到数据库
|
||||||
|
from dao.inspection_dao import InspectionDAO
|
||||||
|
inspection_dao = InspectionDAO()
|
||||||
|
|
||||||
|
# 构建数据
|
||||||
|
data = [{
|
||||||
|
'position': 12, # 称重位置是12
|
||||||
|
'config_id': 12,
|
||||||
|
'value': str(weight),
|
||||||
|
'status': 'pass',
|
||||||
|
'remark': '',
|
||||||
|
'tray_id': tray_id
|
||||||
|
}]
|
||||||
|
|
||||||
|
# 保存到数据库
|
||||||
|
inspection_dao.save_inspection_data(order_id, data)
|
||||||
|
logging.info(f"称重数据 {weight}g 已保存到数据库")
|
||||||
|
|
||||||
# 重新连接单元格变更信号
|
# 重新连接单元格变更信号
|
||||||
self.process_table.cellChanged.connect(self.handle_inspection_cell_changed)
|
self.process_table.cellChanged.connect(self.handle_inspection_cell_changed)
|
||||||
|
|
||||||
# 主动触发单元格变更事件
|
|
||||||
self.handle_inspection_cell_changed(data_row, weight_col)
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"写入称重数据到表格失败: {str(e)}")
|
logging.error(f"写入称重数据到表格失败: {str(e)}")
|
||||||
# 确保信号重新连接
|
# 确保信号重新连接
|
||||||
@ -1516,8 +1474,98 @@ class MainWindow(MainWindowUI):
|
|||||||
logging.info(f"[处理] 贴标状态: {status}")
|
logging.info(f"[处理] 贴标状态: {status}")
|
||||||
# 更新UI显示
|
# 更新UI显示
|
||||||
self.label_status_label.setText(f"贴标: {status}")
|
self.label_status_label.setText(f"贴标: {status}")
|
||||||
# 在这里可以添加更多业务逻辑
|
|
||||||
pass
|
# 只有当信号为贴标完成(2)时才进行处理
|
||||||
|
if signal == 1:
|
||||||
|
try:
|
||||||
|
# 获取数据行数
|
||||||
|
if self.process_table.rowCount() <= 2: # 没有数据行
|
||||||
|
logging.warning("没有可用的数据行来处理贴标完成信号")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 获取当前选中的行或第一个数据行
|
||||||
|
current_row = self.process_table.currentRow()
|
||||||
|
data_row = current_row if current_row >= 2 else 2 # 使用第一个数据行(索引为2)
|
||||||
|
|
||||||
|
# 确保行存在
|
||||||
|
if data_row >= self.process_table.rowCount():
|
||||||
|
logging.warning(f"选中的行 {data_row} 超出了表格范围")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 获取工程号
|
||||||
|
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_value = f"{tray_id}-{self.init_seq[tray_id]}"
|
||||||
|
|
||||||
|
# 断开单元格变更信号,避免程序自动写入时触发
|
||||||
|
try:
|
||||||
|
self.process_table.cellChanged.disconnect(self.handle_inspection_cell_changed)
|
||||||
|
except:
|
||||||
|
logging.warning("断开单元格变更信号失败,可能信号未连接")
|
||||||
|
|
||||||
|
# 创建并设置贴标单元格
|
||||||
|
label_item = QTableWidgetItem(label_value)
|
||||||
|
label_item.setTextAlignment(Qt.AlignCenter)
|
||||||
|
|
||||||
|
# 写入单元格
|
||||||
|
self.process_table.setItem(data_row, label_col, label_item)
|
||||||
|
logging.info(f"已将贴标数据 {label_value} 写入表格单元格 [{data_row}, {label_col}]")
|
||||||
|
|
||||||
|
# 保存贴标数据到数据库
|
||||||
|
from dao.inspection_dao import InspectionDAO
|
||||||
|
inspection_dao = InspectionDAO()
|
||||||
|
|
||||||
|
# 构建数据
|
||||||
|
data = [{
|
||||||
|
'position': 11, # 贴标位置是11
|
||||||
|
'config_id': 11,
|
||||||
|
'value': label_value,
|
||||||
|
'status': 'pass',
|
||||||
|
'remark': '',
|
||||||
|
'tray_id': tray_id
|
||||||
|
}]
|
||||||
|
|
||||||
|
# 保存到数据库
|
||||||
|
inspection_dao.save_inspection_data(order_id, data)
|
||||||
|
|
||||||
|
# 调用加载到包装记录的方法
|
||||||
|
self.load_finished_record_to_package_record(order_id, tray_id)
|
||||||
|
logging.info(f"贴标完成,已将工程号 {order_id} 的记录加载到包装记录")
|
||||||
|
|
||||||
|
# 删除当前处理的行
|
||||||
|
self.process_table.removeRow(data_row)
|
||||||
|
logging.info(f"已删除处理完成的行 {data_row}")
|
||||||
|
|
||||||
|
# 重新连接单元格变更信号
|
||||||
|
self.process_table.cellChanged.connect(self.handle_inspection_cell_changed)
|
||||||
|
|
||||||
|
# 更新托盘号对应的序号
|
||||||
|
self.init_seq[tray_id] += 1
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"处理贴标完成信号失败: {str(e)}")
|
||||||
|
# 确保信号重新连接
|
||||||
|
try:
|
||||||
|
self.process_table.cellChanged.connect(self.handle_inspection_cell_changed)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
@Slot(bool, str)
|
@Slot(bool, str)
|
||||||
def handle_modbus_status(self, is_connected, message):
|
def handle_modbus_status(self, is_connected, message):
|
||||||
@ -1550,15 +1598,29 @@ class MainWindow(MainWindowUI):
|
|||||||
def handle_loading_feedback(self, status, desc):
|
def handle_loading_feedback(self, status, desc):
|
||||||
"""处理上料信息反馈"""
|
"""处理上料信息反馈"""
|
||||||
logging.info(f"[处理] 上料信息: {desc}")
|
logging.info(f"[处理] 上料信息: {desc}")
|
||||||
# 在这里添加业务逻辑
|
|
||||||
pass
|
# 如果上料完成(status=2),显示状态信息
|
||||||
|
if status == 2:
|
||||||
|
self.show_operation_status("上料完成", "input", desc)
|
||||||
|
QMessageBox.information(self, "上料操作", f"上料操作已完成: {desc}")
|
||||||
|
# 如果上料错误(status=3),显示错误信息
|
||||||
|
elif status == 3:
|
||||||
|
self.show_operation_status("上料错误", "input", desc)
|
||||||
|
QMessageBox.warning(self, "上料操作", f"上料操作出错: {desc}")
|
||||||
|
|
||||||
@Slot(int, str)
|
@Slot(int, str)
|
||||||
def handle_unloading_feedback(self, status, desc):
|
def handle_unloading_feedback(self, status, desc):
|
||||||
"""处理下料信息反馈"""
|
"""处理下料信息反馈"""
|
||||||
logging.info(f"[处理] 下料信息: {desc}")
|
logging.info(f"[处理] 下料信息: {desc}")
|
||||||
# 在这里添加业务逻辑
|
|
||||||
pass
|
# 如果下料完成(status=2),显示状态信息
|
||||||
|
if status == 2:
|
||||||
|
self.show_operation_status("下料完成", "output", desc)
|
||||||
|
QMessageBox.information(self, "下料操作", f"下料操作已完成: {desc}")
|
||||||
|
# 如果下料错误(status=3),显示错误信息
|
||||||
|
elif status == 3:
|
||||||
|
self.show_operation_status("下料错误", "output", desc)
|
||||||
|
QMessageBox.warning(self, "下料操作", f"下料操作出错: {desc}")
|
||||||
|
|
||||||
def _update_error_status(self):
|
def _update_error_status(self):
|
||||||
"""更新故障状态显示"""
|
"""更新故障状态显示"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user