信号服务器通信协议
一、设备访问协议
1.1 现场设备响应通用数据结构
json
class LocationDevice {
String name;
String lastAction; // 最近一个执行的命令,若无则为 None
ActionStatus lastActionStatus; // 最近一个命令的执行情况
Status status; // 设备自身状态
enum ActionStatus {
DONE,
EXECUTING,
FAILED
}
enum Status {
IDLE,
EXECUTING,
ERROR,
TIMEOUT
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1.2 现场设备设备访问请求
1.2.1 获取一个设备的信息
json
GET /locationDevices/{NAME}?action=XXX
1
参数:
Name | Type | Description |
---|---|---|
NAME | string | 设备名称 |
action | string | 操作指令,可自定义 |
响应:
Code | Message |
---|---|
200 | 请求已成功 |
400 | 参数错误 |
404 | 当前启用的设备中,找不到请求的对象 |
内容示例:
json
{
"name" : "SIG01",
"lastAction" : "wait",
"lastActionStatus" : "DONE",
"status" : "IDLE"
}
1
2
3
4
5
6
2
3
4
5
6
1.2.2 提交给设备一个命令
json
POST /locationDevices/{NAME}?action=XXX
1
参数:
Name | Type | Description |
---|---|---|
NAME | string | 设备名称 |
action | string | 操作指令,可自定义 |
响应:
Code | Message |
---|---|
200 | 请求已成功 |
400 | 参数错误 |
404 | 当前启用的设备中,找不到请求的对象 |
500 | 设备服务器故障或出现异常 |
二、设备服务器提供信号源的示例
2.1 预定义
参数 | 描述 |
---|---|
host | 设备服务器IP |
wait | 本示例中的 action 名称,当 SRD 向设备服务器查询,响应中的 ActionStatus 为 DONE 时,意为结束等待;返回的 ActionStatus 为 EXECUTING 时,意为需要继续等待。 |
2.2 机器人在缓冲位等待信号的流程
- 在构建场景时,缓冲位也是一个 Location,并需要该 Location 支持 operation :Wait。下文示例中的 Location 暂以 “L1” 来命名。
- 在设备服务器中,暂以 “SIG01” 对应 “L1” 处相应的信号。
- 需要机器人到缓冲位等待时,上位机发送的业务订单(transportOrder)中,需要包含如下一个 Destination
json
Destination:{
"locationName": "L1",
"operation": "Wait",
"properties":
[
{
"key": "device:requestAtSend",
"value": "SIG01:wait" // 告知设备服务器,机器人已进入等待信号 SIG01 的状态。
},
{
"key": "device:queryAtExecuted",
"value": "SIG01:wait" // 不断查询(间隔约 1s)设备服务器,信号 SIG01 是否可放行,即机器人是否可以结束等待。
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 当机器人执行到该 Destination 时,调度服务器会发送请求
json
POST "http://host:52000/devices/api/v1/locationDevices/SIG01?action=wait"
1
- 然后,调度服务器会每隔约1秒时间,向设备服务器进行查询
json
GET "http://host:52000/devices/api/v1/locationDevices/SIG01?action=wait "
1
若设备服务器返回的响应体是
json
{
"name" : "SIG01",
"lastAction" : "wait",
"lastActionStatus" : "DONE",
"status" : "IDLE"
}
1
2
3
4
5
6
2
3
4
5
6
那么,机器人将认为得到确认信号,开始往下执行其他任务。否则,若 "name
" 、"lastAction
" 与属性 "device:queryLocation
" 中的值不一致,或者 "lastActionStatus
" 为 “DONE
” 以外的其他状态时,机器人将继续等待该设备的信号。
最近更新 2022/11/28
有帮助
没帮助