虹科HiveMQ MQTT代理助力AGV小车与控制系统之间实现通信
前言
本案例主要描述AGV小车和控制系统之间的通信过程,通过VDA 5050标准接口、MQTT通信协议和虹科HiveMQ实现AGV小车和控制系统之间指令和状态信息的通信。
VDA 5050是一种AGV小车与控制系统之间的标准通信接口,旨在简化AGV小车与现有控制系统的连接,以及允许在同一工作环境中并行操作来自不同制造商的AGV小车。
应用挑战
MQTT已成为连接设备和AGV小车的物联网标准,而且市场上已经有许多MQTT解决方案。除了支持MQTT协议之外,运行安全稳定的系统还需要其他关键功能。在实现AGV小车与控制系统之间的通信时,面临的挑战主要有以下几点:
(1)MQTT解决方案支持所有MQTT 5功能,VDA规范中描述的几个与数据相关的特性可以通过MQTT 5完美描述。
(2)MQTT解决方案支持适合大多数应用场景的安全机制。
(3)为了在不停机的情况下支持系统更改,MQTT解决方案需要高度可用,并支持滚动升级和迁移场景。
(4)MQTT解决方案具有伸缩性,能够支持越来越多的AGV小车。
(5)MQTT Broker必须可扩展,可以通过“即插即用”集成其他系统或添加业务功能。
(6)数据格式由VDA指定,并应在发布前进行验证,以使解决方案更加强大和安全。
(7)在生产环境中,MQTT解决方案能够集中监控和跟踪特定客户端、主题或消息。
方案介绍
1. 系统框架
下图所示是本案例的系统框架。在外部,HiveMQ Broker作为一个逻辑单元运行,在内部,则作为集群节点运行。HiveMQ Broker 使用用于身份验证和授权的安全扩展、用于JSON有效负载验证的扩展以及用于跟踪和监控的扩展。指标、事件日志以及其他日志信息以 JMX 格式提供,可以集中监控。
作为主要用例,控制系统(CS)客户端向AGV小车发送信息,并消费AGV小车的相关状态或可能的错误信息。控制系统(CS)的数据以基本配置和每辆AGV小车的设备配置形式提供,而且使用的JSON格式可以在JSON Scheme中定义。
2. 方案简介
HiveMQ是一个企业级的MQTT Broker,专门为物联网应用场景的业务需求量身定制。HiveMQ企业版能够保证数据在物联网设备之间快速、高效和可靠的传输。此外,HiveMQ支持MQTT 3和MQTT 5,也支持混合版本的应用场景。同时,HiveMQ提供了一个免费的开源扩展SDK。
HiveMQ扩展框架提供了一个开放的API,开发人员可以创建适合其特定基础设施的自定义扩展,而且扩展框架可用于使用自定义业务逻辑来扩展HiveMQ,而且几乎可以将任何系统集成到HiveMQ。其主要性能如下:
稳定性:
HiveMQ中集群的设置使来自客户端的消息和数据均匀分布在所有节点上,集群中数据的复制应根据节点数量进行配置,而且所有数据至少复制一次。
可扩展性:
HiveMQ MQTT Broker集群由几个单独的HiveMQ节点组成。由于要处理的MQTT消息数量、保留消息、客户端连接率、排队消息以及其他可能导致单个代理过载的操作,每个节点在任何给定时间都可能经历不同的压力水平。
HiveMQ提供内置的集群过载保护,每个HiveMQ集群节点都能够降低来自MQTT客户端传入消息的速率,防止出现集群过载。这种机制显著提高了HiveMQ集群的弹性,如果HiveMQ集群遇到过载情况,单个MQTT客户端可能会受到限制。如果使用集群过载保护机制,HiveMQ能够从压力情况(行为不良的客户端或DDOS攻击)中恢复,而不会导致所有其他MQTT客户端的服务明显下降。
高性能:
HiveMQ是一个高度可扩展的企业级MQTT Broker,旨在实现最低的延迟和非常高的吞吐量。
兼容性:
HiveMQ可以安装在任何环境中,例如虚拟机,虚拟机上的Docker,亚马逊、Azure或谷歌等云环境,以及Linux系统的裸机。同时,它能够与Kubernetes等集群管理系统或 OpenShift等应用平台完美配合。
监控、日志记录、MQTT 跟踪:
HiveMQ提供一个控制中心来监控MQTT Broker行为并提供了一组基本指标。操作员还可以查看特定MQTT客户端的状态,并在特定客户端和Broker之间设置消息的跟踪记录,能够有效地对已部署的系统进行故障排除。
HiveMQ日志系统使用标准日志框架,能够以细粒度的方式配置日志文件。所有与客户端相关的MQTT事件都记录在对应的事件日志文件中,而且HiveMQ日志可以流式传输到中央日志系统。
HiveMQ控制中心主要用于人工监控系统,尤其是MQTT消息吞吐量、MQTT消息丢失的特定错误类型和跟踪日志。同时,控制中心只能从受信任的IP访问,用户可以在企业安全扩展的使用范围内定义特定的访问角色。
企业安全扩展:
HiveMQ企业安全扩展可用于身份验证和授权,使用不同来源的外部身份验证和授权数据来对MQTT客户端进行身份验证和授权。
在 HiveMQ企业安全扩展中,用户可以定义领域以将其服务器划分为受保护的区域,每个区域可以拥有自己的身份验证和授权方案。主要功能如下:
①为用户名和密码、OAUTH 2.0 (JWT)、LDAP、SQL 数据库和 x.509 客户端证书提供了安全集成模式;
②可用于RBAC到HiveMQ控制中心;
③容易切换身份验证变体,因为不同的客户端的不同变体可以同时使用;
④身份验证机制可以不同于授权机制,例如,可以使用LDAP进行身份验证,并使用外部RBAC系统进行授权。
3. 通信过程
在AGV小车指令和状态信息交换的应用场景下,主题结构如下所示。控制系统客户端使用“+”通配符模式订阅占位符,并且可以发布到每个AGV小车客户端的指令主题。AGV小车客户端只有自己主题路径的发布/订阅权限,该路径由接口名称、版本、制造商和序列号等关键信息指定。
在指令和状态信息通信过程中,每个主题都从一个子主题开始,用动态占位符分隔不同的通信设备。子主题order和orderState用于信息交换,主题deviceState用于当AGV小车处于在线和离线状态时获取信息,以处理错误情况并在特定情况下初始化设备。
每个AGV小车订阅他们各自的指令主题,并发布信息到对应的指令状态主题,当AGV小车客户端消费指令信息并处理指令或部分指令后,必须将相应的指令状态发布到orderState主题上。同时,控制系统可以订阅所有AGV小车指令状态和设备状态主题以此获取AGV小车的相关信息。
AGV小车客户端可以通过Broker或者客户端操作来断开连接。如果AGV小车客户端通过断开自身而脱机,该状态也应在控制系统中确定,而且AGV小车都应将状态为“OFF”的保留消息发送到deviceState主题。
为了从AGV小车获取设备状态,每个AGV小车客户端可以定义一个最后的遗嘱保留消息,并在连接期间设置“Will Publish”。如果AGV小车客户端下线,则向指定主题发送“Will”消息。同时,每个AGV小车客户端都可以向deviceState主题发布消息以此表明其在线状态。此外,使用MQTT 5可以在发送遗嘱消息时配置延迟,适用于设备短暂中断且没有影响的情况。而且也可以在Broker和客户端上配置Keepalive。
总结
实现AGV小车和控制系统之间的通讯所面临的挑战可以通过MQTT 5和HiveMQ来实现。HiveMQ能够提供运行安全稳定系统所需的关键功能,MQTT 5可以完美地描述特定格式及其验证等数据相关功能以及元数据的使用,而且HiveMQ支持混合场景中MQTT 5和MQTT 3客户端。
此外,安全性是一个非常重要的关键特性,如果要将不同的制造商集成到一个控制系统中,则需要使用支持不同变体安全性的解决方案。HiveMQ企业安全扩展可以使用不同来源的外部身份验证和授权数据来对MQTT客户端进行身份验证和授权。
如果需要在不停机的情况下进行系统更改,则解决方案必须具有高度可用性,而且支持滚动升级和迁移方案。HiveMQ具有高度可扩展性,能够支持越来越多的AGV小车。同时,HiveMQ 能够提供一个控制中心,用于监视和跟踪生产环境中特定客户端、主题或消息。
为了集成其他系统,例如中央日志系统或添加任何业务功能,可以通过扩展系统来扩展 HiveMQ,而且大量的开源解决方案和标准解决方案已经可用。在Open HiveMQ扩展API的帮助下,每个特定业务的解决方案都可以实现。将HiveMQ和MQTT 5结合起来实现VDA 5050用例将是一个完美的解决方案。