基于Modbus与MQTT融合工业能耗网关系统设计

2019-07-25 01:44胡存骆德汉童怀
物联网技术 2019年4期
关键词:线程网关消息

胡存 骆德汉 童怀

摘 要:针对传统工业数据监控系统采集设备数量少、通信距离短、抗干扰性差、实时性差等问题,文中设计了一款基于Modbus和MQTT融合的工业能耗网关系统。该系统可以支持多个设备同时进行数据采集,集成度高。通过4G模块,采用无线方式支持远距离数据传输。通过Modbus协议和MQTT协议融合方式提高数据采集和传输效率,进一步提高系统实时性。采用线程池技术提高系统运行效率,支持多台设备并发采集。可在终端对设备进行反向控制,使系统更加智能化。经验证,系统运行稳定可靠,具有广阔的应用前景。

关键词:工业能耗;Modbus;JSON;MQTT;4G;线程池

中图分类号:TP393文献标识码:A文章编号:2095-1302(2019)04-00-06

0 引 言

随着“物联网+”的发展,物联网技术得到了广泛应用。物联网是指通过各种信息传感设备,实时采集任何需要监控、连接设备等信息,与互联网结合形成巨大的网络[1-2]。为了构造节能环保的工业系统,该系统基于Modbus与MQTT融合的方式,通过4G模块,采用无线方式对工业用电量、温度、压力等能耗设备进行远程监控。

本文设计了一种Modbus和MQTT融合的工业能耗网关系统。系统采用Modbus与MQTT融合的方式,使用Modbus线程采集底层数据,MQTT线程与服务器负责接收和发送数据,采集与传输分别使用不同线程,充分利用CPU,从总体上提高智能网关采集和传输速度。通过JSON模块解析不同设备的名称,进入线程池,一台设备占用一条线程,支持多台设备同时采集,提高系统并发性和集成度。支持反向控制,可以控制设备开关、设定温度值、设定压力等,提高系统的智能化水平。

1 系统总体架构设计

该网关系统由Modbus,JSON,MQTT模块组成,结构如图1所示。

(1)Modbus模块将网关系统通过Modbus RTU经RS 485总线接口或Modbus TCP经网口链接到工业设备的仪器和传感器,采集或控制电流、电压、温度、压力值等。

(2)JSON模块用来连通Modbus和MQTT模块,通过JSON解析函数,解析MQTT的msg消息,告知Modbus模块需要采集或控制设备的名称与对应协议点。JSON封装函数把Modbus模块采集的协议点数值封装的JSON格式数据包作为为MQTT模块传输进行的准备。

(3)MQTT模块通过MQTT接收Web端或APP端发送至服务器的订阅消息,将JSON格式数据包发送到终端设备。

2 Modbus协议

Modbus协议是工业通信的一种通用标准,是电子控制器领域的通用语言。控制器经由网络和机器设备进行通信[3],它制定了消息域格局和内容的公共格式。当在Modbus网络上通信时,此协议决定了每个控制器需要知道的设备地址,识别按地址发送的消息,决定要产生哪种行为。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。Modbus通用协议栈,协议数据单元由地址码、功能数据单元(由功能码和数据域组成)、校验码构成。Modbus协议帧如图2所示。

Modbus RTU采用异步串行传输,物理层为RS 485,数据链路层为Modbus的串行传输协议。Modbus RTU采用二进制表现形式与紧凑的数据结构在数据链路层上进CRC校验。Modbus RTU具备抗干扰性强、通信效率高等特点,应用广泛。

Modbus TCP结合了以太网物理网络和网络标准TCP/IP及以Modbus作为应用协议标准的数据表示方法。Modbus TCP报文被封装于以太网TCP/IP数据包中。Modbus TCP 利用IP地址寻址服务器,Modbus TCP协议在RTU协议基础上加一个MBAP报文头,由于TCP是基于可靠连接的服务,所以在Modbus TCP协议中没有CRC校验码。Modbus TCP具备抗干扰性强、远距离传输和稳定性好等优点。

该系统主要使用Modbus协议03和10功能码,对应可读取单个或多个保持寄存器和单个或多个写多个保持寄存器,对应网关采集和反向控制功能。

3 JSON

JSON(JavaScript Object Natation,JSON)作為一种轻量级数据交换格式,支持多种语言间的数据传输。目前很多应用程序服务器都基于JSON格式交互,方便实现多层应用架构[4]。

传统的数据采集网关多采用XML技术,该技术在Modbus数据解码方面难度较高,导致解析代码复杂,开发效率极低。该系统使用JSON数据格式,相比XML,JSON 更简单、灵活。通过传输数据量来看,同一份数据信息,使用XML描述和JSON描述时,JSON比XML更加高效。XML的子节点、父节点解析难度高,而JSON的解析难度低。这一点JSON较XML优势明显,有利于在代码开发阶段提高开发效率,提高数据传输效率。

4 MQTT协议

MQTT是一种基于主题发布/订阅的轻量级消息传输协议,以其开销小、及时性好、可靠性高等优势在物联网系统中得到广泛应用[6]。它专为M2M通信设计,由IBM开发,覆盖全平台,可连接绝大部分联网设备和外部设备[7]。

客户端通过订阅相应消息主题来接收其他客户端推送的消息,服务器作为订阅方和发布方的中介,接收客户端(发布方)发布的消息,根据订阅主题把消息推送到相应的客户端(订阅方)[8-9]。MQTT结构如图3所示。

图3 MQTT结构图

传统系统采集传输使用HTTP协议。对比MQTT协议和HTTP协议数据包长度,发现MQTT的固定头长度仅为2 B,协议简洁,可降低网络流量。HTTP协议使用轮循方式,导致系统的实时性较差,通信效率低下。

在消息推送方案上,HTTP协议开发消息推送非常繁琐,无论是iOS(苹果)还是Android(安卓),如果采用“拉取”推送方式,则程序中信息的更新通知需要持续检查,获取消息时需给服务器发送拉取请求[10],信息无法直接通过服务器主动发送给用户,交互多次增加了移动资源开销[11]。MQTT还支持三个级别的QoS,无需自己写确认重传机制。此外,为保障通信安全,MQTT也会采用SSL/TLS,以提高数据的安全性。

5 系统硬件设计

系统硬件结构如图4所示。

图4 系统硬件结构图

该系统主要的核心处理器为TQ2416 ARM芯片,2416主频400 MHz,单位功耗比2440小,且CPU支持4个串口。

RS 485是一种通信接口,用以接收Modbus协议传输的数据。RS 485采用平衡发送和差分接收接口标准。发送端将电平信号转换成差分信号,经A,B两端通过双绞线传输,到接收端再将差分信号转换成电平信号。

4G模块采用SIM7100C模块,通过TCP/IP把数据上传到服务器或用来接收服务器数据。

5.1 系统软件设计

物联网关系统主流程:当物联网关MQTT与服务器建立连接后,网关订阅Web端或APP端发布的消息,通过JSON模块解析判断Modbus协议方式。协议地址的10万位为相应的功能码类型标志,判断采集或控制读取相对应寄存器地址或将数值写入相对应的寄存器地址。将采回数值与协议点封装JSON格式数据包通过MQTT发布函数将消息发送到客户端。系统软件流程如图5所示。

5.2 系统测试与分析

通过MQTT.fx模拟Web端或APP端发送和接收数据。通过Modbus Slave模拟一台工业能耗设备,设备参数用不同的协议点标识,如中央空调主电机用电量、冷疑器出水温度、蒸发器进水温度对应协议点为400001,400001,400003。协议地址以10万位为相应的功能码类型,标志为“4”表示数据采集功能,标志为“5”则表示控制功能。

5.2.1 MQTT.fx基本功能介绍

(1)按工具条的设置按钮进行本地测试,连接到本地服务器192.168.16.212。MQTT.fx链接配置如图7所示。

(2)点击下级菜单项 Subscribe,在下拉框中选择或输入自己希望的主题,比如系统使用/EOSLink004,通过按其右侧按钮Subscribe来订阅消息,点击下级菜单项 Publish,在下拉框中选择或者输入自己发布的主题,如/EOSLink004/5D52964D8081,再点击其右侧的按钮Publish发布主题消息。MQTT.fx功能板如图8所示。

5.2.2 Modbus Slave功能

Slave ID代表从设备ID,Address代表协议点起始地址为400000,Quantity代表协议点数量。Modbus Slave连接配置如图9所示。

5.2.3 数据采集具体测试流程

用MQTT.fx的Publish功能来仿真服务器向网关系统发送的消息,/EOSLink004/5D52964D8081是MQTT服务器订阅的主题,5D52964D8081是网关设备ID,400000~400031是协议点,需采集32个协议点的数据。MQTT.fx模拟服务器发送数据界面如图10所示。

用MQTT.fx的Subscribe功能来仿真服务器接收智能网关系统发送的消息:采集到400000~400031协议地址對应的数值,采用十六进制采集方式,协议地址40000对应的数值30以十六进制方式采集,把30转化成十进制,数值为48,与Modbus Slave协议地址400000中的数值对应。Modbus Slave模拟设备数据界面如图11所示。

5.2.4 反向控制具体测试流程

用MQTT.fx的Publish功能来仿真服务器向智能网关系统发送的消息:/EOSLink004/5D52964D8081为消息主题,控制网关型号为5D52964D8081的设备,把协议点0地址的数值设置为56,之后将56转化成十六进制数值,为38。MQTT.fx发送数据界面如图12所示。采用功能10,组合协议点为500000。

5.2.5 关键技术和重要指标

(1)硬件层采集:具有RS 485接口和以太网接口,既适用于旧设备的485接口也适用于现代工业的以太网接口,使用SIM7100C 4G无线模块进行TCP/IP数据传输,提高传输距离以及系统的可移动性。

(2)传输格式:系统采用JSON格式进行数据交换,在数据格式、占用空间、解析速度方面都具备较好的优势,提高了传输速度和质量。

(3)软件设计:采用Modbus与MQTT融合的方式,数据采集和数据传输使用不同线程,以提高采集和传输效率。采用线程池技术,支持多台设备同时采集。MQTT替换传统HTTP协议,具有低功耗、低流量、简单高效等特点。

(4)智能化程度:系统具备远距离反向控制功能,通过Web端或APP端发送控制指令,可以开启、关闭工业设备或设定数值,从而实现智能化控制。

6 结 语

本文设计了一款新型Modbus与MQTT融合的工业能耗网关系统,可解决传统数据采集设备数量少、距离短、实时性差、效率低、通用性差等问题。在设备接口方面,不仅适用于传统工业的RS 485接口,也可以用网口采集数据。本系统不仅适用于工业能耗设备远程监控,还可以应用于农业、商业、校园设备数据远程监控。同时还能通过终端设备实现远程智能控制。经过测试系统与服务器链接验证,系统运行正常、稳定。

参 考 文 献

[1]董朝阳,赵俊华,文福拴,等.从智能电网到能源互联网:基本概念与研究框架[J].电力系统自动化,2014,38(15):1-11.

[2] CHANG M,ZHANG T.Fog and IoT:an overview of research opportunities[J].IEEE Internet of things journal,2016,3(6):854-864.

[3]范学佳,赵斌,衣淑娟,等.基于 Modbus 的寒地水稻育秧环境智能监控系统[J].农机化研究,2016(2):201-204.

[4]张涛,黄强,毛磊雅,等.一个基于JSON的对象序列化算法[J].计算机工程与应用,2007,43(15):98-100.

[5]张沪寅,屈乾松,胡瑞芸.基于 JSON 的数据交换模型[J].计算机工程与设计,2015,36(12):3380-3384.

[6]姚丹,谢雪松,杨建军.基于 MQTT 协议的物联网通信系统的研究与实现[J].信息通信,2016(3):33-35.

[7] MALONE T,GRANT K,TURBAK F,et al.Intelligent information sharing systems comm.[J].ACM,1987,30(5):390-402.

[8]任亨.基于MQTT协议的消息推送服务器[J].计算机系统应用,2014,23(3):77-82.

[9]马跃,孙翱,贾军营,等.MQTT协议在移动互联网即时通信中的应用[J].计算机系统应用,2016,25(3):124-135

[10]刘军霞,熊选东,付建丹.基于发布/订阅的推模式服务调用[J].计算机系统应用,2012(12):196-199.

[11]钟良骥,桂学勤,廖海斌,等.基于 MQTT 的物联网平台设计与分析[J].郧阳师范高等专科学校学报,2014,34(6):52-55.

猜你喜欢
线程网关消息
浅谈linux多线程协作
应对气候变化需要打通“网关”
消息
消息
消息
一种实时高效的伺服控制网关设计
基于Zigbee与TCP的物联网网关设计
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进