Skip to content

7000 端口协议

概述

数据帧结构

项目长度 (Byte)说明
SyncByte20x4E66 固定包头
Length216进制长度 00xffff;不包含数据头和命令字,不包含 CRC 段
Command2命令字
dataLength数据段(主要为 JSON 数据格式)
CRC4对不含包头数据做 CRC 校验(CRC32)

通讯协议配置

7000 端口可选择 TCPUDP 两种通讯协议,通过进入控制器后台修改配置文件 config/controller.json,在 hostComputerService 节点下:

  • socketType:socket 类型,可选 "TCP""UDP",默认为 "TCP"
  • checkCRC:是否进行 CRC 检测;false 时不检测 CRC(但 CRC 所占用的 4 个字节仍需发送),默认为 true

查询状态可设置为 UDP 通讯进行数据获取,最小周期可达 1ms。


命令字总览

命令字方向功能
0x1E00上位机 → 控制器查询状态
0x1E01控制器 → 上位机查询状态回复
0x1E02上位机 → 控制器运动控制
0x1E03控制器 → 上位机运动控制回复
0x1E04上位机 → 控制器变量、IO 控制
0x1E10上位机 → 控制器开关伺服点位运动控制
0x1E11控制器 → 上位机开关伺服点位运动控制回复
0x1E12上位机 → 控制器点位发送
0x1E13控制器 → 上位机点位发送回复

1. 查询状态(0x1E00

请求字段说明

字段类型说明
channelint通道;最多 9 个通道,默认为 1
stopint停止发送;为 1 时停止之前的持续发送,下面的数据可不发
robotint机器人编号;取值范围 [1, 4]
modeint请求回复模式;0:应答(请求一次回复一次),1:持续(请求一次持续回复)
intervalint持续回复间隔时间(ms);仅 mode=1 时有效,范围 [1, 60000]
queryTypestring[]查询运行参数列表,无需查询的不写
typeCfgobject查询内容配置,仅需要查询相关类型数据时有效

queryType 可选值

说明
realPosACS实时坐标位置(关节坐标系)
realPosMCS实时坐标位置(直角坐标系)
realPosPCS实时坐标位置(工具坐标系)
realPosUCS实时坐标位置(用户坐标系)
axisVel轴速度
axisAcc轴加速度
torque力矩
electric电流
numGVar数值变量
IOIO 端口
serialNum序列号
runControlPosRunNum运动控制当前轨迹已运行点位数
detailedMotionPos详细运动点位(每个机器人同一时刻仅支持一个通道查询)

typeCfg 配置说明

  • numGVar:查询全局变量(int 类型),如 ["GD001", "GA001", "GI001", "GI333"]
  • IO:查询 IO 端口(string 类型),如 ["DI1", "DI16", "DO1", "DO3", "DO17"];若查询的 IO 不存在,返回 -1;可查询最大数量不应大于 IO 个数
  • detailedMotionPos
    • num:每帧数据回复的点位数目(int)
    • optional:可选参数(string[]),可选 "ACS""MCS""time""reset"

请求示例

json
{
  "channel": 1,
  "stop": 1,
  "robot": 1,
  "mode": 0,
  "interval": 10,
  "queryType": [
    "realPosACS", "realPosMCS", "realPosPCS", "realPosUCS",
    "axisVel", "axisAcc",
    "torque", "electric",
    "numGVar",
    "IO",
    "serialNum",
    "runControlPosRunNum",
    "detailedMotionPos"
  ],
  "typeCfg": {
    "numGVar": ["GD001", "GA001", "GI001", "GI333"],
    "IO": ["DI1", "DI16", "DO1", "DO3", "DO17"],
    "detailedMotionPos": {
      "num": 10,
      "optional": ["ACS", "MCS", "time", "reset"]
    }
  }
}

2. 查询状态回复(0x1E01

回复字段说明

字段类型说明
channelint通道;最多 9 个通道
robotint机器人编号;取值范围 [1, 4]
replyDataobject回复查询的结果;未查询的不会回复

坐标数据说明

坐标格式:机器人(前 7 个)+ 外部轴(后 5 个)

  • 无外部轴时,坐标个数为轴数
  • 有外部轴时,坐标个数为 7 + 外部轴个数

replyData 字段详情

字段说明
realPosACS实时坐标位置(关节坐标系),float 数组
realPosMCS实时坐标位置(直角坐标系),float 数组
realPosPCS实时坐标位置(工具坐标系),float 数组
realPosUCS实时坐标位置(用户坐标系),float 数组
axisVel轴速度,float 数组
axisAcc轴加速度,float 数组
torque力矩,float 数组
electric电流,float 数组
numGVar全局变量键值对,如 {"GD001": 0.1, "GA001": true, "GI001": 33}
IOIO 状态键值对,如 {"DI1": 1, "DO1": 0};若 IO 不存在返回 -1
runControlPosRunNum运动控制当前轨迹已运行点位数
serialNum序列号;每次回复加 1,每个通道互相独立
detailedMotionPos详细运动点位

detailedMotionPos 详情

  • num:每帧数据回复的点位数目(int)
  • data:点位数组,每个点位包含:
    • ACS:关节坐标,float 数组
    • MCS:直角坐标,float 数组
    • time:时间戳 [秒, 纳秒],如 [123456, 654321]

回复示例

json
{
  "channel": 1,
  "robot": 1,
  "replyData": {
    "realPosACS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "realPosMCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "realPosPCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "realPosUCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "axisVel":    [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "axisAcc":    [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "torque":     [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "electric":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "numGVar": {"GD001": 0.1, "GA001": true, "GI001": 33, "GI333": -55},
    "IO": {"DI1": 1, "DI16": 0, "DO1": 0, "DO3": 1, "DO17": -1},
    "runControlPosRunNum": 0,
    "serialNum": 1,
    "detailedMotionPos": {
      "num": 10,
      "data": [
        {
          "time": [123456, 654321],
          "ACS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
          "MCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]
        }
      ]
    }
  }
}

3. 运动控制(0x1E02

请求字段说明

字段类型说明
robotint机器人编号;取值范围 [1, 4]
clearBufferint清空运动轨迹缓存队列;1:清空(不影响当前正在传输的数据),0 时可不发
targetModeint运动模式;0:独立点位,1:连续轨迹
sendModeint0:一次传输完全部轨迹点位,1:每次传输部分点位
runModeint每次传输部分点位时有效;0:接收完轨迹再运动,1:边接收边运动
endint1:停止之前的持续传输,下面的数据可不发;0 时可不发此字段
sumint仅"接收完轨迹再运动"时有效;总共要发的帧数
countint仅"接收完轨迹再运动"时有效;当前为第几帧
cfgobject运动配置(仅需第一帧设置,且仅第一帧有效)
targetPosfloat[]单目标点(使用此节点只走一个目标点)
targetVecobject[]多目标点(按顺序走完所有点位;与 targetPos 同时存在时,仅 targetPos 生效)

cfg 字段详情

字段类型说明
coordstring坐标系,如 "ACS"
extMoveint是否有外部轴运动;1:有,0 或不写:无
syncint外部轴是否同步;0 或不写:不同步,1:同步
speedint速度设定;不写则使用默认值
accint加速度设定;不写则使用默认值
plint不写则默认 5;仅"独立点位"且使用 targetVec 时有效
moveModestring运动模式;可选 "TeachSet""MOVJ""MOVL""MOVS",默认 "TeachSet";仅"独立点位"且使用 targetVec 时有效
timeoutint超时时间(ms),不写则不检测超时,范围 10–10000;仅"接收完轨迹再运动"时有效

示例一:独立点位 · 一次传输全部点位

json
{
  "robot": 1,
  "clearBuffer": 1,
  "targetMode": 0,
  "cfg": {
    "coord": "ACS",
    "extMove": 0,
    "sync": 0,
    "speed": 100,
    "acc": 100,
    "pl": 5,
    "moveMode": "TeachSet"
  },
  "targetPos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
  "targetVec": [
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]}
  ]
  // targetPos 和 targetVec 同时存在时,仅 targetPos 生效
}

示例二:独立点位 · 每次传输部分点位 · 接收完轨迹再运动

json
{
  "robot": 1,
  "clearBuffer": 1,
  "end": 0,
  "targetMode": 0,
  "sendMode": 1,
  "runMode": 0,
  "sum": 10,
  "count": 1,
  "cfg": {
    "coord": "ACS",
    "extMove": 0,
    "sync": 0,
    "speed": 100,
    "acc": 100,
    "pl": 5,
    "moveMode": "TeachSet",
    "timeout": 100
  },
  "targetVec": [
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
    {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]}
  ]
}

示例三:连续轨迹 · 一次传输全部点位

json
{
  "robot": 1,
  "clearBuffer": 1,
  "targetMode": 1,
  "sendMode": 0,
  "cfg": {
    "coord": "ACS",
    "extMove": 0,
    "sync": 0,
    "speed": 100,
    "acc": 100
  },
  "targetVec": [
    {
      "pos":       [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisVel":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisAcc":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "timeStamp": 10
    },
    {
      "pos":       [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisVel":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisAcc":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "timeStamp": 10
    }
  ]
}

timeStamp:运行到该点位时相对于起始点的时间(ms)

示例四:连续轨迹 · 每次传输部分点位 · 接收完轨迹再运动

json
{
  "robot": 1,
  "clearBuffer": 1,
  "end": 0,
  "targetMode": 1,
  "sendMode": 1,
  "runMode": 0,
  "sum": 10,
  "count": 1,
  "cfg": {
    "coord": "ACS",
    "extMove": 0,
    "sync": 0,
    "speed": 100,
    "acc": 100,
    "timeout": 100
  },
  "targetVec": [
    {
      "pos":       [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisVel":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "axisAcc":   [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
      "timeStamp": 10
    }
  ]
}

4. 运动控制回复(0x1E03

回复字段说明

字段类型说明
robotint机器人编号;取值范围 [1, 4]
successbooltrue:成功,false:失败
sizeint运动轨迹缓存队列的当前轨迹数目;仅 success=true 时有该项
causestring失败原因(成功时为空)

cause 失败原因

说明
"busy"当前有未传输完成的数据
"timeout"接收超时
"dataErr"数据错误
"termination"发送端终止了正在传输的数据

回复示例

json
{
  "robot": 1,
  "success": false,
  "size": 1,
  "cause": "timeout"
}

5. 变量、IO 控制(0x1E04

请求字段说明

字段类型说明
numGVarobject设置变量;GA 为 bool 型,GI 为 int 型,GD 为 double 型
IOobject设置 IO 口;1/0 表示 IO 口状态

请求示例

json
{
  "numGVar": {
    "GA001": true,
    "GI033": 6,
    "GD666": -2.33
  },
  "IO": {
    "DO1": 1,
    "DO13": 0
  }
}

6. 开关伺服点位运动控制(0x1E10

注意:该功能和"运动控制"功能(0x1E02)不可同时使用。

请求字段说明

字段类型说明
robotint机器人编号;取值范围 [1, 4]
switchbooltrue:开启,false:关闭

请求示例

json
{
  "robot": 1,
  "switch": true
}

7. 开关伺服点位运动控制回复(0x1E11

回复字段说明

字段类型说明
successbooltrue:成功,false:失败
causestring失败原因(成功时为空)

cause 失败原因

说明
"busy"当前通道被占用
"dataErr"数据错误
"startupErr"启动失败

回复示例

json
{
  "success": false,
  "cause": "busy"
}

8. 点位发送(0x1E12

请求字段说明

字段类型说明
robotint机器人编号;取值范围 [1, 4]
endint1:停止之前的持续传输,下面的数据可不发;0 时可不发此字段。在点位未传输完毕时,会清空之前接收到的数据,重新等待新的点位队列
sumint总共要发的帧数
countint当前的帧数
PosVecfloat[][]点位坐标数组;格式:机器人(前 7 个)+ 外部轴(后 5 个)

请求示例

json
{
  "robot": 1,
  "end": 1,
  "sum": 10,
  "count": 1,
  "PosVec": [
    [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]
  ]
}

9. 点位发送回复(0x1E13

回复字段说明

字段类型说明
robotint机器人编号;取值范围 [1, 4]
successbooltrue:接收成功,false:接收失败
causestring失败原因(成功时为空)

cause 失败原因

说明
"notStart"未开启伺服点位运动控制模式
"dataErr"数据错误
"termination"发送端终止了正在传输的数据
"cacheFull"缓存区已满(最大缓存 6 条轨迹)

回复示例

json
{
  "robot": 1,
  "success": false,
  "cause": "dataErr"
}