import socket from time import sleep import time import threading import logging from logging.handlers import RotatingFileHandler def setup_logger(log_file='app.log'): # 创建日志记录器 logger = logging.getLogger('my_app') logger.setLevel(logging.DEBUG) # 创建格式化器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 创建旋转文件处理器 # maxBytes=50MB (50 * 1024 * 1024), backupCount=5 handler = RotatingFileHandler( log_file, maxBytes=50 * 1024 * 1024, # 50MB backupCount=5, # 保留5个备份文件 encoding='utf-8' ) handler.setFormatter(formatter) # 添加处理器到日志记录器 logger.addHandler(handler) return logger def ServoP(client, pt_floats): tcp_command = f"ServoP({pt_floats[0]},{pt_floats[1]},{pt_floats[2]},{pt_floats[3]},{pt_floats[4]},{pt_floats[5]}, t=0.004, aheadtime=80, gain=500)" tcp_command = tcp_command.encode() client.send(tcp_command) def ServoJ(client, J1_angle): tcp_command = "servoj(0,%f,%f,0,0,0,t=0.008,aheadtime=20, gain=200)" % (J1_angle,J1_angle/2) tcp_command = tcp_command.encode() client.sendall(tcp_command) # buf = client.recv(200).decode() # 接收反馈信息的长度 # print(buf) def servoj_2(client, J1_angle): tcp_command = "servoj(%f,0,0,0,0,0,t=2,aheadtime=50, gain=500)" % (J1_angle) tcp_command = tcp_command.encode() print(tcp_command) client.send(tcp_command) def EnableRobot(client): tcp_command = "EnableRobot()" tcp_command = tcp_command.encode() client.send(tcp_command) buf = client.recv(200).decode() # 接收反馈信息的长度 index_str = buf[buf.find('{') + 1:buf.find('}')] if (index_str == ''): return -1 return buf[buf.find('{') + 1:buf.find('}')] stop = True def enableStatus(client): global stop logger = setup_logger() servoj_2(client, 0) sleep(3) J1 = 0 bias = 0.04 pl = bias while stop: time_home = time.time() if J1 > 60 and bias == pl: bias = -pl elif J1 < -1 and bias == -pl: bias = pl J1 = J1 + bias ServoJ(client, J1) time.sleep(0.007) tie = time.time()-time_home logger.info(f"time: {tie}") print(tie) SERVER3_ADDRESS = '192.168.5.1' SERVER3_PORT = 29999 client_socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 设置TCP_NODELAY禁用Nagle算法 client_socket1.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) client_socket1.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 100000) client_socket1.connect((SERVER3_ADDRESS, SERVER3_PORT)) #client_socket1.setblocking(False) print('成功连接到第1个服务端') #enableStatus(client_socket1) def worker(): #子线程接受模式 global stop while True: try: data = client_socket1.recv(1024).decode() if data: print(data) index_str = data[data.find('{') + 1:data.find('}')] if (index_str == ''): stop = False print(11111111111) else: stop = True except BlockingIOError: time.sleep(0.001) time_h = time.time() try: EnableRobot(client_socket1) feed_thread = threading.Thread( target=worker) # 机器状态反馈线程 feed_thread.daemon = True feed_thread.start() enableStatus(client_socket1) except KeyboardInterrupt: print("用户中断操作。") print((time.time()-time_h)/60) except Exception as e: print("发生异常:", e) print((time.time() - time_h) / 60) print((time.time()-time_h)/60)