AGV机器人、AMR和机器狗乘梯系统流程与协议说明


基于多奥AGV(自动导引车)、AMR(自主移动机器人)和机器狗乘梯系统通过集成梯控和电梯门禁技术,实现自动化设备的无人化乘梯。核心功能包括自主呼梯、楼层切换等,支持MQTT、RS-485等通信协议。系统采用"感知-控制-通信"架构:感知层(传感器检测电梯状态)、控制层(AGV决策单元)和通信层(协议传输命令)。


import paho.mqtt.client as mqtt
import time

# MQTT连接参数
MQTT_BROKER = "mqtt.example.com"
MQTT_PORT = 1883
MQTT_TOPIC = "elevator/control"

# 电梯控制指令
DAIC_DT_LW = "DAIC-DT-LW"  # 外呼联网控制器
DAIC_DT_ZT = "DAIC-DT-ZT"  # 读电梯运行状态
DAIC_DT_MB = "DAIC-DT-MB"  # 内呼点亮楼层按键
DAIC_TK_MB = "DAIC-TK-MB"  # 内呼点亮楼层按键
DAIC_TK_ZT = "DAIC-TK-ZT"  # 读电梯运行状态

# 机器人状态
ROBOT_STATE = {
    "floor": 1,  # 当前楼层
    "target_floor": 5,  # 目标楼层
    "direction": "UP",  # 上行/下行
    "in_elevator": False  # 是否在电梯内
}

# MQTT回调函数
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe(MQTT_TOPIC)

def on_message(client, userdata, msg):
    payload = msg.payload.decode()
    if payload == "ELEVATOR_STATUS":
        handle_elevator_status()

# 发送MQTT消息
def send_mqtt_command(command, data):
    client.publish(MQTT_TOPIC, f"{command},{data}")

# 电梯状态处理
def handle_elevator_status():
    # 模拟电梯状态数据
    elevator_status = {
        "floor": 3,  # 当前楼层
        "direction": "UP",  # 运行方向
        "door_open": True  # 门开到位
    }
    
    if elevator_status["floor"] == ROBOT_STATE["floor"] and elevator_status["direction"] == ROBOT_STATE["direction"] and elevator_status["door_open"]:
        if not ROBOT_STATE["in_elevator"]:
            enter_elevator()
        else:
            exit_elevator()

# 进入电梯
def enter_elevator():
    print("Entering elevator...")
    ROBOT_STATE["in_elevator"] = True
    while True:
        send_mqtt_command(DAIC_DT_MB, "1")  # 点亮开门按钮
        time.sleep(1)
        if check_robot_in_elevator():
            break
    send_mqtt_command(DAIC_TK_MB, str(ROBOT_STATE["target_floor"]))  # 点亮目标楼层按键

# 出电梯
def exit_elevator():
    print("Exiting elevator...")
    while True:
        send_mqtt_command(DAIC_DT_MB, "1")  # 点亮开门按钮
        time.sleep(1)
        if check_robot_out_elevator():
            break

# 检测机器人是否进入电梯
def check_robot_in_elevator():
    # 模拟检测逻辑
    return True

# 检测机器人是否出电梯
def check_robot_out_elevator():
    # 模拟检测逻辑
    return True

# 主流程
def main():
    global client
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect(MQTT_BROKER, MQTT_PORT, 60)
    client.loop_start()
    
    # 外呼电梯
    send_mqtt_command(DAIC_DT_LW, f"{ROBOT_STATE['floor']},{ROBOT_STATE['direction']}")
    
    while True:
        send_mqtt_command(DAIC_DT_ZT, "1")  # 读电梯运行状态
        time.sleep(0.03)  # 31~50ms间隔

if __name__ == "__main__":
    main()
 

下面我将逐步解释您关心的内容,包括乘梯流程、协议情况、内呼外呼标志及Type类型的含义。回答基于标准工业实现和引用信息,确保真实可靠。


1. 调用电梯内召和外呼的乘梯流程说明
乘梯流程分为外呼(电梯外部呼叫)和内召(电梯内部呼叫)两个阶段,AGV/AMR/机器狗通过控制系统模拟人类行为,实现自主操作。整体流程如下:
• 外呼流程(外部呼叫电梯):
1. AGV到达电梯口:AGV通过激光雷达或视觉传感器检测电梯位置,并停在呼叫区域。

{
    "运行方向": "已停止(出电梯场景主要关注此状态)",
    "当前楼层": 8,
    "开门状态": "已开到位/未开到位"
}


2. 发送外呼命令:AGV的控制单元通过通信协议(如MQTT)向电梯控制系统发送外呼请求。请求包括目标楼层(AGV当前所在楼层)和呼叫类型(例如上行或下行)。

{
    "运行方向": "上行/下行",
    "当前楼层": 5,
    "开门状态": "已开到位/未开到位"
}


3. 电梯响应:电梯控制系统接收命令后,模拟按下外部按钮,电梯移动到AGV所在楼层。

{
    "内呼,外呼标志": 0,
    "Type类型": 0 
}

- **说明**:
    - “内呼,外呼标志”为 0,表示内呼。
    - “Type类型”为 0,表示进入梯控状态,即通过正常授权方式(如本流程设定场景)使用电梯操作开门按钮。


4. 门禁验证:电梯门打开前,系统通过门禁模块验证AGV权限(如RFID或二维码认证),确保安全进入。
5. AGV进入电梯:验证通过后,电梯门打开,AGV驶入轿厢。此过程需确保电梯处于无休眠状态,避免延迟。

{
    "内呼,外呼标志": 0,
    "Type类型": 0,
    "目标楼层": 8 
}

- **说明**:
    - “内呼,外呼标志”为 0,表示内呼。
    - “Type类型”为 0,表示进入梯控状态,进行正常的楼层选择操作。
    - “目标楼层”为机器人要前往的楼层编号。


• 内召流程(内部呼叫目标楼层):
1. AGV在电梯内部定位:AGV进入轿厢后,使用内部传感器确认位置。
2. 发送内召命令:AGV控制单元发送内召请求,指定目标楼层(如通过MQTT协议)。请求中包含楼层号和呼叫标志(内呼标志)。

{
  "cmd_id": 123456, // 响应对应的请求ID
  "timestamp": 1672531200050,
  "status": {
    "current_floor": 5,
    "door_status": 1, // 0=未知,1=开门到位,2=正在开关门,3=关门到位
    "direction": 2,   // 0=未知,1=停止,2=上行,3=下行
    "running_mode": 0 // 0=正常,1=消防,2=检修...
  }
}


3. 电梯执行指令:电梯控制系统处理请求,模拟按下内部楼层按钮,启动运行到目标楼层。
4. 到达目标楼层:电梯停止后,门禁系统再次验证AGV权限,门打开。

内容 字节 数据说明
内呼/外呼标志 1 0=内呼,1=外呼
Type类型 1 0=进入梯控状态(需认证)

1=退出梯控状态(免认证)

2=强制接管(禁用按键)


5. AGV退出电梯:AGV驶出轿厢,完成乘梯。系统支持楼层切换和特殊场景处理,如多AGV排队或紧急中断。
整个流程强调电气隔离(避免干扰电梯原生系统)和实时通信,确保高效安全。典型耗时:外呼5-10秒,内召及运行取决于楼层高度。

{
  "cmd_id": 123456, // 响应对应的请求ID
  "timestamp": 1672531200050,
  "status": {
    "current_floor": 5,
    "door_status": 1, // 0=未知,1=开门到位,2=正在开关门,3=关门到位
    "direction": 2,   // 0=未知,1=停止,2=上行,3=下行
    "running_mode": 0 // 0=正常,1=消防,2=检修...
  }
}


2. MQTT等相关协议情况
系统使用MQTT(Message Queuing Telemetry Transport)作为核心通信协议,辅以RS-485等传统协议,实现AGV、电梯控制系统和门禁模块之间的数据传输。以下是协议相关细节:
• MQTT协议角色:
◦ 作用:MQTT是一种轻量级发布/订阅协议,专为IoT设备设计。在乘梯系统中:
■ AGV作为“发布者”(Publisher),发送呼梯命令(如外呼或内召)。
■ 电梯控制系统作为“订阅者”(Subscriber),接收并执行命令。
■ MQTT代理(Broker)居中协调,确保消息可靠传输,支持低带宽环境。
◦ 优势:低延迟(毫秒级响应)、支持QoS(服务质量等级,如确保消息必达)、易于扩展至其他门控设备(如闸机)。
◦ 消息格式:通常使用JSON或自定义二进制格式。例如,一个外呼命令的MQTT消息可能如下:
    
      
        json

      
      
        {
  "device_id": "AGV001",
  "command": "call_external",
  "floor": 3,
  "direction": "up",
  "timestamp": "2023-10-05T14:30:00Z"
}

        
      
      
    
  • 其他协议:
◦ RS-485:常用于近距离有线连接(如电梯控制器内部),提供稳定但带宽较低的数据传输。在系统中,RS-485可能用于电梯状态反馈(如门开关信号)。
◦ 协议选择:实施时需根据电梯型号定制协议。MQTT适合无线场景,RS-485用于改造旧电梯。系统支持多协议集成,通过网关转换数据1。
• 关键要求:
◦ 通信必须可靠:使用MQTT QoS Level 1或2确保命令不丢失。
◦ 安全性:通过TLS加密MQTT通道,防止未授权访问。
◦ 实时性:AGV需持续监听电梯状态主题(如 elevator/status),处理事件如门开/关。

其他协议适配要点

协议类型 适配配置要点 适用场景
TCP 梯控作服务器(端口 30001),支持主从机互换 网络稳定的智慧楼宇、工厂
RS-485 9600bps、8 数据位、无校验,A/B 线不可反接,双工通信 短距离、抗干扰需求场景
Modbus TCP 支持 03(读寄存器)、06(写单寄存器)命令,梯控为从机 工业物联网集成场景
LoRa 点对点传输,延迟 < 50ms,作为备用通信链路 信号不稳定的大型园区


3. 内呼外呼标志及TYPE类型的含义
在通信协议中,内呼外呼标志和Type类型是命令的关键字段,用于区分呼叫类型和参数。这些定义基于标准电梯控制协议(如CANopen或自定义MQTT主题):
• 内呼外呼标志:
◦ 外呼标志(Call External Flag):标识电梯外部呼叫请求。通常是一个布尔值或枚举字段。

{
    "内呼,外呼标志": 1,
    "Type类型": 0 
}

- **说明**:
    - “内呼,外呼标志”为 1,表示外呼。
    - “Type类型”为 0,表示进入梯控状态(此处外呼场景下该字段主要按格式要求发送,实际意义可结合项目具体逻辑调整,若项目无特殊要求,保持此默认值即可)。


■ 例如:在MQTT消息中,"call_type": "external" 或 "is_external": true。
■ 含义:当AGV在电梯外时发送,触发电梯移动到当前楼层。
◦ 内呼标志(Call Internal Flag):标识电梯内部呼叫请求。
■ 例如:"call_type": "internal" 或 "is_internal": true。
■ 含义:当AGV在电梯内部时发送,指定目标楼层。
◦ 作用:这些标志确保控制系统正确解析命令,避免冲突(如同时处理多个AGV请求)。在系统设计中,标志位通常占用1-2字节,以优化传输效率。
• Type类型(Type Field):
◦ 定义:Type字段指定呼叫的具体属性,如方向、优先级或场景类型。它是一个枚举或字符串值,扩展标志的含义。
◦ 常见Type值:
■ "direction":呼叫方向,例如 "up"(上行)、"down"(下行)或 "both"(双向)。用于外呼时优化电梯调度。
■ "floor":目标楼层号(整数),在内呼中必填。
■ "priority":请求优先级,例如 "high"(紧急任务)或 "normal",影响电梯响应顺序。
■ "scenario":特殊场景类型,例如 "multi_agv"(多AGV协同)或 "emergency_stop"(紧急停止),支持引用中提到的特殊处理。
◦ 示例:一个完整的内呼命令MQTT消息:
    
      
        json

      
      
        {
  "command": "call",
  "call_type": "internal",
  "type": {
    "floor": 5,
    "direction": "none", // 内呼通常不需方向
    "priority": "normal"
  },
  "device_id": "AMR002"
}

        
      
      
    
  ◦ 重要性:Type类型实现灵活控制,允许系统适应不同场景(如机器狗的小型电梯或AMR的楼层切换)。在协议中,Type字段的长度和值域需在实施前与电梯厂商确认。
总结
AGV/AMR/机器狗乘梯系统通过MQTT等协议实现高效呼梯,核心在于外呼(呼叫电梯到当前位置)和内召(指定目标楼层)的自动化流程。内呼外呼标志和Type类型作为协议关键字段,确保命令精准执行。实际部署时,建议联系技术支持进行电梯协议适配和定制化测试。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐