温室大棚监控系统上位机软件设计
2023-07-20王东杨杰
王东 杨杰
摘要:针对温室大棚上位机采用LabVIEW、OneNet等公有云平台开发存在需要授权、需要公网支持或者数据不受控等问题,文章介绍了一种基于插件的上位机开发方式,根据软件界面的功能特点,将界面划分成内容展示区、菜单和按钮功能区、PAD区等通用模块,利用C#的反射功能,将通用模块设计为插件挂载到工作台上,实现功能与界面的分离,提高系统的稳定性和可扩展性。经实践验证,该系统稳定可靠。
关键词:插件;上位机;MQTT;C#
中图分类号:TP311.5
文献标志码:A
0 引言
近年来,随着经济的不断发展,人们对各类经济作物的需求越来越大,为提高经济作物的产量以及应对四季变化,各种农业设施投入也越来越大,温室大棚也由传统的简易温室大棚向智能化大棚转变。伴随着信息技术的高速发展,我国已通过信息技术实现对温室大棚的远程管理,从而提高了温室大棚环境监测的效率,降低了工作人员的劳动强度,也使环境监测更加准确和及时。大量研究人员对此进行了研究,如陈炜明等[1]采用单片机控制传感器采集大棚内环境参数,并通过CC1101 射频模块将数据传输到中控单片机,实现对各类设施的控制和相关信息的显示;黄力等[2]设计了由各类硬件设施采集温室大棚的环境参数,并通过智能综合网关将数据上传到中国移动打造的PaaS物联网开放平台,实现数据的管理及交互;舒丹丹等[3]在温室大棚中组建了ZigBee无线传感网络,将采集的数据统一汇总后再经WiFi网关上传到上位机和手机App客户端;李国利等[4]基于ESP32监控系统的下位机,并使用Blinker 作为物联网接入方案,设计上位机手机App,实现了温室大棚数据的监测;侯波等[5]将GSM作为无线数据传输的通路,LabVIEW作为上位机数据处理平台实现温室大棚的环境监测系统;杨青青等[6]通过Arduino UNO 为系统主控板采集环境参数,并通过通信模块将数据上传到OneNet云平台,实现了上位机微信小程序的数据展示效果;张君雁等[7]利用.Net Framework4.0、開源数据库MySQL5.5和串口通信开发了温室大棚的HMI程序;周万禹等[8]利用STM32单片机开发了温室大棚的下位机系统,并通过NB-IoT通信模块将数据上传到华为OceanConnet物联网平台,实现了对温室大棚环境的监测;熊琰等[9]利用C#语言开发了基于ZigBee的校园火灾防范系统上位机软件,利用串口通信可以展示各监测点的状态。从以上的文献中可知,温室大棚监控系统主要分为上位机和下位机两部分,下位机采用单片机对环境参数进行采集,通过无线或串口通信将数据上传到上位机实现展示,而上位机的开发主要包括由中国移动开发的OneNet等现成物联网平台或采用LabVIEW等软件进行自定义开发。虽然OnetNet等公有云平台功能强大,运行稳定,但必须有外网支持,同时还受限于平台的各类规范,数据可能存在安全隐患。自定义的开发方式能利用已有的开发模块和开发模式,数据管理能够受控,容易形成自有的知识产权,且运行环境可以根据项目的需要选择因特网或局域网。因此本文介绍一种基于插件的温室大棚监控系统上位机软件开发方式,软件利用插件实现界面与功能的分离,同时基于MQTT通信协议,能够及时接收和向客户端发送温室大棚的实时数据,使系统具有良好的稳定性和可扩展性。
1 总体方案介绍
温室大棚监控系统的主要目的是监控温室大棚的环境参数,并根据情况对温室大棚内的设施设备进行控制,整个系统包括用于数据采集和控制的下位机及数据存储处理的上位机两个部分,如图1所示。
下位机由单片机和用于环境监测的传感器如光照、湿度、温度等传感器和无线通信模块等构成。上位机主要用于接收和存储由下位机上传的数据、历史数据展示、用户管理、客户端实时数据展示等。为了提高上位机软件的稳定性和可维护性,系统采用插件的方式进行设计开发,所有的功能模块都挂接到系统的工作台上,由工作台对所有的模块统一管理。
2 上位机功能介绍
根据总体方案,上位机主要实现三大部分功能:一是与下位机对接,对下位机进行管理及控制;二是对终端用户管理,并向用户提供数据查询和展示;三是基础功能,即各类通信协议对接及数据存储。为方便各终端与上位机之间的及时通信,上位机选择基于TCP的MQTT通信协议,各模块如图2所示。
3 上位机系统设计
本系统设计的运行环境为Windows 7及以上系统,采用运行于.NET Framework和.NET Core(完全开源,跨平台)的高级程序设计语言C#开发。移动客户端单独进行开发,只需要通过网络与上位机进行交互即可。
为提高系统的可靠性、稳定性和可维护性,未来在不修改现有源代码的基础上能够进行功能扩展,本文设计了基于插件的框架,并在此基础上实现上位机的各种功能。
3.1 插件框架设计
根据上位机总体框图,上位机分为不同的功能模块,因此插件框架主要实现各类功能模块的管理,实现各功能与界面之间的分离,降低偶合。根据常用软件的界面布局和功能特点,将软件的主要界面抽象为内容展示区、菜单和按钮功能区、PAD区等通用模块,利用C#的反射功能,将通用模块设计为插件挂载到工作台上,实现功能与界面的解耦。菜单和工具栏主要用于启动命令,而中间的内容展示区和PAD区分别代表了两种典型的界面:VIEW和PAD。VIEW显示主要内容,PAD显示日志、属性等简要信息,且可以隐藏。菜单和工具栏上的命令,需要由用户点击或者设置为由插件框架在启动时自动调用,而VIEW和PAD的显示需要由其他命令来启动或者在启动时由框架自动调用。
菜单或工具按钮在用户点击时,等同于调用某一功能函数。为规范和统一调用,所有菜单和工具栏按钮的执行函数都由一个ICommand接口来对应,包括一个Run成员函数,对应该命令需要执行的功能。每個按钮或者菜单项都有相应的图标、名称、是否有效等属性,在接口中只有一个Run函数是不足以表达的,因此定义抽象类AbstractMenuCommand继承于ICommand,以便默认实现一些相应的属性。每个实际的菜单项或工具栏按钮都对应一个具体的继承于AbstractMenuCommand的实现类,并在其中实现ICommand接口的成员,以实现具体要执行的功能。
框架中的内容展示区是软件的主要界面,根据软件的功能定义,它们显示的界面各不相同,但主框架并不知道该区域应加载的内容,若直接定义各类控件,无法将界面和功能进行分离,也无法对其进行扩展,因此,将主界面抽象成一个IViewContent接口,里面的用户自定义控件(自定义控件中的子控件由用户自行设计,即具体显示的界面),使得主框架只需要维护一个IViewContent列表,便能知道当前打开的主界面窗口,而具体的用户自定义控件由接口规范为ViewContentControl属性。当其他插件要与该界面进行交互时,只要找到某个IViewContent,将其属性ViewContentControl转换成对应的用户自定义控件的具体实现,即可对其中的成员或函数等进行操作,实现无需修改主界面的代码就可通过其他插件对其进行操作,从而实现了用户功能和界面的相互分离,更加符合软件工程的要求,使开发的软件具有更好的稳定性和可维护性。具体的类图如图3所示。
为便于所有插件能在不同的地方对框架中的插件进行操作,本文利用单例模式设计工作台类,即WorkBenchSingleTon类,并在其成员中增加静态WorkBench属性,代表整个软件的界面框架,在此类中加载所有其他功能插件。而此静态属性也方便其他模块调用以实现相互通信,从而使其他所有插件都可以通过该属性对工作台上的各类插件进行查询和操作。
软件具体的功能则由具体的配置文件进行配置,框架在启动时读取该配置文件,并根据具体的信息在相应的执行文件中进行反射调用生成。如在生成过程中程序设置全局错误捕捉,遇到错误弹出对话框提示错误信息,并退出程序。
3.2 上位机功能设计
3.2.1 客户端管理模块
根据上位机的总体框架可知,本软件主要实现客户端管理(MQTT)、数据储存管理、用户管理、数据查询等功能。其中,客户端管理需要MQTT服务,应在软件启动时启动该服务,确保软件打开后,MQTT客户端能连接。在本框架中,自启动的服务有两种方式,一种是没有界面要求的插件,可以直接集成在框架的工作台中(WorkBench)中,另一种是有界面的插件,使用一个VIEW来承载,在软件启动时,自动启动该VIEW,两种方式各有优缺点。如果集成在工作台中,将导致功能与框架集成,不利用模块的重复使用;如果集成在VIEW中,那么该窗口可能被关闭,需要做好关闭VIEW时清理对象,避免重新打开时报错。本软件采用在工作台中集成MQTT通信模块,降低各模块与MQTT之间交互的难度。
MQTT服务采用MQTTnet模块,该通信模块使用C#语言开发,目前还支持.net core,因此能够实现跨平台,是一款同时支持服务端和客户端的高性能MQTT通信模块。在实现MQTTServer时,该模块只需要应用MqttServer OptionsBuilder类初始化mqttServer类,同时设置服务器启动、停止、客户端连接、断开,订阅主题、取消订阅主题、消息到达等事件处理函数。由于消息处理函数为单独的线程,在收到数据进行界面更新时需要使用委托进行,最终的效果如图4所示。
3.2.2 用户管理和数据存储模块
用户管理主要记录各客户端的用户名和密码,确保上传的数据都经过授权,避免数据遭到破坏以及登录本软件的用户信息。
数据存储模块的主要功能是将用户数据和MQTT模块接收到的数据存储到数据库,在MQTT服务的信息到达事件中将接收到的数据保存到数据库。由于节点上报的环境数据是按约定协议传输的,因此,中心基站在上传MQTT报文时,直接将每次上报的数据作为一条MQTT报文的载荷即可,在上位机软件保存时再对载荷进行解析后保存到数据库。为了提高开发的效率,本软件使用MSSQL Server存储数据,使用Entity Framework作为数据库访问中间件,并将所有的表都使用自增主键。
3.2.3 数据查询模块
数据查询模块和前面几个模块类似,都设计成一个ViewContent,在其上放置自定义用户控件。在用户控件上,根据需要将曲线绘制模块作为该控件的主要控件,添加其他条件查询的控件,本模块相对比较独立,只需要与数据库进行交互,而无需与其他模块进行交互,具体布局如图5所示。
4 结语
利用C#的反射功能和配置文件,设计插件框架,让软件所有的功能都以插件的形式加载到软件的工作台中,对软件主要功能界面和操作功能进行归类抽象为按钮(菜单)、主界面、PAD区等,并通过单例模式可以方便查找到工作台中的所有功能插件,实现功能与界面的分离,各功能模块可以根据接口独立开发,实现面向接口的开发,提高软件的稳定性和可靠性以及在不修改源代码的情况下对软件进行扩展。本文在此基础上开发的温室大棚监控系统上位机软经实际长时间运行,稳定可靠,达到了预期目的。
参考文献
[1]陈炜明,李水峰,林颖意,等.基于无线通信的温室大棚数据采集系统设计[J].电子设计工程,2017(12):72-76.
[2]黄力,魏文冲.基于OneNET云平台的农业温室大棚上限阈值远程监控的实现[J].信息与电脑(理论版),2020(1):163-165.
[3]舒丹丹,许钟,强大壮,等.基于ZigBee的温室大棚监控系统的设计[J].辽宁师专学报(自然科学版),2020(3):80-84.
[4]李国利,周创,牟福元.基于ESP32的温室大棚环境远程监控系统设计[J].中国农机化学报,2022(3):47-52.
[5]侯波,徐小华,胡晓飞.基于LabVIEW和GSM的温室大棚环境远程监控系统设计[J].江苏农业科学,2015(1):393-395.
[6]杨青青,秦芹,巩倩倩,等.基于云平台的温室大棚环境数据采集与控制系统研究[J].无线互联科技,2022(5):45-46.
[7]张君雁,杨晨辉,张志强.温室大棚环境控制系统研究[J].成都大學学报(自然科学版),2018(1):67-70.
[8]周万禹,胡乃瑞,杨美琪,等.温室大棚环境监测及控制系统的设计[J].电子测试,2020(5):45-47.
[9]熊琰.基于ZigBee的校园火灾防范系统设计与实现[J].现代信息科技,2021(12):168-171,176.
(编辑 王雪芬)
Design of upper computer software of greenhouse monitoring system
Wang Dong1, Yang Jie2
(1.School of Intelligent Manufacturing, Chongqing Industry & Trade Polytechnic, Chongqing 408000, China;
2.School of Artificial Intelligence, Chongqing Industry & Trade Polytechnic, Chongqing 408000, China)
Abstract: Aiming at the problems of authorization, public network support or uncontrolled data when the upper computer in the greenhouse is developed using LabVIEW or public cloud platforms such as OneNet ,etc. This paper introduces a plugin based upper computer development method. According to the functional characteristics of the software interface, the interface is divided into general modules such as content display area, menu and button functional area, PAD area and so on. Design a universal module as a plugin to be mounted on the workbench, achieving separation of functions and interfaces, and improving system stability and scalability. After practical verification, the system is stable and reliable.
Key words: plugins; upper computer; MQTT; C#