Appearance
7000端口协议
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,检测 CRC
- 查询状态可以设置为"UDP"通讯进行数据获取,最小周期可以达到 1ms
查询状态
命令字: 0x1E00
| 字段 | 类型 | 说明 |
|---|---|---|
| channel | int | 通道,最多 9 个通道,默认为 1 |
| stop | int | 停止发送,为 1 时停止之前的持续发送,下面的数据可不发 |
| robot | int | 机器人编号,取值范围 [1, 4] |
| mode | int | 请求回复模式:0 应答(请求一次回复一次),1 持续(请求一次持续回复) |
| interval | int | 持续回复间隔时间,单位 ms,仅 mode 为持续时有效,范围 [1, 60000] |
| queryType | string[] | 查询运行参数,无需查询的不写即可 |
| typeCfg | object | 查询内容配置,仅需要查询相关类型数据时有效 |
queryType 可选值
| 值 | 说明 |
|---|---|
| realPosACS | 实时坐标位置(关节坐标系) |
| realPosMCS | 实时坐标位置(直角坐标系) |
| realPosPCS | 实时坐标位置(工具坐标系) |
| realPosUCS | 实时坐标位置(用户坐标系) |
| axisVel | 轴速度 |
| axisAcc | 轴加速度 |
| torque | 力矩 |
| electric | 电流 |
| numGVar | 数值变量 |
| IO | IO 端口 |
| serialNum | 序列号 |
| runControlPosRunNum | 运动控制当前轨迹已运行了点位个数 |
| detailedMotionPos | 详细运动点位,该项每个机器人同一时刻仅支持一个通道查询 |
typeCfg 配置
| 字段 | 类型 | 说明 |
|---|---|---|
| numGVar | string[] | 查询全局变量,如 ["GD001", "GA001", "GI001", "GI333"] |
| IO | string[] | 查询 IO,如 ["DI1", "DI16", "DO1", "DO3", "DO17"],若查询的 IO 不存在返回 -1 |
| detailedMotionPos | object | 查询更详细的运行参数 |
| detailedMotionPos.num | int | 每帧数据回复的点位数目 |
| detailedMotionPos.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"]
}
}
}控制器回复
命令字: 0x1E01
| 字段 | 类型 | 说明 |
|---|---|---|
| channel | int | 通道,最多 9 个通道 |
| robot | int | 机器人编号,取值范围 [1, 4] |
| replyData | object | 回复查询的结果,未查询的不会回复 |
replyData 字段说明
坐标:机器人(前 7 个)+ 外部轴(后 5 个),无外部轴时坐标个数为轴数,有外部轴时坐标个数为 7 + 外部轴个数
| 字段 | 类型 | 说明 |
|---|---|---|
| realPosACS | double[] | 实时坐标位置(关节坐标系) |
| realPosMCS | double[] | 实时坐标位置(直角坐标系) |
| realPosPCS | double[] | 实时坐标位置(工具坐标系) |
| realPosUCS | double[] | 实时坐标位置(用户坐标系) |
| axisVel | double[] | 轴速度 |
| axisAcc | double[] | 轴加速度 |
| torque | double[] | 力矩 |
| electric | double[] | 电流 |
| numGVar | object | 查询的全局变量,如 |
| IO | object | 查询的 IO,如 {"DI1": 1, "DI16": 0, "DO1": 0, "DO3": 1, "DO17": -1},若查询的 IO 不存在返回 -1 |
| runControlPosRunNum | int | 运动控制当前轨迹已运行了点位个数 |
| serialNum | int | 序列号,每次回复加 1,每个通道互相独立 |
| detailedMotionPos | object | 更详细的运行参数 |
| detailedMotionPos.num | int | 每帧数据回复的点位数目 |
| detailedMotionPos.data | array | 点位数据数组 |
| detailedMotionPos.data[].time | int[] | 时间戳,第一个数为秒,第二个数为纳秒 |
| detailedMotionPos.data[].ACS | double[] | 关节坐标 |
| detailedMotionPos.data[].MCS | double[] | 直角坐标 |
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]
}
]
}
}
}运动控制
命令字: 0x1E02
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 机器人编号,取值范围 [1, 4] |
| clearBuffer | int | 清空运动轨迹缓存队列,为 1 时清空,清空时不影响当前正在传输的数据,若为 0 可不发 |
| targetMode | int | 运动模式:0 独立点位,1 连续轨迹 |
| extMove | int | 是否有外部轴运动:0 或不写 无外部轴运动,1 有外部轴运动 |
| sync | int | 外部轴是否同步:0 或不写 不同步,1 同步 |
| speed | int | 速度设定,若不写则使用默认值 |
| acc | int | 加速度设定,若不写则使用默认值 |
| pl | int | 速度平滑参数,若不写则使用默认值 5,仅"独立点位"、使用"targetVec"节点时有效 |
| moveMode | string | 运动模式,可选 "TeachSet"、"MOVJ"、"MOVL"、"MOVS",默认为 "TeachSet",仅"独立点位"、使用"targetVec"节点时有效 |
| targetPos | double[] | 目标点,若使用该节点则只会走一个目标点,格式:机器人(前 7 个)+ 外部轴(后 5 个) |
| targetVec | array | 多目标点,若使用该节点则会按顺序走完所有点位 |
targetVec 数组元素
| 字段 | 类型 | 说明 |
|---|---|---|
| pos | double[] | 其中一个目标点,格式:机器人(前 7 个)+ 外部轴(后 5 个) |
注意:"targetPos" 和 "targetVec" 节点同时存在时,仅 "targetPos" 节点生效
独立点位,单次传输:
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]}
]
}独立点位,分次传输,接收完轨迹再运动:
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]},
{"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]}
]
}字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
| end | int | 为 1 时停止之前的持续传输,若为 0 可不发 end |
| sendMode | int | 0 一次传输完全部轨迹点位,1 每次传输部分点位 |
| runMode | int | 仅每次传输部分点位时有效:0 接收完轨迹再运动,1 边接收边运动 |
| sum | int | 仅"接收完轨迹再运动"时有效,总共要发的帧数 |
| count | int | 仅"接收完轨迹再运动"时有效,当前为第几帧 |
| cfg.timeout | int | 超时时间,单位 ms,范围 [10-10000],仅"接收完轨迹再运动"时有效 |
连续轨迹,单次传输:
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
}
]
}targetVec 元素扩展字段
| 字段 | 类型 | 说明 |
|---|---|---|
| axisVel | double[] | 轴速度 |
| axisAcc | double[] | 轴加速度 |
| timeStamp | int | 运行到该点位时相对于起始点的时间,单位 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
}
]
}运动控制的回复
命令字: 0x1E03
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 机器人编号,取值范围 [1, 4] |
| success | bool | 判断是否成功,true 成功,false 失败 |
| size | int | 运动轨迹缓存队列的当前轨迹数目,仅当 success 为 true 时有该项 |
| cause | string | 接收失败的原因,接收成功时为空:busy 当前有未传输完成的数据,timeout 接收超时,dataErr 数据错误,termination 发送端终止了正在传输的数据 |
json
{
"robot": 1,
"success": false,
"size": 1,
"cause": "timeout"
}变量、IO控制
命令字: 0x1E04
| 字段 | 类型 | 说明 |
|---|---|---|
| numGVar | object | 查询变量,键为变量名,值为变量值;GA 为 bool 型变量,GI 为 int 型变量,GD 为 Double 型变量 |
| IO | object | 查询 IO 口,键为 IO 口名,值为状态(1 或 0) |
json
{
"numGVar": {"GA001": true, "GI033": 6, "GD666": -2.33},
"IO": {"DO1": 1, "DO13": 0}
}开关伺服点位运动控制
该功能和"运动控制"功能不可同时使用
命令字: 0x1E10
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 机器人编号,取值范围 [1, 4] |
| switch | bool | 是否开启,true 开启,false 关闭 |
json
{
"robot": 1,
"switch": true
}回复
命令字: 0x1E11
| 字段 | 类型 | 说明 |
|---|---|---|
| success | bool | 判断是否成功,true 成功,false 失败 |
| cause | string | 接收失败的原因,接收成功时为空:busy 当前通道被占用,dataErr 数据错误,startupErr 启动失败 |
json
{
"success": false,
"cause": "busy"
}点位发送
命令字: 0x1E12
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 机器人编号,取值范围 [1, 4] |
| end | int | 停止传输,为 1 时停止之前的持续传输,若为 0 可不发;在点位未传输完毕时,会清空之前接收到的数据 |
| sum | int | 总共要发的帧数 |
| count | int | 当前的帧数 |
| PosVec | double[][] | 发送的点位坐标,机器人(前 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]
]
}点位发送的回复
命令字: 0x1E13
| 字段 | 类型 | 说明 |
|---|---|---|
| robot | int | 机器人编号,取值范围 [1, 4] |
| success | bool | 是否接收成功,true 接收成功,false 接收失败 |
| cause | string | 接收失败的原因,接收成功时为空:notStart 未开启伺服点位运动控制模式,dataErr 数据错误,termination 发送端终止了正在传输的数据,cacheFull 缓存区已满(最大缓存 6 条轨迹) |
json
{
"robot": 1,
"success": false,
"cause": "dataErr"
}