pyside2写的PC与UR3机械臂socket通信界面,点击后却不能使机械臂运动?
问题描述:
使用QT pyside2写的PC与UR3机械臂socket通信界面,pushButton_1点击后可以反馈机械臂末端坐标,但pushButton_2点击后却不能使机械臂运动,是什么原因?(pushButton_2的脚本单独运行是可以让机械臂运动的)还有将变量a3显示到textBrowser的代码如何写?
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile
from socket import *
import struct
import math
import numpy as np
class Stats:
def __init__(self):
# 从文件中加载UI定义
qfile_stats = QFile("D:/PyCharm 2019.1.1/临时程序文件/ui/UR3-control.ui")
qfile_stats.open(QFile.ReadOnly)
qfile_stats.close()
# 从 UI 定义中动态 创建一个相应的窗口对象
# 注意:里面的控件对象也成为窗口对象的属性了
# 比如 self.ui.button , self.ui.textEdit
self.ui = QUiLoader().load(qfile_stats)
self.ui.pushButton_1.clicked.connect(self.handleCalc1)
self.ui.pushButton_2.clicked.connect(self.handleCalc2)
# self.ui.pushButton_3.clicked.connect(self.handleCalc3)
# self.ui.pushButton_4.clicked.connect(self.handleCalc4)
def handleCalc1(self):
global ip
global SERVER_PORT1
global dataSocket
ip = self.ui.lineEdit_1.text()
SERVER_PORT = self.ui.lineEdit_2.text()
# BUFLEN = 1024
SERVER_PORT1=int(SERVER_PORT)
# 实例化一个socket对象,指明协议
dataSocket = socket(AF_INET, SOCK_STREAM)
# 连接服务端socket
dataSocket.connect((ip, SERVER_PORT1))
# while True:
dic = {'MessageSize': 'i', 'Time': 'd', 'q target': '6d', 'qd target': '6d', 'qdd target': '6d',
'I target': '6d',
'M target': '6d', 'q actual': '6d', 'qd actual': '6d', 'I actual': '6d', 'I control': '6d',
'Tool vector actual': '6d', 'TCP speed actual': '6d', 'TCP force': '6d', 'Tool vector target': '6d',
'TCP speed target': '6d', 'Digital input bits': 'd', 'Motor temperatures': '6d',
'Controller Timer': 'd',
'Test value': 'd', 'Robot Mode': 'd', 'Joint Modes': '6d', 'Safety Mode': 'd', 'empty1': '6d',
'Tool Accelerometer values': '3d',
'empty2': '6d', 'Speed scaling': 'd', 'Linear momentum norm': 'd', 'SoftwareOnly': 'd',
'softwareOnly2': 'd', 'V main': 'd',
'V robot': 'd', 'I robot': 'd', 'V actual': '6d', 'Digital outputs': 'd', 'Program state': 'd',
'Elbow position': '3d', 'Elbow velocity': '3d'}
data = dataSocket.recv(1108)
names = []
ii = range(len(dic))
for key, i in zip(dic, ii):
fmtsize = struct.calcsize(dic[key])
data1, data = data[0:fmtsize], data[fmtsize:]
fmt = "!" + dic[key]
names.append(struct.unpack(fmt, data1))
dic[key] = dic[key], struct.unpack(fmt, data1)
# print(names)
# print(dic)
a = dic["q actual"]
a2 = np.array(a[1])
a3=a2 * 180 / math.pi
print(a3)
# self.ui.textBrowser.insertPlainText(a3)
# self.ui.textBrowser.ensureCursorVisible()
def handleCalc2(self):
send_data1 = '''
def svt():
movej(p[0.4,0.4,0.3,3.14,-1.57,1.57],a=1.4, v=1.05, t=0, r=0)
movej([0,-1.1,0,-1,0,0])
end
'''
dataSocket.send(send_data1.encode('utf8'))
print('end')
app=QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()
答
你的dataSocket在handleCalc1实例化了,但在handleCalc2没有实例化,你要么在handleCalc2写入
# 实例化一个socket对象,指明协议
dataSocket = socket(AF_INET, SOCK_STREAM)
# 连接服务端socket
dataSocket.connect((ip, SERVER_PORT1))
要么将dataSocket的实例化对象设为类属性。
如有帮助,望采纳,谢谢
答
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632