吕恩利,何欣源,罗毅智,王飞仁,夏晶晶,吴 凡,曾志雄
(1 华南农业大学 工程学院, 广东 广州 510642; 2 岭南现代农业科学与技术广东省实验室 茂名分中心, 广东 茂名 525000;3 广州迦恩科技有限公司, 广东 广州 511363; 4 广东机电职业技术学院, 广东 广州 510550; 5 云南昌农农牧食品有限公司, 云南 文山 663000; 6 农业农村部华南智慧农业公共研发中心, 广东 广州 510630)
物联网技术应用于猪场养殖,可以实现母猪智能饲喂[1]、远程实时监控[2]和养殖环境调控[3],有利于增强母猪繁殖性能、提升猪场养殖效益[4-5],对促进猪场数字化和智能化进程具有重要意义[6-7]。
国内外学者对此开展了相关研究。国外在动物养殖中应用物联网技术较早,荷兰 Nedap 公司开发的Velos 管理系统,使用RFID方式实现了群养母猪的个体精确饲喂[8],加拿大 JYGA 科技公司的Gestal系统实现了对哺乳母猪全自动饲喂,其采用无线电技术搭配饲喂器,可以准确控制母猪的采食量[9]。国内对物联网智能饲喂的研究才刚刚起步,但也取得了许多研究成果[10]。朱伟兴等[11]针对保育猪舍研发了环境监控系统,利用Zigbee 无线技术实现了猪舍环境的可视化、精准化调控。潘秦等[12]利用母猪饲喂专家系统实现了群养母猪智能饲喂,通过无线分组交换技术(GPRS)实时获取耳标号和猪舍温、湿度等信息。大部分学者主要集中在饲喂系统控制逻辑的优化,对物联网数字化服务研究的相关文献较少。而母猪养殖的数字化管理,对提高猪场生产力具有重要作用[13]。
本文在前人研究的基础上,着重数据传输和解析方面,设计了一种哺乳母猪的智能饲喂物联网系统。采用Netty、SpringBoot框架以及MySQL技术,以TCP/IP协议为基础设计多种通信协议,以实现哺乳母猪饲喂数据传输和远程控制指令下发,为实现哺乳母猪智能饲喂数字化管理提供参考。
系统由感知层、传输层和应用层组成[10],各个层之间通过广域的互联网相互连接,形成从哺乳母猪养殖生产中信息采集、信息传输、信息处理、设备控制的一站式服务体系[14]。系统的整体架构如图1所示。
图1 哺乳母猪饲喂物联网系统架构图Fig. 1 Architecture diagram of feeding IoT system for lactating sows
1)感知层:该模块自底向上由饲喂器设备和中央控制器组成,主要实现母猪饲喂信息、图像数据的采集上传以及远程控制指令响应;
2)传输层:主要依托 GPRS ,按照约定的 IP 地址及端口号与服务器建立TCP连接,将感知层所获得的数据进行长距离传输;
3)应用层:由数据服务中心、用户以及中间链路部分组成。服务中心主要功能为:饲喂数据接收、数据统计、Web网站服务等,为下属用户提供PC端的服务[15]。
现场设备如图2所示,智能饲喂器如图2a所示,由单体机械和控制器组成,安装在料线下方;中央控制器如图2b所示,猪舍内通常由一台中央控制器控制多台智能饲喂器设备,并负责与云端进行通信。
图2 现场设备Fig. 2 Field equipment
随着物联网技术的发展,国内外学者针对相关技术进行了不同的尝试,为了满足猪场实际应用需求,本文参照类似饲喂物联网系统完成了技术选型,如表1所示。
表1 饲喂物联网系统技术对比表Table 1 Technology comparison table of feeding IoT system
许多相关系统会将智能设备接入开源物联网平台,通常需要使用平台固定的数据协议,存在配置繁琐、增加业务困难的问题。由于猪场需要根据业务需求灵活地定制程序,所以本文选择通过Netty框架实现多线程网络服务器、自定义数据协议完成数据实时传输,使得系统具有更强的扩展性。例如,本文基于后台对图像分析要求,实现了现场猪只图像采集传输;除此之外,云存储能够提高存储效率,降级运营成本,同时具备负载均衡、故障冗余功能[16]。
系统数据传输部分主要实现饲喂设备数据的接收和操作指令的下发。此部分基于Netty网络通信框架完成功能搭建[17-18],通过私有数据传输协议进行内容传输。
Netty是一个异步的、基于事件驱动的网络应用框架,常用以快速开发高性能、高可靠性的网络I/O程序[19]。Netty框架使用的线程模型基于Reactor模式进行演变,保证了单线程资源无竞争高效串行化任务的执行,Netty使用零拷贝,堆外直接内存进行Socket读写,传输快,且提供了对TCP、UDP和文件传输的支持。
系统基于Netty框架开发数据接收模块,模块在启动时通过ServerBootStrap绑定并监听一个网络端口。当有中央控制器传输数据时,WorkerEventLoopGroup根据设计的自定义协议进行数据的校验和解析。
数据解析完成后进行业务处理,该过程需要访问数据库。若在Netty的Worker线程中完成业务处理,将会影响数据接收模块的数据处理效率。因此加入自定义线程池来处理耗时业务操作,进而提高系统数据处理性能。线程池最大线程数超过系统资源限制时,新线程会处于无限等待[20],为避免此现象发生,故采用如下算法公式:
式中:Ns为线程的设置数;Ni为CPU的核心数;Nj为预期CPU核心利用率;T/C为任务等待的时间与执行时间的比值[21]。
通信协议作为采集终端与收集端消息传送的“模板”[22],在业务中有十分重要的地位,是采集终端与收集端消息传送的重要组成部分,而定义私有协议可更具有灵活性,可以按照业务需求有针对性地优化。
本文的通信协议涉及到多种类型,包括生产信息数据帧、饲喂曲线数据帧、图像数据帧、升级设备数据帧等,本文以生产信息数据帧和图像数据帧进行介绍,数据帧格式如图3所示。
图3 数据帧示意图Fig. 3 Data frame diagram
对协议的数据帧公有帧位进行统一解释,各位置作用如下。帧头、帧尾:标识一个数据帧的开始结束,利用其解决数据帧黏包问题;校验位:对数据帧中除帧头、帧尾、校验位外的所有数据累加取反,取低八位做正确性验证;标志位:用来标识系统中不同类型的数据帧,例如基本信息数据、图像信息数据等;长度位:表示除去帧头、帧尾后整条数据帧的长度;控制器ID:此ID属于中央控制器的唯一标识;饲喂器ID:此ID属于饲喂器设备的唯一标识;哺乳母猪ID:饲喂器设备对应的哺乳母猪的唯一标识。
2.2.1 生产信息数据帧生产信息数据帧如图3a所示,其中数据内容位为特有帧位,该位的长度可根据实际生产信息数据的不同而灵活变化。主要为母猪饲喂信息数据,包括猪只采食量、饮水量、舍号、栏号、分娩时间等。
2.2.2 图像数据帧图像数据帧的设计与系统处理图像的逻辑有关,系统发送图像时,会将该图像分多段传输。在图像上传前,将分割段数发送至云端程序,之后发送图像分段数据,以及当前分段数据在所有段中所处位置的编号,系统根据数据的编号将图像拼接重现。故图像数据帧又分为图像数量帧和图像内容帧2种。
图像数量帧如图3b所示,其中分割段数为特有帧位,用来指明本次传输的图像分为多少段数据进行上传,通常在图像数据上传初期向云端发送该帧。例如分割段数是5,则表示图像分5次进行传输,接下来将有5条图像内容帧陆续发送,将5条帧中图像数据内容进行拼接即为完整图像。
图像内容帧如图3c所示,其中当前段号和图像数据为特有帧位。当前段号表示当前图像数据所处分段的位置索引,即为系统最后拼接图像时的顺序编号;图像数据位表示图像拆分后的二进制数据。
系统具有采集设备下料量、下水量、母猪日龄等饲喂数据、远程采集现场图片和设备升级等功能。下面以采集图像流程为例进行介绍。 图像数据上传流程如图4所示。
图4 图像上传功能流程图Fig. 4 Flow chart of image uploading function
系统间隔固定时间向饲喂设备下发图像采集命令,饲喂器收到命令后采集图片,中央控制器将图片二进制化并对数据拆分,将图像分段总数组合成图像数量帧,将实际图像数据组合成带有当前段号的图像内容帧,依次发送至系统,最后对图像数据进行CRC校验[23],保证图像传输的正确性。
系统收到数据帧后进行类型判断,根据类型转入相应处理程序,直至将完整图片全部解析。系统定时对保存的图片进行转存,避免图片太多消耗内存。
使用阿里云服务器共享计算型n4(ecs.n4.small)搭载本文系统,服务器配置信息参数为:Intel(R)Xeon(R) CPU E5-2 682 v4 @ 2.50GHz 1vCPU2G,2 G 内存,100 G 硬盘,操作系统为 Alibaba Cloud Linux release 3,JDK 版本采用 1.8。此外使用 2台8核CPU的计算机,作为压测机,以测试系统的性能情况[24]。详细配置信息参数为:Intel(R) Core(TM)i5-1035G1处理器,16 G 内存,500 G 固态硬盘,操作系统为Win10。
终端设备与系统进行数据传输时,响应时间是衡量系统可靠性的标准之一。使用压测机与系统建立若干个TCP连接,每个连接发送一个包含当前时间信息的数据实体。系统接收数据后取出内部封装的时间信息并写回压测机,压测机接收到返回的数据包,取出原始时间戳信息与当前时间对比[25],试验重复5组,计算平均响应时间。测试结果如表2所示。
表2 响应时间试验结果Table 2 Test result of response timems
试验与“3.2”节类似,使用压测机与系统连接,并发送带有饲喂信息的数据包,每个连接发送时间间隔为1 s。试验在3 000个连接数下发送数据,每个连接发送200个数据包,最后根据数据库实际插入的数据量[26],比较出数据处理模块在有无业务线程池下单位时间内的数据处理数。试验重复进行10组,计算平均值。试验结果如表3所示。
表3 数据库插入数据量结果Table 3 Result for the amount of data inserted into the database条
试验结果表明,系统在3 000个连接数下,平均响应时间约为330 ms,且在单位时间内处理的数据量为750~1 180条,满足猪场上位机设备的连接管理与数据处理要求。同时,系统通过引入自定义业务线程池,解耦耗时业务操作,相较原来无业务线程池,单位时间处理数提升约250条,处理量提高了31%。
在云南省某母猪场的一条生产线(5个产仔舍单元)安装了智能饲喂器,每个产仔舍单元有1台中央控制器和56台饲喂器。通过采集2021年7月1日至11月1日生产信息,对物联网系统进行应用分析。
该界面对全部饲喂设备的运行情况进行统计显示。显示内容有设备数目、设备在线情况以及设备日志等,还包括对产仔数、饲料消耗等数据的统计显示。在线设备数为正常运行的饲喂器数量,系统通过解析中央控制器发回的数据帧,得到帧中的饲喂器ID,判定为该饲喂设备在线,计入在线设备数量。主界面如图5所示。
图5 物联网系统主界面Fig. 5 Main interface of IoT system
该界面显示单台饲喂器设备的数据信息。选择相应的设备,可查询出该设备上传的母猪身份和生产信息数据,并且以折线图的形式显示该母猪分餐计划中的采食量和饮水量。当母猪当日采食量少于设备计划下料量40% 时,系统认定该母猪采食异常,在主界面的设备日志和采食详情异常数中反馈该情况。母猪饲喂信息查询界面如图6所示。
系统下发图像采集命令,智能饲喂设备传回现场图像,用于后台对母猪产程和产仔情况进行分析。实例如图7所示。
图7 远程母猪图像采集实例Fig. 7 Example of remote pig image acquisition
系统提供统计数据导出功能,数据包括设备下料消耗量以及母猪日采食量。系统可以在时间维度上对数据按指标进行统计,可减轻猪场管理员分析数据的压力,并且为调整母猪饲喂计划和分析猪场饲料消耗成本提供了参考。
系统根据历史数据中所有猪只的生产数据,统计不同产房母猪的采食总量和饮水总量;通过统计不同分娩前后时间的母猪数量与其采食总量和饮水总量,计算出不同分娩前后时间的母猪平均采食量和饮水量(图8)。
图8 不同分娩前后时间的哺乳母猪平均日消耗量Fig. 8 Average daily feed consumption of lactating sows on different day of delivery
由统计结果分析可知,后备母猪在分娩前3 d,采食量和饮水量均有明显下降,在分娩当天母猪只有少量饮水。分娩完成后,母猪采食量和饮水量开始逐日增加,7 d后消耗量趋于稳定。
1) 本文设计了一种哺乳母猪智能饲喂物联网系统,开发语言使用Java,数据库使用MySQL技术,利用Netty框架实现了数据传输服务,系统的WEB部分使用SpringBoot与Vue框架,以前后端分离形式开发,实现了母猪饲喂信息采集、图像数据采集和设备远程升级等功能,系统对饲喂数据进行统计分析,对调整母猪饲喂计划,控制猪场消耗成本具有参考意义;
2) 系统通过自定义数据传输协议与解耦耗时业务操作,可以更加高效地传输母猪基础数据和更加灵活地拓展系统业务功能,满足了对猪场饲喂设备的连接管理与数据处理要求。系统在实际应用中,运行稳定、智能化程度高,可以实时反馈母猪饲喂情况,在猪场生产建设中具有实际应用价值。