王志强,钮丹丹,王佳兴,高鑫,吴昊,夏倩,蒋永年,郭亚*
(1. 江南大学物联网工程学院,轻工过程先进控制教育部重点实验室,江苏 无锡 214122; 2. 江苏省互联网农业发展中心,江苏 南京 210017; 3. 江苏中农物联网科技有限公司,江苏 宜兴 214200)
水资源缺乏一直是制约农业发展的重要问题.在中国农业用水量占总用水量的80%左右,但由于农业灌溉效率普遍低下,农业水的利用率仅为45%,而水资源利用率高的国家已达70%~80%.中国农业用水被大量浪费,其原因除农业灌溉控制技术本身不完善外,很大程度上是因为不能及时地监控各灌溉点的灌溉水流量信息.因此解决农业灌溉用水信息获取困难的问题,对于缓解水资源的紧缺非常重要.
目前国内外基于物联网技术的智能化灌溉系统可以实现简单的组网、数据采集、显示存储等基本监控功能,以及将传感器数据上传至管理系统实现智慧决策灌溉.例如:美国利用“3S”技术获取、传送、处理各类农业信息,通过此技术指导农业灌溉.但该技术实现复杂且难以建立网络互联关系,而且还存在信号误差等问题[1-2].BATCHES等[3]开发了一套用于评价地下滴灌合理性的专家系统,用于滴灌器的排布选择.PLANT等[4]针对棉花的生产灌溉问题,利用CLARE专家系统外壳进行系统开发,考虑了作物蒸腾量、灌溉等各种问题,知识库非常丰富.夏继红等[5]利用人工智能的相关技术设计开发节水灌溉智能系统,可以针对某种特定的作物形成有效的灌溉策略,但该系统只考虑单一作物,未考虑农田间的其他相互制约关系.屈晓渊等[6]基于无线传感网络技术,将各种传感器构成智能化传感器网络,实现农田的在线检测和灌溉自动化控制.李聪聪等[7]针对中国土壤水分流失和水资源浪费问题,基于物联网技术和无线传感器技术设计智能灌溉系统,可以用于检测区域内各个网络传感器节点的土壤水分信息,根据不同作物的生长规律进行控制决策,并使用Simulink仿真验证了系统的可行性.赵焱[8]基于ZigBee技术实现了分布式节水灌溉采集监控系统设计.但此类节水灌溉物联网系统大多处于初步阶段,并未考虑工业协议的实现、节点反向控制、服务器结点宕机、系统权限管理、海量数据的并发等实际问题,这些问题会随监控节点的增多而一一显现.因此现有的系统大多不能满足多节点、大规模这一基本需求.
为了有效解决上述问题,针对此类实际性需求,文中对系统进行设计.此外,为实现实用性大规模用水节点的监控,本系统设计采用工业标准的MODBUS-RTU协议作为传感器接入平台的通用协议,任何传感器只要满足该协议即可接入该监控系统成为系统监控节点之一.同时设计实现权限分级管理功能,方便大规模应用的管理.
农业用水具有点多、面广、分散和量小等特点[8-9],因此,对农业用水量的检测比较困难.可在每个用水点部署1个或多个流量传感器节点,每个用水区域部署1个网关节点.传感器节点用于采集节点将数据传输到NB-IOT网关节点,网关节点数据进行协议打包后上传至核心网络,进行协议数据转换操作后进入IOT服务器,IOT服务器部署在云服务器上,核心网络可以直接连接该服务器IP地址.IOT服务器同时连接WEB服务器,WEB服务器同网络访问控制、网关服务器、数据库以及用户信息目录等协同工作,能够提供验证授权、账户服务以及数据库管理功能.流量监控端可以使用任意一台连接外网的主机浏览器,通过http请求访问WEB服务器以获取相应的数据,从而进行显示存储等数据操作,并为监控员提供决策支持[10-11].节水灌溉系统监控模型如图1所示.
图1 节水灌溉监控模型图
物联网系统主要由3个部分组成:Device设备群、服务器以及客户端[12].其中Device设备群即物联网系统中感知层的传感器设备,在本灌溉流量监控系统中采用电磁流量计作为传感器件,传感器通过RS-485串口连接方式发送数据至NB-IOT结点,并通过此节点向服务器发送传感器数据.服务器端设计负载均衡集群系统,采用Nginx技术,通过轮训算法分配线程池IOT服务器,同时使WEB服务器中网页端静态资源与动态资源分离,实现动静结合的效果.MySQL服务器采用集群策略,利用MyCAT分片将IOT中数据写入主数据库中,网页端的数据请求通过访问从数据库获得.具体服务器可分为3个服务器程序:IOT服务器、MySQL服务器以及WEB服务器.IOT服务器主要用于接收底层Device群上传的数据,并在数据解析后通过数据库接口存储进行数据持久化,MySQL服务器主要运行MySQL守护进程,定期对数据进行备份以及对过量历史数据进行整合删除等操作,WEB服务主要用于处理客户端请求,提供验证授权、账户服务以及查询数据库内容并将数据可视化的功能.客户端部分包括WEB网页客户端和微信小程序客户端,管理员可根据需要自行选择需要使用的客户端类型,2种类型的客户端数据和状态共享[13],系统总体架构如图2所示.
图2 系统总体架构图
系统通过电磁流量计传感器设备进行监测点流量监控,由IOT服务器端获取设备数据并以MODBUS协议进行解析[14],基于TCP协议将各测量点测量所得数据存入数据库实现数据持久化.在WEB服务器中进行实时查询数据库信息等操作,保证WEB网页客户端和微信小程序客户端获取信息的有效性和实时性.为降低系统的复杂度,IOT服务器和WEB服务器之间通过MySQL进行连通,少部分需要两者连通的采用HTTP协议进行数据信息交换.
本系统中IOT服务器设计基于TCP的C/S模式(客户端/服务器模式)开发,为保证服务器的高扩展性和高兼容性,将服务器的功能分为4个大块,以实现系统设计的低耦合高内聚性.四大模块分别为连接器模块、服务模块、系统配置及本地资源模块、数据库资源模块.各模块详细功能描述及实现如下所示.
2.2.1 IOT服务器连接器模块实现
采用socket编程技术,在本地建立TCP服务器,创建连接时将进行核心配置的初始化,该TCP进程绑定本机指定端口即传感器硬件网关的连接端口.IOT服务器维护一个连接守护进程(connection daemon),连接守护进程将继承监听器接口,创建连接守护进程后就可以调用监听方法进行监听,具体功能实现如下:
1) 监听连接功能:服务器的开始,创建1个继承监听器接口的连接器,专门负责管理待连接的客户端,当创建连接的时候会进行系统的初始化,服务器端口此时绑定,当创建后就可以开启监听,每当监听到连接就调用系统的线程资源进行分配处理.
2) 连接过滤功能:此功能为系统可扩展功能,开发人员可根据需求设计加入不同的连接过滤器,加入的连接过滤器可根据需求过滤掉不想要接入的连接,但不会影响系统整体运行,此连接过滤功能类似系统防火墙.
2.2.2 IOT服务器服务模块实现
该模块主要实现对获取的传感器数据进行解析处理以及持久化操作,具体功能如下:
1) 检测设备的正确应答:在经过动态分类处理后,进入对应服务内部,首先将会检测该连接的登录信息的正确性,不正确则丢弃.
2) 与设备进行信息传输,将获得的有效信息加入数据库:对获取的数据信息,根据传感器接入时选择的协议进行数据解析,解析完成后将有用的数据装入数据库,进行数据持久化处理.
3) 解析WEB的消息请求,完成请求的内容:IOT服务器与WEB服务器进行信息直接交换时采用HHTP协议,在一定程度上简化了系统的复杂度.对于WEB的请求,IOT服务器按照HTTP协议的格式解析WEB请求,根据内容将请求消息发送给终端设备或对WEB的请求给予回复.
2.2.3 系统配置资源及本地资源模块实现
该模块主要对系统配置资源文件等进行标准化设定,方便二次开发和系统调试,具体功能实现如下所示:
1) 配置资源保存,且易于修改:该服务器的所有配置信息都放置在指定的配置文件资源中进行管理,开发和维护人员可以根据自身需求灵活更改和扩展系统配置以实现各种扩展功能.
2) 系统日志:服务器中操作流程及一些报错信息由log4j2系统日志一并管理,可随时查看,方便运维人员后期系统维护.
3) 用户自定义协议:定义协议解析的抽象模板类,用户可根据实际的业务需求,继承该模板实现自定义协议类后交由系统自动维护,系统进行协议解析时会通过反射执行自定义解析方法.
4) 设备映射表管理:IOT服务器将维护1个设备与IP的映射表,将在线设备的设备号和IP对应关系加入该映射表,方便取用和查看.
WEB是系统的交互枢纽,主要功能实现包括3部分:与IOT服务器进行数据交互、与MySQL数据库进行数据交互以及与客户端进行数据交互.前两者采用nginx服务器分配动态服务器处理资源信息,客户端访问静态资源需访问静态资源服务器.在与IOT服务进行数据交互的过程中均采用HTTP协议进行数据交换,规范了系统的数据交换格式.在与客户端进行数据交换的过程中,引入了身份-权限管理系统,不同身份的管理员拥有的权限不同,可进行不同的操作,提高了系统的稳定性.服务器功能实现流程如图3所示.
图3 WEB服务器功能实现流程图
MySQL服务器主要维护一个数据库守护进程(DB daemon),该守护进程输入后台服务进程,主要用于定时对数据库进行删除、汇总等操作,为数据库进行瘦身,防止数据库过饱和导致系统性能下降.DB daemon的功能是对历史数据进行处理,通过历史数据获取周数据、月数据、年数据,并分别进行存储,随后删除处理后剩余的无用历史数据,保证了以最小的存储代价实现历史数据的可达性.
同时采用MySQL集群技术,设置主从数据库,设定主库写、从库读的模式.利用MyCAT中间件实现自动读写分离,多节点负载均衡,解决当数据库服务器宕机时,节点无法工作的情况.写入主数据中的信息利用二进制文件会自动更新至从数据库中,保证了主从数据库中数据的一致性,使后期维护更加方便.
系统整体由微信小程序和WEB管理网页两部分组成.微信小程序主要设计为可进行简单的数据查询以及简单的设备管理等操作,主要包含设备查询、数据查询、设备控制、客服服务4个功能模块,用户可直接通过微信账号验证登录.WEB网页前端设计主要采用HTML+CSS+JS编程技术,在前端界面的实现上采用Layui前端开发框架,更加轻量和简单.文中所述系统主要功能模块及描述如表1所示.
表1 系统主要功能模块及描述
在测试实例中主要测试WEB网页设备管理功能和数据查询功能的实现.测试项目和观察结果如表2所示,测试过程中人为使其中某一服务器节点宕机.
表2 测站管理项目测试表
结合计算机网络技术、数据库存储技术、前后端开发技术等设计了一套农业灌溉多节点监控系统,基于MODBUS协议以及TCP协议实现节点数据查询和远程管理等功能,可以有效缓解因各用水点信息不足导致农业用水浪费等热点问题.具体如下:
1) 相比于其他的监控系统,在实现基本的灌溉数据监控、设备控制等功能性需求的基础上,本系统融入了权限管理模式,结合RBAC思想,设计权限管理系统,不同身份的用户登录具有不同的可执行的操作权限.
2) 为实现对大规模用水节点的监控管理需求,着重设计实现了IOT服务器和WEB服务器2个服务器进程,其中IOT服务器面向底层传感器设备数据设计,解决大量数据并发以及协议统一问题.
3) 实现了工业通用协议的解析,用户也可以根据业务需求自定义协议解析方法添加至系统,为多设备、多协议的统一接入管理提供了有效的解决方案.对原先部署的节点只需要进行相应的协议包装即可接入监控系统,使该监控系统相较于其他类似灌溉系统可以更好地应用于大规模用水节点的灌溉监控情景.