TCP/IP控制即外部设备通过TCP/IP发送远程命令控制机械臂。外部设备作为客户端,机械臂控制器或机械臂控制器软件M1Studio作为服务端,且客户端和服务端的IP地址需在同一网段,如图 6.50所示。
图 6.50 通信流程
本节描述如何使外部设备通过TCP/IP发送命令控制机械臂。
前提条件
已通过串口或网线将Dobot M1与PC机连接,详细请参见5.2.3 串口连接或 5.2.4 网线连接。
如果Dobot M1控制器为服务端,则必须通过网线连接。
Dobot M1已上电。
已连接Dobot M1和急停开关。
操作步骤
步骤 1 配置服务端。
为了构建基于TCP/IP网络的远程控制系统,需要建立服务端,我们可以将Dobot M1控制器软件M1Studio所在的PC机作为服务端,也可将Dobot M1控制器作为服务端。服务端Script脚本程序示例如程序 6.1所示(假设脚本名称为“syncServer.script”)。其中,加粗部分是用户可自定义修改的。
如果以Dobot M1控制器软件M1Studio所在的PC机为服务端(假设IP地址为192.168.1.10),Dobot M1可通过串口或网线与PC连接,并将服务端IP地址和端口配置为PC机的IP地址和端口,即HOST, PORT = "192.168.1.10", 50030。
其中,端口不能被占用。
如果以Dobot M1控制器为服务端(假设IP地址为192.168.1.20,Dobot M1只能通过网线与PC连接,并将服务端IP地址和端口配置为Dobot M1的IP地址和端口,例如HOST, PORT = "192.168.1.20", 50030。
其中,端口不能被占用。
注意
服务端IP地址必须和客户端的IP地址在同一网段。否则,无法进行远程控制。
程序 6.1 服务端脚本示例
ssimport socket
import threading
import socketserver
import time
import math
class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
def setup(self):
ip = self.client_address[0].strip()
port = self.client_address[1]
print(ip+":"+str(port)+" is connect!")
def handle(self):
while True: # add while for keep link
data = self.request.recv(1024)
if data:
data = str(data, encoding = 'ascii')
if data == 'exit':
break;
OperCMD(data)
#cur_thread = threading.current_thread()
#print what recieved
response = bytes("{}".format(data), 'ascii')
self.request.sendall(response)
def finish(self):
print("client is disconnect!")
print("stop")
server.shutdown()
exit(0)
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
def OperCMD(strCMD):
print(strCMD)
#decode command type
commandtype = strCMD[ : 3]
print(commandtype)
#get the value of command
# index = strCMD.find(',')
# tempStr1 = str[index+1 : ]
#get X coord
# index = tempStr1.find(',')
# tempStr2 = tempStr1[:index]
# PosX = tempStr2
# print(PosX)
# tempStr1 = tempStr2
#get Y coord
if (strCMD == "exit"):
print("stop")
server.shutdown()
exit(0)
elif (strCMD == "MoveP1" or strCMD == "p1"): //在客户端输入“MoveP1”或“p1”字符,
则机械臂根据以下运动指令运动
dType.SetArmOrientation(api, 1, 1)
dType.SetPTPCmd(api, 0, 229, 212, 120, 0, 1)
dType.SetARCCmd(api, [62,265,120,50], [-58,266,120,76], 1)
elif (strCMD == "MoveP2" or strCMD == "p2"): //在客户端输入“MoveP2”或“p2”字符,
则机械臂根据以下运动指令运动
dType.SetArmOrientation(api, 1, 1)
dType.SetPTPCmd(api, 0, 229, 212, 120, 0, 1)
dType.SetARCCmd(api, [62,265,120,50], [-58,266,120,76], 1)
HOST, PORT = "192.168.1.10", 50030 //服务端IP地址和端口
socketserver.TCPServer.allow_reuse_address = True
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
server.serve_forever()
步骤 2 导入Script脚本。
&说明
使用不同的服务端,导入Script脚本的方式不同。请根据实际情况选择。
如果以M1Studio所在的PC机作为服务端,则执行以下步骤。
1. 在M1Studio界面的串口下拉菜单选择Dobot M1对应串口或IP地址,单击“连接”。
2. 在M1Studio的“脚本控制”界面导入服务端的Script脚本,并单击“开始”。
如果以Dobot M1控制器作为服务端,则执行以下步骤。
1. 在M1Studio界面的串口下拉菜单选择Dobot M1对应IP地址,单击“连接”。
2. 单击“工具 > 脱机管理 > 上传脱机脚本”,将服务端Script脚本上传至Dobot M1控制器,如图 6.51所示。
图 6.51 上传Script脚本
3. 在“脱机脚本管理”界面选中已上传的Script脚本(syncServer.script),单击“离线运行”,使Script脚本处于离线运行的状态,如图 6.36所示。
图 6.52 脚本状态
4. 在脱机管理主界面的“DobotM1模式切换控制”面板下拉菜单选择“脱机模式”,并单击“启动脱机”,如图 6.53所示,使Dobot M1处于“脱机模式”状态。
此时机械臂底座蓝色指示灯闪烁。
图 6.53 Dobot M1状态切换控制
步骤 3 配置客户端。
在客户端需输入服务端的IP地址和端口,并单击“连接”,如图 6.54所示。
&说明
不同的应用场中,控制机械臂的外部设备不同。在本节示例中,以调试助手作为客户端进行描述,请根据实际情况替换。
图 6.54 配置客户端
步骤 4 在客户端的发送区输入“MoveP1”字符串,如图 6.55所示。
此时,机械臂会按照Script脚本中设置的指令运动。
图 6.55 客户端发送指令控制机械臂