馬 聰,華 亮,羌予踐
(南通大學(xué)電氣工程學(xué)院,江蘇 南通 226019)
水質(zhì)安全問題關(guān)系到國計民生,但水質(zhì)保護和管理工作中存在的一些問題卻依然仍令人擔憂。雖然國家已建成了“以水環(huán)境監(jiān)測中心為中心,監(jiān)測站為節(jié)點”的覆蓋全國主要江河湖庫的水質(zhì)監(jiān)測網(wǎng)絡(luò)體系,但是依然存在同一水域歸不同部門管轄,監(jiān)測內(nèi)容重復(fù)等問題,造成監(jiān)測工程的重復(fù)投資[1]。把監(jiān)測內(nèi)容形成一個獨立節(jié)點,通過授權(quán)進行訪問,拿到監(jiān)測數(shù)據(jù)將是未來水質(zhì)監(jiān)控系統(tǒng)的發(fā)展趨勢[2]。如何結(jié)合當前互聯(lián)網(wǎng)+技術(shù),設(shè)計出一整套的物聯(lián)網(wǎng)水資源監(jiān)控系統(tǒng),也成為當前水質(zhì)監(jiān)測系統(tǒng)設(shè)計的重點和難點。
傳統(tǒng)水質(zhì)監(jiān)控系統(tǒng)設(shè)計一般采用C/S 架構(gòu),采用應(yīng)用程序設(shè)計或者通過組態(tài)軟件二次開發(fā)技術(shù)進行實現(xiàn),僅適合在局域網(wǎng)中運行,為典型的C/S 系統(tǒng),通信采用TCP/IP 通信技術(shù),在數(shù)據(jù)庫存儲方面采用本地數(shù)據(jù)庫存儲。而當前的組態(tài)軟件在解決高并發(fā)、大數(shù)據(jù)存儲方面,尚存在技術(shù)支撐不足,使得以此為平臺的監(jiān)控系統(tǒng),很難滿足容納百萬級別監(jiān)控終端的大型監(jiān)控系統(tǒng)的設(shè)計要求。同時C/S 模式下的程序設(shè)計,每臺監(jiān)控電腦都要安裝客戶端,雖然組態(tài)軟件也與時俱進,引入瀏覽器發(fā)布模式,但是使用時,必須下載專用的動態(tài)鏈接庫及OCX 控件,相當于對C/S架構(gòu)的縫縫補補,沒有從根本上解決系統(tǒng)架構(gòu)問題。也不能從根本上解決大數(shù)據(jù)監(jiān)控問題存在的技術(shù)難題。隨著電商等行業(yè)的興起,B/S 開發(fā)模式逐漸成為了當前軟件開發(fā)的主流模式,互聯(lián)網(wǎng)+的開發(fā)模式也被國家提到科技升級的戰(zhàn)略高度。以B/S 開發(fā)模式的系統(tǒng)架構(gòu),對傳統(tǒng)的水資源監(jiān)控系統(tǒng)進行重新架構(gòu)設(shè)計,通過前后端分離技術(shù),把數(shù)據(jù)獲取設(shè)計為獨立的后端數(shù)據(jù)中心,前端通過網(wǎng)絡(luò)API 接口獲取后端數(shù)據(jù),能夠把數(shù)據(jù)與顯示分離出來,利用互聯(lián)網(wǎng)+的思想,解決傳統(tǒng)C/S 模式下水質(zhì)監(jiān)控系統(tǒng)設(shè)計的不足,實現(xiàn)B/S 模式下新型的水質(zhì)監(jiān)控系統(tǒng)[2-3]。
在設(shè)計中,結(jié)合當前Web 技術(shù)的發(fā)展,隨著網(wǎng)站功能的日趨復(fù)雜,前后端分離逐漸成為大型Web 項目開發(fā)的主流模式。雖然當前微軟、亞馬遜、阿里、騰訊、百度等互聯(lián)網(wǎng)巨頭也推出了物聯(lián)網(wǎng)平臺,但是這些物聯(lián)網(wǎng)平臺只能在公網(wǎng)運行,不適于專網(wǎng)設(shè)計。本設(shè)計借鑒物聯(lián)網(wǎng)平臺的設(shè)計風(fēng)格,采用了前后端分離的微服務(wù)技術(shù),可以使得前端設(shè)計人員更注重前端設(shè)計與用戶體驗,后端人員更注重服務(wù)器管理的開發(fā),前后端分離的設(shè)計思想可以使軟件開發(fā)并行化,加快軟件開發(fā)的速度。在前后端分離技術(shù)中,Spring 技術(shù)做為輕量級的容器,在Java 開發(fā)中得到廣泛贊譽,其SpringBoot 帶來了全新的軟件設(shè)計自動化配置及解決方案,使得SpringBoot 可以快速搭建生產(chǎn)級的獨立應(yīng)用程序,解決傳統(tǒng)Java EE 項目中遇到的多種問題。因此本設(shè)計采用SpringBoot 對MQTT 物聯(lián)網(wǎng)協(xié)議進行快速整合,后端采用SpringBoot 技術(shù)設(shè)計監(jiān)控數(shù)據(jù)服務(wù)器,前端采用Vue 技術(shù)設(shè)計監(jiān)控系統(tǒng),從而完成微型物聯(lián)網(wǎng)平臺的搭建[4-5]。
在服務(wù)器與水質(zhì)監(jiān)測終端通信方面,可以采用TCP 通信,把服務(wù)器設(shè)計為TCP Server,采用非阻塞式以太網(wǎng)通信技術(shù),但是考慮到每個水質(zhì)監(jiān)測終端為動態(tài)IP,當系統(tǒng)掉電后,一段時間不與網(wǎng)絡(luò)連接,其IP 地址就有可能會發(fā)生變化,則又需要把新的IP 地址重新報備給后端服務(wù)器,完成用戶與設(shè)備新動態(tài)IP 通訊的再次綁定。此方法可以采用SpringBoot 集成Netty 及數(shù)據(jù)庫更新進行實現(xiàn),但是相對較復(fù)雜。采用HTTP 協(xié)議長連接進行通訊,不需要考慮設(shè)備掉電后的新動態(tài)IP 問題,其采用GET方法提交數(shù)據(jù),接口簡單,但是HTTP 報文數(shù)據(jù)量較大,占用帶寬資源較高,不利于解決高并發(fā)問題。而采用MQTT 通信報文精簡、數(shù)據(jù)先發(fā)布到MQTT 消息代理服務(wù)器,通過發(fā)布/訂閱模式進行消息發(fā)送及獲取,無需考慮設(shè)備端聯(lián)網(wǎng)動態(tài)IP 問題,更適合于解決高并發(fā)問題。
考慮到未來系統(tǒng)的擴容及集群式部署,本設(shè)計采用MQTT 協(xié)議。MQTT 協(xié)議為物聯(lián)網(wǎng)重要中間件,是一種輕量級物物互聯(lián)消息協(xié)議,被譽為最適合物聯(lián)網(wǎng)開發(fā)的通信協(xié)議。MQTT 協(xié)議幾乎支持所有編程語言的開發(fā)平臺,通過移植相關(guān)代碼,可以把所有的物聯(lián)網(wǎng)產(chǎn)品與服務(wù)器連接起來,同時MQTT 協(xié)議相對于HTTP 協(xié)議,消息報文簡短,雙向通信,有利于窄帶互聯(lián)及瀏覽器端對設(shè)備的控制。因此本設(shè)計中,引入MQTT 通信協(xié)議,對引入物聯(lián)網(wǎng)的設(shè)計思路,對傳統(tǒng)的水質(zhì)監(jiān)測系統(tǒng)進行重新設(shè)計[6-7]。
本水質(zhì)監(jiān)測系統(tǒng)包括水質(zhì)監(jiān)測終端設(shè)備及云服務(wù)器。云服務(wù)器包括MQTT 消息服務(wù)器、后端服務(wù)器、前端服務(wù)器、Mysql 數(shù)據(jù)庫服務(wù)器。結(jié)構(gòu)圖如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
水質(zhì)監(jiān)測終端包括多參數(shù)水質(zhì)檢測儀及4G DTU 模塊,系統(tǒng)結(jié)構(gòu)如圖2 所示。
圖2 水質(zhì)在線監(jiān)測終端內(nèi)部結(jié)構(gòu)圖
水質(zhì)監(jiān)測終端負責完成水質(zhì)參數(shù)及GPS 信息的采集工作,并由STM32F103 單片機進行系統(tǒng)管理,采用串口通信技術(shù),按照GSON 字符串形式,定時通過串口向4G DTU 模塊提交水質(zhì)采集數(shù)據(jù),4G DTU 采用MQTT 通訊模式,連接MQTT 消息代理服務(wù)器,把該主題消息發(fā)布到消息代理服務(wù)器上,本消息代理服務(wù)器采用ActiveMQ 進行服務(wù)器端消息服務(wù)器部署[7-8]。
后端服務(wù)器:訂閱來自ActiveMQ 消息服務(wù)器的消息,采用SpringBoot 技術(shù),對訂閱主題消息進行解析,然后把消息字符串轉(zhuǎn)換為JSON 數(shù)據(jù),納入Mysql 數(shù)據(jù)庫;在后根據(jù)登錄人員級別,把相關(guān)數(shù)據(jù)推送給前端服務(wù)器。在SpringBoot 數(shù)據(jù)服務(wù)器開發(fā)中,集成Swagger2 組件,方便自動生成前端接口文檔,提高開發(fā)速度;集成Mybatis-plus 組件,方便對數(shù)據(jù)庫進行增刪改查操作;集成Logback 組件,有利于生成操作日志。
前端開發(fā)工作主要是完成數(shù)據(jù)顯示及用戶操作,權(quán)限管理、地圖標注、系統(tǒng)日志、數(shù)據(jù)庫管理。在前端開發(fā)中,Vue 以數(shù)據(jù)驅(qū)動和組件化開發(fā)為核心,更適合監(jiān)控系統(tǒng)的數(shù)據(jù)綁定,因此在開發(fā)工具選擇方面,選擇Vue 技術(shù)為前端開發(fā)技術(shù)支撐。開發(fā)平臺采用Node.js+Webpack+Vue+ElementUI+Axios 搭建。Vue 組件對數(shù)據(jù)進行視圖的綁定,其Model-View-View Model(MVVM)的開發(fā)模式也使得前端開發(fā)從原來的DOM 操作解放出來,只需關(guān)注數(shù)據(jù)的變化,代碼更易維護。ElementUI 方便本系統(tǒng)對視圖的渲染,Axios 用于連接前后臺數(shù)據(jù)互換;由于本設(shè)計監(jiān)控主要應(yīng)用于網(wǎng)頁端,如果應(yīng)用于手機端,可以引入MintUI 進行布局,生成手機端APP,更方便手機瀏覽。前端開發(fā)引入Echart 組件及高德地圖組件,通過Vue 引入數(shù)據(jù),方便進行曲線顯示、地圖定位標注,從而增強數(shù)據(jù)可視化及人機體驗。
水質(zhì)監(jiān)控終端,考慮要與云服務(wù)器進行通信,設(shè)計中選擇MQTT 協(xié)議,其水質(zhì)監(jiān)測終端的軟件流程參考圖3 所示,其通訊數(shù)據(jù)流采用Gson 字符串格式。
圖3 水質(zhì)監(jiān)測終端軟件流程圖
采用ActiveMQ,安裝部署在云端服務(wù)器上,根據(jù)MQTT 協(xié)議發(fā)布/訂閱通信原理,設(shè)計相應(yīng)的主題Topic。
設(shè)備主題(Topic)為:water/{deviceID},一級主題代表水質(zhì),二級主題為設(shè)備唯一序列號ID;
后端SpringBoot 數(shù)據(jù)服務(wù)器訂閱主題:water/,則后端服務(wù)器可以訂閱所有water 主題下的消息。
在水質(zhì)監(jiān)測系統(tǒng)設(shè)計中,其數(shù)據(jù)庫設(shè)計,參考工控組態(tài)軟件中數(shù)據(jù)庫結(jié)構(gòu),工控組態(tài)軟件一般包括實時數(shù)據(jù)表、歷史數(shù)據(jù)表、報警設(shè)定表、報警數(shù)據(jù)表,管理人員數(shù)據(jù)表;本數(shù)據(jù)庫設(shè)計在吸收工控系統(tǒng)優(yōu)點的情況下,增加用戶與設(shè)備綁定表,用于把管理員與其管理區(qū)域、權(quán)限進行綁定;用戶菜單表,根據(jù)用戶權(quán)限推送不同的操作菜單。如下為本系統(tǒng)數(shù)據(jù)庫表結(jié)構(gòu)。
(1)用戶數(shù)據(jù)表
包含字段為用戶ID(userid)、用戶名(name)、手機號(tel)、管理權(quán)限(level)、管理區(qū)域(zone)、創(chuàng)建時間(createtime)字段,該表相當于組態(tài)軟件中用戶管理。
(2)設(shè)備實時數(shù)據(jù)表
表結(jié)構(gòu)包含設(shè)備唯一序列號ID,所處區(qū)域、IP地址、MAC 地址、各種水質(zhì)參數(shù)、GPS 經(jīng)緯度等數(shù)據(jù)。當水質(zhì)監(jiān)測終端發(fā)布主題消息,因后端數(shù)據(jù)服務(wù)器訂閱了來自water 主題下的所有消息,所有可以收到來自消息代理服務(wù)器ActiveMQ 的所有該主題消息推送;后端服務(wù)器在偵聽到相應(yīng)主題消息,把數(shù)據(jù)刷新到設(shè)備實時數(shù)據(jù)表,該表相當于組態(tài)軟件實時數(shù)據(jù)詞典。
(3)歷史數(shù)據(jù)表
當設(shè)備實時數(shù)據(jù)表數(shù)據(jù)刷新時,采用Mysql 觸發(fā)器把實時數(shù)據(jù)表該記錄根據(jù)當前時間增添到歷史數(shù)據(jù)表中。歷史數(shù)據(jù)表設(shè)計為當前時間、設(shè)備ID、各種水質(zhì)參數(shù)、GPS 經(jīng)緯度;該表主要用于每臺在線設(shè)備歷史數(shù)據(jù)存儲,供數(shù)據(jù)前端可視化查詢。該表相當于組態(tài)軟件數(shù)據(jù)存入歷史數(shù)據(jù)庫。
(4)報警設(shè)定表
該數(shù)據(jù)表根據(jù)用戶所處區(qū)域,對該區(qū)域水質(zhì)監(jiān)測設(shè)備的參數(shù)上限、下限、上上限、下下限,進行設(shè)定。后臺服務(wù)器偵聽消息服務(wù)器推送消息,把消息解析后,根據(jù)設(shè)備ID 查詢該表,把數(shù)據(jù)與參數(shù)的報警值進行比較,當觸及報警限制時,把報警數(shù)據(jù)插入報警數(shù)據(jù)表,該表相當于組態(tài)軟件中報警設(shè)置。
(5)設(shè)備用戶綁定表
用于記錄用戶與設(shè)備的映射關(guān)系,設(shè)備唯一序列號devicesID、用戶唯一標識userID,當后端服務(wù)器偵聽到消息服務(wù)器推送消息,對消息進行解析,獲取設(shè)備ID,查設(shè)備用戶綁定表,可獲取用戶ID、權(quán)限、區(qū)域,根據(jù)具體要求向前端推送數(shù)據(jù),達到精確推送的要求。
(6)報警實時數(shù)據(jù)表
數(shù)據(jù)庫字段包括報警時間、報警設(shè)備、報警參數(shù)、報警級別,報警處理字段。該表相當于組態(tài)軟件中實時報警。
當數(shù)據(jù)報警時候,納入報警記錄,將報警處理值設(shè)置為0,當報警處理結(jié)束,報警處理值設(shè)為1,表示已經(jīng)處理該報警。網(wǎng)頁端通過Axios 的Get 方法,調(diào)用后臺數(shù)據(jù)中心接口,查詢報警數(shù)據(jù)表,獲取報警數(shù)據(jù),渲染到網(wǎng)頁上。
(7)報警歷史數(shù)據(jù)表
該表用于記錄系統(tǒng)報警歷史數(shù)據(jù),通過報警實時數(shù)據(jù)表刷新觸發(fā)插入報警歷史數(shù)據(jù),供前端進行報警歷史分析及查詢,該表相當于組態(tài)軟件報警歷史數(shù)據(jù)庫。
(8)用戶菜單表
根據(jù)用戶注冊信息,當用戶登錄后,根據(jù)權(quán)限、區(qū)域,獲取用戶個性化導(dǎo)航欄相關(guān)數(shù)據(jù)、顏色等菜單數(shù)據(jù),該表用于個性化前端導(dǎo)航欄,傳統(tǒng)組態(tài)軟件無法實現(xiàn)。
在后端服務(wù)器,主要負責消息訂閱/發(fā)布,根據(jù)數(shù)據(jù)庫設(shè)定信息,進行相關(guān)邏輯業(yè)務(wù)操作,并把數(shù)據(jù)推送給前端服務(wù)器。后端服務(wù)器采用SpringBoot 技術(shù),SpringBoot 采用AOP 開發(fā)理念,采用注解編程,采用容器技術(shù),把需要的模塊添加到相應(yīng)的容器中。開發(fā)中,采用Maven 技術(shù)構(gòu)建數(shù)據(jù)倉庫,通過pom.xml 引入相關(guān)依賴。在本項目中,注入ActiveMQ client、SpringBoot-web-starter、Mybatis-Plus、Mysql-Connector、Swagger2、Lombok 等組件。
(1)新建config 類,利用mybatis-plus 自動代碼生成器創(chuàng)建部分通用代碼[9]。
對于SpringBoot 軟件開發(fā),其對數(shù)據(jù)庫的操作,正常包括增刪改查操作、采用步驟基本一樣,首先配置數(shù)據(jù)庫:
在application.property 文件中配置數(shù)據(jù)庫基本信息及消息服務(wù)器配置及其他信息。
創(chuàng)建實體類:為每個數(shù)據(jù)表格創(chuàng)建實體類,通過Lombok 插件的@ Data 注解自動設(shè)置Setter,Getter方法。用于存放我們的實體類,與數(shù)據(jù)庫中的屬性值基本保持一致。
創(chuàng)建數(shù)據(jù)庫接口DAO 層,通過@Repository 注解對數(shù)據(jù)庫進行數(shù)據(jù)持久化操作,完成數(shù)據(jù)庫操作的邏輯映射。通過@MapperScan 注解,注入主程序管理。
為每個實體類創(chuàng)建Services 接口及Services 執(zhí)行方法。
為每個實體類創(chuàng)建控制層Controller;通過@RestController、@ GetMapping、@ Postmapping 注解的使用,完成接收前端傳過來的參數(shù)進行業(yè)務(wù)操作,再將處理結(jié)果返回到前端,實現(xiàn)前后端數(shù)據(jù)參數(shù)傳遞。
在配置完application.property 后,可以采用Mybatis-Plus 代碼生成器[10],自動生成通用的的數(shù)據(jù)庫操作部分代碼,把軟件開發(fā)人員從重復(fù)勞動中解脫出來。通過test 類執(zhí)行代碼,自動生成上述操作代碼。配置Swagger2,采用注解的方式自動生成前端接口文檔,省去編寫前端接文檔的麻煩,提高工作效率。
(2)注入消息偵聽處理邏輯
當偵聽到所訂閱的消息主題,解析消息內(nèi)容:首先把消息字符串由設(shè)備端的ASCII 碼轉(zhuǎn)UTF-8 碼,消息內(nèi)容統(tǒng)一規(guī)定為Gson 字符串形式,把Gson 字符串解析為Gson 數(shù)據(jù),調(diào)用設(shè)備實時數(shù)據(jù)表Services 接口中插入方法,插入方法調(diào)用DAO 層數(shù)據(jù)庫操作映射邏輯,把數(shù)據(jù)寫入設(shè)備實時數(shù)據(jù)表,同時在數(shù)據(jù)庫中,實時數(shù)據(jù)表數(shù)據(jù)刷新將觸發(fā)數(shù)據(jù)插入到歷史數(shù)據(jù)表的操作,實現(xiàn)歷史數(shù)據(jù)保存;查詢設(shè)備報警設(shè)定表,把Gson 數(shù)據(jù)與報警設(shè)定數(shù)據(jù)進行比較,當滿足報警條件,把報警數(shù)據(jù)寫入報警實時數(shù)據(jù)庫,為報警實時數(shù)據(jù)庫配置插入數(shù)據(jù)觸發(fā)寫入報警歷史數(shù)據(jù)庫方法,實現(xiàn)報警歷史數(shù)據(jù)庫保存。
(3)在控制層,編寫控制層Controller 接口:
用戶登錄后,根據(jù)權(quán)限,采用Get 方法,查詢用戶菜單表,個性化生成操作界面。
①根據(jù)用戶權(quán)限及分管區(qū)域,通過添加設(shè)備,通過錄入設(shè)備SN,設(shè)備SN 也就是設(shè)備內(nèi)部MQTT 消息主題號,插入更新到設(shè)備用戶綁定表,完成設(shè)備與用戶的綁定。
②為每臺設(shè)備做報警設(shè)置接口,定義監(jiān)控參數(shù)的上限、上上限、下限、下下限,以記錄形式插入報警設(shè)置表,為其編寫接口方法。
③定時查詢設(shè)備實時數(shù)據(jù)表,返回當前最新的實時數(shù)據(jù),根據(jù)用戶分管區(qū)域?qū)崿F(xiàn)對其管轄區(qū)域內(nèi)設(shè)備精確數(shù)據(jù)條件查詢。
通過上述程序模塊的定義,及程序化,配置Swagger2 類,統(tǒng)一生成用戶后端API 接口,為進一步前端開發(fā)做完準備工作。通過Swagger2 生成的接口文檔如圖4 所示。
圖4 通過Swagger2 生成數(shù)據(jù)中心接口文檔
前端開發(fā)任務(wù)為監(jiān)控數(shù)據(jù)的可視化。首先利用Visual Studio Code 平臺,采用Vue+ElementUI+Axios+Echart+高德地圖等插件,完成前端開發(fā)平臺搭建。然后統(tǒng)一外部數(shù)據(jù)接口、跨域設(shè)置、狀態(tài)存儲的定義,實現(xiàn)如下功能:
(1)人員登錄管理:對管理人員進行增添、刪除、權(quán)限分配操作;該功能實現(xiàn)通過Axios 傳參,調(diào)用后臺用戶SpringBoot 的API 接口獲取數(shù)據(jù),渲染到網(wǎng)頁模塊上,通過SpringBoot 實現(xiàn)與數(shù)據(jù)庫的交互。
(2)設(shè)備配置:根據(jù)設(shè)備唯一序列號SN,完成設(shè)備添加,設(shè)備報警參數(shù)設(shè)定,設(shè)備人員綁定設(shè)定,通過API 接口,寫入數(shù)據(jù)庫相應(yīng)的表中。當數(shù)據(jù)中心偵聽到MQTT 消息后,獲取消息內(nèi)容、解析消息后,將根據(jù)設(shè)備唯一序列號SN 查詢報警設(shè)定表數(shù)據(jù),與之比較,決定數(shù)據(jù)是否產(chǎn)生報警信息,納入報警數(shù)據(jù)庫,而后根據(jù)權(quán)限或地域把設(shè)備參數(shù)數(shù)據(jù)及報警數(shù)據(jù)進行網(wǎng)頁精準推送。前端設(shè)備配置界面如圖5 所示,包括設(shè)備添加、報警設(shè)置、設(shè)備人員綁定配置。
圖5 設(shè)備配置頁面
(3)設(shè)備數(shù)據(jù)前端顯示,根據(jù)權(quán)限,通過調(diào)用數(shù)據(jù)中心設(shè)備實時數(shù)據(jù)表的API 查詢接口,完成實時數(shù)據(jù)獲取,渲染到網(wǎng)頁上;通過調(diào)用數(shù)據(jù)中心歷史數(shù)據(jù)表的API 查詢接口,獲取不同設(shè)備的歷史數(shù)據(jù),渲染到網(wǎng)頁的Echart 組件上,完成歷史曲線等圖形化顯示;獲取設(shè)備的GPS 位置信息,通過調(diào)用網(wǎng)頁中的高德地圖組件,標記在高德在線地圖上,完成地圖上設(shè)備的標定。如圖6 所示。
圖6 設(shè)備地圖在線標記
本系統(tǒng)設(shè)計的亮點為采用前后端分離的軟件設(shè)計模式,搭建基于微服務(wù)的監(jiān)測中心,后端數(shù)據(jù)中心與前端顯示分別架構(gòu),突破傳統(tǒng)C/S 模式下監(jiān)控中心封閉性、其他系統(tǒng)無法接入的難題,本系統(tǒng)架構(gòu)為新的開放式架構(gòu)。其后端數(shù)據(jù)中心只要通過授權(quán),即可通過API 接口訪問該中心數(shù)據(jù);其前端視圖頁面可以接口各種互聯(lián)網(wǎng)資源,與組態(tài)軟件二次開發(fā)的監(jiān)控系統(tǒng)比較,參考表1。
表1 與組態(tài)軟件二次開發(fā)的監(jiān)控系統(tǒng)比較
與架構(gòu)在公網(wǎng)的物聯(lián)網(wǎng)平臺比較,本設(shè)計方法更靈活、可以布局在專用網(wǎng)絡(luò)中,避免網(wǎng)絡(luò)攻擊,安全性更好;同時也避免了對其他資源平臺的技術(shù)依賴。
前后端分離的服務(wù)器開發(fā)模式,在前端采用Vue 技術(shù),ElementUI 組件設(shè)計頁面,其人機體驗遠高于傳統(tǒng)工控組態(tài)軟件開發(fā)的頁面布局。
由于項目處于系統(tǒng)測試階段,設(shè)備較少,在后端SpringBoot 架構(gòu)中,涉及內(nèi)存數(shù)據(jù)庫操作沒有引入Redis 模塊進行服務(wù)器內(nèi)存管理,隨著未來設(shè)備的擴容,將引入Redis 技術(shù)作為補充,以減輕關(guān)系數(shù)據(jù)庫的查詢壓力,提高系統(tǒng)的處理速度及解決高并發(fā)問題的能力,在前后端通訊方面,如采用Websocket 技術(shù),實現(xiàn)后臺采集數(shù)據(jù)的前端推送,將優(yōu)化系統(tǒng)性能。
在測試階段,沒有引入設(shè)備自動注冊的思路,采用出廠唯一序列號作為標識,在設(shè)備大批量生產(chǎn)階段,將造成出廠前,每次燒寫程序都要修改芯片中序列號,不利于大批量生產(chǎn),在后期將引入設(shè)備互聯(lián)網(wǎng)自動注冊方法,由服務(wù)器分配序列號,傳給設(shè)備,自動寫入STM32 單片機的NAND 存儲器,也就是分配其MQTT 通信的主題,以適應(yīng)大批量生產(chǎn)的要求。
在本設(shè)計中采用工廠化軟件設(shè)計思路,探索一種采用互聯(lián)網(wǎng)+的模式下改造傳統(tǒng)水質(zhì)監(jiān)控系統(tǒng)的方法。測試結(jié)果表明,該方法可以完全替代傳統(tǒng)的基于組態(tài)軟件的水質(zhì)監(jiān)測系統(tǒng),相當于充分利用互聯(lián)網(wǎng)資源對傳統(tǒng)監(jiān)控系統(tǒng)進行升級改造。此設(shè)計方法同樣適用于其他智慧環(huán)保,智慧城市、智慧工廠等大型自動化項目的工程設(shè)計。