Appearance
7000 端口协议
概述
数据帧结构
| 项目 | 长度 (Byte) | 说明 |
|---|---|---|
| SyncByte | 2 | 0x4E66 固定包头 |
| Length | 2 | 16进制长度 0–0xffff;不包含数据头和命令字,不包含 CRC 段 |
| Command | 2 | 命令字 |
| data | Length | 数据段(主要为 JSON 数据格式) |
| CRC | 4 | 对不含包头数据做 CRC 校验(CRC32) |
通讯协议配置
7000 端口可选择 TCP 和 UDP 两种通讯协议,通过进入控制器后台修改配置文件 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)
请求字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
channel | int | 通道;最多 9 个通道,默认为 1 |
stop | int | 停止发送;为 1 时停止之前的持续发送,下面的数据可不发 |
robot | int | 机器人编号;取值范围 [1, 4] |
mode | int | 请求回复模式;0:应答(请求一次回复一次),1:持续(请求一次持续回复) |
interval | int | 持续回复间隔时间(ms);仅 mode=1 时有效,范围 [1, 60000] |
queryType | string[] | 查询运行参数列表,无需查询的不写 |
typeCfg | object | 查询内容配置,仅需要查询相关类型数据时有效 |
queryType 可选值
| 值 | 说明 |
|---|---|
realPosACS | 实时坐标位置(关节坐标系) |
realPosMCS | 实时坐标位置(直角坐标系) |
realPosPCS | 实时坐标位置(工具坐标系) |
realPosUCS | 实时坐标位置(用户坐标系) |
axisVel | 轴速度 |
axisAcc | 轴加速度 |
torque | 力矩 |
electric | 电流 |
numGVar | 数值变量 |
IO | IO 端口 |
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)
回复字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
channel | int | 通道;最多 9 个通道 |
robot | int | 机器人编号;取值范围 [1, 4] |
replyData | object | 回复查询的结果;未查询的不会回复 |
坐标数据说明
坐标格式:机器人(前 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} |
IO | IO 状态键值对,如 {"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)
请求字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
robot | int | 机器人编号;取值范围 [1, 4] |
clearBuffer | int | 清空运动轨迹缓存队列;1:清空(不影响当前正在传输的数据),0 时可不发 |
targetMode | int | 运动模式;0:独立点位,1:连续轨迹 |
sendMode | int | 0:一次传输完全部轨迹点位,1:每次传输部分点位 |
runMode | int | 每次传输部分点位时有效;0:接收完轨迹再运动,1:边接收边运动 |
end | int | 1:停止之前的持续传输,下面的数据可不发;0 时可不发此字段 |
sum | int | 仅"接收完轨迹再运动"时有效;总共要发的帧数 |
count | int | 仅"接收完轨迹再运动"时有效;当前为第几帧 |
cfg | object | 运动配置(仅需第一帧设置,且仅第一帧有效) |
targetPos | float[] | 单目标点(使用此节点只走一个目标点) |
targetVec | object[] | 多目标点(按顺序走完所有点位;与 targetPos 同时存在时,仅 targetPos 生效) |
cfg 字段详情
| 字段 | 类型 | 说明 |
|---|---|---|
coord | string | 坐标系,如 "ACS" |
extMove | int | 是否有外部轴运动;1:有,0 或不写:无 |
sync | int | 外部轴是否同步;0 或不写:不同步,1:同步 |
speed | int | 速度设定;不写则使用默认值 |
acc | int | 加速度设定;不写则使用默认值 |
pl | int | 不写则默认 5;仅"独立点位"且使用 targetVec 时有效 |
moveMode | string | 运动模式;可选 "TeachSet"、"MOVJ"、"MOVL"、"MOVS",默认 "TeachSet";仅"独立点位"且使用 targetVec 时有效 |
timeout | int | 超时时间(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)
回复字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
robot | int | 机器人编号;取值范围 [1, 4] |
success | bool | true:成功,false:失败 |
size | int | 运动轨迹缓存队列的当前轨迹数目;仅 success=true 时有该项 |
cause | string | 失败原因(成功时为空) |
cause 失败原因
| 值 | 说明 |
|---|---|
"busy" | 当前有未传输完成的数据 |
"timeout" | 接收超时 |
"dataErr" | 数据错误 |
"termination" | 发送端终止了正在传输的数据 |
回复示例
json
{
"robot": 1,
"success": false,
"size": 1,
"cause": "timeout"
}5. 变量、IO 控制(0x1E04)
请求字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
numGVar | object | 设置变量;GA 为 bool 型,GI 为 int 型,GD 为 double 型 |
IO | object | 设置 IO 口;1/0 表示 IO 口状态 |
请求示例
json
{
"numGVar": {
"GA001": true,
"GI033": 6,
"GD666": -2.33
},
"IO": {
"DO1": 1,
"DO13": 0
}
}6. 开关伺服点位运动控制(0x1E10)
注意:该功能和"运动控制"功能(
0x1E02)不可同时使用。
请求字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
robot | int | 机器人编号;取值范围 [1, 4] |
switch | bool | true:开启,false:关闭 |
请求示例
json
{
"robot": 1,
"switch": true
}7. 开关伺服点位运动控制回复(0x1E11)
回复字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | true:成功,false:失败 |
cause | string | 失败原因(成功时为空) |
cause 失败原因
| 值 | 说明 |
|---|---|
"busy" | 当前通道被占用 |
"dataErr" | 数据错误 |
"startupErr" | 启动失败 |
回复示例
json
{
"success": false,
"cause": "busy"
}8. 点位发送(0x1E12)
请求字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
robot | int | 机器人编号;取值范围 [1, 4] |
end | int | 1:停止之前的持续传输,下面的数据可不发;0 时可不发此字段。在点位未传输完毕时,会清空之前接收到的数据,重新等待新的点位队列 |
sum | int | 总共要发的帧数 |
count | int | 当前的帧数 |
PosVec | float[][] | 点位坐标数组;格式:机器人(前 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)
回复字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
robot | int | 机器人编号;取值范围 [1, 4] |
success | bool | true:接收成功,false:接收失败 |
cause | string | 失败原因(成功时为空) |
cause 失败原因
| 值 | 说明 |
|---|---|
"notStart" | 未开启伺服点位运动控制模式 |
"dataErr" | 数据错误 |
"termination" | 发送端终止了正在传输的数据 |
"cacheFull" | 缓存区已满(最大缓存 6 条轨迹) |
回复示例
json
{
"robot": 1,
"success": false,
"cause": "dataErr"
}