王自强
(上海理工大学机械工程学院,上海 200093)
近年来,水处理问题已经成为我国环保领域的热点问题之一。目前很多位于二三线城市的水处理企业仍然采用传统的工作模式,工人师傅需要每天定时定点进行水质检测、开泵加药、设备维护等工作,由此造成了企业管理成本高、工作效率低等问题。
为了解决上述问题,笔者针对江苏某水处理企业设计了一套循环水处理系统。该系统采用Quartz实现设备定时任务的调度,采用Websocket 实现设备远程控制和实时数据的传输,采用ActiveMQ 实现本地应用间的异步通信。另外,本系统主要以React 作为Web 前端开发框架,后台部分主要使用Django 框架进行搭建,使用MySQL 和InfluxDB 数据库进行数据持久化,使用Qt框架进行人机交互界面的开发,实现了设备定时控制、水质数据实时监测、水质数据图表化、水质异常警告等功能。测试与应用结果表明,反馈效果较好。
通过与企业管理人员和工人代表的交流讨论,以及在企业生产实地进行走访调研后,将企业诉求总结为水质监测、设备控制和设备监控三大核心需求,具体需求详情如图1所示。
图1 用例图
为了降低企业及企业下属客户的管理成本,提高用户在使用本系统过程中的可靠性和安全性,将管理和安全需求总结为:固定资产管理、账户管理和权限配置三个部分,需求说明如表1所示。
表1 管理和安全需求说明
根据前述六大需求,笔者将系统分为运维、基本信息、固定资产、账户与权限四大模块进行模块化设计。下面,针对于这四大模块进行介绍。
运维模块主要由设备监控、设备控制、设备维护以及水质监测四大子模块组成,如图2所示。
图2 运维模块图
如图3 所示,区别于之前工人需要去设备上挨个读取水质数据,用户在设备详情页面就可以轻松读取到当前的实时水质数据。通过选择设备上已配置的传感器,就可以将所选时间段内的传感器数据以图表的形式在页面上显示,也可以将所选时段的数据以Excel文件的形式下载到本地。另外,当水质数据超过阈值时,系统会以水质警告的方式在页面和设备上对用户给予提醒。
图3 设备详情页面
设备控制模块是本系统的重要子模块之一,它主要包含设备远程控制和设备操作日志查看两大功能。用户在进入设备详情页面后,可以在页面上远程控制设备,也可以配置定时任务,实现设备的自动化运行。另外,通过页面上的设备使用日志选项,设备负责人可以清楚地看到设备操作历史和配置人,方便检查工作执行情况,以及意外情况下的责任追查。
基本信息模块主要由客户信息和设备信息两大子模块组成。客户信息模块主要用于对购买或租用企业设备的客户信息进行维护,企业可以在基本信息模块下的客户信息页面对客户信息进行维护。设备信息模块主要用于对企业设备的管理,主要包含设备信息查看、设备调拨和设备报废等功能。
固定资产模块主要用于对企业设备的配置、调拨及报废流程进行跟踪与记录,能够让企业对其所拥有的设备资产现状有直观的了解。用户可以在页面侧边栏的固定资产模块下选择查看设备的配置、调拨和报废记录。
账户与权限模块主要分为账户管理和角色权限两个子模块。账户管理模块主要包含账户创建、账户信息维护以及账户权限配置三大功能。系统管理员可以在账户管理页面为不同职位的员工选择对应的角色并创建对应的账号,也可以为已有账号进行信息更新和角色更换,实现了账号权限可配置。角色权限模块主要服务于企业管理员,管理员可以通过该模块创建不同的角色,并给不同的角色配置不同的权限。
系统的网页前端部分主要使用React 框架进行搭建,React 框架通过虚拟DOM 技术的使用,减少与DOM之间的交互,具有速度快、性能好等优点。同时,虚拟DOM 技术能够有效解决跨浏览兼容问题,开发人员在开发过程中可以使用模块化的UI 组件来提高代码的复用率,并使程序具有较好的可维护性。
本系统后台部分使用Django 框架进行搭建,Django 框架是一款基于Python 语言编写,使用MTV架构的开源Web 应用框架。在MTV 架构中,M 代表模型层,负责处理业务对象和数据库表之间的映射关系,T 代表模板层,主要负责将页面展示给用户;V 代表视图层,是模型层与模板层之间的桥梁。
与之前水质监测员需要到现场进行数据采集不同,用户使用本系统可以直观地在页面上获取实时的水质数据。传感器在测得水质数据后,设备端将实时数据通过Websocket 发送至服务器,以此实现水质数据的实时监测。为了防止Websocket 连接中断,在相应的程序中加入心跳机制,将传感器所测得的数据以心跳包的形式发送给服务器,这样即实现了水质数据实时监测的功能,也防止了因连接中断而产生系统问题。另外,当传感器检测到水质异常时,设备端会发送水质异常信息至服务器,用户在网页端和设备人机交互界面上就能看到系统所发出的警报信息,提醒用户及时处理。
用户在设备详情页面可以通过选择设备上配置的不同传感器查看所选时间范围内水质数据图表,也可以通过鼠标点击获取图标上任一时间点的数据信息。该功能使用户可以便捷地查看当前水质的变化趋势,及时进行加药防止水质出现异常。在本系统中,主要使用InfluxDB数据库进行水质数据的存储。InfluxDB作为一款被广泛使用的高性能时序型数据库,因其具有高性能的写入、没有其他依赖、查询效率高、能自动处理过期数据等优点,常被用于涉及大量时间戳数据的后端存储。
通过设备端的人机交互界面或是网页端页面,用户只需要登录具有权限的账号并确定设备处于正确的运行模式,就可以非常便捷地完成定时任务的创建,其流程如图4 所示。在定时任务配置中,使用了ActiveMQ 中间件实现了设备端应用与本地Java 服务之间的异步通信。ActiveMQ 是Apache 开发的一款消息中间件,是JMS 规范的具体实现,具有适应性强、速度快、支持多种语言编写等诸多优点。本系统中,使用了点对点的消息模式,通过在不同客户端建立队列,实现了Java 客户端与C++设备端之间的异步消息通信。同时,未被消费者接收到的消息会存储于ActiveMQ 服务器之中,等待对应的消费者上线接收,解决了异常情况下的消息丢失问题。
图4 定时任务创建流程
为了实现设备定时任务调度,设备开机时会自动运行集成了Quartz 框架以及ActiveMQ 中间件的本地Java 服务。Quartz 是一款由Java 语言编写的开源任务框架,其框架的主要核心分为调度器(Scheduler)、任务(Job)和触发器(Trigger)三大核心组件。在任务注册过程中,首先会创建触发器对象Trigger。之后根据实际需求,选择相应的任务类创建Job 对象并为Trigger 对象和Job 对象设置相关属性,最后通过调度器Scheduler完成任务注册流程。在任务执行流程中,一但到达预先设定的时间,调度器就会调用触发器,触发器会调用任务注册的Job对象,并自动执行Job对象中的相应方法,实现任务执行自动化。
智慧循环水处理硬件系统主要模块包括:RK3288开发板,传感器模块,继电器模块,上位机监测控制模块等。RK3288 开发板是嵌入式系统的关键,主要使用Linux+Qt 来完成主要功能的开发。本系统使用Qt上位机进行人机交互界面设计,通过串口与传感器进行通信,实现数据的采集,并将采集的数据保存到数据库,进行部分数据的展示以及完成相应的泵操作。传感器模块主要通过RS485 串口与上位机进行通讯。另外,为了保证测量的准确性,需要通过标定来对传感器进行校正。为了实现泵的控制,因此采用了继电器模块,通过多路的继电器对多个泵进行控制,通过发送指令来控制继电器的开闭来实现不同泵的开关。上位机监控页面可以显示实时的数据,每隔一段时间对获取的实时数据进行保存,并且用曲线来显示水质数据的变化趋势。
在本系统中,使用了很多的用电设备,而且不同设备所使用的电源有所差异,因此配备了多个开关电源,此外泵的接线需要形成一个完整的回路。其实际电路连接如图5所示。
图5 实际电路连接
本系统需要实现较好的人机交互,支持触控等操作。在Qt中提供了强大的信号和槽,用来实现信息之间的交互,本系统使用了Qt Widget 的编程方式来实现所有的功能,使用Qt 的版本为5.9.2。因为需要跨平台也就是在Linux 下编写代码,最后运行的平台为ARM Linux。由于RK3288 上处理器各方面参数都不如本地参数快,编译速度很慢,因此选择在本地使用交叉编译工具链进行编译,然后移植到RK3288,提高了移植的速度,减少了不必要的时间等待。
本系统设计的主界面如图6所示。在左边显示了整个需要监测的区域,有酸碱度、浊度、ORP、电导率、腐蚀率、温度。右边主要是泵的管理模块,可以实时查看每个泵的状态并手动切换泵的运行模式。此外,右下角的液位计模块还可以实时显示药液余量,判断是否需要补充。
图6 主页面
针对传统水处理企业管理成本高、工作效率低等问题,基于嵌入式和Web 技术开发设计了具有运维模块、固定资产模块、基本信息模块和账户与权限模块四大功能模块的智慧循环水处理系统,实现了实时水质监测、异常水质警报、设备自动控制等功能。整体系统部署上线后运行稳定,达到了预期目标,满足了水处理企业的基本需求,推进了企业的数字化。下一步考虑在设备数量较多的情况下,通过引入快速排序算法,加快设备对象的搜索速度,进一步完善本系统功能。