SOCKET通讯SDK开发

一. 简介

1.1背景

目前机器人sdk的使用需要进行一系列环境配置且适配语言较少(python &c#)的情况,部分客户反馈较难使用,因此尝试使用sdk和通用服务插件相配合而非修改机器人底层架构的基础上,希望实现只要能通过socket接受/发送指定格式字符就能控制/读取机器人(状态)的功能,来满足功能性需求,提高产品市场竞争力。

1.2功能需求与范围

1.2.1 根据客户小可的需求制定功能范围:

连接功能:

连接和断开机器人

读取功能:

获取机器人关节坐标

获取机器人笛卡尔坐标

获取机器人IO状态

获取机器人寄存器值

控制功能

调节机器人全局速度

关节方式点动机器人

直线方式点动机器人

关节方式运动至指定位置

直线方式运动至指定位置

修改寄存器的值

启动机器人程序

暂停机器人程序

停止机器人程序

调用不同机器人程序

加载程序

删除程序 (删除有风险,暂不加)

已知点位计算用户坐标系 #后续版本研发增加sdk接口

已知点位计算工具坐标系 #后续版本研发增加sdk接口

1.2.2 关于背景程序及其拓展功能需求增加功能范围(待)

概念:

背景程序,是一种能在机器人系统开机后,自动运行制定的逻辑运算程序。其不受急停、暂停、报警的影响,每间隔一定时间,执行一遍程序。

功能实现:

将机器人各种状态和数据打包,通过指定端口实时向外发送

包含:

伺服状态 0/1

当前关节角度 J1,J2,J3,J4,J5,J6

当前笛卡尔坐标 X,Y,Z,A,B,C

当前示教坐标系 CART/BASE/JOINT/WORLD/TOOL/USER/RTCP_USER/RTCP_TOOL

当前使用的TF number,int

当前使用的UF number,int

全局速度 number,float

全局加速度 number,float

当前IO状态

DI bool*16

DO bool*16

UI

UO

寄存器值

R数值寄存器1500个

MR运动寄存器200个

SR字符串寄存器300个,(每个寄存器最多255个字符)

pr位置寄存器200个

modbus输入寄存器

modbus保持寄存器

1.3目标与计划

1.3.1目标:

使用python编写的通用型服务插件,可通过socket通讯实现电脑上第三方调试助手(socket tool)可以与机器人进行通讯完成sdk功能,机器人端只需配置IP,剩下完全由上位机负责。如此从产品型公司角度,技术支持只需确保调试助手与机器人正常通讯即可,无需繁琐配合,降低技术支持难度和人耗比。

1.3.1计划:

  • 开发版Development version

    • 实现上述1.2的功能或部分功能,经测试验证可达到:功能性满足、响应时间高、使用简单和拓展性强等优势的版本
  • 测试版Test version

    • 开发版经受评审和内部测试后改进的版本
  • 发布版Release version

    • 可以部署到实际的业务场景中运行,创造实际价值的版本。

1.3.2开发历程

时间 版本 已办 代办 备注
2025/9/26 / 使用开关led灯指令,测试功能性可行 增加其它功能
undefined ---- ---- ---- ----
2025/10/24 DV1.0 增加小可需求功能完成,记录一些问题和注意事项 文档编写和测试插件性能 需手动配置插件内ip为机器人ip
undefined ---- ---- ---- ----
增加系统状态打包
undefined ---- ---- ---- ----
undefined ---- ---- ---- ----

二. 技术方案详情

前言

基于协作机器人v7.6.B.0,sdk版本1.7.1.3测试。

为支持用户进行二次开发,通过插件中使用sdk开放了机器人控制器端口

端口号 名称 功能
6101 控制器接口 接收指定格式json字符串
undefined ---- ----
6102 数据解析接口 发送机器人的状态数据
undefined ---- ----

用户可通过 socket 通讯连接对应的控制器端口,来进行一些操作从而实现对应的功能。

用户可通过 socket 通讯向控制器端口发送指定格式的 json 字符串来实现相关功能,如下所示

发送:

{"id":id,"method":"方法名称,"params":{"参数"}}

暂时无法在飞书文档外展示此内容

接受:

正常:

{"id":1,"method":"方法名称","status":"true"}

出错:

{"id":1,"method":"方法名称","status":"false","error":"出错信息"}

注:

  • "error"可能的结果:

1.空

2.unknown method(未知/未定义方法)

3.missing required fields: id or method(发送的格式错误)

  • 目前开发版不完全定义错误返回,即接受非正常返回则错误:cross_mark:

  • 出于方便阅读,本文档json作换行缩减处理。

  • JSON标准要求字符串值必须是连续的,不能包含未转义的换行符。

  • 客户端在发送前应确保JSON字符串是有效的

暂时无法在飞书文档外展示此内容

4.其它

  • 发送 json 字符串时的 id 和接收结果时的 id 一致,id值不同并不影响功能,

    • 返回字符串id与发送字符串id相对应*,多台机器使用中建议根据ip分配id**,避免混淆*
  • 目前 json 协议常见返回异常有两种:

    • JRPC_METHOD_NOT_FOUND -32601,

    • JRPC_INTERNAL_ERROR -32693。

    • 32601 为未找到对应接口,需要检查接口名称是否正确或确认当前版本是否支持该接口。

    • 32693 为接口内部定义的异常,未找到相应参数,参数超出范围,不满足执行条件等均报 此类异常。此类错误只需根据错误信息检查参数及其范围还有执行条件是否满足即可。

控制器接口详情

2.0 连接指令

通过socket连接状态判断

上位机作客户端参考脚本,使用python脚本

暂时无法在飞书文档外展示此内容

运行结果显示:

暂时无法在飞书文档外展示此内容

id:number类型int or float 下文不再做描述

2.1 控制指令

2.1.0 控制本体led灯开关

原始:
方法名 switch_led_light( mode : bool) → StatusCodeEnum
请求参数 mode : bool,True 为打开,False 为关闭
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:enable:string类型,"true"为打开,"false"为关闭

status:string类型,"true"为成功,"false"为失败

示例:

发送:

开灯

{"id":1,"method":"switch_led_light","params":{"enable":"true"}}

关灯

{"id":1,"method":"switch_led_light","params":{"enable":"false"}}

返回:

成功

{"id":1,"method":"switch_led_light","status":"true"}

失败

{"id":1,"method":"switch_led_light","status":"false"}

2.1.1 关节运动到指定位置

原始:
方法名 motion.move_joint( pose : MotionPose, vel : float = 1, acc : float = 1) → StatusCodeEnum
请求参数 pose : MotionPose 笛卡尔空间或关节坐标系上的一个点的坐标
vel : float 运动的速度,范围是 0~1, 表示最大速度的倍数
acc : float 范围是 0~1.2, 表示最大加速度的倍数
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

pose_type:string类型,“joint”或“cart”

pose_data:string类型,"J1,J2,J3,J4,J5,J6"或“X,Y,Z,A,B,C”,单位度数和毫米

vel:number类型,范围(0,1],速度

acc:number类型,范围(0,1.2],加速度,注意实际机器人速度需要×全局速度

status:string类型,"true"为成功,"false"为失败

示例:

①使用关节点位,关节运动至指定位置

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②使用笛卡尔点位,关节运动至指定位置

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.2 直线运动到指定位置

原始:
方法名 motion.move_line( pose : MotionPose, vel : float = 100, acc : float = 1) → StatusCodeEnum
请求参数 pose : MotionPose 笛卡尔空间或关节坐标系上的一个点的坐标
vel : float 运动的速度,范围是 0~5000mm/s, 表示机械臂末端移动速度
acc : float 范围是 0~1.2, 表示最大加速度的倍数
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

pose_type:string类型,“joint”或“cart”

pose_data:string类型,"J1,J2,J3,J4,J5,J6"或“X,Y,Z,A,B,C”,单位度数和毫米

vel:number类型,范围(0,5000],速度

acc:number类型,范围(0,1.2],加速度,注意实际机器人速度需要×全局速度

status:string类型,"true"为成功,"false"为失败

示例:

①关节点位,直线运动至指定位置

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②笛卡尔点位直线运动至指定位置

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.3 设置当前使用的工具坐标系编号TF

原始:
方法名 motion.set_TF( value : int) → StatusCodeEnum
请求参数 value : int, 工具坐标系编号,序号在 0~10 之间
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

tf_num : //工具坐标系编号,number or string 都可,需要在现有坐标系编号内

status:string类型,"true"为成功,"false"为失败

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.4 设置当前使用的用户坐标系编号UF

原始:
方法名 motion.set_UF( value : int) → StatusCodeEnum
请求参数 value : int, 用户坐标系编号
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

uf_num : 用户坐标系编号,number or string 都可,需要在现有的坐标系最大编号范围内

status:string类型,"true"为成功,"false"为失败

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.5 设置机器人全局速度OVC

原始:
方法名 motion.set_OVC( value : float) → StatusCodeEnum
请求参数 value : float,速度比率范围是 0~1
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

ovc_value:number/string类型,范围(0-1]

status:string类型,"true"为成功,"false"为失败

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.6 设置机器人全局加速度OAC

原始:
方法名 motion.set_OAC( value : float) → StatusCodeEnum
请求参数 value : float,加速度比率,0~1.2 之间
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

oac_value:number/string类型,范围(0-1.2]

status:string类型,"true"为成功,"false"为失败

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.7 设置示教坐标系TCS

原始:
方法名 motion.set_TCS( value : TCSType) → StatusCodeEnum
请求参数 value : TCSType, , TCS 示教坐标系
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

coordinate_system:string类型,

表格 还在加载中,请等待加载完成后再尝试复制

status:string类型,"true"为成功,"false"为失败

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.8 机器人示教运动

原始:
方法名 jogging.move( aj_num : int, move_mode : MoveMode = None, step_length : float = 0) → StatusCodeEnum
请求参数 aj_num : int 填写数值 1-6
数值 1~6 对应关系根据当前示教的坐标系来决定
关节坐标系下 关节值号 [1 ~ 6]
笛卡尔坐标系下 x, y, z, rx, ry, rz
move_mode : MoveMode 机械臂运动模式 增量运动 or 连续运动,Continuous,Stepping
step_length : float 单次步进量,单位为 mm 或 °, 不给值即不修改步进值
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

status:string类型,"true"为成功,"false"为失败

示例:

jogging步进

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

jogging持续

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

jogging停止运动

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

注意:

jogging坐标系需要选择视角坐标系TCS

2.1.9 报警重置

原始:
方法名 alarm_reset() → StatusCodeEnum
请求参数 无参数
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

{id": 1,"method":"reset_alarm"}

返回:

成功:

{"id":1,"method":"reset_alarm","status":"true"}

2.1.10 伺服上电

原始:

方法名 servo_on() → StatusCodeEnum
请求参数 无参数
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回

暂时无法在飞书文档外展示此内容

2.1.11 伺服下电

原始:

方法名 servo_off() → StatusCodeEnum
请求参数 无参数
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.12 执行某个指定程序

原始:

方法名 execution.start( program_name : str) → StatusCodeEnum
请求参数 program_name : str 需要执行的程序名称
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

**参数:**program_name//string,程序名称

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.13 停止正在执行的程序

原始:

方法名 execution.stop( program_name : str = ‘’) → StatusCodeEnum
请求参数 program_name : str 需要停止的程序名称,默认为空字符串,表示停止当前正在运行的程序或运动指令
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

**参数:**program_name//string,程序名称

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.14 暂停程序运行

原始:

方法名 execution.pause( program_name : str = ‘’) → StatusCodeEnum
请求参数 program_name : str 需要暂停的程序名称,默认为空字符串,表示暂停当前正在运行的程序或运动指令
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.15 恢复程序运行

原始:

方法名 execution.resume( program_name : str = ‘’) → StatusCodeEnum
请求参数 program_name : str 需要继续运行的程序名称,默认为空字符串,表示继续运行当前处于暂停状态的程序或运动指令
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.1.16 返回所有正在运行的程序信息

原始:

方法名 execution.all_running_programs() → tuple[list, StatusCodeEnum]
请求参数 无参数
undefined ----
返回值 list: 运行的程序详细信息列表
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

**参数:**无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2 获取状态指令

2.2.1 获取机器人伺服状态

原始:
方法名 get_servo_status() → tuple[ServoStatusEnum, StatusCodeEnum]
请求参数 无参数
undefined ----
返回值 ServoStatusEnum: 伺服控制器状态
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{"id":"1","method":"get_servo_status"}

返回:

  伺服已开启

{"id":"1","method":“get_servo_status”,"status":"true"}

  伺服已关闭

{"id":"1","method":“get_servo_status”,"status":"false"}

异常:

#暂未添加

2.2.2 获取机器人当前关节角度

原始:
方法名 motion.get_current_pose( pose_type : PoseType, uf_index : int = 0, tf_index : int = 0) → tuple[MotionPose, StatusCodeEnum]
请求参数 pose_type :PoseType 位姿类型
uf_index : 当使用 PoseType.CART 时需传入用户坐标系 id, 默认 0
tf_index : 当使用 PoseType.CART 时需传入工具坐标系 id, 默认 0
undefined ----
返回值 MotionPose: 机器人位姿
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2.3 获取机器人当前笛卡尔坐标

原始:

方法名 motion.get_current_pose( pose_type : PoseType, uf_index : int = 0, tf_index : int = 0) → tuple[MotionPose, StatusCodeEnum]
请求参数 pose_type :PoseType 位姿类型
uf_index : 当使用 PoseType.CART 时需传入用户坐标系 id, 默认 0
tf_index : 当使用 PoseType.CART 时需传入工具坐标系 id, 默认 0
undefined ----
返回值 MotionPose: 机器人位姿
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数*:*

coordinate_num: 用户坐标

tool_num: 工具坐标

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

sdk版本1.7uf和tf顺序错误请注意

2.2.4 获取机器人全局速度

原始:
方法名 motion.get_OVC() → tuple[float, StatusCodeEnum]
请求参数 无参数
undefined ----
返回值 float:速度比率,结果在 0~1 之间
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{"id":"1","method":"get_OVC"}

返回:

{"id":"1","method":"get_OVC","status":"0.1"}

2.2.5 获取机器人全局加速度

原始:
方法名 motion.get_OAC() → tuple[float, StatusCodeEnum]
请求参数 无参数
undefined ----
返回值 float:速度比率,结果在 0~1.2 之间
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2.6 获取当前示教坐标系

原始:
方法名 motion.get_TCS() → tuple[TCSType, StatusCodeEnum]
请求参数 无参数
undefined ----
返回值 TCSType: 示教坐标系编号
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2.7 获取机器人IO状态

原始:
方法名 signals.read( signal_type : SignalType, index : int) → tuple[float, StatusCodeEnum]
请求参数 signal_type : SignalType 要读取的 IO 类型
index : 要读取的 IO 的序号,从 1 开始
undefined ----
返回值 float: IO 值,1 代表高电平,0 代表低电平
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:信号类型 (DO, DI, UO, UI, RO, RI, GO, GI, TAI, TDI, TDO, AI, AO)

示例:

发送:

{"id":1,"method":"signals_read","params":{"signals_type":"DO","signals_num":7}}

返回:

{“id”: 1, “method”: “signals_read”, “params”:{“signals_type”:“DO”,“signals_num”:7},“status”: 0}

2.2.8 获取机器人寄存器值

2.2.6.1数值寄存器R
①写入R寄存器

原始:

方法名 register.write_R( index : int, value : float) → StatusCodeEnum
请求参数 index : int R 寄存器的编号
value : float 需要更新的寄存器的值
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:1,“method”:“write_r”,“params”:{“index_r”:1,“num_r”:1}}

返回:

{“id”:1,“method”:“write_r”,“params”:{“index_r”:1,“num_r”:1},“status”:“true”}

②读取R寄存器

原始:

方法名 register.read_R( index : int) → tuple[float, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 float: 寄存器信值
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:“1”,“method”:“read_r”,“params”:{“index_r”:1}}

返回:

{“id”:“1”,“method”:“read_r”,“params”:{“index_r”:1},“status”:{“index_r”:1,“value”:1}}

③删除R寄存器

原始:

方法名 register.delete_R( index : int) → StatusCodeEnum
请求参数 index : int R 寄存器的编号
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:1,“method”:“delete_r”,“params”:{“index_r”:1}}

返回:

{“id”:1,“method”:“delete_r”,“params”:{“index_r”:1},“status”:“false”}

2.2.6.2字符串寄存器SR
①添加和设置SR寄存器

原始:

方法名 register.write_SR( index : int, value : str) → StatusCodeEnum
请求参数 index : int SR 寄存器的编号
value : str 需要更新的寄存器值
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:1,“method”:“write_sr”,“params”:{“index_sr”:1,“num_sr”:abc}}

返回:

{“id”:1,“method”:“write_sr”,“params”:{“index_sr”:1,“num_sr”:abc},“status”:“true”}

②读取SR寄存器

原始:

方法名 register.read_SR( index : int) → tuple[str, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 str: 寄存器的值
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:1,“method”:“read_sr”,“params”:{“index_sr”:1}}

返回:
{“id”:1,“method”:“read_sr”,“params”:{“index_sr”:1},“status”:abc}}

③删除SR寄存器

原始:

方法名 register.delete_SR( index : int) → StatusCodeEnum
请求参数 index : int SR 寄存器的编号
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

{“id”:“1”,“method”:“delete_sr”,“params”:{“index_sr”:1}}

返回:

成功:{“id”:“1”,“method”:“delete_sr”,“params”:{“index_sr”:1},“status”:“true”}

失败:{“id”:“1”,“method”:“delete_sr”,“params”:{“index_sr”:1},“status”:“false”}

2.2.6.3位置寄存器PR
①添加和设置PR

原始:

方法名 register.write_PR( value : PoseRegister) → StatusCodeEnum
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

①写入pr寄存器关节点位

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②写入pr寄存器笛卡尔点位

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②读取PR

原始:

方法名 register.read_PR( index : int) → tuple[PoseRegister, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 PoseRegister 寄存器信息
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

③删除PR

原始:

方法名 register.delete_PR( index : int) → StatusCodeEnum
请求参数 index : int PR 寄存器的编号
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2.6.4运动寄存器MR
①写入MR

原始:

方法名 register.read_MR( index : int) → tuple[int, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 int: 寄存器的值
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②读取MR

{

"id": 2,

"method": "read_mr",

"params": {

    "index_mr": 5

}

}

③删除MR

{

"id": 3,

"method": "delete_mr",

"params": {

    "index_mr": 5

}

}

2.2.6.5modbus保持寄存器MH
①写入MH

原始:

方法名 register.write_MH( index : int, value : int) → StatusCodeEnum
请求参数 index : int MH 寄存器的编号
value : int 需要更新的寄存器值
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②读取MH

原始:

方法名 register.read_MH( index : int) → tuple[int, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 int: 寄存器值
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:无

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

2.2.6.6modbus输入寄存器MI
①写入MI

原始:

方法名 register.write_MI( index : int, value : int) → StatusCodeEnum
请求参数 index : int MI 寄存器的编号
value : int 需要更新的寄存器值
undefined ----
返回值 StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

②读取MI

原始:

方法名 register.read_MI( index : int) → tuple[int, StatusCodeEnum]
请求参数 index : int 希望获取的寄存器编号
undefined ----
返回值 寄存器值
StatusCodeEnum: 函数执行结果
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

暂时无法在飞书文档外展示此内容

返回:

暂时无法在飞书文档外展示此内容

表格 还在加载中,请等待加载完成后再尝试复制

2.2.9 获取当前使用的工具坐标系TF

原始:
方法名 motion.get_TF() → tuple[int, StatusCodeEnum]
请求参数
undefined ----
返回值 int: 工具坐标系编号
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

status:string类型,有数据如“1”表示获取成功的坐标系编号,为“false”则获取失败

示例:

发送:

{"id":1,"method":"get_TF"}

返回:

{"id": 1, "method": "get_TF", "status":"1"}

2.2.10 获取当前使用的用户坐标系UF

原始:
方法名 motion.get_UF() → tuple[int, StatusCodeEnum]
请求参数
undefined ----
返回值 int: 用户坐标系编号
StatusCodeEnum: 函数执行结果
undefined ----
SOCKET

暂时无法在飞书文档外展示此内容

参数:

status:string类型,有数据如“1”表示获取成功的坐标系编号,为“false”则获取失败

示例:

发送:

{“id”:1,“method”:“get_UF”}

返回:

{“id”: 1, “method”: “get_UF”, “status”:“1”}

TEST

原始:

方法名
请求参数
undefined ----
返回值
undefined ----

SOCKET

暂时无法在飞书文档外展示此内容

参数:

示例:

发送:

返回:

数据解析接口详情

6102端口可用于获取机器人的各种状态及数据,机器人会以 10HZ 的频率向 6102端口 发送机器人的状态数据,

三. 测试和使用方法

3.1建议测试方法:

  • 确保当前机器人可以使用插件且有插件环境为前提进行测试

  • 使用socke第三方调试助手测试

  • 电脑python脚本测试(或其它语言,支持socket通讯收发json)

  • 如果使用异常时,关闭插件确保插件运行状态关闭,再使用pythonsdk示例测试是否任有异常

  • 理论上调试助手测试无问题,则可以确保功能正常

3.2使用方法简介

  • 安装插件且激活运行

  • 通过机器人插件日志查看状态(插件连接系统状态,插件打开端口状态,服务器连接状态,收发字符状态)

  • 电脑网段设置和机器人一致,创建tcp client,输入机器人ip(插件中设置的和系统网络设置需一致)和端口(6101插件定义的可修改),客户端主动连接,连接成功会返回成功标志

四.注意

4.1当前已知问题:

1.目前版本意外断电有概率丢失插件运行环境导致无法使用,需要重刷版本或环境解决

2.在tp插件内部修改脚本指令,添加参数,会出现无法保存的情况

3.删除插件或者关闭插件运行状态,(无论断电重启与否)插件仍然在后台运行

4.删除旧插件后跟新插件版本,激活新插件,实际功能有可能仍然是旧插件的

5.重启插件有概率无法连接机器人

4.2使用注意:

0.基于协作机器人测试

1.机器人做服务器只负责打开端口,客户端主动发起连接,目前需要手动配置机器人插件内ip地址

2.需要确认路由器版本是都1.1.4及以上

3.发送字符区分大小写

4.机器人在运动的过程中如果获取伺服状态将为false,但可以获取机器人实时位置

5.参数如果不符合范围也会返回错误

6.笛卡尔坐标的运动目前只测试在基座下

7.文档所描述的发送和返回都是对于客户端而言

五. 交付物

插件

六. 评估