🚑 update 修复日志记录闪退bug 增加移动至此 修复复位
This commit is contained in:
@ -3,6 +3,7 @@ import logging
|
||||
import socket
|
||||
import threading
|
||||
import time
|
||||
import random
|
||||
|
||||
import Constant
|
||||
from Util.util_log import log
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import copy
|
||||
import logging
|
||||
import random
|
||||
import threading
|
||||
import time
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ import os
|
||||
|
||||
Debug = True
|
||||
IO_EmergencyPoint = 2
|
||||
max_log_len = 100
|
||||
bag_height = 10 # 一袋的高度
|
||||
position_accuracy_action = 0.1 #动作时的位置精度6 这个精度要高 必须到位置才做动作
|
||||
position_accuracy_command = 6#命令时的位置精度
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
import logging
|
||||
import queue
|
||||
import threading
|
||||
import time
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
from PySide6.QtCore import Signal, QObject
|
||||
|
||||
|
||||
|
||||
class QTextEditLogger(logging.Handler):
|
||||
@ -15,8 +20,12 @@ class QTextEditLogger(logging.Handler):
|
||||
|
||||
|
||||
|
||||
class Logger:
|
||||
class Logger(QObject):
|
||||
log_info_signal = Signal(str)
|
||||
log_warning_signal = Signal(str)
|
||||
log_error_signal = Signal(str)
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.logger_textEdit_info = logging.getLogger('info_logger')
|
||||
self.logger_textEdit_info.setLevel(logging.INFO)
|
||||
self.logger_textEdit_warning = logging.getLogger('warning_logger')
|
||||
@ -24,6 +33,10 @@ class Logger:
|
||||
self.logger_file_info = logging.getLogger('file_logger')
|
||||
self.logger_file_info.setLevel(logging.INFO)
|
||||
self.pre_message = ''
|
||||
self.lock = threading.Lock() # 创建锁
|
||||
self.log_queue = queue.Queue()
|
||||
self.logger_thread = threading.Thread(target=self._process_logs, daemon=True)
|
||||
self.logger_thread.start()
|
||||
|
||||
def init_log(self,textEdit_info,textEdit_warning,file_path):
|
||||
text_edit_handler = QTextEditLogger(textEdit_info)
|
||||
@ -41,27 +54,45 @@ class Logger:
|
||||
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
||||
handler.setFormatter(formatter)
|
||||
self.logger_file_info.addHandler(handler)
|
||||
|
||||
def _process_logs(self):
|
||||
while True:
|
||||
time.sleep(0.1)
|
||||
level, message = self.log_queue.get()
|
||||
if level == logging.INFO:
|
||||
self.log_info_signal.emit(message)
|
||||
# self.logger_textEdit_info.info(message)
|
||||
self.logger_file_info.info(message)
|
||||
elif level == logging.ERROR:
|
||||
# self.logger_textEdit_info.error(message)
|
||||
self.logger_file_info.error(message)
|
||||
# self.logger_textEdit_warning.error(message)
|
||||
self.log_error_signal.emit(message)
|
||||
elif level == logging.WARNING:
|
||||
self.logger_file_info.warning(message)
|
||||
self.log_warning_signal.emit(message)
|
||||
def log_message(self,level,message):
|
||||
self.log_queue.put((level, message))
|
||||
return
|
||||
try:
|
||||
|
||||
if message != self.pre_message:
|
||||
|
||||
with self.lock: # 确保线程安全
|
||||
if message == self.pre_message:
|
||||
return
|
||||
self.pre_message = message
|
||||
else:
|
||||
|
||||
return
|
||||
|
||||
if level == logging.INFO:
|
||||
|
||||
self.logger_textEdit_info.info(message)
|
||||
|
||||
#return
|
||||
self.logger_file_info.info(message)
|
||||
|
||||
if level == logging.ERROR:
|
||||
self.logger_textEdit_info.error(message)
|
||||
self.logger_file_info.error(message)
|
||||
self.logger_textEdit_warning.error(message)
|
||||
self.logger_file_info.error(message)
|
||||
if level == logging.WARNING:
|
||||
#return
|
||||
self.logger_file_info.warning(message)
|
||||
|
||||
except Exception as e:
|
||||
|
||||
90
main.py
90
main.py
@ -1,8 +1,10 @@
|
||||
import configparser
|
||||
import copy
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import queue
|
||||
import random
|
||||
import sys
|
||||
import threading
|
||||
from multiprocessing import Process
|
||||
@ -14,7 +16,8 @@ import numpy as np
|
||||
from PyQt5.uic.properties import QtWidgets
|
||||
from PySide6 import QtCore
|
||||
from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent, QTimer
|
||||
from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt, QMovie, QIcon, QCursor, QColor
|
||||
from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt, QMovie, QIcon, QCursor, QColor, \
|
||||
QTextCursor
|
||||
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \
|
||||
QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView, QMessageBox, QSizePolicy, QComboBox, QMenu
|
||||
from datetime import datetime
|
||||
@ -326,9 +329,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
def init_table_position(self):
|
||||
#self.tableWidget_line_positions.setRowCount(5)
|
||||
self.tableWidget_line_positions.setColumnCount(13)
|
||||
self.tableWidget_line_positions.setColumnCount(14)
|
||||
|
||||
self.tableWidget_line_positions.setHorizontalHeaderLabels(["节段","X","Y","Z","U","V","W","运动类型","点位类型","序号","排序","线号","操作2"])
|
||||
self.tableWidget_line_positions.setHorizontalHeaderLabels(["节段","X","Y","Z","U","V","W","运动类型","点位类型","序号","排序","线号","操作1","操作2"])
|
||||
self.tableWidget_line_positions.setSelectionBehavior(QTableWidget.SelectRows)
|
||||
self.tableWidget_line_positions.setColumnHidden(0, True)
|
||||
self.tableWidget_line_positions.setColumnHidden(9,True)
|
||||
@ -340,7 +343,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
header = self.tableWidget_line_positions.horizontalHeader()
|
||||
header.setSectionResizeMode(0, PySide6.QtWidgets.QHeaderView.ResizeMode.Interactive)
|
||||
self.tableWidget_line_positions.setHorizontalScrollBarPolicy(PySide6.QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded)
|
||||
for i in range(13):
|
||||
for i in range(14):
|
||||
header.setSectionResizeMode(i, PySide6.QtWidgets.QHeaderView.ResizeMode.Interactive)
|
||||
self.tableWidget_line_positions.setContextMenuPolicy(PySide6.QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
self.tableWidget_line_positions.customContextMenuRequested.connect(self.show_positions_context_menu)
|
||||
@ -416,6 +419,44 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.set_positionModel_to_tabel(row_i+1,position_model)
|
||||
self.table_line_changed = True
|
||||
|
||||
|
||||
def tabel_move_position(self,row_i):
|
||||
if self.tableWidget_line_positions.currentRow()==-1:
|
||||
QMessageBox.information(self, "提示", Constant.str_sys_set_position_error)
|
||||
return
|
||||
|
||||
row_i = self.tableWidget_line_positions.currentRow()
|
||||
combox_line_type = self.tableWidget_line_positions.cellWidget(row_i, 7)
|
||||
lineType = combox_line_type.currentData()
|
||||
p1 = Real_Position().init_position(
|
||||
float(self.tableWidget_line_positions.item(row_i, 1).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i, 2).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i, 3).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i, 4).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i, 5).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i, 6).text()),
|
||||
)
|
||||
if lineType == 0: #直线
|
||||
if row_i != 0:
|
||||
combox_line_type_inner = self.tableWidget_line_positions.cellWidget(row_i-1, 7)
|
||||
lineType_inner = combox_line_type_inner.currentData()
|
||||
if lineType_inner == 2:
|
||||
p2 = Real_Position().init_position(
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 1).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 2).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 3).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 4).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 5).text()),
|
||||
float(self.tableWidget_line_positions.item(row_i-1, 6).text()),
|
||||
)
|
||||
self.send_position_command(x1=p1.X, x2=p1.Y, x3=p1.Z, x4=p1.X, x5=p1.Y, x6=p1.Z, move_type=MoveType.Cure, speed=self.robotClient.debug_speed, p2=p2)
|
||||
return
|
||||
self.send_position_command(x1=p1.X, x2=p1.Y, x3=p1.Z, x4=p1.X, x5=p1.Y, x6=p1.Z, move_type=MoveType.WORLD,speed=self.robotClient.debug_speed)
|
||||
return
|
||||
if lineType == 4: # 自由路径
|
||||
self.send_position_command(x1=p1.X, x2=p1.Y, x3=p1.Z, x4=p1.X, x5=p1.Y, x6=p1.Z,move_type=MoveType.AXIS,speed=self.robotClient.debug_speed)
|
||||
return
|
||||
|
||||
def tabel_get_position(self,row_i):
|
||||
if self.tableWidget_line_positions.currentRow()==-1:
|
||||
QMessageBox.information(self, "提示", Constant.str_sys_set_position_error)
|
||||
@ -469,9 +510,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
get_pos_btn.clicked.connect(
|
||||
lambda _, index=row_i: self.tabel_get_position(index))
|
||||
self.tableWidget_line_positions.setCellWidget(row_i, 12, get_pos_btn)
|
||||
# del_pos_btn = QPushButton("删除点位")
|
||||
# del_pos_btn.clicked.connect(lambda _, index=row_i: self.tabel_delete_position(index))
|
||||
# self.tableWidget_line_positions.setCellWidget(row_i, 12, del_pos_btn)
|
||||
|
||||
|
||||
move_pos_btn = QPushButton("移至点位")
|
||||
move_pos_btn.clicked.connect(lambda _, index=row_i: self.tabel_move_position(index))
|
||||
self.tableWidget_line_positions.setCellWidget(row_i, 13, move_pos_btn)
|
||||
def send_table_position_status_changed(self):
|
||||
self.table_position_changed = True
|
||||
|
||||
@ -490,9 +533,28 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
pass
|
||||
|
||||
def init_log(self):
|
||||
log.log_info_signal.connect(self.log_info_message)
|
||||
log.log_error_signal.connect(self.log_error_message)
|
||||
log.log_warning_signal.connect(self.log_warning_message)
|
||||
log.init_log(self.textEdit_log_info, self.textEdit_log_error, Constant.log_file_path)
|
||||
log.log_message(logging.INFO, Constant.str_sys_start)
|
||||
def log_info_message(self,message):
|
||||
now = datetime.now()
|
||||
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.textEdit_log_info.append(f'{formatted_time}-提示: {message}')
|
||||
|
||||
def log_warning_message(self,message):
|
||||
now = datetime.now()
|
||||
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.textEdit_log_info.append(f'{formatted_time}-注意: {message}')
|
||||
self.textEdit_log_error.append(f'{formatted_time}-注意: {message}')
|
||||
def log_error_message(self,message):
|
||||
now = datetime.now()
|
||||
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.textEdit_log_info.append(f'{formatted_time}-报警: {message}')
|
||||
self.textEdit_log_error.append(f'{formatted_time}-报警: {message}')
|
||||
if self.tabWidget.currentIndex() != 1:
|
||||
self.tabWidget.setCurrentIndex(1)
|
||||
|
||||
def init_UI(self):
|
||||
self.pushButton_num1.clicked.connect(self.send_num_button_click)
|
||||
@ -1210,7 +1272,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
# 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 = self.feedLine_dict[line_head].positions
|
||||
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
|
||||
@ -1591,7 +1653,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.robotClient.add_sendQuene(request_command)
|
||||
# self.command_quene.put(request_command)
|
||||
|
||||
def send_position_command(self, x1, x2, x3, x4, x5, x6, move_type: MoveType = MoveType.WORLD):
|
||||
def send_position_command(self, x1, x2, x3, x4, x5, x6, move_type: MoveType = MoveType.WORLD,speed=5,p2=None):
|
||||
|
||||
position_instruction = Instruction()
|
||||
position_instruction.m0 = float(x1)
|
||||
@ -1601,7 +1663,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
position_instruction.m4 = float(x5)
|
||||
position_instruction.m5 = float(x6)
|
||||
position_instruction.action = move_type.value
|
||||
position_instruction.speed=self.robotClient.debug_speed
|
||||
position_instruction.speed = self.robotClient.debug_speed
|
||||
if position_instruction.action == 17:
|
||||
position_instruction.m0_p = p2.X
|
||||
position_instruction.m1_p = p2.Y
|
||||
position_instruction.m2_p = p2.Z
|
||||
position_instruction.m3_p = p2.U
|
||||
position_instruction.m4_p = p2.V
|
||||
position_instruction.m5_p = p2.W
|
||||
|
||||
instruction_command = CMDInstructRequest()
|
||||
instruction_command.instructions.append(position_instruction)
|
||||
request_command = instruction_command.toString()
|
||||
|
||||
Reference in New Issue
Block a user