您好, 访客   登录/注册

基于MQTT协议的跨平台工业级物联网消息传输系统实现与设计

来源:用户上传      作者:

  摘  要: 随着物联网技术的发展和移动终端的普及,人们更加希望能够随时随地方便地获取信息和服务,这时就涉及到物联网硬件设备,windows客户端,手机端,web网页之间不同平台,不同语言的信息交互。本文结合MQTT,windows服务,winform程序设计技术,windows消息队列,串口通信,React Native等,提出了物聯网消息传输的一系列方法,实现了在云服务器资源较小的情况下,用户可以方便快捷地多平台访问和控制物联网硬件信息和设备,节约云服务器开支的同时,提高了数据访问效率。
  关键词: MQTT;物联网;跨平台;Winform程序
  中图分类号: TP311.1    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.08.045
  本文著录格式:孙海滨, 张敬超. 基于MQTT协议的跨平台工业级物联网消息传输系统实现与设计[J]. 软件,2020,41(08):168-171
  【Abstract】: With the development of Internet of things technology and the popularization of mobile terminals, people are more willing to obtain information and services conveniently anytime and anywhere. At this time, information interaction between hardware devices of Internet of things, Windows client, mobile terminal and web page on different platforms and in different languages is designed. Based MQTT, Windows services, winform programming technology, Windows message queue, serial communication, the React Native and so on, puts forward the Internet message transmission of a series of methods, realized in the case of a small cloud server resources, the user can more convenient platform to Internet access and control hardware and equipment information, saving cloud server costs at the same time, improve the efficiency of data access.
  【Key words】: MQTT; Internet of things; Cross-platform; Winform procedure
  0  引言
  随着互联网和移动手机技术的迅猛发展,物联网平台的概率广泛被提及[1],物联网平台是提供应用支撑、数据存储等能力的平台[2],其物联网技术已经应用到了各个场景,企业测量设备加入无线模块后,即可远程控制。但是在设备测量数据进行存储时,若将大量数据存入云服务器,就会带来一些问题。第一,当设备较多时,需要的云服务器的存储空间比较大,需要前期的投入较大。第二,企业数据都将存入购买的运营商的服务器,数据在传输和保存时容易遭到泄露,这就降低了企业自己的测量数据的保密性。所以大多数企业要求将数据存入到自己的本地数据库,同时要求可以手机,网站等不同方式来访问数据和控制设备。
  面对这些挑战,我们设计出了一套跨平台工业级物联网消息传输系统[3],企业员工可以在公司计算机的客户端上进行设备控制和数据查询,又可以通过外网使用手机或者网页访问保存在企业本地的数据,并控制设备,在保证了数据的安全性的同时,数据在传输过程中更加及时、高效、省流量、省资源。
  1  相关技术研究
  1.1  MQTT介绍
  MQTT是由IBM发布的一种轻量级跨平台消息传输协议[4],MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,利用极少的代码和带宽的为连接远程设备提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在物联网,小型设备应用,移动应用等方面有较广泛的应用。
  MQTT协议运行在TCP/IP或其他网络协议,提供有序、无损、双向连接[5]。其特点包括:
  使用的发布/订阅消息模式。提供了一对多消息分发机制,以实现与应用程序的解耦。对负载内容屏蔽的消息传输机制。
  本文利用MQTT协议实现Web端与服务端进行交互,实现移动端和网页端对物联网设备的控制。
  1.2  串口通信
  串口通信是指以位(bit)为单位发送方和接收字节,且遵守时序的一种通信方式。可以将接收处理器发送的并行字符转换为连续的串行数据流发送,反之也能将串行数据流发送给处理器。以传输方向进行区分通常分为三种模式:单工、半双工和全工[6]。
  本文利用无线模块转接串口,实现物联网设备与服务端的收发消息。
  1.3  Windows程序介绍
  Winform是基于微软公司开发的C#语言[7],利用.Net平台开发应用程序,具有Windows窗口开发的特点[8]。   本文利用windows程序开发服务端与企业客户端,服务端用于与物联网设备收发消息,客户端用于数据的解析以及数据库操作,且面向客户端用户进行数据展示以及操作。
  1.4  React Native介绍
  React Native(简称RN)是Facebook在2015年4月发布的一款移动应用开发框架,與FaceBook早先发布的UI框架React一样具有开源的特性。RN既能拥有原生native的交互体验,又能够保持web的高效与灵活,且能支持IOS和Android两大移动端平台等特点[9]。
  RN的优势在于具有较强扩展性,且可以适用Native的原生动画,避免了WebView的交互和性能问题。
  本文利用RN构建web客户端,为用户移动端和浏览器访问设备及其数据提供服务。
  2  系统架构
  整个跨平台工业级物联网消息传输系统提供给用户对物联网设备信息的查询和设置,帮助用户在企业局域网和外网上远程控制设备,用户通过手机客户端,电脑客户端和网址查询储存在企业本地服务器的测量设备,整个系统架构如图1所示。
  系统分为四部分,第一部分,物联网硬件设备,主要负责对企业需要数据统计,对要测量的物体进行测量和分析,将数据通过无线通信模块进行传输;第二部分,企业服务器终端,其中包括windows服务程序、Microsoft Message Queue服务器和监控物联网设备的客户端。windows服务程序其功能是接受第一部分物联网硬件设备发来的数据信息,并解析,将数据保存的企业服务器的数据库中[7]。Microsoft Message Queue服务器用于将服务信息和监控物联网设备的客户端的信息进行通信。第三部分,消息代理服务器(Message Broker)/Web Server,消息代理服务器主要负责实现MQTT协议的各项功能,提供发布/订阅管理功能、连接管理功能等,为客户端提供发布/取消发布、订阅/取消订阅等服务。通过消息代理各模块协调工作,形成了完整的发布/订阅消息推送系统。Web Server主要负责手机客户端的用户验证登录以及Web网页对信息管理的实现。第四部分移动终端和web网页层。主要提供给用户展示设备状态和信息的平台。
  MQTT消息处理架构,如图2所示。
  用户Tom(移动端/Web网页端)访问企业服务器,必须通过App的API服务器的登录验证,然后会获取到企业服务器订阅的factory topic信息。企业的服务器启动时会自动订阅factory topic。Tom只需通过MQTT代理服务器将控制信息publish到factory topic上,企业服务器就会接到Tom的控制信息。在Tom的控制信息里包含着Tom所订阅的Tom topic信息,企业服务器会将此信息保存并将查询结果publish到Tom的 topic,Tom的移动终端就会获得信息,以此完成移动端的远程通信[10]。
  这里用户和企业服务器是多对多的关系,即一个用户可以向多个企业服务器查询数据,企业服务器也可以同时服务多个用户,向用户返回数据。且在这样的情况下,对于云服务器(MQTT代理服务器)的负载十分小(因为只是转发数据,并没有将数据进行处理),所需要的数据存储空间小,大部分的计算负载和所有的测量数据存储都分载在不同企业的服务器上,提高了通信效率,保证了数据的安全性,降低了对于云服务器的硬件成本。
  3  系统流程
  3.1  企业服务器终端实现
  企业服务器终端主要用于接收、发送、解析和计算物联网设备的控制、数据指令,以此来监控物联网设备和储存设备测量的信息[11]。主要分为四个模块,模块一,其功能利用设备无线模块和计算机的串口接收和发送设备指令;模块二,连接MQTT,订阅企业的topic,对移动终端设备的远程控制和查询提供接口;模块三,利用消息队列(MSMQ)实现服务和windows客户端程序进程之间的通信,通信内容是从物联网设备接收到的指令代码;模块四,客户端对从服务器中接收到的物联网设备的指令代码进行解析显示,并进行控制和历史信息的查询工作。
  主要流程分为三部分:
  (1)当服务器启动时,Windows服务程序将自动启动,检查设备串口设备、Internet网络连接情况和数据库连接情况。并开启消息队列服务,等待企业电脑端的客户端指令。当检查网络连接正常的时候,服务程序会自动连接MQTT代理服务器,并订阅以自己编号为id的话题(topic)。
  (2)用户打开企业电脑端的客户端对设备进行操作时,服务程序会通过MSMQ消息队列接受客户端的指令[12],解析组装成物联网设备能够识别的十六进制指令后,通过串口发送给设备。设备接收指令后进行测量或者其他设置参数的操作,将返回的信息传回服务,服务通过串口接收十六进制指令根据通信协议进行解析,将数据保存到数据库中用于客户端和手机APP的查询或者将指令直接通过MSMQ转发给企业电脑端,用于实时显示设备情况[8]。
  (3)服务器订阅自己的MQTT topic话题,向Internet开放控制和查询设备的接口,用于解析手机和Web网页发来的用户控制指令。当服务接到移动终端用户通过MQTT发送给自己的指令时,服务将自动开启线程,对指令进行解析。分析出移动端的用户topic和指令类型,按照指令的类型进行操作,并将返回结果组装成JSON字符串,通过MQTT发布(publish)到移动终端用户的topic中。
  在通讯过程中,需要三种通讯协议。
  协议一:设备和服务之间的通讯协议。
  协议二:服务和windows客户端之间利用消息队列传输的通讯协议。
  协议三:服务和移动终端之间利用MQTT传输的通讯协议。   3.2  消息代理服务器的实现
  实现MQTT的代理服务器的工作,管理订阅账号,消息转发等。同时提供手机和网站查询和储存用户,企业的信息。通过网站来设置用户的管理权限,实现一个用户对应管理多个企业服务的关系。在手机端,用户可以根据自己的id查询到企业的服务订阅的MQTT topic,以此來通过手机进行对企业设备的远程控制。
  3.3  手机端实现
  手机客户端主要提供给用户登录的验证及自动登录的实现,对物联网设备的远程监控和历史数据的查询。
  主要分为三个模块:
  (1)登录模块,用户登录时输入正确的用户名和密码,当服务器验证通过后,会将该用户的token发送给手机客户端。客户端通过React Native的AsyncStorage将token保存在手机中。当用户下次开启软件时,将直接用token验证用户信息,不需要用户重新输入用户名和密码。
  (2)MQTT通信和指令解析,登录成功后,手机连接MQTT代理服务器,并订阅以用户id为topic的话题。同时获取服务器保存的该用户所管理的设备信息。当MQTT接收到发往这个topic的信息的时候,进行解析,得出数据信息在手机端进行展示。同时用户发送控制设备信息时,将用户、控制、设备、企业服务的话题(topic)信息和发送的数据信息组装成JSON,publish给企业windows服务器订阅的话题(topic),并设置callback函数,等企业服务器的待响应,响应成功后会将数据信息呈现到客户端中。
  (3)远程控制和历史查询模块,用户选择设备发送控制指令,手机App将用户信息和指令信息封装成JSON,通过MQTT发布到企业服务订阅的topic。企业服务获取指令解析出用户信息,用户信息中包含着手机订阅的topic。服务执行完对设备的操作后将结果发布到手机订阅的topic。
  4  系统测试
  本研究应用某物联网系统取得良好成果,其测试物联网设备为激光传感器、步进电机等组成的测量设备,主要应用于立筒仓内部物料体积和重量测量[13],以及仓内温湿度监控。通过本系统客户端和手机端进行控制物联网设备工作,收发设备的工作状态,接收到设备采集的数据。测试结果为该系统传输效果可靠稳定,能适应复杂的传输情况,无数据丢失的现象。
  
  5  结论
  本文以MQTT协议为基础,Windows程序开发为核心,遵照消息传递的过程,开发了一套物联网消息传输系统,适用复杂条件下消息的收发,解决不同平台之间消息协议的解析,利用多个协议之间的通信,实现了不同平台间对设备的控制以及数据的接收,可利用在多种物联网系统中,降低了数据丢失的概率,极大的提高了消息传递的稳定性。
  参考文献
  [1] 李燕. 计算机监控系统中物联网技术应用探究[J]. 软件, 2018, 39(10): 220-223.
  [2] 严新巧. 基于移动开发现状探讨React Native[J]. 电脑知识与技术, 2016, 12(32): 76-77+82.
  [3] 王欢. 分布式移动性管理协议研究[J]. 软件, 2015, 36(2): 80-85.
  [4] Haripriya A. P.,Kulothungan K.. Secure-MQTT: an efficient fuzzy logic-based approach to detect DoS attack in MQTT protocol for internet of things[J]. EURASIP Journal on Wireless Communications and Networking, 2019, 2019(1).
  [5] 耿云飞. 融合通信消息引擎的设计与实现[D]. 中国科学院研究生院(沈阳计算技术研究所), 2016.
  [6] 张幼麟. 51单片机串口应用[J]. 内江科技, 2019, 40(10): 32+12.
  [7] 孙毓蔓, 左小清, 苏文豪. 基于ArcGIS Engine与C#.net的地块合并功能的实现[J]. 软件, 2018, 39(10): 150-155.
  [8] 代鸿元. 基于WinForm的脉冲安防报警系统设计与实现[D]. 天津大学, 2017.
  [9] 金昱东. 一种基于ReactNative的代码压缩与动态加载的实现方法[J]. 软件, 2016, 37(02): 81-84.
  [10] 明鸣. 以Windows服务为基础的网口与串口通信设计浅析[J]. 中国新通信, 2018, 20(03):66.
  [11] 陈星, 霍珊珊, 刘健. 物联网信息系统安全测评服务模式的研究[J]. 软件, 2016, 37(3): 09-15.
  [12] 莫洪艳. 在.NET平台利用MSMQ实现不同应用间的异步通讯[J]. 天津冶金, 2017(06): 46-48.
  [13] 杨栋, 刘铮. 浅谈激光测距技术对料堆盘库的应用[J]. 衡器, 2016, 45(12): 15-18.
转载注明来源:https://www.xzbu.com/8/view-15321721.htm