米厂码垛修改
This commit is contained in:
187
main.py
187
main.py
@ -490,7 +490,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
combox_lineType.addItem("直线",0)
|
||||
combox_lineType.addItem("曲线中间点",2)
|
||||
combox_lineType.addItem("曲线终点",3)
|
||||
combox_lineType.addItem("自由路径",4)
|
||||
#自由路径修改成关节坐标
|
||||
combox_lineType.addItem("关节",4)
|
||||
combox_lineType.setCurrentIndex(combox_lineType.findData(position_model.lineType))
|
||||
combox_lineType.currentIndexChanged.connect(self.send_table_position_status_changed)
|
||||
self.tableWidget_line_positions.setCellWidget(row_i, 7, combox_lineType)
|
||||
@ -719,6 +720,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.feeding.take_no_photo_sigal.connect(self.show_no_photo_message_box)
|
||||
self.feeding.update_detect_image.connect(self.updateUI_label_detection)
|
||||
self.feeding.log_signal.connect(self.log_message)
|
||||
self.feeding.stack_finish_signal.connect(self.stack_finish)
|
||||
self.last_time = time.time()
|
||||
self.remain_lineName = self.configReader.get('Robot_Feed', 'remain_lineName')
|
||||
self.remain_Count = int(self.configReader.get('Robot_Feed', 'remain_Count'))
|
||||
@ -897,10 +899,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.main_UI_threading = Thread(target=self.updateUI)
|
||||
self.detect_person_thread = Thread(target=self.run_detect_persion)
|
||||
self.main_threading.start()
|
||||
self.robot_connect_threading.start()
|
||||
if not Constant.DebugPosition:
|
||||
self.robot_connect_threading.start()
|
||||
self.main_UI_threading.start()
|
||||
self.detect_person_thread.start()
|
||||
pass
|
||||
|
||||
def check_continue(self):
|
||||
if self.remain_Count!=0:
|
||||
for key in self.feedLine_dict.keys():
|
||||
@ -915,7 +919,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
cancel_button = remain_messageBox.addButton("取消", PySide6.QtWidgets.QMessageBox.ButtonRole.RejectRole)
|
||||
result = remain_messageBox.exec()
|
||||
if remain_messageBox.clickedButton() == cancel_button:
|
||||
self.remain_Count = 0
|
||||
# self.remain_Count = 0
|
||||
return
|
||||
self.configReader.read(Constant.feedLine_set_file, encoding='utf-8')
|
||||
line_name = self.configReader.get(key, 'name')
|
||||
@ -970,7 +974,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
num = self.horizontalSlider_feedingNum.maximum()
|
||||
line_head = self.comboBox_lineIndex.currentData()
|
||||
self.command_quene.put(FeedCommand(FeedingConfig(num, FeedLine(self.feedLine_dict[line_head].id,self.feedLine_dict[line_head].name,self.feedLine_dict[line_head].positions), self.feeding.robotClient.photo_locs[:])))
|
||||
num=5 #先默认30包码垛
|
||||
self.command_quene.put(FeedCommand(FeedingConfig(num, FeedLine(self.feedLine_dict[line_head].id,self.feedLine_dict[line_head].name,self.feedLine_dict[line_head].positions,self.remain_Count), self.feeding.robotClient.photo_locs[:],self.remain_Count)))
|
||||
# self.stackedWidget_num.setCurrentIndex(1)
|
||||
self.set_run_status_button(True)
|
||||
self.feeding.pause = False
|
||||
@ -1273,19 +1278,31 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
#safe_position = self.feedLine_dict[line_head].safe_position
|
||||
# self.send_position_command(safe_position.X, safe_position.Y, safe_position.Z, safe_position.U, safe_position.V, safe_position.W,move_type=MoveType.WORLD)
|
||||
if self.remain_lineName != '':
|
||||
line_head = f'{Constant.feedLine_set_section}{self.remain_lineName}'
|
||||
return_positions = copy.deepcopy(self.feedLine_dict[line_head].positions)
|
||||
position_origin = PositionModel()
|
||||
position_origin.init_position(self.robotClient.origin_position)
|
||||
position_origin.status = 1
|
||||
return_positions.insert(0,position_origin)
|
||||
if self.feedLine_dict.keys().__contains__(line_head):
|
||||
self.feeding.feedConfig= FeedingConfig(0, FeedLine(self.feedLine_dict[line_head].id, self.feedLine_dict[line_head].name,
|
||||
return_positions),
|
||||
self.feeding.robotClient.photo_locs[:])
|
||||
if self.feeding.feedConfig:
|
||||
|
||||
#改变路径后的值进行复位
|
||||
__current_feed_config=self.feeding.feedConfig
|
||||
# __current_lineid=__current_feed_config.feedLine.id
|
||||
# __current_linename=__current_feed_config.feedLine.name
|
||||
# __current_position=
|
||||
# self.feeding.feedConfig= FeedingConfig(0, FeedLine(__current_lineid, __current_linename,
|
||||
# __current_feed_config.feedLine.positions,0),
|
||||
# self.feeding.robotClient.photo_locs[:],0)
|
||||
else:
|
||||
log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error)
|
||||
return
|
||||
#用配置的路径进行复位
|
||||
line_head = f'{Constant.feedLine_set_section}{self.remain_lineName}'
|
||||
return_positions = copy.deepcopy(self.feedLine_dict[line_head].positions)
|
||||
position_origin = PositionModel()
|
||||
position_origin.init_position(self.robotClient.origin_position)
|
||||
position_origin.status = 1
|
||||
return_positions.insert(0,position_origin)
|
||||
if self.feedLine_dict.keys().__contains__(line_head):
|
||||
self.feeding.feedConfig= FeedingConfig(0, FeedLine(self.feedLine_dict[line_head].id, self.feedLine_dict[line_head].name,
|
||||
return_positions,self.remain_Count),
|
||||
self.feeding.robotClient.photo_locs[:],self.remain_Count)
|
||||
else:
|
||||
log.log_message(logging.ERROR, Constant.str_feed_reset_no_line_error)
|
||||
return
|
||||
self.feeding.reset_status = ResetStatus.RStart
|
||||
# dialog_reset = StopDialog()
|
||||
# dialog_reset.stop_thread_signal.connect(self.stop_reset_thread)
|
||||
@ -1377,64 +1394,66 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
# 主线程的逻辑就是 feeding.run() 接口和错误状态处理
|
||||
while self.thread_signal:
|
||||
time.sleep(0.1)
|
||||
if Constant.feedStatus: #feedStatus的状态打印
|
||||
current_status = self.feeding.feedStatus
|
||||
is_paused = self.feeding.pause
|
||||
if not Constant.DebugPosition:
|
||||
if Constant.feedStatus: #feedStatus的状态打印
|
||||
current_status = self.feeding.feedStatus
|
||||
is_paused = self.feeding.pause
|
||||
|
||||
# 只有当状态或暂停标志发生变化时才打印
|
||||
if (current_status != self.last_status_printed or
|
||||
is_paused != self.last_pause_printed):
|
||||
print(f"[调试] 当前 feedStatus: {current_status}, 是否暂停: {is_paused}")
|
||||
self.last_status_printed = current_status
|
||||
self.last_pause_printed = is_paused
|
||||
# 只有当状态或暂停标志发生变化时才打印
|
||||
if (current_status != self.last_status_printed or
|
||||
is_paused != self.last_pause_printed):
|
||||
print(f"[调试] 当前 feedStatus: {current_status}, 是否暂停: {is_paused}")
|
||||
self.last_status_printed = current_status
|
||||
self.last_pause_printed = is_paused
|
||||
|
||||
# 获取状态和控制标志
|
||||
current_feed_status = self.feeding.feedStatus
|
||||
is_running = (current_feed_status == FeedStatus.FStart) and (not self.feeding.pause) #加上未暂停
|
||||
is_stopped = ( # 以下情况应关闭传感器
|
||||
current_feed_status in [FeedStatus.FFinished, FeedStatus.FNone, FeedStatus.FReverse,
|
||||
FeedStatus.FStartReverse]
|
||||
or self.feeding.pause # 暂停时也视为“停止”
|
||||
)
|
||||
# 启动条件:处于 FStart 且未暂停,且线程未运行
|
||||
if is_running and self.sensor_thread is None:
|
||||
try:
|
||||
self.relay_controller._running = True
|
||||
self.sensor_thread = threading.Thread(
|
||||
target=self.relay_controller.handle_sensor1,
|
||||
name="Sensor1MonitorThread",
|
||||
daemon=True
|
||||
)
|
||||
self.sensor_thread.start()
|
||||
self.sensor2_thread = threading.Thread(
|
||||
target=self.relay_controller.handle_sensor2,
|
||||
daemon=True)
|
||||
self.sensor2_thread.start()
|
||||
print("🟢 传感器1监控线程已启动(开始投料)")
|
||||
print("🟢 传感器2监控线程已启动(关闭滚筒)")
|
||||
except Exception as e:
|
||||
log.log_message(logging.ERROR, f"启动传感器线程失败: {e}")
|
||||
# 获取状态和控制标志
|
||||
current_feed_status = self.feeding.feedStatus
|
||||
is_running = (current_feed_status == FeedStatus.FStart) and (not self.feeding.pause) #加上未暂停
|
||||
is_stopped = ( # 以下情况应关闭传感器
|
||||
current_feed_status in [FeedStatus.FFinished, FeedStatus.FNone, FeedStatus.FReverse,
|
||||
FeedStatus.FStartReverse]
|
||||
or self.feeding.pause # 暂停时也视为“停止”
|
||||
)
|
||||
# 启动条件:处于 FStart 且未暂停,且线程未运行
|
||||
if is_running and self.sensor_thread is None:
|
||||
try:
|
||||
self.relay_controller._running = True
|
||||
self.sensor_thread = threading.Thread(
|
||||
target=self.relay_controller.handle_sensor1,
|
||||
name="Sensor1MonitorThread",
|
||||
daemon=True
|
||||
)
|
||||
self.sensor_thread.start()
|
||||
self.sensor2_thread = threading.Thread(
|
||||
target=self.relay_controller.handle_sensor2,
|
||||
daemon=True)
|
||||
self.sensor2_thread.start()
|
||||
print("🟢 传感器1监控线程已启动(开始投料)")
|
||||
print("🟢 传感器2监控线程已启动(关闭滚筒)")
|
||||
except Exception as e:
|
||||
log.log_message(logging.ERROR, f"启动传感器线程失败: {e}")
|
||||
|
||||
# 关闭条件:暂停、完成、回退等状态
|
||||
if is_stopped and self.sensor_thread is not None:
|
||||
try:
|
||||
self.relay_controller._running = False
|
||||
if self.sensor_thread.is_alive():
|
||||
self.sensor_thread.join(timeout=1)
|
||||
print("🛑 传感器监控线程已关闭(暂停/完成/回退)")
|
||||
self.relay_controller.close(conveyor2=True)
|
||||
except Exception as e:
|
||||
log.log_message(logging.ERROR, f"关闭传感器线程异常: {e}")
|
||||
finally:
|
||||
self.sensor_thread = None
|
||||
# 关闭条件:暂停、完成、回退等状态
|
||||
if is_stopped and self.sensor_thread is not None:
|
||||
try:
|
||||
self.relay_controller._running = False
|
||||
if self.sensor_thread.is_alive():
|
||||
self.sensor_thread.join(timeout=1)
|
||||
print("🛑 传感器监控线程已关闭(暂停/完成/回退)")
|
||||
self.relay_controller.close(conveyor2=True)
|
||||
except Exception as e:
|
||||
log.log_message(logging.ERROR, f"关闭传感器线程异常: {e}")
|
||||
finally:
|
||||
self.sensor_thread = None
|
||||
|
||||
# 如果你也有 handle_sensor2 线程,也可以在这里关闭
|
||||
# 如果你也有 handle_sensor2 线程,也可以在这里关闭
|
||||
|
||||
# 处理命令队列
|
||||
if not self.command_quene.empty():
|
||||
command = self.command_quene.get()
|
||||
if isinstance(command, FeedCommand) and command.status == Status.Prepareing:
|
||||
if self.feeding.feedStatus == FeedStatus.FNone:
|
||||
#插入起始点(set.ini中配置的点)
|
||||
position_origin = PositionModel()
|
||||
position_origin.init_position(self.robotClient.origin_position)
|
||||
position_origin.status = 1
|
||||
@ -1493,7 +1512,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.set_label_status_style(False)
|
||||
if self.feeding.feedStatus != FeedStatus.FNone:
|
||||
self.horizontalSlider_feedingNum.setValue(
|
||||
self.horizontalSlider_feedingNum.maximum() - self.feeding.feedConfig.num)
|
||||
self.feeding.feedConfig.remain_count)
|
||||
# self.label_remain_num.setText(str(self.feeding.feedConfig.num))
|
||||
else:
|
||||
self.set_run_status_button(False)
|
||||
@ -1501,7 +1520,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
#修改点1:这里修改显示剩余袋数的逻辑
|
||||
#原来的逻辑是显示剩余袋数:self.label_remain_num.setText(self.feeding.feedConfig.num))
|
||||
#我改成了目标袋数减剩余袋数就是已经投料的袋数self.label_remain_num.setText(str(self.horizontalSlider_feedingNum.maximum()-self.feeding.feedConfig.num))
|
||||
self.label_remain_num.setText(str(self.horizontalSlider_feedingNum.maximum()-self.feeding.feedConfig.num))
|
||||
self.label_remain_num.setText(str(self.feeding.feedConfig.remain_count))
|
||||
if self.feeding.feedStatus == FeedStatus.FNone:
|
||||
self.stackedWidget_num.setCurrentIndex(0)
|
||||
else:
|
||||
@ -1542,6 +1561,23 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
if msg_box_person.clickedButton() == cancel_button:
|
||||
return
|
||||
# self.show_infomessage_box("")
|
||||
|
||||
def stack_finish(self):
|
||||
"""
|
||||
码垛完成处理
|
||||
"""
|
||||
# self.feeding.feedConfig.remain_count=0
|
||||
# self.closeEvent(None)
|
||||
self.send_pause_command(True)
|
||||
self.feeding.pause = True
|
||||
|
||||
msg_box_finish = QMessageBox()
|
||||
msg_box_finish.setIcon(QMessageBox.Icon.Warning)
|
||||
msg_box_finish.setText("码码完成")
|
||||
msg_box_finish.setWindowTitle("提示")
|
||||
msg_box_finish.addButton("确定", QMessageBox.AcceptRole)
|
||||
result=msg_box_finish.exec()
|
||||
|
||||
|
||||
def updateUI_IOPanel(self):
|
||||
try:
|
||||
@ -1762,7 +1798,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
def send_emergency_alarm_command(self):
|
||||
self.feeding.feedStatus = FeedStatus.FNone
|
||||
|
||||
self.feeding.pause = True #暂停,停止滚去等
|
||||
stop_command = CMDRequest()
|
||||
stop_command.cmdData.append("actionStop")
|
||||
stop_command.cmdData.append("1")
|
||||
@ -2081,9 +2117,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.feeding.onekey = True
|
||||
|
||||
def send_exit_button_click(self):
|
||||
self.closeEvent(None)
|
||||
QApplication.quit()
|
||||
sys.exit(app.exec())
|
||||
self.close()
|
||||
# self.closeEvent(None)
|
||||
# QApplication.quit()
|
||||
# sys.exit(app.exec())
|
||||
|
||||
def send_click_sysmeuExpand(self):
|
||||
self.frame_sys_seting.setVisible(not self.frame_sys_seting.isVisible())
|
||||
@ -2102,17 +2139,23 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
def showEvent(self, event):
|
||||
super().showEvent(event)
|
||||
QTimer.singleShot(2000, self.check_continue)
|
||||
# QTimer.singleShot(2000, self.check_continue)
|
||||
|
||||
|
||||
def closeEvent(self, event):
|
||||
#关闭窗口事件
|
||||
self.record_remain_num()
|
||||
# self.feeding.is_detected = False
|
||||
# self.feeding.detect_thread.join()
|
||||
self.feeding.close_feed()
|
||||
self.thread_signal = False
|
||||
self.robotClient.close()
|
||||
if self.relay_controller:
|
||||
self.relay_controller.stop_sensor(self.sensor_thread,self.sensor2_thread)
|
||||
# self.relay_controller.close(conveyor2=True)
|
||||
log.log_message(logging.INFO, Constant.str_sys_exit)
|
||||
#显示接受关闭事件
|
||||
event.accept()
|
||||
|
||||
#记录投料袋数
|
||||
def record_remain_num(self):
|
||||
@ -2120,7 +2163,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.configReader = configparser.ConfigParser()
|
||||
self.configReader.read(Constant.set_ini)
|
||||
self.configReader.set('Robot_Feed', 'remain_linename', str(self.feeding.feedConfig.feedLine.id))
|
||||
self.configReader.set('Robot_Feed', 'remain_count', str(self.feeding.feedConfig.num))
|
||||
self.configReader.set('Robot_Feed', 'remain_count', str(self.feeding.feedConfig.remain_count))
|
||||
self.configReader.write(open(Constant.set_ini, 'w', encoding='utf-8'))
|
||||
except:
|
||||
log.log_message(logging.ERROR, Constant.str_sys_log_feedNum)
|
||||
|
||||
Reference in New Issue
Block a user