CS机器人 30001端口使用

2024-11-06

1.  简介

30001端口,可用于获取机器人的各种状态及数据,机器人会以10HZ(100ms)的频率向30001端口发送机器人的状态数据,还可以往30001端口发送脚本命令,运动指令,控制机器人运动等。(FB1网口)

2.  发送脚本控制机器人

外部设备可以往30001直接发送机器人脚本,机器人处于远程模式,机器人就会运动。

(点击下图右上角的Elite logo,可以进入设置界面)

远程控制选择启用


将机器人切换为远程控制模式

用户可以在socket调试助手中,发送以下代码进行测试

外部发送的脚本格式如下:即def开头,end结尾(end后加入换行)。中间内容为机器人支持的脚本。

def a():

movej([-3.14,-1.57,-1.57,-1.57,1.57,0],a=1.4,v=0.5,t=0,r=0)

movej([-1.57,-1.57,-1.57,-1.57,1.57,0],a=1.4,v=0.5,t=0,r=0)

end

也可使用如下代码,发送带有函数调用的脚本

def test(): # 最外层def必须增加end\n结尾

# 内部是正常的python语法

def mov():

movej([0.57636,-1.01469,-2.04816,-1.29723,1.5708,-0],a=1.4,v=1.05,t=0,r=0)

a = "hello cs"

if a == "hello cs":

mov()

end



3.  数据接收及解析

接收机器人状态数据

该端口还会以10Hz的频率持续不断地将机器人的状态数据以固定格式往外发送。数据格式大体如下:

机器人状态报文格式



4 字节


报文长度








1 字节


报文类型 = MESSAGE_TYPE_ROBOT_STATE = 16


4 字节


子报文长度








1 字节


子报文类型


n 字节


子报文内容


4 字节


子报文长度








1 字节


子报文类型


n字节


子报文内容


4 字节


报文长度








1 字节


报文类型 = MESSAGE_TYPE_ROBOT_STATE = 16


4 字节


子报文长度








1 字节


子报文类型


n 字节


子报文内容


4 字节


子报文长度








1 字节


子报文类型


n字节


子报文内容



详细每一段子报文的内容请参考《CS_用户手册_机器人状态报文.xlsx》

机器人状态数据报文主题结构包含报文头、机器人模式数据子报文、关节数据子报文、笛卡尔数据子报文、机器人配置数据子报文、机器人主板信息子报文、机器人附加信息子报文、内部使用子报文、机器人工具数据子报文、机器人安全状态子报文、机器人工具通讯子报文、内部使用子报文等内容.

每一段子报文内的数据长度、格式都是严格定义的,用户读取时按需择取对应数据段按照指定格式进行数据解析。

以下使用Python对机器人配置数据子报文解析为例说明。

程序流程如下:

4.  示例

参考代码:

from robot import *

import argparse

import logging

import time

import numpy as np

from math import *


parser = argparse.ArgumentParser()

#以下IP地址需要修改

parser.add_argument('--host', default='192.168.1.200', help='name of host to connect to (localhost)')

parser.add_argument('--port', type=int, default=30001, help='port number (30001)')

parser.add_argument('--samples', type=int, default=100, help='number of samples to record')


args = parser.parse_args()


robot = Robot('RobotStateMessage.xlsx', 'v2.1.0')

robot.connect(args.host, args.port)


sample_count = args.samples


while sample_count > 0:

data = robot.get_data()

if data == None:

logging.warning("Data is None")

continue

print(" {:=^50s}".format(""))

print("基坐标X、Y、Z")

print("tcp_x: "+('{:.2f}'.format(data.tcp_x*1000)))

print("tcp_y: "+('{:.2f}'.format(data.tcp_y*1000)))

print("tcp_z: "+('{:.2f}'.format(data.tcp_z*1000)))

#print("actual_joint : ")

print("RX、RY、RZ\x20关节单位\x20°")

print("RX: " + ('{:.3f}'.format(degrees(data.rot_x))))

print("RY: " + ('{:.3f}'.format(degrees(data.rot_y))))

print("RZ: " + ('{:.3f}'.format(degrees(data.rot_z))))

print(" {:=^50s}".format(""))

print("关节位置\x20关节单位\x20°")

print("一轴、基座\x20"'{:.2f}'.format(degrees(data.actual_joint0)))

print("二轴、肩部\x20"'{:.2f}'.format(degrees(data.actual_joint1)))

print("三轴、肘部\x20"'{:.2f}'.format(degrees(data.actual_joint2)))

print("四轴、手腕1\x20"'{:.2f}'.format(degrees(data.actual_joint3)))

print("五轴、手腕2\x20"'{:.2f}'.format(degrees(data.actual_joint4)))

print("六轴、手腕3\x20"'{:.2f}'.format(degrees(data.actual_joint5)))

print(" {:=^50s}".format(""))

#机器人是否上电:上电为true,未上电为false

print("机器人是否上电",data.is_robot_power_on)

#print(data.is_robot_power_on)

print("是否处于机器人急停和系统急停",data.is_robot_protective_stopped)

#print(data.is_robot_protective_stopped)

print("是否处于保护停止",data.is_robot_protective_stopped)

#print(data.is_robot_protective_stopped)

print("程序是否处于运行态",data.is_program_running)

#print(data.is_program_running)

print("程序是否暂停",data.is_program_paused)

#print(data.is_program_paused)

print("机器人模式",data.get_robot_mode)

#print(data.get_robot_mode)

print("机器人控制模式",data.get_robot_control_mode)

print("0未确认、1确认安全、2初始化、3下点、4上电、5空闲、6反向驱动、7正在运行、8升级固件、9等待编码器标定")

#print(data.get_robot_control_mode)

print("机器人速度模式",data.get_robot_speed_mode)

#print(data.get_robot_speed_mode)

print("机器人是否处于系统报警状态",data.is_robot_system_in_alarm)

#print(data.is_robot_system_in_alarm)

print("主板是否在缩减模式",data.is_robot_in_reduced_mode)

print("碰撞检测模式状态",data.is_dynamic_collision_detect_enabled)

print("工具模拟IO输出配置",data.tool_analog_output_domain)

#print("")

#print(data.)

print(" {:=^50s}".format(""))

#print(data.actual_velocity1)弧度/秒

print("关节实际速度\x20角度/秒")

print("1轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity0)))

print("2轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity1)))

print("3轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity2)))

print("4轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity3)))

print("5轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity4)))

print("6轴实际速度\x20"'{:.2f}'.format(degrees(data.actual_velocity5)))

print(" {:=^50s}".format(""))

print("关节力矩")

print("1关节力矩\x20"'{:.2f}'.format(data.torques0))

print("2关节力矩\x20"'{:.2f}'.format(data.torques1))

print("3关节力矩\x20"'{:.2f}'.format(data.torques2))

print("4关节力矩\x20"'{:.2f}'.format(data.torques3))

print("5关节力矩\x20"'{:.2f}'.format(data.torques4))

print("6关节力矩\x20"'{:.2f}'.format(data.torques5))

print(" {:=^50s}".format(""))

print("模拟IO0输出值.\x2002-0.004单位A")

print(data.standard_analog_output_value0,"A")

print(data.standard_analog_output_value1,"A")

print("工具模拟IO输出配置",data.tool_analog_output_domain)

print("工具输出电压数值",data.tool_output_voltage,"V")

print("工具输出电流", data.tool_current,"A")

#print(" {:=^50s}".format(""))


sample_count -= 1

time.sleep(2)

5.  常见问题解答

5.1.问:端口连接不上,连接没反应

答:检修一下网络是不是没有连接上,可以在示教器网络设置页面查看,或者使用电脑ping一下看看能否ping通,网口是否正常连接的FB1口

5.2.问:向端口发送运动指令机器人不运动或者报错

答:检查一下所发送的点位数据是否正常,并不是任意一组数据机器人都能执行,需要该数据在机器人工作范围内,并且有正常的解。另外数据的单位为米跟弧度。


download-669.svg comicon14.svg

电话咨询

download-397.svg comicon15.svg

免费试用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

准备好突破增长瓶颈,开启智能制造了吗?
了解我们的机器人如何帮助您的业务增长
欢迎下载艾利特机器人资料

我已阅读并同意艾利特《隐私政策》《法律声明》

我已知晓并同意艾利特通过电子邮件发送相关资料

提交