Files
bj_power/AGV海康.md
SunYF c85c3bd6f1 docs: update project docs and add new reference documents
1. 修正项目说明文档中关于项目D、E的技术栈与部署描述
2. 新增完整的需求规格与开发规划文档
3. 新增海康RCS-2000 V4.2接口协议文档
2026-08-27 15:46:15 +08:00

474 lines
20 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 海康机器人 RCS‑2000 V4.2 接口协议(对外发布)
>文档类别:厂内物流机器人控制系统
>文档编号:RCS2000 V4.2
>版权所有 ©杭州海康机器人股份有限公司
## 版权声明
本文档由海康机器人公司开发,其版权受中华人民共和国版权法保护。海康机器人拥有本文的全部版权,未经本公司许可,任何单位及个人不得对本文中的任何部分进行转印、影印或复印。
## 信息反馈
海康机器人尽最大的努力保证本手册的准确性和完整性。如果您在使用中发现问题,希望及时将情况反馈给我们以完善产品,我们将非常感谢您的支持。
### 总公司联系方式
- 公司总机:057188967998
- 技术支持电话:057186611880(工作日9:3017:30)
- 传真:057188805843
- 地址:中国杭州市滨江区东流路700号
- 邮编:310052
- 公司Emailhikrobot@hikrobotics.com
- 公司网站:www.hikrobotics.com
## 目录
1. [协议概述](#1‑协议概述)
- 1.1 请求首部字段
- 1.2 请求报文消息体
- 1.3 加密签名
- 1.4 响应首部字段
- 1.5 响应报文消息体
- 1.6 响应状态码
- 1.7 响应报文消息体通用code
2. [业务接口说明](#2‑业务接口说明)
- 2.1 机器人调度API 接口说明
- 2.2 反馈接收SPI 接口说明
3. [任务下发接口调用示例](#3‑任务下发接口调用示例)
4. [典型调度场景](#4‑典型调度场景)
5. [更新说明](#5‑更新说明)
---
# 1 协议概述
>海康调度系统调用上层系统的接口,获取连接超时时间默认为30 秒,数据返回超时时间默认为60 秒,超时情况下,调度系统会返回连接失败。
## 1.1 请求首部字段
|字段名|数据类型|最大字节数|是否必需|说明|
|---|---|---|---|---|
|Authorization|字符串|N/A|否|固定格式:`nonce="wab1tkh",method="HMACSHA256",timestamp="20210101T00:00:00+08:00"`|
|ContentType|字符串|N/A|否|固定取值:`application/json;charset=UTF8`|
|Xlrappkey|字符串|32|否|由调度系统颁发给业务系统的唯一标识|
|Xlrrequestid|字符串|16|是|业务请求的唯一标识|
|Xlrversion|字符串|12|否|API 接口版本,为了保证接口的向下兼容,同样的 API 接口可能存在多个版本实现|
|Xlrtraceid|字符串|32|否|全链路追踪标识,用于协查上下游故障,需要在响应中原样返回。建议使用 UUID|
|Xlrsource|字符串|32|否|指令的来源,便于调试和故障定位|
## 1.2 请求报文消息体
只能使用**JSON格式(UTF‑8编码方式)**或空字符串(无字符)。不能使用JSON对象数组或其他格式。业务请求的参数信息应当放在请求报文消息体当中。
**请求报文样例**
```http
POST /api/robot/controller/tasks HTTP/1.1
Host: 10.10.10.10:1010
Authorization: nonce="wab1tkh",method="HMACSHA256",timestamp="20210101T00:00:00+08:00"
Xlrappkey: a4f********b324
Xlrversion: v1.0
Xlrtraceid: 605****8a0b
Xlrrequestid: 393****a6c1
ContentType: application/json;charset=UTF8
ContentLength: 512
Date: Fri, 26 Mar 2021 06:46:14 GMT
{"warehouseId":"371****b108",……,"zoneCode":"c7a6****371b"}
```
## 1.3 加密签名
应用注册中的第三方应用,如开启加密,请求时需带上签名。`appSecret`为应用注册中的私钥。
>请求完整示例如上所示,其中只有请求行、特定的首部字段、空行、报文消息体参与签名,即需要从请求报文原文中去除不参与签名的首部字段,将参与签名的首部字段名按下表编号的顺序排序,同时首部字段名改为大写。
**参与签名的首部字段**
|编号|参与签名的首部字段|是否必填|
|---|---|---|
|1|AUTHORIZATION|是|
|2|HOST|是|
|3|XLRAPPKEY|是|
|4|XLRREQUESTID|是|
|5|XLRSOURCE|否|
|6|XLRTRACEID|否|
|7|XLRVERSION|是|
签名生成逻辑:
> 签名 = MD5( 加盐哈希算法(appSecret,请求报文拼接后的原串) )
> 加盐哈希算法可选:
> 1HMACSHA256(推荐)
> 2HMACSHA512
> 使用MD5对加盐哈希算法的散列值再次哈希,产生128(16字节)的散列值。
>请求的签名应当携带在**查询参数**的最后,参数名为`sign`
**Authorization头部参数说明**
|参数名|数据类型|字节数|是否必须|说明|
|---|---|---|---|---|
|nonce|字符串|8|是|随机数。建议每次请求都不同,以便于更有效的抵御彩虹表攻击;也可以定时更换|
|method|字符串|N/A|是|加盐哈希算法,固定枚举值:`HMACSHA256``HMACSHA512`|
|timestamp|字符串|N/A|是|请求发出的时间,遵循本文档关于时间格式秒精度的定义|
>重放攻击验证:服务端取出timestamp,加上业务允许合法请求时间,建议不超过**120秒**,判断请求是否超时。
## 1.4 响应首部字段
|字段名|数据类型|最大字节数|是否必须|说明|
|---|---|---|---|---|
|ContentType|字符串|N/A|否|固定取值:`application/json;charset=UTF8`|
|Xlrrequestid|字符串|16|是|业务请求的唯一标识|
|Xlrversion|字符串|12|否|API接口版本|
|Xlrtraceid|字符串|32|否|全链路追踪标识,原样返回请求入参|
## 1.5 响应报文消息体
当HTTP 响应状态码为`200`时,响应报文消息体JSON对象格式:
|中文名称|字段名|数据类型|最大字节数|是否必须|说明|
|---|---|---|---|---|---|
|消息码|code|字符串|32|是|参见 1.6 章节通用响应 code 定义和各接口的消息码定义|
|提示消息|message|字符串|256|否|异常描述|
|业务数据|data|JSON 对象|10MB|否|返回的业务属性对象|
**正常响应报文样例**
```json
{
"code":"SUCCESS",
"message":"成功",
"data": {
"robotTaskCode": "abc**13"
}
}
```
**业务异常响应报文样例**
```json
{
"code":"Err_Internal",
"message":"内部未知错误",
"data":null
}
```
## 1.6 响应状态码
|状态码|说明|
|---|---|
|200|HTTP协议层面处理成功,但是仍可能出现业务异常,需要根据响应报文消息体的消息码判断|
|401|签名认证失败。原因可能是签名无效、签名过期、appKey和appSecret失效,需要重新更新请求时间后加签,或需要调度系统重新颁发appKey和appSecret|
|403|权限不足。例如业务系统试图取消不由其创建的任务|
|406|请求的ContentType不符合要求|
|400|其他由于客户端请求错误导致的异常,无法通过重试解决,需要检查请求的格式是否符合要求|
|500|服务端的异常,可以通过重试请求解决,重试次数与间隔需要根据业务实际情况设定|
>其余未列出状态码均按照标准HTTP协议处理即可。
## 1.7 响应报文消息体通用code
|Code|message|
|---|---|
|SUCCESS|成功|
|Err_Internal|内部未知错误|
|Err_DataValidationFailed|数据格式验证失败|
|Err_RequestDuplicate|请求重复|
|Err_InvalidVersion|请求版本不合法|
---
# 2 业务接口说明
服务前缀统一:`/rcs/rtas`,完整请求路径 = 服务前缀 + 路径。
## 2.1 机器人调度API 接口说明
> WMS/MES作为**调用方**,主动调用RCS2000这一组API。
### 2.1.1【国标】任务组接口
- 接口路径:`/api/robot/controller/task/group`
- 请求方式:`POST`
- 幂等性:**是**
>接口说明
1. 任务组是任务的集合,当任务间有相互关系时,需要先调用任务组接口,描述任务组的策略,任务间的关系组合,再调用任务下发接口。
2. 任务策略包括按组顺序出库策略、按组分配策略。
3. 顺序出库下发规则:上层系统将 `groupSeq` 从小到大下发给 RCS‑2000,**上层系统需要控制下发顺序**,不支持先调接口发 groupSeq 大的,再调接口发 groupSeq 小的执行顺序出库。
**请求体字段**
|参数名|数据类型|最大字节数|是否必须|说明|
|---|---|---|---|---|
|groupCode|字符串|32|是|任务组编号,全局唯一|
|strategy|字符串|16|是|执行策略。枚举:`GROUP_SEQ`按组顺序出库;`GROUP_ASSIGN`按组分配任务(CTU专用)`GROUP_CARRIER_ADJUST`载具整理(CTU理库)|
|strategyValue|字符串|32|否|GROUP_SEQ时必填:0组间无序组内无序;1组间及组内都有序;2组间有序组内无序;3组间无序组内有序;GROUP_CARRIER_ADJUST理库时必填|
|groupSeq|整数|8|否|组顺序(数字),从1~9999999999|
|data|JSON对象数组|N/A|是|子任务集合,每个元素:`robotTaskCode`(任务号),`sequence`(组内顺序)|
**响应公共字段**`code`/`message`/`data`data内返回任务组信息。
专用消息码:`Err_TaskNotStart`上一组任务未下发;`Err_DataValidationFailed`任务序列号有误。
**请求示例**
```json
{
"groupCode": "2e0d1ae0481f48b78b6a217ac2b54eb4",
"strategy": "GROUP_SEQ",
"strategyValue": "1",
"groupSeq": 10,
"targetRoute": {
"type": "ZONE",
"code": "A2"
},
"data": [
{"robotTaskCode": "0a17e361eb5248bfab0508e4709f085e","sequence": 1},
{"robotTaskCode": "1b30143f32914155ab194d55a95d54da","sequence": 2},
{"robotTaskCode": "6541e925d1de4c448188068fcee75de5","sequence": 3}
]
}
```
### 2.1.2【国标】 任务下发接口
- 接口路径:`/api/robot/controller/task/submit`
- 请求方式:`POST`
- 幂等性:**是**
>接口说明:业务系统发送任务请求,物流机器人调度系统生成任务执行单,并下发执行。
**请求体字段**
|参数名|数据类型|最大字节数|是否必须|说明|
|---|---|---|---|---|
|taskType|字符串|16|是|任务类型,预制枚举:`PFLMRCOMMON`普通搬运|
|targetRoute|对象数组|N/A|是|执行步骤集合,机器人关键路径(起点、终点)|
|initPriority|整数|8|否|初始优先级1‑120,数值越大优先级越高;调度会动态修正实际优先级|
|deadline|时间|N/A|否|任务截止时间,秒精度,优先级修正条件之一|
|robotType|字符串|N/A|否|`GROUPS`资源组 / `ROBOTS`机器人编号|
|robotCode|字符串数组|N/A|否|机器人编号集合|
|robotTaskCode|字符串|64|否|外部任务唯一编号;不传则调度系统生成返回|
|extra|JSON对象|N/A|否|自定义扩展透传字段|
>targetRoute子对象:
> - `type``SITE`站点;`ZONE`区域;`STORAGE`仓位;`CARRIER`载具等
> - `code`:对应编号
> - `operation``COLLECT`取货,`DELIVERY`送货,`ROTATE`旋转
> - `carrierInfo[]`:载具信息(载具类型、编号、层号)
> - `angleInfo`:角度信息
**响应data字段**`robotTaskCode`(全局唯一任务号)
专用错误码:`Err_TaskTypeNotSupport`任务类型不支持;`Err_RobotGroupsNotMatch`机器人资源组不匹配;`Err_TargetRouteError`路径参数错误。
### 2.1.3 任务继续执行接口
- 路径:`/api/robot/controller/task/extend/continue`
- POST,幂等:是
>说明:一个任务包含多个步骤,每个步骤完成后,上层调用本接口驱动下一步骤;第一个步骤也需要调用此接口启动。若步骤设置autoStart自动开始,则可不调用;重复调用做幂等处理。
请求入参:
- triggerType`SITE`站点 / `ROBOT`车号 / `TASK`任务链编号
- triggerCode:对应编号
- targetRoute:下一步目标路径对象
- extra:扩展字段
错误码:`Err_TaskNotStart`任务尚未开始;`Err_TaskFinished`任务已结束;`Err_TaskNotFound`任务找不到。
### 2.1.4【国标】任务取消接口
- 路径:`/api/robot/controller/task/cancel`
- POST,幂等:是
>说明:取消任务;软取消可下发回库任务;支持按任务号、机器人编号、载具编号批量取消。
请求体关键字段
|参数|说明|
|---|---|
|robotTaskCode|任务号,可选|
|cancelType|`CANCEL`软取消;`DROP`人工介入硬取消|
|carrierCode|载具编号,批量取消用|
|robotCode|机器人编号,批量取消用|
|reason|取消原因|
|returnTaskType|软取消回库流程类型,默认`PFTASKCANCELRETURN`|
|targetRoute|取消后机器人目标位置|
### 2.1.5【国标】任务优先级设置接口
- 路径:`/api/robot/controller/task/priority`
- POST,幂等:是
>说明:任务创建后,修改初始优先级、截止时间;调度系统会综合工况动态调整实际执行优先级。
入参:
- robotTaskCode:任务编号(必填)
- initPriority1120
- deadline:截止时间(可选)
- extra:扩展
### 2.1.6【国标】区域暂停与恢复机器人接口
- 路径:`/api/robot/controller/zone/pause`
- POST,幂等:是
入参:
- zoneCode:管控区域编号
- invoke`FREEZE`急停暂停;`RUN`恢复运行
### 2.1.7【国标】区域归巢机器人接口
- 路径:`/api/robot/controller/zone/homing`
- POST,幂等:是
>让指定区域机器人前往归巢点位,支持归巢后关机、定时开机。
入参关键字段
- zoneCodes:区域编号集合
- autoShutdown`YES`关机 / `NO`不关机
- bootTime:预设开机时间(autoShutdown=YES生效)
- expireTime:归巢超时时间
返回data`homingCode`归巢指令编号;`robotCount`接收到指令的机器人数量。
### 2.1.8【国标】 区域驱离机器人接口
- 路径:`/api/robot/controller/zone/banish`
- POST,幂等:是
>将区域内机器人驱离,禁止进入该区域。
返回`banishCode`驱离指令编号。
### 2.1.9【国标】区域封锁与恢复接口
- 路径:`/api/robot/controller/zone/blockade`
- POST,幂等:是
>封锁:禁止机器人进入该区域;不强制区内机器人离开。
invoke枚举:`BLOCKADE`封锁;`OPENUP`解封。
### 2.1.10【国标】载具与站点绑定接口
- 路径:`/api/robot/controller/carrier/bind`
- POST,幂等:是
>代表载具放置在该站点;前提:载具、站点无占用任务。
入参:`carrierCode`载具编号,`siteCode`站点编号,`carrierDir`载具角度。
### 2.1.11【国标】载具与站点解绑接口
- 路径:`/api/robot/controller/carrier/unbind`
- POST,幂等:是
>解绑载具‑站点;carrierCode/siteCode至少传一个。
### 2.1.12 存储对象与搬运对象绑定解绑接口
- 路径:`/api/robot/controller/site/bind`
- POST,幂等:是
>slot:仓位/站点;invoke=`BIND`绑定 / `UNBIND`解绑;支持料箱、载具绑定解绑。
### 2.1.13【国标】 载具禁用与启用
- 路径:`/api/robot/controller/carrier/lock`
- POST,幂等:是
invoke`LOCK`禁用;`UNLOCK`启用;传入`carrierCode`
### 2.1.14【国标】站点禁用与启用
- 路径:`/api/robot/controller/site/lock`
- POST,幂等:是
invoke`LOCK`禁用;`UNLOCK`启用;传入`siteCode`站点编号。
### 2.1.15 外设执行通知接口【返回0】
- 路径:`/rcs/rtas/spi/wcs/robot/eqpt/notify`
- POST,幂等:是
>上层通知调度:电梯、自动门等外设动作完成。
>旧版本返回code=0V4.2.8使用`notifyGbt`接口返回`SUCCESS`
### 2.1.16【国标】预调度任务下发接口
- 路径:`/api/robot/controller/task/pretask`
- POST,幂等:是
>提前调度机器人到达点位等待业务任务。
入参:`siteCode`站点;`nextTaskTime`预计多久后执行真实任务,单位秒。
### 2.1.17【国标】查询任务状态接口
- 路径:`/api/robot/controller/task/query`
- POST,幂等:是
>根据`robotTaskCode`查询单条任务状态。
返回taskStatus枚举:`QUEUE`队列中;`WAIT`等待;`EXECUTING`执行;`MANUALED`人工完成;`FINISHED`已完成;`CANCELLED`已取消。
### 2.1.18【国标】查询机器人状态接口
- 路径:`/api/robot/controller/robot/query`
- POST,幂等:是
传入`singleRobotCode`机器人编号,返回:电量、坐标、速度、在线状态、任务状态、携带载具编号、告警信息。
### 2.1.19【国标】查询载具状态接口
- 路径:`/api/robot/controller/carrier/query`
- POST,幂等:是
传入`carrierCode`,返回:所在站点、绑定任务号、坐标、载具状态、仓位编号、所属机器人编号。
### 2.1.20 物料绑定接口
- 路径:`/api/robot/controller/matlabel/bind`
- POST,幂等:是
>载具绑定物料标签。入参:carrierCodematLabel物料标签。
### 2.1.21 物料解绑接口
- 路径:`/api/robot/controller/matlabel/unbind`
- POST,幂等:是
### 2.1.22 外设执行通知接口【V4.2.8 返回SUCCESS】
- 路径:`/rcs/rtas/spi/wcs/robot/eqpt/notifyGbt`
- POST,幂等:是
>新版本国标外设通知,返回code=SUCCESS,兼容电梯、自动门。
## 2.2 反馈接收SPI 接口说明
>**SPIRCS2000作为调用方,主动回调上层WMS/MES服务地址,推送事件、告警、状态。需要在RCS后台配置上层回调地址。**
### 2.2.1【国标】任务执行过程回馈接口
- 回调路径示例:`/api/robot/reporter/task`
>任务事件上报:任务开始、离开储位、任务完成等事件。
values.method`start`任务开始;`outbin`走出储位;`end`任务完成。
### 2.2.2 请求资源接口
- 回调路径:`/api/robot/reporter/resource`
>RCS向上层申请资源:申请站点、仓位、载具。applyType:`APPLY_SITE`申请站点、`APPLY_BIN`申请仓位。上层返回目标点位信息。
### 2.2.3 请求外设接口
- 回调路径:`/api/robot/reporter/eqpt`
>RCS向上层请求电梯、自动门外设资源。
### 2.2.4【国标】 机器人归巢完成回馈接口
- 回调路径示例:`/api/robot/reporter/zone/homing`
>归巢全部完成/超时回调通知上层。后台需要开启业务通知开关`ZONE_HOMING`
### 2.2.5【国标】区域驱离机器人完成回馈接口
- 回调路径示例:`/api/robot/reporter/zone/banish`
驱离全部完成或超时通知;后台开启开关`ZONE_BANISH`
### 2.2.6【国标】机器人异常告警上报接口
- 回调路径示例:`/api/robot/reporter/robot/warning`
>机器人严重故障告警上报,仅推送一次;后台开启开关`AMR_ALARM`
### 2.2.7【国标】任务异常告警上报接口
- 回调路径示例:`/api/robot/reporter/task/warning`
>任务执行异常告警上报,仅推送一次;后台开启开关`TASK_ALARM`
### 2.2.8 绑定解绑通知
- 回调路径示例:`/api/robot/reporter/bind`
>载具/仓位发生绑定、解绑动作时RCS回调上层;后台开启开关`BIND`
invoke=`BIND`绑定 / `UNBIND`解绑。
# 3 任务下发接口调用示例
>文档包含潜伏车、CTU、叉车、滚筒车等各类机器人`task/submit`完整http+json请求样例,详见原始PDF文档3章节。
# 4 典型调度场景
1. 场景一:背货架AMR 在货架底下待命任务调度场景
2. 场景二:普通背货架任务调度场景
3. 场景三:辊筒AMR 任务调度场景
4. 场景四:CTU 输送线预调度+入库
5. 场景五:CTU 梳齿式工作站入库
6. 场景六:潜伏车顺序出库场景(任务组GROUP_SEQ典型用法)
7. 场景七:潜伏车搬运与外设交互场景
>每个场景给出:上层系统 ↔ HIK调度系统交互步骤、对应接口编号。
**潜伏车顺序出库重点说明**
>方式一(推荐)
>1)先调用**任务组接口2.1.1**,定义groupCode、策略、顺序;
>2)多次调用**任务下发2.1.2**,传入groupCode下发子任务。
>
>方式二(不推荐):任务下发接口直接携带groupCode、sequence、seqType。
# 5 更新说明
|更新时间|更新人员|更新内容|
|---|---|---|
|2024/8/30|王勇52|1.编写4.2 接口文档|
|2024/9/3|王勇52|1.增加典型调度场景|
|2025/8/11|王勇52|1.修改预调度接口任务数字段描述|
---
>说明:本Markdown为文档结构化转写,部分超长http请求样例做简化;实际开发请以PDF原始报文样例复制使用。
>核心关键点总结(开发提示)
>1. APIWMS调用RCS):2.1开头;SPI回调(RCS调用WMS):2.2开头,需要RCS后台配置上层回调地址。
>2. 全部POSTJSON;签名使用HMACSHA256,签名放url query参数sign。
>3. 任务顺序出库:优先使用任务组接口2.1.1。
>4. 外设交互两套通知接口:旧版notifycode=0);新版notifyGbtcode=SUCCESSV4.2.8+。
>5. 告警、归巢、驱离、绑定解绑回调,需要在RCS后台业务通知开启对应开关,否则不会推送SPI。
如果你需要,我可以进一步输出一份:**WMS对接海康RCS‑2000V4.2极简对接清单(字段清单+时序)**。