基于WebSocket协议的智能温室测控系统设计与实现

时间:2022-09-26 02:59:30

基于WebSocket协议的智能温室测控系统设计与实现

摘 要:针对智能温室发展现状,引入了跨平台、易扩展的思想,将WebSocket通信协议应用到嵌入式设备通信中,结合嵌入式、Zigbee无线传输、传感器采集等技术,设计了一套基于WebSocket协议的智能温室测控系统。一方面能够简化系统开发、克服传统B/S架构不能提供长连接的TCP双向通信和C/S架构开发周期长、无法跨平台等缺点;另一方面,用户可以实时查看温室环境、设备运行状况以及实时控制情况等,并且能够获得实时温室预警等推送。实验结果表明,该系统运行稳定、使用便捷,很好地满足了温室实时测控的功能需求。

关键词关键词:智能温室;物联网;WebSocket;嵌入式;实时测控

DOIDOI:10.11907/rjdk.161620

中图分类号:TP319

文献标识码:A 文章编号:1672-7800(2016)008-0065-04

0 引言

随着物联网技术的日益普及,各式物联网产品应用于衣食住行等各个领域,为人们的日常生活提供了极大便利。同样,在智能农业领域也广泛地应用了物联网技术,这些应用使农业种植变得更加简便、高效和科学。但目前这些应用系统的整体通信架构一般是基于C/S架构或传统B/S架构设计的,基于C/S架构的应用系统具有系统设计复杂、开发周期长、无法跨平台等缺陷;基于传统B/S架构的应用系统虽然能够跨平台,但它是基于HTTPf议进行通信的,并不能提供一个长连接的TCP双向通信机制。而WebSocket作为HTML5的一种新协议日趋标准化,它实现了浏览器与服务器全双工通信,在生活中得到了广泛应用,如新浪微博的评论、私信通知和腾讯的WebQQ等。本文将该协议应用到嵌入式应用系统中,使嵌入式设备与服务器之间能够基于WebSocket协议进行通信,以克服传统通信架构的缺陷[1]。

1 系统整体设计

本文设计了一个基于WebSocket协议的智能温室控制系统,该智能温室测控系统通过综合管理系统实现温室大棚的自动监测,其中包括温室内温湿度、光照度、温室通风换气系统等。如图1所示,该系统总体分为环境感知层、物理控制层和应用层3部分。

(1) 在环境感知层,依靠一系列传感器精准采集温室内部和室外的环境数据,通过Zigbee网络传输给Zigbee中继节点,中继节点再通过RS232/485接口传输给嵌入式计算机。

(2) 在物理控制层,光耦继电器通过RS232/485接口与嵌入式计算机连接,接收基于MODEBUS-RTU协议的控制指令,控制温室设备控制柜内的交流接触器,进而控制各个温室设备(如湿帘风机、水泵、遮阳帘、环流风机等)。

(3) 在应用层,主要分为嵌入式端应用模块、Web管理系统和服务器端应用模块。嵌入式端应用模块实现了基于WebSocket协议与服务器的通信、解析控制协议、上传环境数据、自动运行等功能;Web管理系统实现了用户通过浏览器实时管理温室的功能;服务器端应用模块实现了WebSocket客户端的连接请求、客户端之间的通信以及数据的解析、存储等。

通过以上几部分的相互协作实现了一个完整的智能温室测控系统,用户可以通过手机、PC、Pad等设备的Web浏览器实时查看温室的环境数据、设备运行状况和设置温室运行参数等。

2 系统感知层

系统感知层是整个系统的基础,其作用相当于人的五官,主要包括两部分:温室内部三合一传感器和室外气象站。系统感知层可通过两部分的传感器获取更加精准的温室内外环境状况,以达到更有效地控制操作和进行温室种植研究的目的。

另外,从简化安装、便于维护等方面考虑,本系统采用Zigbee无线技术,将采集的环境数据集中传输到嵌入式计算机中。

2.1 传感器采集模块

该系统中的传感器模块[2,3]统一采用MODBUS-RTU通信协议[4],设备操作和回复都为16进制数据,默认通信波特率为:9600,8,n,1,基本通信格式为:

【设备地址】【功能码】【起始地址:2字节】【数据长度:2字节】【CRC16校验】

传感器读取、解析和发送的实现流程如图2所示。首先,创建一个线程,打开指定串口(传感器通过485网络总线形式连接到串口)并监听该串口,程序每隔60秒发送传感器查询指令,对监听串口接收的传感器反馈数据进行数据解析;接下来判断解析数据是否正常,如果不正常则丢弃,如果正常则存储下来进行CRC校验;最后将CRC校验[5]后的数据发送到LED显示器上进行显示。具体代码实现如下:

int pthread_create(&threadSensor,NULL,WriteSensor,NULL); //创建线程,并绑定传感器读取函数

void *WriteSensor(); //传感器读取函数,间隔60秒查询传感器

int optOpen(int fd,int port); //打开指定串口

int optSet(int fd,int nSpeed,int nBits,char nEvent,int nStop); //设置串口的相应参数,如串口文件描述符、串口波特率、数据流控制、数据位、停止位和校验类型等

int SelectRead(int fd,char rev[50],int length); //利用I/O select模型进行串口读取,将接收到的数据进行解析,判断数据是否正常[6]

unsigned short CRC16(unsigned char *pushMsg,unsigned short usDataLen); //根据CRC16校验算法进行CRC校验

2.2 Zigbee通信模块

Zigbee节点数据采集系统主要由两部分组成[7,8],分别为数据中心和数据采集设备。其数据中心为中心主站,连接用户PC或嵌入式系统,用于接收数据;数据采集设备用于数据采集。如图3所示,该系统中的Zigbee节点采用星型网组网形式,其数据通讯流程为:电脑(或嵌入式系统)发送IO控制命令中心主站中继路由目标采集设备IO状态响应中继路由中心主站电脑(或嵌入式系统)。

3 系统控制层

控制层模块主要使用16路无源光耦继电器,通过RS232/485串口与嵌入式计算机进行通信。通信协议是标准的MODBUS-RTU协议。该继电器工作模式为本机非锁联动模式,在该模式下,输入光耦与继电器直接联动,即:光耦输入信号生效对应继电器吸合;光耦输入信号取消对应继电器断开。通过该模式,确保了温室设备的准确运行,并能获取设备的实时运行状况。

4 系统应用层

该系统软件模块主要分为3部分:嵌入式应用模块、Web管理系统和服务器端应用模块。

4.1 嵌入式应用模块

嵌入式应用模块主要实现基于WebSocket协议建立通信、指令解析和数据封装、自动运行等功能,如图4所示。

为了实现嵌入式客户端与服务器进行WebSocket通信,该系统引用了开源项目libwebsockets。libwebsockets是一个轻量级的纯C库建成的项目。通过libwebsockets提供的API与服务器进行通信,并完成对接收数据的解析和上传数据的封装,具体实现代码如下:

struct lws* lws_client_connnect_via_info(struct lws_client_connect_info *i)

//通过该函数创建一个到目的服务器的连接,形参i是指向结构体lws_client_connect_info的指针

callbackRecv(struct lws *wsi, enum lws_callback_reasons reason,void *user,void *in,size_t len); //通^自定义的回调函数接收来自服务器的消息

4.2 Web管理系统

由于本系统需要通过Web浏览器查看温室的实时运行状况,比如当前的光、温、湿等环境数据、温室内设备的运转情况,并控制温室内相关设备等,对于该功能模块的实现,系统采用JavaScript[9]提供的WebSocket API完成与服务器的实时通信。首次访问该视图时触发JavaScript的onload函数,判断当前浏览器是否支持WebSocket协议并创建WebSocket对象;当WebSocket连接上后触发调用onopen事件处理程序,从Seesion中获取用户名等信息并发送到WebSocket服务器进行注册;接下来通过方法send和事件处理程序onmessage即可实现[10]双通道通信。具体代码实现如下:

var ws=new WebSocket(“ws://xxx.xxx.xxx.xxx:9001”); //创建一个WebSocket实例

ws.onpen=function(evt){ ws.send(); }; //为该实例绑定onopen事件

ws.onerror = function(evt) { }; //为该实例绑定onerror事件

ws.onmessage = function(evt) { }; //为该实例绑定onmessage事件,处理数据接收

ws.onclose = function(evt) { }; //当浏览器接收到服务器端发送的关闭连接请求时,触发onclose事件

4.3 服务器端应用模块

服务器端应用模块是基于.NET4.5 Freamwork[11,12],并引用SuperWebSocket开源框架实现的,主要功能是接收WebSocket客户端的连接,处理WebSocket客户端之间的通信以及相关数据的存储,用于建立WebSocket监听端口,以及客户端连接、断开、信息接收等触发事件,具体实现如下:

protected override void Onstart(string[]args)

{

var ip=ConfigurationManager.AppSettings[“APWebSocketIP”];

var port=ConfigurationManager.AppSettings[“APWebSocketPort”];

server=new WebSocket(); //创建WebSocket对象

if(!server.SetUp(ip,int.Parse(port))) //设置监听端口,并启动服务器应用

return;

server.NewSessionConnected+=server_NewSessionConnected; //新的会话连接

server.SessionClosed+=server_SessionClosed; //会话断开

server.NewMessageReceived+=server_NewMessageReceived; //接收到新信息

}

4.4 系统测试

本系统测试主要是通过手机/Pad/PC浏览器查看温室的实时运行状况,以及能否正常控制温室设备并设置设备温室运行参数等。如图5所示,通过手机浏览器登录温室Web管理系统进行实时控制和查看。经测试,本系统功能完备、运行稳定。

5 结语

本文通过分析传统B/S和C/S应用架构的不足,并详细研究了WebSocket协议的特性,设计了一套基于WebSocket协议的智能温室测控系统。该系统将WebSocket协议应用到嵌入式开发中,实现了嵌入式设备与服务器的实时通信。用户只需利用App/PC/Pad等设备的Web浏览器即能实时查看温室设备状况、控制温室设备运行并设定运行参数等,达到了很好的跨平台运行效果,具有较高的应用参考价值。

参考文献:

[1]李代立,陈榕.WebSocket在Web实时通信领域的研究[J].电脑知识与技术,2010(10):7923-7925,7935.

[2]赵秀珍,王乃钊,毛文华.光照度、空气温/湿度传感器的研究和实验[J].中国仪器仪表,2002(1):29-31,36.

[3]廖泽鑫.温度传感器的设计与研究[D].上海:复旦大学,2012.

[4]舒凯.基于MODBUS-RTU协议的PLC多路数据采集系统[J].水电自动化与大坝监测,2008(2):66-69.

[5]常晓明,潘卫华,王建东.CRC校验及其软件实现[J].电子技术应用,1995(6):14-23.

[6]陈文武.分布式锁技术研究[D].广州:华南理工大学,2013.

[7]王朝霞.ZigBee无线传感器网络节点硬件与组网协议设计[D].呼和浩特:内蒙古大学,2011.

[8]穆嘉松.基于节点移动性的ZigBee网络自适应路由策略研究[D].天津:天津大学,2012.

[9]郑强.Web服务器推送技术的设计与实现[D].北京:北京邮电大学,2013.

[10]杨小娇.轻量级高并发Web服务器的研究与实现[D].南京:南京邮电大学,2014.

[11]史建江,李世银,黄兴,等.基于的信息管理系统设计与实现[J].微计算机信息,2008(6):32-33,54.

[12]余建华,蔡瑞英,方寿海.使用C#中线程同步、事件及异步委托机制实现定单模式[J].计算机应用与软件,2006(7):142-144.

上一篇:基于微信的电动汽车充电运营平台实现 下一篇:探究现阶段企业会计制度改革