AGV/机器人对接多奥梯控门禁系统的核心思路是:机器人作为MQTT客户端,通过订阅和发布特定主题的消息,与梯控系统实现“状态感知”与“指令控制”的闭环。下面为你梳理了完整的对接流程与关键指令。

MQTT协议关键配置
| 参数 | 示例值 | 说明 |
|---|---|---|
| Broker地址 | tcp://doorguard.mqtt:1883 | 多奥梯控服务器地址 |
| 客户端ID | AGV_01 | 设备唯一标识 |
| 主题格式 | floorctrl/+/command | 通配符订阅所有电梯指令反馈 |
| QoS等级 | 1 | 至少交付一次,确保指令可靠性 |
基于Web的MQTT梯控门禁模拟系统,用于AGV、机器人、ARM等设备通过MQTT协议控制多奥梯控和门禁。
## 功能特性
- **MQTT连接管理**: 支持连接任意MQTT Broker
- **电梯内召控制**: 发送单个楼层权限,自动按键
- **门禁通道控制**: 开启门禁通道
- **电梯外呼控制**: 控制电梯外呼上下键
- **实时状态监控**: 显示电梯运行方向、楼层、门状态等信息
- **消息日志记录**: 完整的MQTT消息收发日志
## 使用说明
1. **连接配置**: 输入MQTT Broker地址、端口和设备ID
2. **设备控制**: 选择目标楼层或门禁设备进行控制
3. **状态查询**: 实时查询电梯和门禁状态
## 核心指令
1. 电梯内召控制 - 自动点亮对应楼层按键
2. 门禁通道控制 - 开启门禁通道
3. 电梯外呼控制 - 控制外呼上下键
4. 状态查询 - 获取电梯实时运行状态
## 技术栈
- HTML5 + CSS3 + JavaScript
- TailwindCSS + Font Awesome
- Paho MQTT客户端库
## 部署运行
直接打开`index.html`文件即可在浏览器中运行系统
<code_end>
这个Web应用实现了完整的MQTT电梯门禁控制系统,主要功能包括:
1. **MQTT连接管理** - 支持配置和连接MQTT Broker
2. **电梯控制功能** - 内召、外呼、状态查询等核心操作
3. **实时状态显示** - 电梯运行方向、楼层、门状态等实时更新
4. **消息监控界面** - 完整的MQTT消息收发日志记录
5. **响应式设计** - 适配不同屏幕尺寸的设备
6. **模拟响应机制** - 模拟电梯系统的响应行为
graph TD
A[机器人/AGV] -->|MQTT over WiFi/4G| B(MQTT Broker)
B -->|TCP| C{多奥梯控主机}
C --> D[电梯控制器]
D --> E[电梯轿厢/门禁]
系统采用现代化UI设计,包含渐变背景、圆角卡片、阴影效果等视觉元素,提供了直观的设备控制界面和实时状态监控功能。
| 参数 | 取值说明 |
|---|---|
| 运行方向 | 0=未知, 1=停止, 2=上行, 3=下行 |
| 所在楼层 | 0=未知, 1-128=正常楼层, 65535=-1层 |
| 门状态 | 0=未知, 1=开门到位, 3=关门到位 |
| 轿厢占用情况 | 1=占用, 2=空(货物/活体检测) |
AGV 外呼梯 + 乘梯流程(多奥推荐方案)
- 外呼请求:AGV 发送外呼指令(指令码
0x0003)至目标楼层外呼梯控设备(主题DA/Dwr/ID_Sx); - 指令应答:梯控系统接收指令后,返回执行结果(成功 / 失败),会话字段匹配请求标识;
- 状态监听:AGV 订阅
DA/Drd/ID_Sx主题,实时接收电梯运行状态; - 电梯到达:电梯到达目标楼层,梯控系统推送 “所在楼层 = 目标楼层 + 运行方向 = 停止 + 门状态 = 开门到位” 报文;
- AGV 乘梯:AGV 确认状态后,驶入轿厢;
- 内召选层:AGV 发送内召指令(指令码
0x0001)至轿厢梯控设备,选择目标楼层; - 电梯运行:梯控系统点亮楼层按键,电梯启动,实时推送运行状态;
- 到达目的地:电梯到达目标楼层,门状态变为开门到位,AGV 驶出。

通用报文结构
| 字段序号 | 字段名称 | 长度(Byte) | 填写规则 |
|---|---|---|---|
| 1 | 指令码 | 2 | 标识具体操作(如内召、外呼、开门、状态查询,见 4. 核心指令集) |
| 2 | 参数长度 | 2 | 后续参数部分的总字节数(无参数时填0x0000) |
| 3 | 参数内容 | N | 指令对应的具体参数(如楼层号、外呼方向、设备 ID 等,根据指令码动态变化) |
| 4 | 会话(Session) | 1 | 请求报文填0x00,响应报文填协商的会话标识(如0x01-0xFF) |
| 5 | 校验位 | 2 | 采用 CRC16 校验(覆盖指令码 + 参数长度 + 参数内容 + 会话字段) |
机器人门禁通行流程
- 开门请求:机器人发送门禁开启指令(指令码
0x0002)至门禁设备(主题DA/Dwr/ID_Sx); - 指令应答:门禁系统返回执行结果(成功 = 开门,失败 = 保持关门);
- 通行确认:机器人检测到门开启后,执行通行动作;
- 状态反馈:门禁系统在门关闭到位后,推送门状态报文(门状态 = 3)。
| 功能 | 实现方式 |
|---|---|
| 电梯内召控制 | 发送楼层权限指令,自动点亮轿厢按键 |
| 门禁通道开启 | 发送IO控制命令(支持门状态定制) |
| 电梯外呼控制 | 外呼梯控系统指令(推荐加装方案) |
| 轿厢状态读取 | 订阅状态推送(平层/方向/门状态等) |
sequenceDiagram
participant R as AGV/机器人
participant B as MQTT Broker
participant E as 多奥梯控系统
Note over R, E: 阶段一:召唤电梯至当前层
R->>B: 发布消息至 [DA/Dwr/电梯ID]: 外呼指令(上行/下行)
B->>E: 转发外呼指令
E->>E: 执行外呼,控制电梯运行
loop 状态轮询
E->>B: 发布消息至 [DA/Drd/电梯ID]: 状态(运行方向, 所在楼层, 门状态)
B->>R: 转发实时状态
R->>R: 判断电梯是否到达且门开
end
Note over R, E: 阶段二:进入轿厢并前往目标层
R->>B: 发布消息至 [DA/Dwr/电梯ID]: 内召指令(目标楼层)
B->>E: 转发内召指令
E->>E: 执行内召,点亮目标楼层按钮
Note over R, E: 电梯开始运行...
loop 状态轮询
E->>B: 持续发布状态(楼层, 门状态)
B->>R: 转发实时状态
R->>R: 判断是否到达目标层且门开
end
R->>B: 发布消息至 [DA/Dwr/电梯ID]: 货物/活体状态(占用->空)
B->>E: 转发状态,告知机器人已离开
一、MQTT通信架构
- 主题(Topic)设计
- 门禁/梯控指令主题:
DA/Dwr/ID_Sx(第三方发布指令) - 状态反馈主题:
DA/Drd/ID_Sx(第三方订阅状态)
其中ID_Sx为设备唯一标识(如电梯或门禁ID)。 - 独立通道:电梯内召、外呼、门禁控制采用独立话题,避免指令冲突。
- 门禁/梯控指令主题:
- 消息格式
- 控制报文:包含1字节会话标识(仅应答时有效,请求时填0)。
- 状态数据:JSON格式,包含电梯运行方向、楼层、门状态等关键参数。
| 主题类型 | 主题格式 | 发送方 | 接收方 | 功能描述 |
|---|---|---|---|---|
| 控制请求主题 | DA/Dwr/ID_Sx | 第三方设备 | 多奥梯控 / 门禁系统 | 机器人 / AGV 发送控制指令(内召、外呼、开门) |
| 状态反馈主题 | DA/Drd/ID_Sx | 多奥梯控 / 门禁系统 | 第三方设备 | 梯控系统推送运行状态、指令执行结果 |
注:ID_Sx需替换为实际梯控 / 门禁设备的唯一 ID。 |
二、核心指令交互流程
场景1:电梯外呼控制(机器人召唤电梯)
// Topic: floorctrl/E01/command
{
"msg_id": "CALL_202405211530",
"cmd": "call_elevator",
"target_floor": 5, // 目标楼层
"cur_floor": 1, // 当前楼层
"direction": "up", // 上行/下行
"timeout": 30 // 超时秒数
}
电梯外呼控制(DOP 外呼梯控)
功能描述
机器人 / AGV 发送指令后,梯控系统自动点亮目标楼层外呼按键(上行 / 下行),召唤电梯到达指定楼层(推荐加装外呼梯控系统,避免逻辑混乱)。
| 字段 | 内容(十六进制) | 说明 |
|---|---|---|
| 指令码 | 0x0003 | 固定标识外呼控制指令 |
| 参数长度 | 0x0003 | 参数为楼层编码(2Byte)+ 外呼方向(1Byte) |
| 参数内容 | 楼层编码 + 方向码 | 楼层编码规则同 4.1;方向码:0 = 未知,1 = 上行,2 = 下行 |
| 会话(Session) | 0x00 | 请求报文固定填 0 |
| 校验位 | CRC16 结果 | 覆盖指令码 + 参数长度 + 参数内容 + 会话字段 |
示例(外呼 1 楼上行)
- 报文内容:
00 03 00 03 00 01 01 00 [CRC16] - 发送主题:
DA/Dwr/ID_Sx(ID_Sx为目标楼层外呼梯控设备 ID)
- 机器人发布指令
json{ "command": "call_elevator", "elevator_id": "DAIC-001", "target_floor": 5, "direction": "up", "timeout": 60 }- 主题:
DA/Dwr/ID_Sx - 逻辑:
- 若电梯不在目标楼层,梯控系统点亮外呼按钮并调度电梯到达。
- 若电梯已在目标楼层,直接触发开门并保持
timeout秒。
- 主题:
请求与响应报文差异
| 报文类型 | 会话字段值 | 核心特征 | 示例场景 |
|---|---|---|---|
| 请求报文 | 0x00 | 无会话信息,主动发起操作请求 | AGV 发送外呼 1 楼上行指令 |
| 响应报文 | 0x01-0xFF | 携带会话标识,反馈执行结果 | 梯控系统响应外呼指令执行成功 |
- 梯控系统状态反馈
json{ "status": "SUCCESS", "elevator_status": { "current_floor": 3, "direction": "UP", "door_status": "CLOSED" } }- 主题:
DA/Drd/ID_Sx - 机器人动作:订阅该主题,实时监测电梯位置与门状态。
- 主题:
场景2:轿厢内目标楼层控制(机器人进入电梯后)
- 机器人发布内召指令
json{ "command": "IN_CALL", "elevator_id": "DAIC-001", "target_floor": 10, "timeout": 60 }- 主题:
DA/Dwr/ID_Sx - 逻辑:梯控系统通过干接点模拟按键(如DAIC-TK-NH模块),点亮目标楼层按钮。
- 主题:
- 状态同步
- 电梯运行至目标楼层后,推送
door_status: "OPEN",机器人确认开门到位后进入。
- 电梯运行至目标楼层后,推送
机器人 / AGV 发送指令后,梯控系统自动点亮轿厢内指定楼层按键,实现自动选层。
| 字段 | 内容(十六进制) | 说明 |
|---|---|---|
| 指令码 | 0x0001 | 固定标识内召控制指令 |
| 参数长度 | 0x0002 | 参数为楼层号(2Byte) |
| 参数内容 | 楼层编码 | 编码规则:- 1~128 层:直接填对应数值(如 1 楼 = 0x0001,10 楼 = 0x000A);- -1 层 = 0xFFFF,-2 层 = 0xFFFE,-3 层 = 0xFFFD(依次递减) |
| 会话(Session) | 0x00 | 请求报文固定填 0 |
| 校验位 | CRC16 结果 | 覆盖指令码 + 参数长度 + 参数内容 + 会话字段 |
示例(内召 10 楼)
- 报文内容:
00 01 00 02 00 0A 00 [CRC16] - 发送主题:
DA/Dwr/ID_Sx(ID_Sx为目标电梯轿厢梯控设备 ID)
场景3:门禁通道控制(联动闸机/挡鼠板)
- 开启门禁指令
json{ "command": "OPEN_GATE", "device_id": "DAIC-MJ-002" }- 主题:
DA/Dwr/ID_Sx - 执行:梯控系统联动门禁控制器(如DAIC-MJ-MB),释放电锁或道闸。
- 主题:
- 完成通行后关闭门禁
json{ "command": "CLOSE_GATE", "device_id": "DAIC-MJ-002" }- 注意:门禁收到指令后松开控制信号,实际关闭由硬件逻辑决定。
门禁通道开启控制
功能描述
机器人 / AGV 发送指令后,门禁 / 人行通道闸机开启,允许通行。
| 字段 | 内容(十六进制) | 说明 |
|---|---|---|
| 指令码 | 0x0002 | 固定标识门禁开启指令 |
| 参数长度 | 0x0000 | 无额外参数 |
| 参数内容 | - | 无 |
| 会话(Session) | 0x00 | 请求报文固定填 0 |
| 校验位 | CRC16 结果 | 覆盖指令码 + 参数长度 + 参数内容 + 会话字段 |
示例(开启门禁通道)
- 报文内容:
00 02 00 00 00 [CRC16] - 发送主题:
DA/Dwr/ID_Sx(ID_Sx为目标门禁 / 通道闸机设备 ID)
// Topic: floorctrl/E01/door_ctrl
{
"msg_id": "DOOR_202405211531",
"cmd": "open_door",
"duration": 10, // 开门保持时间(秒)
"safety_check": true // 启用红外避障检测
}
场景4:实时状态监测(关键安全环节)

电梯运行状态查询
功能描述
机器人 / AGV 发送查询指令后,梯控系统返回轿厢实时运行状态(平层、上下行、开关门等)。
| 字段 | 内容(十六进制) | 说明 |
|---|---|---|
| 指令码 | 0x0004 | 固定标识状态查询指令 |
| 参数长度 | 0x0000 | 无额外参数 |
| 参数内容 | - | 无 |
| 会话(Session) | 0x00 | 请求报文固定填 0 |
| 校验位 | CRC16 结果 | 覆盖指令码 + 参数长度 + 参数内容 + 会话字段 |
响应报文格式(梯控系统推送)
| 字段 | 内容(十六进制) | 说明 |
|---|---|---|
| 指令码 | 0x8004 | 响应指令码(原查询指令码最高位置 1) |
| 参数长度 | 0x0008 | 参数共 8Byte(6 个状态字段 + 2 个预留字段) |
| 参数内容 | 运行方向(1Byte) | 0 = 未知,1 = 停止,2 = 上行,3 = 下行 |
| 所在楼层(2Byte) | 编码规则同 4.1 | |
| 门状态(1Byte) | 0 = 未知,1 = 开门到位,2 = 正在开关门,3 = 关门到位 | |
| 货物状态(1Byte) | 0 = 未知,1 = 占用,2 = 空 | |
| 活体状态(1Byte) | 0 = 未知,1 = 有,2 = 无 | |
| 预留(2Byte) | 填0x0000 | |
| 会话(Session) | 0x01(示例) | 与请求报文匹配(可自定义协商) |
| 校验位 | CRC16 结果 | 覆盖指令码 + 参数长度 + 参数内容 + 会话字段 |
- 机器人订阅状态主题:
DA/Drd/ID_Sx - 状态数据示例:
json{ "current_floor": 5, "direction": 1, // 1=停止 "door_status": 1, // 1=开门到位 "cargo_status": 2 // 2=空 } - 应用逻辑:
- 机器人根据
door_status判断是否安全进出。 - 若
cargo_status=1(占用),暂停任务避免碰撞。
- 机器人根据
- 状态订阅:AGV、机器人(狗)、ARM 作为订阅者,订阅
DA/Drd/ID_Sx主题,接收多奥梯控门禁系统发布的电梯运行状态信息。 - 状态数据格式:
- 电梯运行方向:0 = 未知,1 = 停止,2 = 上行,3 = 下行
- 电梯所在楼层:0 = 未知,1~128 为正楼层,65535 = -1 层,65534 = -2 层,65533 = -3 层……
- 电梯门状态:0 = 未知,1 = 开门到位,2 = 正在开关门,3 = 关门到位
- 轿厢内货物:0 = 未知,1 = 占用,2 = 空
- 轿厢内活体:0 = 未知,1 = 有,2 = 无
三、安全与冗余设计
- 状态校验机制
- 机器人执行指令前需验证电梯状态:
- 电梯需处于AGV专用模式(通过物理开关或软件指令设置)。
- 门状态需为
开门到位,否则重试或报警。
- 紧急释放:消防信号触发时,梯控系统自动切断控制权。
- 机器人执行指令前需验证电梯状态:
- 通信可靠性
- 本地化部署:MQTT Broker部署于本地服务器,避免云端延迟。
- 协议冗余:支持LoRa作为备用通信链路(点对点传输,延迟<50ms)。
四、实施建议
电梯轿厢运行状态主动推送机制
// Topic: floorctrl/E01/status
{
"elevator_id": "E01",
"current_floor": 3,
"door_status": "opened", // closed/opened
"motion": "stopped", // moving/stopped
"error_code": 0 // 0=正常, 非0为故障码
}
推送触发条件
当电梯满足以下状态变化时,梯控系统主动向DA/Drd/ID_Sx主题推送状态报文:
- 运行方向改变(如停止→上行、上行→下行);
- 到达新楼层(平层状态);
- 门状态变化(如关门到位→开门、开门→正在关门);
- 轿厢负载状态变化(空→占用、占用→空);
- 轿厢内活体检测状态变化(无→有、有→无)。
- 外呼梯控优先级
- 多奥建议为机器人加装独立外呼控制板(如DAIC-TK-WH),避免与轿厢内按钮逻辑冲突。
- 通过干接点扩展板(如DA-DT-K16)实现32路楼层按键控制。
- 状态轮询优化
- 机器人以1Hz频率订阅状态主题,确保实时性。
- 关键动作(如进梯)前增加主动查询指令:
json{"command": "STATUS_QUERY", "elevator_id": "DAIC-001"}
- 异常处理
- 超时重试:若未收到状态反馈,3次重试后切换备用电梯。
- 活体检测:若
occupant_status=1(有活体),暂停任务并上报。
异常处理机制
| 故障类型 | 应对策略 |
|---|---|
| 网络中断 | 本地缓存指令,重连后批量提交 |
| 电梯故障(反馈非0) | 触发避让算法,自动切换备用电梯 |
| 指令超时 | 发布cmd: cancel_call并触发告警 |
五、典型应用场景
表格
| 场景 | 指令序列 |
|---|---|
| 机器人跨楼层配送 | 外呼电梯 → 开启门禁 → 进入轿厢 → 内召目标层 → 出梯关闭门禁 |
| 机器狗巡检 | 查询电梯空闲状态 → 外呼至目标层 → 实时监测门状态 → 进入后内召设备层 |
| 多机协同调度 | 动态分配电梯资源,响应时间500ms,支持20+设备并发 |
风险提示:
- 电梯平层精度需保证≤5mm,缝隙<30mm,避免AGV卡滞。
- 人机混用场景需制定操作规范(如划分机器人专用电梯)。
- 首次部署需通过AC 250V耐压测试,确保电气安全。
如需具体代码示例(如Python MQTT客户端实现),您可进一步提供需求细节让多奥协助您完成。

典型应用场景枚举与工程优化建议
| 应用场景 | 描述 | 技术挑战 | 解决方案 |
|---|---|---|---|
| 医院药品配送 AGV × 多电梯协同 | 多台 AGV 在门诊楼、住院部间穿梭送药,跨楼层频繁调用电梯 | 资源竞争激烈,响应延迟大 | 引入中央调度器统一分配电梯资源,优先级分级(急诊 > 日常) |
| 产业园区巡检机器人乘梯巡查 | 机器狗每日定时巡查各楼层消防通道、温湿度 | 如何判断电梯是否适合进入? | 综合 CargoStatus=2 且 DoorStatus=1 才允许驶入 |
| 智能制造工厂 AMR 上下立体仓库 | AMR 将物料从地面仓运往三楼组装线 | 负载大件物品,需确认轿厢空间 | 使用红外/激光传感器辅助判断“空载”,并与 CargoStatus 联动验证 |
| 写字楼夜间清洁机器人作业 | 清洁机器人夜间自动启动,逐层清扫 | 安全性要求高,不能与人共乘 | 设置策略:仅当 LivingBody=2 且非高峰时段才允许运行 |
-
跨楼层物流AGV
-
场景:医疗物资配送机器人从1楼药房至5楼病房
-
流程:
AGV呼梯 → 电梯抵达 → 红外避障确认 → 开门10秒 → AGV进入 → 关门升梯 → 到达后开门释放
-
-
安防巡逻机器狗
-
特殊处理:
Python
if door_status == "opened" and obstacle_detected(): publish("floorctrl/E01/emergency_stop") // 急停保护
-
-
AMR柔性产线
-
协议优化:采用
QoS=2确保关键指令(如急停)零丢失 -
数据压缩:二进制payload替代JSON(带宽降低40%)
-
术语说明
- AGV(Automated Guided Vehicle):自动导引车;
- AMR(Autonomous Mobile Robot):自主移动机器人;
- COP(Car Operating Panel):电梯轿厢操作盘(内召面板);
- DOP(Door Operating Panel):电梯门操作盘(外呼面板);
- CRC16:16 位循环冗余校验码(用于报文完整性校验)。





被折叠的 条评论
为什么被折叠?



