基于MQTT协议的洗选厂机电设备振动检测的设计
2020-03-27马强,李燕
马 强,李 燕
(华北科技学院 电子信息工程学院,北京 东燕郊 065201)
0 引言
由于人的感官以及简单的仪表工具检验不准确,时间不连续等问题,选煤机械设备经常出现故障检修不及时的情况,这大大降低了工厂的生产效率。我国机械设备点检系统研究起步较晚,煤矿机电设备振动监测更是少之又少。传统的设备点检是工作人员携带设备检修记录本逐一对设备隐患进行排查,整个过程费时又费力,由于人感官的局限性,检验结果准确度不高。
针对传统检验设备振动是否异常的局限性,多位专家学者对设备振动检测提出了改进方案。黄峰亮[1]等设计了基于无线传感器网络的机械振动监测终端,仿真结果表明,该系统振动监测效果较为理想。汤宝平[2]等采用机械振动VSNs最小二乘发射功率自适应控制方法降低了机械振动无线传感器节点的传输功耗。邵奇可[3]等提出了一种面向WSN的自适应模糊功率控制算法DAFPC,该算法提高了信号的网络生存空间。陈钊[4]等分析了时域和频域两种信号分析方法,提出了一种基于时域滤波算法的振动信号有效值计算的修正研究方法。
随着工业互联网技术和无线网络通信技术的迅速发展,智能制造产业对远程智能化控制工业设备的开发和应用不断加大力度,使得对工业嵌入式设备和PC端之间相互通信提出了更高的要求,如果采用原始的Socket网络通信,并不能保障数据通信可以准确到达接收方,同时数据的可靠性和实时性也会有一定的影响。MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡[5]。
综上所述,针对洗煤厂设备振动检测不准确,振动异常信息不能及时获取等诸多问题,基于MQTT协议,使用Python编程语言设计了机械设备振动异常信息传输的客户端和发送端,便于收集振动信息,实现远程消息推送,提高工作人员的工作效率。
1 系统结构与功能
1.1 MQTT协议
MQTT(MessageQueuing Telemetry Transport,消息队列遥测传输)是ISO标准下一种基于发布/订阅(Publish/Subscribe)范式的轻量级消息协议。该协议是在TCP/IP协议基础上构建的,由IBM公司在1999年发布。MQTT最大的优点是可以用极其少的代码和有限的带宽,为远程终端设备提供实时可靠的消息服务。正是因为轻巧、开放、简单、规范,易于实现等这些特点,使MQTT协议在受限的环境里实现机器设备与远程控制端的无线通信领域里有着较为广泛的应用。
MQTT协议相当于中间人,broker,客户端的发送端将消息发送给中间人,中间人再把消息发给订阅端。消息传达的条件是发送主题与订阅主题匹配,比如订阅方主题是/data/#,发送方的主题设置为/data/msg,/data/alarm,/data/xxx,订阅方只要和发送方连接的是同一个服务器地址并且订阅了客户端发送的Toptic,则可以接收到来自客户端发送的消息内容,如图1所示。
图1 MQTT协议机制
1.2 MQTT协议控制报文
在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(Payload)三部分构成。MQTT数据包结构如下:
(1) 固定头。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
(2) 可变头。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
(3) 消息体。存在于部分MQTT数据包中,表示客户端收到的具体内容[7]。
1.3 服务器搭建软件
EMQ(Erlang/Enterprise/Elastic MQTT Broker)是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。EMQ提供了一个后端Web控制台,用户可通过 Web 控制台,查看服务器运行状态、统计数据、客户端(Client)、会话(Session)、主题(Topic)、订阅(Subscription)、插件(Plugin)。如果EMQ安装在本机,则在浏览器打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”,进入EMQ管理控制台。
远程管理智能化系统是一套物联网系统,其主要有四部分构成:
① 振动传感器;
② 带有WIFI模块的STM32F407GTZ6最小系统;
③ MQTT公共云服务器;
④ 用户终端。
2 振动监测系统硬件构成
振动传感器使用的是G500,该传感器的量程为0~20 mm/s,输出电流范围为4~20 mA,经信号调理电路转换为电压信号,进行AD转换和数据处理。
图2 振动传感器G500
基于高性能ARM Cortex-M4内核的STM32F407ZGT6微控制器,3.3 V供电,外接8M晶振,内核工作频率168 MHz。采用ESP8266模块进行串口WIFI通信。该平台只需极少的外围器件,即可实现稳定和安全的通信功能。通过其WIFI模块将信息传送至上位机,完成网络信息传输任务。
图3 系统硬件构成
3 系统程序设计实现
该系统的设计目的是在物联网云平台的支持下实现对洗选厂机电设备是否出现振动异常情况的监控。它主要由硬件设备和和网络组成。其中硬件设备负责采集由振动传感器获取的数据,数据包括振动异常的位置、频谱等信息,最终通过MQTT云服务器进行数据传输,该系统的主要程序流程图如图4所示。
3.1 系统订阅端设计实现
研读MQTT开源代码,使用Python设计发送端和订阅端。
订阅端只支持订阅主题。具体代码示例如下:
① 导入Python依赖包:
import sys
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
try:
import ttk
py3 = False
except ImportError:
import tkinter.ttk as ttk
py3 = True
import sender_support
② 定义订阅端GUI:
def vp_start_gui():
'''Starting point when module is the main routine.'''
global val,w,root
root = tk.Tk()
sender_support.set_Tk_var()
top = Toplevel1(root)
sender_support.init(root,top)
root.mainloop()
图4 订阅-发布消息流程图
③ 连接MQTT服务器:
self.Labelframe1.configure(text='''连接初始化''')
self.TLabel1.configure(text='''服务器地址''')
self.TLabel2.configure(text='''端口号''')
self.TLabel3.configure(text='''用户名''')
self.TLabel4.configure(text='''密码''')
self.TButton_connect.configure(text='''连接服务器''')
self.TLabel5.configure(text='''服务质量''')
self.Labelframe2.configure(text='''主题内容发送''')
self.TLabel6.configure(text='''发送主题''')
self.TButton_send.configure(text='''发送消息''')
self.TButton_disconnect.configure(text='''断开连接''')
3.2 系统发送端设计实现
发送端只支持发送主题。具体代码示例如下:
① 导入Python依赖包:
import sys
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
try:
import ttk
py3 = False
except ImportError:
import tkinter.ttk as ttk
py3 = True
import sender_support
② 定义发送端GUI:
def vp_start_gui():
'''Starting point when module is the main routine.'''
global val,w,root
root = tk.Tk()
sender_support.set_Tk_var()
top = Toplevel1 (root)
sender_support.init(root,top)
root.mainloop()
③ 连接MQTT服务器:
self.Labelframe1.configure(text='''连接初始化''')
self.TLabel1.configure(text='''服务器地址''')
self.TLabel2.configure(text='''端口号''')
self.TLabel3.configure(text='''用户名''')
self.TLabel4.configure(text='''密码''')
self.TButton_connect.configure(text='''连接服务器''')
self.TLabel5.configure(text='''服务质量''')
self.Labelframe2.configure(text='''主题内容发送''')
self.TLabel6.configure(text='''发送主题''')
self.TButton_send.configure(text='''发送消息''')
self.TButton_disconnect.configure(text='''断开连接''')
3.3 发送端和订阅端界面
引入shutil库,将发送端和订阅端GUI封装为exe可执行文件,这样就不需要Python所需的环境变量而直接进行MQTT服务器连接,进而收发消息。Sender.exe运行如图5所示。发送端为压滤机1,发送主题为“振动信息”。然后点击连接服务器。
图5 发送端GUI
订阅端GUI如下图6所示,用户名为工号为001的工作人员,订阅主题为“振动信息”。点击开始订阅,则订阅端可以实时接收来自发送端发送的振动信息。
当发送端监测到振动异常信息,将会把振动信息发送到MQTT服务器上,而订阅了主题为“振动信息”的订阅端将会在GUI界面上收到振动异常信息,如下图7所示。
4 结论
(1) 基于MQTT协议的远程智能振动监测系统具有耗电量小,传输可靠性高等特点,克服了HTTP协议单向、不适合受限网络、成本高等缺点。
(2) 利用Python语言编程设计的发送端和订阅端GUI且不需要配置Python所依赖的环境变量,可以远程实时监测机电设备是否出现运行异常的情况。
(3) 实验结果表明:该设计操作简单,通信可靠,一定程度上提高了工作人员的工作效率,避免因检修不及时造成的损失,具有较广的应用前景。
图6 订阅端GUI
图7 订阅端监测到振动异常信息