水质监测系统 毕业设计 SpringBoot +Vue+Nodejs+Mysql

作者主页毕业设计精选

作者简介:9年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家

摘  要

当前的水质监控系统以 C / S 架构为主流,为了适应广域网监控的目的,提出以 SpringBoot+Vue 前后端分离的微服务 架构,通过发布/ 订阅消息服务器的消息,构建新型水质监测系统 。测试结果显示该系统可以完全替代基于组态软件二次开 发的 C / S 架构下的水质监测系统,实现更高效的、更大规模的互联网系统扩容。

关键词: 水质监控; 微服务; 互联网监控; SpringBoot; MQTT; Vue;

1   系统架构及平台部署

本水质监测系统包括水质监测终端设备及云服 务器 。云服务器包括 MQTT 消息服务器、后端服务 器、前端服务器、Mysql 数据库服务器 。结构图如  1 所示。

 1    系统结构图

水质监测终端包括多参数水质检测仪及 4G DTU 模块,系统结构如图2 所示。

 2   水质在线监测终端内部结构图

水质监测终端负责完成水质参数及 GPS 信息 的采集工作,并由 STM32F103 单片机进行系统管 理,采用串口通信技术,按照 GSON 字符串形式, 时通过串口向 4G DTU 模块提交水质采集数据,4G DTU 采用 MQTT 通讯模式,连接 MQTT 消息代理 务器把该主题消息发布到消息代理服务器上本消 息代理服务器采用 ActiveMQ 进行服务器端消息服 务器部署[7-8]

后端服务器: 订阅来自 ActiveMQ 消息服务器的 消息,采用 SpringBoot 技术,对订阅主题消息进行 析,然      符 串    JSON  据,纳  Mysql 数据库; 在后根据登录人员级别,把相关数据 推送给前端服务器 。在 SpringBoot 数据服务器开发 中,集成 Swagger2 组件,方便自动生成前端接口文 档,提高开发速度; 集成 Mybatis-plus 组件,方便对 据库进行增删改查操作; 集成 Logback 组件,有利于 生成操作日志

前端开发工作主要是完成数据显示及用户操 权限管理地图标注系统日志数据库管理 前端开发中,Vue 以数据驱动和组件化开发为核心, 更适合监控系统的数据绑定因此在开发工具选择  方面,选择 Vue 技术为前端开发技术支撑 。开发平  台采用 Node.js+Webpack+Vue+ElementUI+Axios    。Vue 组       视 图 的  定,其 Model- View-View Model( MVVM) 的开发模式也使得前端  开发从原来的 DOM 操作解放出来,只需关注数据  的变化,代码更易维护 。ElementUI 方便本系统对视  图的渲染,Axios 用于连接前后台数据互换; 由于本  设计监控主要应用于网页端如果应用于手机端  以引入 MintUI 进行布局,生成手机端 APP,更方便  手机浏览 。前端开发引入 Echart 组件及高德地图  组件,通过 Vue 引入数据,方便进行曲线显示、地图  定位标注从而增强数据可视化及人机体验

2   系统关键技术实现

2.1   水质监测数据采集及调试

水质监控终端考虑要与云服务器进行通信 计中选择 MQTT 协议,其水质监测终端的软件流程参 考图 3 所示,其通讯数据流采用 Gson 字符串格式。

 3   水质监测终端软件流程图

2.2    消息代理服务器

采用 ActiveMQ,安装部署在云端服务器上,根 据 MQTT 协议发布/ 订阅通信原理,设计相应的主题 Topic。

设备主题( Topic) 为: water / { deviceID} ,一级主 题代表水质,二级主题为设备唯一序列号 ID;

后端 SpringBoot 数据服务器订阅主题: water /  则后端服务器可以订阅所有 water 主题下的消息    2.3   后端数据服务器设计

在水质监测系统设计中其数据库设计参考工 控组态软件中数据库结构工控组态软件一般包括实 时数据表历史数据表报警设定表报警数据表 理人员数据表; 本数据库设计在吸收工控系统优点的 情况下增加用户与设备绑定表用于把管理员与其 管理区域权限进行绑定; 用户菜单表根据用户权限推送不同的操作菜单。如下为本系统数据库表结构 ( 1) 用户数据表

包含字段为用户 ID ( userid) 、用户名( name)  手机号( tel) 、管理权限( level) 、管理区域( zone) 、创  建时间( createtime) 字段,该表相当于组态软件中用  户管理

( 2) 设备实时数据表

表结构包含设备唯一序列号 ID,所处区域、IP 地址、MAC 地址、各种水质参数、GPS 经纬度等数  当水质监测终端发布主题消息因后端数据服 务器订阅了来自 water 主题下的所有消息,所有可 以收到来自消息代理服务器 ActiveMQ 的所有该主 题消息推送; 后端服务器在侦听到相应主题消息 数据刷新到设备实时数据表该表相当于组态软件 实时数据词典

( 3) 历史数据表

当设备实时数据表数据刷新时,采用 Mysql   发器把实时数据表该记录根据当前时间增添到历史  数据表中 。历史数据表设计为当前时间、设备 ID 各种水质参数、GPS 经纬度; 该表主要用于每台在  线设备历史数据存储供数据前端可视化查询   表相当于组态软件数据存入历史数据库

( 4) 报警设定表

该数据表根据用户所处区域对该区域水质监 测设备的参数上限下限上上限下下限进行设  后台服务器侦听消息服务器推送消息把消息 解析后,根据设备 ID 查询该表,把数据与参数的报 警值进行比较当触及报警限制时把报警数据插入 报警数据表该表相当于组态软件中报警设置

( 5) 设备用户绑定表

用于记录用户与设备的映射关系设备唯一序  列号 devicesID、用户唯一标识 userID,当后端服务器  侦听到消息服务器推送消息对消息进行解析获取  设备 ID,查设备用户绑定表,可获取用户 ID、权限、 区域根据具体要求向前端推送数据达到精确推送  的要求

( 6) 报警实时数据表

数据库字段包括报警时间报警设备报警参 报警级别报警处理字段 该表相当于组态软件 中实时报警

当数据报警时候纳入报警记录将报警处理值 设置为 0,当报警处理结束,报警处理值设为 1,表示 已经处理该报警 。网页端通过Axios 的 Get 方法,调 用后台数据中心接口查询报警数据表获取报警数 渲染到网页上

( 7) 报警历史数据表

该表用于记录系统报警历史数据通过报警实 时数据表刷新触发插入报警历史数据供前端进行 报警历史分析及查询该表相当于组态软件报警历 史数据库

( 8) 用户菜单表

根据用户注册信息当用户登录后根据权限 区域获取用户个性化导航栏相关数据颜色等菜单  数据该表用于个性化前端导航栏传统组态软件无  法实现

2.4   后端服务器开发

在后端服务器,主要负责消息订阅/ 发布,根据数  据库设定信息进行相关逻辑业务操作并把数据推  送给前端服务器。后端服务器采用 SpringBoot 技术, SpringBoot 采用 AOP 开发理念,采用注解编程,采用  容器技术把需要的模块添加到相应的容器中开发  中,采用 Maven 技术构建数据仓库,通过 pom.xml   入相   赖。在   目 中,注  ActiveMQ client、 SpringBoot-web-starter、Mybatis-Plus、Mysql-Connector、 Swagger2、Lombok 等组件。

( 1) 新建 config 类,利用 mybatis-plus  自动代码

生成器创建部分通用代码[9]

对于 SpringBoot 软件开发,其对数据库的操作, 正常包括增删改查操作采用步骤基本一样首先配  置数据库:

在 application.property 文件中配置数据库基本 信息及消息服务器配置及其他信息

创建实体类: 为每个数据表格创建实体类,通过 Lombok 插件的@ Data 注解 自动设置 Setter,Getter 方法 用于存放我们的实体类与数据库中的属性 值基本保持一致

创建数据库接口 DAO 层,通过 @ Repository  解对数据库进行数据持久化操作完成数据库操作 的逻辑映射 。通过@ MapperScan 注解,注入主程序 管理。

为每个实体类创建 Services 接口及 Services  行方法

为每个实体类创建控制层 Controller; 通过@   RestController、@ GetMapping、@ Postmapping 注解的  使用完成接收前端传过来的参数进行业务操作  将处理结果返回到前端实现前后端数据参数传递  在 配 置 完  application.property  后,可 以 采 用  Mybatis-Plus 代码生成器[10自动生成通用的的数  据库操作部分代码把软件开发人员从重复劳动中  解脱出来 。通过 test 类执行代码,自动生成上述操作代码 。配置 Swagger2,采用注解的方式自动生成 前端接口文档省去编写前端接文档的麻烦提高工 作效率

( 2) 注入消息侦听处理逻辑

当侦听到所订阅的消息主题,解析消息内容: 首  先把消息字符串由设备端的 ASCII 码转 UTF-8 码, 消息内容统一规定为 Gson 字符串形式,把 Gson   符串 解 析 为  Gson 数 据,调  设 备 实 时     Services 接口中插入方法,插入方法调用 DAO 层数  据库操作映射逻辑把数据写入设备实时数据表  时在数据库中实时数据表数据刷新将触发数据插  入到历史数据表的操作实现历史数据保存; 询设  备报警设定表,把 Gson 数据与报警设定数据进行比  当满足报警条件把报警数据写入报警实时数据  为报警实时数据库配置插入数据触发写入报警  历史数据库方法实现报警历史数据库保存

( 3) 在控制层,编写控制层 Controller 接口:

用户登录后,根据权限,采用 Get 方法,查询用 户菜单表个性化生成操作界面

①根据用户权限及分管区域通过添加设备 过录入设备 SN,设备 SN 也就是设备内部 MQTT  息主题号插入更新到设备用户绑定表完成设备与 用户的绑定

②为每台设备做报警设置接口定义监控参数 的上限上上限下限下下限以记录形式插入报警 设置表为其编写接口方法

③定时查询设备实时数据表返回当前最新的 实时数据根据用户分管区域实现对其管辖区域内 设备精确数据条件查询

通过上     块 的       Swagger2 类,统一生成用户后端 API 接口,为进一步 前端开发做完准备工作 。通过 Swagger2 生成的接 口文档如图 4 所示。

 4   通过 Swagger2 生成数据中心接口文档

2.5   Web 前端关键功能整合

前端开发任务为监控数据的可视化 首先利用 Visual Studio Code 平台,采用 Vue+ElementUI+Axios+Echart+高德地图等插件,完成前端开发平台搭建。 然后统一外部数据接口跨域设置状态存储的定义 实现如下功能:

( 1) 人员登录管理: 对管理人员进行增添、删除、 权限分配操作; 该功能实现通过 Axios 传参,调用后台  用户 SpringBoot 的 API 接口获取数据,渲染到网页模  块上,通过 SpringBoot 实现与数据库的交互。

( 2) 设备配置: 根据设备唯一序列号 SN,完成设  备添加设备报警参数设定设备人员绑定设定通过  API 接口,写入数据库相应的表中。当数据中心侦听  到 MQTT 消息后,获取消息内容、解析消息后,将根据  设备唯一序列号 SN 查询报警设定表数据,与之比较, 决定数据是否产生报警信息纳入报警数据库而后  根据权限或地域把设备参数数据及报警数据进行网  页精准推送。前端设备配置界面如图 5 所示,包括设  备添加报警设置设备人员绑定配置

( 3) 设备数据前端显示,根据权限,通过调用数 据中心设备实时数据表的 API 查询接口,完成实时数

 5   设备配置页面

据获取渲染到网页上; 通过调用数据中心历史数据 表的 API 查询接口,获取不同设备的历史数据,渲 染到网页的Echart 组件上,完成历史曲线等图形化 显示; 获取设备的 GPS 位置信息,通过调用网页中 的高德地图组件标记在高德在线地图上完成地图 上设备的标定 。如图 6 所示。

 6   设备地图在线标记

3   系统分析与展望

本系统设计的亮点为采用前后端分离的软件设  计模式搭建基于微服务的监测中心后端数据中心  与前端显示分别架构,突破传统 C / S 模式下监控中  心封闭性其他系统无法接入的难题本系统架构为  新的开放式架构 其后端数据中心只要通过授权 即可通过 API 接口访问该中心数据; 其前端视图页  面可以接口各种互联网资源与组态软件二次开发  的监控系统比较,参考表 1。

 1   与组态软件二次开发的监控系统比较

性能参数

组态软件二次开发监控系统

本系统

网络通信高并发问题

小规模设备接入,消息轮询,无高并发解决方案

设备无限接入,通过集群、消息代理技术解决

网络形式

局域网

广域网、局域网

数据库管理

简单的 ODBC 连接

Mybatis 等优秀持久层架构

操作系统

Windows 系统

各种操作系统

价格

付费

开源代码,免费

池化技术

消息连接池化、数据库池化、内存池化

前后端分离技术

采用 MVVM 模式

人机界面

固定分辨率,固定布局,仅 Windows 系统下可以浏览

栅格布局,界面更友好,支持 html5,andriod,ios 等系统

接口互联网资源

借助浏览器插件接入

通过 Vue 管理,接入各种开放式互联网资源

适用场景

中小型控制系统

大型控制系统

开发难度

简单

复杂

与架构在公网的物联网平台比较本设计方法更 灵活可以布局在专用网络中避免网络攻击安全性 更好; 同时也避免了对其他资源平台的技术依赖

前后端分离的服务器开发模式在前端采用 Vue 技术,ElementUI 组件设计页面,其人机体验远 高于传统工控组态软件开发的页面布局

由于项目处于系统测试阶段设备较少在后端 SpringBoot 架构中,涉及内存数据库操作没有引入Redis 模块进行服务器内存管理,随着未来设备的扩  容,将引入 Redis 技术作为补充,以减轻关系数据库  的查询压力提高系统的处理速度及解决高并发问题  的能力,在前后端通讯方面,如采用 Websocket 技术, 实现后台采集数据的前端推送将优化系统性能

在测试阶段没有引入设备自动注册的思路 用出厂唯一序列号作为标识在设备大批量生产阶 将造成出厂前每次烧写程序都要修改芯片中序列号,不利于大批量生产在后期将引入设备互联网 自动注册方法由服务器分配序列号传给设备 动写入 STM32 单片机的 NAND 存储器,也就是分配 其 MQTT 通信的主题,以适应大批量生产的要求。

4    总结

在本设计中采用工厂化软件设计思路探索一 种采用互联网+ 的模式下改造传统水质监控系统的 方法 测试结果表明该方法可以完全替代传统的 基于组态软件的水质监测系统相当于充分利用互 联网资源对传统监控系统进行升级改造 此设计方 法同样适用于其他智慧环保智慧城市智慧工厂等 大型自动化项目的工程设计

参考文献:

[1]  杨员,张新民,徐力荣,等.美国水质监测发展历程及对中国启示[J].环境污染与防治,2015,37( 10) : 86-97.

[2]  刘立.MVVM 模式分析及应用[J].微型电脑技术,2012,28 ( 12) : 57-60.

[3]  易见波.基于 MVVM 模式下的前端框架研究[J].信息与电 脑,2016,19( 4) : 77-79.

[4]   Spring.io.springboot2.x  quickstart  quickstart[EB / OL].[2018 - 03-01 /2020-05-04].https: / / spring.io / quickstart.

[5]  Vue.js.渐进式 JavaScript 框架[EB / OL].[2016-10-01 /2020- 05-04]https: / / cn.vuejs.org.

[6]   IBM,Eurotech.MQTT V3.1 Protocol Specification[EB/ OL].[2014- 02-10 /2020-5-04] http: / / public.dhe.ibm.com / software / dw / webservices /ws-mqtt / MQTT_V3.1_Protocol_Specific.pdf.

[7]  松.Spring boot+Vue 全栈开发实战[M]. 1 版.北京: 清 大学出版社,2019: 214-218.

[8]  Apache.Flexible&Power  Open  Source  Multi-Protoco  lMassaging [EB / OL].[2019-09-20 /2020-05-04] http: / / Activemq. apache.org.

[9]  Mybatis-Plus.Mybatis-Plus  Quick  Start[EB / OL].[2020-01 - 17 /2020-05-04]https: / / mp.baomidou.com / guide / .

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业设计精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值