施昕昕,顾宇扬
(南京工程学院自动化学院, 江苏 南京 211167)
随着我国生产力水平的迅速提升,工业物联网融合了传感器、移动通信等技术,将具有感知和监控功能的各种传感器和控制器集成到工业生产过程中的各个方面,以实现产品质量的提升、产品成本的降低、产品生产效率的提高等,将传统的工业生产模式转变为智能化生产[1-2].工业物联网是信息技术和制造技术深度融合的产物[3],具有自动化、实时性、安全性、嵌入式和信息互通互联等特点[4].
在过去的工业生产环境中,生产系统庞大而复杂,生产设备数量多、种类多,靠人力管理不仅繁琐耗时、浪费人力资源,而且难以对所有工业设备的各项环境进行完整、准确的把控[5].因此,将工业物联网应用到工业领域能够很好地进行工业设备的监测和管理[6-7],能够对设备的运行环境、操作对象、数据等进行获取和分析[8-10],其核心思想是物体与互联网相连接,借助各种传感技术进行信息化、智能化的管理和控制[11].但是,大部分工厂工业设备等的自动数据采集仍面临着许多问题[12].
目前,在工业数据采集上,有Modbus、Profibus、Profinet、Ethernet IP等多种工业通信协议[13],各个厂商还会在已有的协议上加以改进,开发各种私有的工业协议,导致工业设备的通信协议标准、种类繁多,并且相互之间不兼容[14];由于现场控制网络的封闭性,维护人员无法远程获取设备的实时运行状态或对设备进行远程控制,造成了设备维护困难、成本高等问题[15].因此,基于工业物联网的设备数据采集和控制系统设计应用迫在眉睫.本文针对工业设备与服务端实时、高效、可靠的通信需求及对不同通信接口和不同通信协议的支持,基于MQTT协议构建工业物联网数据采集和控制系统.以工业物联网架构为参考,分析各项需求,设计基于MQTT协议的工业物联网平台.
1.1.1 设计需求
1) 业务需求.用户通过控制系统可实时了解工业设备的运行状态和运行数据,可实时设定运行参数或控制操作等,可接收设备的告警信息提示,实现设备管理、用户管理、操作记录查询等.通信终端可支持多种通信方式、多种通信协议,按照采样时间上传数据,接收服务端请求并控制设备.
2) 用户需求.系统用户分为管理员用户和操作者用户.操作者用户可修改自身账户,查看设备状态、设定设备参数、控制设备等,可使用工具解析数据;管理员用户具有操作者用户的全部功能,还可对设备进行增删等操作.
1.1.2 研究内容
基于MQTT协议的工业物联网数据采集和控制系统需要实现的内容主要包括:
1) 通信终端能够实现工业设备通信协议格式与JSON格式之间的转换,支持多种通信协议和通信接口;
2) 用户可以使用PC或移动设备访问工业设备数据采集和控制系统,实时监控工业设备、查看工业设备数据曲线等;
3) 管理员可以修改用户信息、分配权限等,具有相应权限的用户可以对工业设备进行控制、 参数设定等操作,用户可以使用相应工具来解析工业设备的历史数据.
本文的工业物联网数据采集和控制系统是基于浏览器/服务器(B/S)模式设计的,采用MQTT通信协议,主要由设备端、通信终端、服务端等组成,如图1、图2所示.
通信终端处理器采用ESP32模组将电源管理、功率放大器、滤波器等集于一体,只需极少的外围器件便可实现强大的处理功能和可靠的安全性能.此外,ESP32模组对MQTT协议和JSON格式处理有着很好的API支持,能够便捷地实现MQTT通信和JSON格式封装和解析.通信终端集成485、232等通信接口以支持不同接口的工业设备,具备网口和IPEX天线的Wi-Fi模块以适应不同的工业环境.
服务端采用Django框架和Vue框架.Django基于MVC模型利于程序的扩展和简化,提高程序的重复利用率.Vue的核心库只关注视图层,易于操作,便于与第三方库和既有项目整合.
图1 工业物联网数据采集系统总体架构
图2 控制系统总体架构
MQTT协议的实现通过发布/订阅模式,该模式将发送消息的客户端(发布者)与接收消息的客户端(订阅者)分离,二者没有直接联系,由代理来进行消息转发,将系统解耦.其优点在于能够以极少的代码和有限的带宽为连接远程设备提供实时可靠的消息服务.
通信终端与服务端之间数据交互格式采用JSON格式,与XML对象不同,JSON对象被分析为字符串数组,更利于机器的生成和解析,占用空间更小、数据交互时占用的带宽也更小.
通过该系统能够远程监控工业设备,系统中的图表、曲线等信息能够直观地反映工业设备运行情况,方便系统用户进行管理.
如图1所示,数据采集系统主要分为4种数据流:
1) 数据发送流,通信终端主动采集工业设备的相关数据,通过MQTT协议上传数据,由服务端接收并显示;
2) 设备控制流,服务端下发相关控制或设定参数请求,由通信终端接收并封装指令,发送给工业设备,完成相关操作并反馈操作结果;
3) 主动查询流,用户请求查询工业设备的历史数据,服务端从MySQL数据库读取数据并反馈给用户;
4) 协议控制流,服务端下发通信协议转换请求,由通信终端接收并转换至指定通信协议,并切换至相应通信接口,以实现与对应通信协议、通信接口的设备进行通信,并反馈操作结果.
通信终端作为服务端与设备端数据交互的桥梁,主要解决工业设备通信协议格式与服务端JSON格式不匹配的问题,负责工业设备通信协议解析和封装与JSON格式解析和封装,实现对工业设备的远程监控.通信终端功能图如图3所示.
图3 通信终端功能图
通信终端硬件主要包括ESP32模组、Wi-Fi模块、Ethernet模块、电源模块、通信接口转换模块、USB通信模块等.
通信终端软件功能流程图如图4所示.
图4 通信终端软件功能流程图
以某种高低温设备为例,数据结构设计如图5所示,具体实现流程如图6、图7所示.PRO_MSG结构体保存服务端的请求数据,包括终端ID,用于通信终端比对ID;Flag标志用于MQTT消息逻辑控制;COM_DATA结构体用于保存一些基本操作的数据;PGM_DATA结构体用于保存与程式相关操作的数据.通信终端根据该结构体中的数据实现对工业设备的控制和参数设定.JSON_DATA结构体保存上传服务端的数据,包括终端ID,便于服务端确定设备;数据类型便于服务端判断当前数据包的内容;普通数据结构体用于保存设备运行数据;程式数据结构体用于保存程式数据;设定数据结构体用于保存操作结果.通信终端根据JSON_DATA结构体中的数据,封装JSON数据,上传服务端.
图5 数据结构图
图6 通信终端采集上传数据流程图
图7 通信终端接收请求控制设备流程图
因为数据包中带有通信终端ID,所以在MQTT主题设计上无需明确具体的终端.通过/to_server主题发布工业设备数据;通过/to_server/config主题发布操作结果;通过/to_device主题接收服务端的请求.
通信终端与服务端数据交互的数据格式采用JSON格式,相比于其他格式,JSON格式更利于机器处理.通过ESP32模组提供的API能够便捷地实现JSON格式的封装和解析.
服务端主要解决与通信终端数据交互、数据入库、工业设备数据曲线显示等问题.负责显示设备运行状态、运行数据、数据曲线等,为用户提供设定参数、控制设备等操作接口,并存储工业设备的运行数据等.
服务端与通信终端数据交互主要分为两种,通过以下方式实现:
1) 服务端接收并显示数据,流程图如图8所示;
图8 服务端接收并显示数据流程图
2) 服务端下发控制指令,流程图如图9所示.
图9 服务端下发控制指令流程图
以某种高低温设备为例,设计过程为:
1) 设备管理数据表如表1所示,设备描述、所属实验室、制造商名称字段主要用于设备信息描述,便于用户查找相应设备,设备状态字段用于表示设备状态,分为运行、停止和故障;
表1 设备管理数据表
2) 临时数据表如表2所示,用于保存一定数量的设备数据,获取到新数据时,将新数据插入头部,并将末尾的数据删除,通过临时数据表,用户查看设备详情时,可立刻显示设备数据曲线,数据实时更新,避免图表空白的情况;
表2 临时数据表
3) 设备用户表如表3所示,主要保存用户与设备之间的权限关系;
表3 设备用户表
4) 历史数据表如表4所示,主要保存设备的数据信息;
表4 历史数据表
5) 用户管理表如表5所示,主要保存用户相关信息;
表5 用户管理表
6) 解析文件表如表6所示,主要保存设备历史数据文件中的各项数据,生成曲线图.
工业设备数据入库流程如图10所示.设备配置表中的字段包括设备ID、逻辑ID、采样频率、运行模式、温度、湿度等,当终端给服务端发送数据后,服务端到设备配置表中遍历查找终端ID.如果没有查到这个终端ID,说明该终端是首次连接,则创建新表;如果在设备配置表中找到该终端ID,则更新数据.
表6 解析文件表
图10 工业设备数据入库流程图
本文介绍了基于MQTT协议的工业物联网数据采集和控制系统,设计了通信终端的硬件电路、通信协议及JSON格式封装与解析步骤和采集工业设备数据及控制工业设备的操作流程等,设计并搭建了服务器和数据库,实现了一套完整的工业物联网数据采集和控制系统.通过该系统,能够获取工业设备的各项运行数据,并且能够远程控制工业设备的状态和设定工业设备的参数.该系统具有实时、稳定、准确等优点,解决了当前工业生产现场工业设备管理复杂、耗时等问题,极大降低了人力、物力、财力的消耗及生产安全问题产生的可能,同时本系统也为工业物联网远程监控提供了一种可以参考的解决方案.