桂成杰 曾献辉
摘 要:为了解决目前空调远程控制系统实时性不高、数据库读取效率低的问题,设计一种基于WebSocket与Redis技术并在Web端远程控制的系统。通过WebSocket技术实现终端和Web应用程序之间的长连接,提升两者之间信息传输过程的实时性,通过Redis技术提升数据库读取效率,以及Web应用程序和采集控制程序对存储数据操作的实时性。实际操作发现,该方法可提升控制系统整体实时性,提升现场空调设备的控制效率,使用户决策及时得到执行。
关键词:智能空调;远程控制;移动环境;实时控制;内存数据库
DOI: 10. 11907/rjdk.191187
开放科学(资源服务)标识码(OSID):
中图分类号:TP319
文献标识码:A
文章编号:1672-7800(2020)001-0190-05
0 引言
21世纪是信息化时代,其最大特征是智能。智能化已成为多个行业发展趋势,既提高了生产效率,也改善了用户体验。其中电器行业智能化尤为显著,智能空调是其中代表性产品。
传统空调控制依靠控制面板或者红外遥控器对空调实施控制,但该方法局限于一个空间内,用户无法远程控制空调…。随着物联网等信息技术不断发展,用户对远程控制的需求越发迫切。研究人员陆续设计出一些远程控制系统,如王耀青等[2]针对移动端设计了基于ZigBee和安卓的控制系統;赵宏林等[3]设计了基于云平台和IOS的系统;张娟荣[4]针对PC端研发了基于ARM嵌入式技术的系统;文献[5]针对纺织行业空调系统存在的自动化程度不高、误差大等问题,提出基于物联网的空调控制系统[5];文献[6]提出基于NB-IoT的空调远程控制系统,利用窄带物联网技术实现远程控制[6]。上述系统虽实现了远程控制,但也存在实时性不高、移植性能差、开发成本高等缺点。
本文在已有研究的基础上,提出一种基于WebSocket与Redis的远程控制系统,该系统在Web环境运行,利用WebSocket长连接与Redis读写效率高的特点提升控制实时性,同时Web环境适用于多样化终端,只要可连接网络,便可完成控制任务,提升系统执行效率,减少开发成本。
1 Web环境下智能空调实时控制总体架构
现有智能空调远程控制系统由现场设备、远程控制服务器和智能终端3部分组成。现场设备由被控空调和通信控制模块组成,该模块可以通过WIFI、4G网络直接与服务器通信,也可接RS-485总线,经工控机与服务器通信;服务器由采集控制程序与Web应用程序组成;智能终端包括一切可以浏览网页的设备,例如手机、平板等。系统整体架构如图1所示。
1.1 关键结构介绍
系统整体工作流程从客户端开始,到客户端结束。用户通过终端打开浏览器,访问服务器中的Web应用程序,Web程序将用户的控制命令写入数据库中,采集控制程序并从数据库中读取命令,然后传输至空调控制模块,模块完成控制后将控制结果回送给采集控制程序,程序将结果写入数据库,Web程序读取数据库中的结果并显示在页面上,最终用户可在终端看见结果。
1.1.1 Web应用程序
Web应用程序是通过Web访问的一类程序,遵循浏览器/服务器(B/S)的架构模式,用户通过浏览器即可访问。应用程序由3部分组成,分别对应B/S模式表示层、逻辑层和存储层的3层结构[7]。用户通过终端访问浏览器,浏览器向Web服务器发送HTTP请求,得到服务器响应后,两者建立连接,Web服务器便可将应用程序处理后的数据传送、解析并显示在终端页面上.整体结构如图2所示。
1.1.2 采集控制程序
采集控制程序是实现控制需求的核心,有两大功能:一是采集功能,利用现场采集设备采集空调运行时的数据;二是控制功能,控制命令由程序传送至现场设备进行控制,控制结果也由程序传送至Web程序供用户查看。采集控制程序结构如图3所示。
服务器控制采集程序与Web应用程序各有分工,两者通过操作同一个数据库进行数据传送,从而实现系统整体功能。
1.2 系统存在的问题
现有控制系统能很好地实现智能空调远程控制,但随着技术不断发展,用户对控制系统的需求增多,现有控制系统暴露出诸多问题,其中最主要问题包括:
(1)实时性,主要指终端和Web程序之间传输的实时性,由于HTTP协议基于TCP协议,使用HTTP协议时需要连接浏览器和服务器[8],但两者之间连接步骤繁琐,且每次通信时都需重新连接,严重影响系统实时性。
(2)数据库读写效率低。实时性另一方面体现在Web应用程序和采集控制程序之间传输上。两者之间通过读写数据库传输控制命令,由于传统数据库在读写效率上没有优势,且整个过程需完成读写操作各两次,读写操作耗时巨大,同样降低系统实时性。
因此,现有远程控制系统需作出调整和改进才能满足控制需求。
2 基于WebSocket技术的实时连接远程控制
现有控制系统使用HTTP协议和Web应用程序连接,但HTTP连接步骤复杂且只提供短链接,因此在实际运行时会严重影响传输实时性。另外HTTP协议只能由客户端发起连接请求,客户端不断轮询确定传输时机,既降低效率也增加负担[9]。若服务器可及时推送数据库变更信息,让客户端减少请求次数,既可提高效率,又可提升实时性。
2.1 WebSocket技术
WebSocket协议是HTML5中提出的一种基于TCP的新通信协议[10],区别于传统TCP连接“三次握手、四次挥手”的步骤,协议采用长连接方式,即浏览器向服务器发送连接请求且服务器同意之后,两者之间便建立连接[11]。其后浏览器和服务器双方不存在主从关系,均可主动向对方发送数据[10],从而避免客户端轮询操作,可直接等待服务器推送最新控制结果。WebSocket协议建立连接的过程如图4所示。
WebSocket协议通常应用于B/S模式,在该模式下浏览器和服务器通过HTTP协议建立连接,由于WebSocket协议“一次握手”建立连接,因此连接建立后,后续数据交换无需传输HTTP报文头,加之WebSocket协议具有更简洁的数据帧格式,进而降低了数据传输量,减少了大量交互信息和网络吞吐量,可节省带宽,提高通信效率[10]。
2.2 WebSocket实现方法
WebSocket协议实现服务器和终端间的数据通信,在HTTP协议基础上使用该协议进行通信,提升传输实时性。
浏览器向Web服务器发出HTTP请求时,在请求头部加入以下代码:
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDLIEzLkh9C BhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
該段代码是WebSocket通信的核心,旨在告诉服务器浏览器发起WebSocket协议,需按照WebSocket协议处理,连接之后可长时间通信,提升传输实时性。
相比HTTP协议,WebSocket长连接的特点是可降低传输时延,但数据库读写操作效率低,系统整体实时性依旧不突出。内存作为计算机的组成部分,存储着计算机运行程序和数据。为保证计算机处理速度,内存读写被设计成一项高效的操作,其速度是读写数据库的数倍,因此选择内存缓存代替数据库存储,提升系统实时性。
3 基于Redis内存数据库技术的远程实时控制技术改进
内存数据库是一种建立在用户共享内存或者反射内存之上的一种数据库,所有进程均可访问内存数据库中的数据,使数据可以在不同进程间共享[12]。内存数据库提供多种接口,同时还提供打包、解包、结构与变量映射转换等功能,可以实现不同类型数据直接交互。在众多内存数据库中,最常用的是Redis。
3.1 Redis技术
Redis技术遵守BSD协议,是一个开源的、基于内存和Key-Value键值对、支持数据持久化的网络化存储系统。Redis采用Key-Value模型,用哈希表表示两者间的映射关系,可用Key值迅速查询对应的Value值[13]。同时Redis支持主从同步与读写分记,可以有效地提高系统性能和可靠性。
3.2 Redis特点
Redis是为了解决大量数据存储需求而产生的,随着用户访问量和需求不断增加,传统数据库无法满足存储需求;Redis读写速度快,可分别达到110 000次/秒和81 000次/秒,远优于数据库读写速度[14],采集控制程序和Web程序读写时可进一步提升效率,提升实时性;此外Redis去除了数据库中数据的关系型特征,可方便再进行扩展;Redis支持监听功能,客户端可以升级为监视器,监听服务器操作信息,及时掌握Redis动态[15]。
综上所述,与传统数据库相比,Redis具有明显优势,因此将存储系统改成Redis,并将工控机和客户端设置为监视器,监听并接收服务器当前处理的指令信息。
4 智能空调实时控制系统实现
为了验证改进系统可行性,完成服务器设计,并利用Web实现空调远程控制,改进的系统架构与图1类似,终端使用WebSocket协议访问Web程序,同时将控制命令存入Redis中。
4.1 控制命令结构设计
Redis提供5种数据存储类型:String、Hash、Set、List和2set[6]。Hash类型可以看成具有String Key和String Value的map容器,将多个键值对存储在一个键值对中,适合打包存储一些属性信息。
一条控制命令包括控制设备编号、控制参数、控制量、控制前后的参数值和控制结果。利用Redis存储一条控制指令时可以将Instruction作为key,并用Hash结构存储指令的具体信息[17],详见表1。
4.2 Web应用程序
Web应用程序一般使用Java完成后台程序编写,后台程序的功能包括允许建立WebSocket连接、通信及读写Redis。Web程序将控制命令写入Redis,并将结果传送至终端。Web应用程序流程如图5所示。
后台使用WebSocket协议建立连接的流程[18]为:
步骤1浏览器发出连接请求。
步骤2创建WebSocket实例。
步骤3 websocket.onopen= function()//建立连接
websocket.send( message) ll发送消息。
步骤4 websocket.onmessage= function( event)//接受信息。
步骤5 websocket.onclose= function()//关闭连接。
步骤6 websocket.close()//断开连接。
后台服务器使用Redis操作流程[19]为:
步骤1采用后端模式启动Redis,默认端口号6379。
步骤2通过创建Jedis类的对象连接Redis服务器,代码如下:
private Jedis jedis;
private JedisPool jedisPool;//创建Jedis连接池对象
JedisPoolConfig config;//创建配置对象
jedisPool= new JedisPool(config, IP, 6379);//配置Je-dis连接池
步骤3使用Jedis类中hset方法操作Redis中hash结构数据,具体如下:
jedis.hset( key,field,value);//将表一中hash结构的控制命令key值对应的每一对field-value值写入Redis中。
步骤4读取控制结果,操作代码如下:
Jedis.hmget(“Instruction”,“Result”);
4.3 采集控制程序
采集控制程序一般由C++编写,采集控制程序的作用包括数据采集、控制命令和结果传输。从Redis读取命令送至现场控制模块,再将结果写入Redis中供Web程序读取。采集控制程序的流程如图6所示。
采集控制程序使用Redis操作,步骤如下:
(1) redisContext* redisConnect (const char* ip, intport);//连接Redis。
(2) void* redisCommand( redisContext*c, const char*format--);//执行Redis命令,第一个参数是连接Redis时的返回值,后一个是需要的Redis语句,代码如下:
HCETALL“key”;//获取Redis中的命令
HMSET“key" -‘field" -‘value”[“field" -‘value”…]/,将命令和结果存入Redis
4.4 界面介绍
整体系统包括服务监控程序与Web页面。服务监控程序用来监控程序运行状况,Web页面实现空调数据查看以及空调运行控制,具体运行界面如图7所示。
5 结语
本文主要介绍了智能空调远程控制系统设计和实现,针对现有系统实时性不佳的问题,从通信传输和数据库读写两方面人手,提出一种结合WebSocket与Redis技术的控制系统,WebSocket解决终端传输实时性的问题,减少通信连接开销,使控制命令可以同步传输;Redis令读取存储系统更高效,采集控制程序和Web程序能更快读取存储的控制命令。用户可在多种浏览器设备上利用该系统进行远程控制,大幅提升了系统智能性和便捷性,也降低了系统开发和移植成本。本文系统还有待进一步改进空间,下一步可从数据传输安全性進行深入研究,提高数据网络传输可靠性,也可从控制智能化人手,探究如何更加智能地控制空调,使空调运行参数符合用户逻辑。
参考文献:
[1]郝宝智,廉小亲,王晓冰,等.基于无线通信组件的空调远程控制系统[J].测控技术,2017,36(9):100-104+118.
[2] 王耀青,解聪.基于Android的空调远程控制系统[J].现代电子技术,2018,41( 22):30-33.
[3]赵宏林,廉小亲,郝宝智,等.基于物联网云平台的空调远程控制系统[J].计算机工程与设计,2017,38(1):265-270。
[4] 张娟荣,屈昕鹏,基于ARM的空调远程控制系统设计[J].自动化与仪器仪表,2017( 10):99-100+103.
[5] 陈怀忠,何仁初.基于物联网的纺织空调智能化监控系统设计[J]上海纺织科技2018,46( 7):59-62.
[6] 廉小亲,周栋,成开元,等.基于NB-IoT的空调远程控制系统设计及实现[J].测控技术,2018,37(5):51-55.
[7] 张凡.Web应用程序漏洞检测与防护技术研究[D].南京:南京邮电大学,2017.
[8] 翁壮.基于HTTP/2协议的Web应用优化及性能测试[D].北京:北京工业大学,2017.
[9]张珊.基于HTTP的可靠性测试脚本生成的研究与实现[D].北京:北京邮电大学,2017.
[10]万可迭.基于WebSocket的水泥厂动设备的全平台状态监测系统的研究[D].杭州:浙江大学,2018.
[11] 潘峰,王笑天,宋钰涛,等.基于Redis与WebSocket的战场态势
实时推送方案设计及实现[J].软件导刊,2018,17( 7):143-146.
[12] 马斌.Redis在手机银行系统中的应用研究[D].兰州:兰州理工大学,2018.
[13]杨旸.基于Redis的Thrift缓存机制设计[J].软件导刊,2016,15( 03):29-32.
[14] 李栋.Redis内存数据库在电力交易中的研究与应用[D].大连:大连理工大学,2018.
[15] 曾泉匀,基于Redis的分布式消息服务的设计与实现[D].北京:北京邮电大学,2014.
[16] 曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013,32( 12):11-13.
[17] 孙超.Redis内存数据库在智慧消防系统设计中的应用[J].网络安全技术与应用,2018(8):103-105.
[18] 欧阳文臣.基于Redis技术的分布式缓存电商平台设计与实现[D].南昌:南昌大学,2018.
[19]单振华,王舒憬,强杰.基于WehSocket的智能家居远程控制系统的实现[J].电子技术应用,2017,43( 10):124-127.
(责任编辑:江艳)
作者简介:桂成杰(1994-),男,东华大学信息科学与技术学院硕士研究生,研究方向为智能控制与优化;曾献辉(1974-),男,博士,东华大学信息科学与技术学院副教授、硕士生导师,研究方向为智能控制与优化。本文通讯作者:曾献辉。