socket介绍
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。
我的理解就是Socket就是该模式的一个实现:即socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
Socket()函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
UR机器人的通讯准备
可以参考博客(https://blog.csdn.net/qq_41685265/article/details/103889515)中UR机器人的准备部分
用Python与UR机器人通讯
#socket通讯所需的包
import socket
#定义了UR机器人的地址和端口
target_ip = ("192.168.100.2" , 30003)
#建立一个socket对象
sk = socket.socket()
#建立连接
sk.connect(target_ip)
#这是发送给UR机器人的一个脚本指令
send_data1 = '''
def svt():
movej(p[0.4,0.4,0.7,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
'''
#发送指令,并将字符串转变格式
sk.send(send_data1.encode('utf8'))
用C++与UR机器人通讯
C++用的是Qt中的qsocket库,代码如下:
//新建qSocket对象
QTcpSocket *pSocket;
//建立连接
MainWindow::pSocket->connectToHost("192.168.1.104", 30003);
char str[200];
string strj = "movej([%lf,%lf,%lf,%lf,%lf,%lf])\n";
//六轴的参数
double dot[6] = {0,-90/rad,0,-90/rad,0,0};
//获取指令的字符串
int realLen = snprintf(str, sizeof(str),strj.c_str(), dot[0],dot[1],dot[2],dot[3],dot[4],dot[5]);
string res = str;
//发送指令
MainWindow::pSocket->write(res.c_str(),qint64(res.length()));
方法已经经过了URsim和实际机器人的检验,可以实现控制