修偉通 李娟 王如龍
1. 北京信息科技大學(xué)自動(dòng)化學(xué)院,北京 100192;2. 中熱智能(北京)工程技術(shù)有限公司,北京 100192
隨著城市化進(jìn)程的加快,供熱需求也增長(zhǎng)迅速?;趥鹘y(tǒng)人工控制的供熱熱網(wǎng)也逐步被自動(dòng)化設(shè)備取代[1],人們對(duì)自動(dòng)化控制的數(shù)據(jù)要求也越來越高,從基本的熱網(wǎng)熱源控制參數(shù)發(fā)展到管網(wǎng)控制參數(shù),進(jìn)而發(fā)展到換熱站控制參數(shù)[2-4]。眾多數(shù)據(jù)的引入使我國的集中供熱逐漸向智慧化的方向轉(zhuǎn)變。近些年,供熱公司和高校逐漸把目光轉(zhuǎn)向處于供熱末端的供熱用戶身上,用戶室內(nèi)的溫度是供熱效果最為直接可靠的體現(xiàn)[5]。因此,以采集用戶室內(nèi)溫度為目的的測(cè)溫終端被廣泛部署,這種終端設(shè)備可以代替?zhèn)鹘y(tǒng)的人工上報(bào)手段,使獲得的數(shù)據(jù)更加具有實(shí)時(shí)性和參考性。近年來,隨著物聯(lián)網(wǎng)技術(shù)、無線通信技術(shù)和云計(jì)算的迅速發(fā)展,開發(fā)基于B/S(Browser/Server)架構(gòu)的室溫遠(yuǎn)程監(jiān)控系統(tǒng)已成為新的組網(wǎng)形式[6]。用戶僅需要通過瀏覽器就可以實(shí)時(shí)查詢各個(gè)供熱區(qū)域內(nèi)的供熱情況,對(duì)實(shí)時(shí)了解供熱情況,合理分配供熱資源具有重要意義。
本文提出一種基于B/S架構(gòu)的室溫監(jiān)控平臺(tái),該平臺(tái)使用Django框架作為Web開發(fā),前端采用Bootstrap、CSS、JavaScript和HTML5對(duì)數(shù)據(jù)進(jìn)行可視化展現(xiàn),后端則使用Python語言完成數(shù)據(jù)交互,MySQL作為云端數(shù)據(jù)庫,引用GIS系統(tǒng)展現(xiàn)區(qū)域熱力圖。進(jìn)而實(shí)現(xiàn)系統(tǒng)與現(xiàn)場(chǎng)測(cè)溫終端進(jìn)行GPRS無線通信,實(shí)現(xiàn)室溫的遠(yuǎn)程監(jiān)控。
室溫監(jiān)控平臺(tái)選用的網(wǎng)絡(luò)架構(gòu)模式是B/S體系[7-8]。這種架構(gòu)體系是基于瀏覽器和服務(wù)器之間的一種信息交互模式,是一種伴隨Web技術(shù)一同發(fā)展起來的新型架構(gòu)體系。這種架構(gòu)體系將數(shù)據(jù)庫作為服務(wù)器,瀏覽器作為客戶端,通過HTTP協(xié)議進(jìn)行通信,用戶界面通過瀏覽器進(jìn)行展示。與傳統(tǒng)的C/S(Client/Server)體系相比,新的架構(gòu)體系更能減少系統(tǒng)的開發(fā)和維護(hù)成本,同時(shí)為用戶的使用提供便利。
系統(tǒng)總體設(shè)計(jì)如圖1所示,可分成3大部分:應(yīng)用層、網(wǎng)絡(luò)傳輸層和設(shè)備層。
應(yīng)用層即為向用戶展示的監(jiān)控平臺(tái),采用Django框架搭建,用戶可以通過瀏覽器登錄系統(tǒng),直觀查看供熱數(shù)據(jù)以及供熱熱力圖;網(wǎng)絡(luò)傳輸層主要是通過Socket監(jiān)聽,將測(cè)溫設(shè)備上傳的數(shù)據(jù)解析并存儲(chǔ)到MySQL數(shù)據(jù)庫中;設(shè)備層則是當(dāng)前已經(jīng)安裝的測(cè)溫設(shè)備,數(shù)據(jù)通過GPRS以Socket的形式進(jìn)行上傳。
MySQL是目前最為流行的關(guān)系型數(shù)據(jù)控管理系統(tǒng)。該數(shù)據(jù)庫管理系統(tǒng)具有軟件體積小、數(shù)據(jù)處理速度快和代碼開源開發(fā)成本低的特點(diǎn)。同時(shí),MySQL數(shù)據(jù)庫可以兼容Django框架,通過Django框架設(shè)計(jì)數(shù)據(jù)模型后,通過Django數(shù)據(jù)庫遷移功能即可完成數(shù)據(jù)庫的搭建工作,同時(shí)針對(duì)SQL語言,Python設(shè)計(jì)了更為方便的數(shù)據(jù)包——pymysql,可以使開發(fā)人員更加方便的管理和操作數(shù)據(jù)庫。因此,將MySQL作為服務(wù)器的數(shù)據(jù)庫,對(duì)于存儲(chǔ)大量設(shè)備信息、用戶信息和歷史溫度數(shù)據(jù),提供快捷高效的邏輯運(yùn)算和數(shù)據(jù)分析起到了十分重要的作用。
本文提出的室溫監(jiān)測(cè)系統(tǒng)基于B/S(Brower/Server)架構(gòu),使用Django框架進(jìn)行開發(fā)。Django框架是在傳統(tǒng)MVC的基礎(chǔ)上用模板代替控制器發(fā)展而成的新模式——MTV設(shè)計(jì)模式,即模型(Model)、模板(Template)、視圖(View)[9]。其中,模型層是數(shù)據(jù)存儲(chǔ)層,通過創(chuàng)建表單、字段與數(shù)據(jù)庫進(jìn)行同步管理,提供通用的數(shù)據(jù)輸入輸出接口,當(dāng)應(yīng)用更換不同類型數(shù)據(jù)庫時(shí),不需要重新建立數(shù)據(jù)庫模型,利用現(xiàn)有的表單模型即可生成新的數(shù)據(jù)庫文件;模板層是數(shù)據(jù)渲染層,決定瀏覽器內(nèi)容呈現(xiàn)的樣式,從而決定了數(shù)據(jù)的可視化形式;視圖層是業(yè)務(wù)邏輯層,后端接收前端用戶業(yè)務(wù)請(qǐng)求,數(shù)據(jù)的預(yù)處理分析以及查詢工作和邏輯功能的實(shí)現(xiàn)都是在視圖層進(jìn)行完成,是連接模板與模型的橋梁,Django框架如圖2所示。
地理信息系統(tǒng)(geographic information system,GIS)是基于計(jì)算機(jī)軟硬件系統(tǒng)的以數(shù)據(jù)采集、存儲(chǔ)、管理、分析和描述整個(gè)或部分地區(qū)表面資源的技術(shù)系統(tǒng)[10]。該系統(tǒng)可以將地物的地理空間位置和與其相關(guān)的其他屬性數(shù)據(jù)進(jìn)行結(jié)合展示,使信息更為直觀地展現(xiàn)出來。同時(shí),也可以為用戶提供分析、查詢以及檢索等相關(guān)功能。基于GIS系統(tǒng)設(shè)計(jì)的熱力圖可以更加直觀地反映區(qū)域供熱情況。本次平臺(tái)設(shè)計(jì)選用百度地圖作為GIS系統(tǒng)模板,前端調(diào)用百度地圖預(yù)留的API接口,可以在百度地圖原有的地圖系統(tǒng)中直接繪制區(qū)域熱力圖。
系統(tǒng)硬件基于目前中熱智能(北京)工程技術(shù)有限公司已經(jīng)研發(fā)的室內(nèi)溫度采集終端,采用單片機(jī)STM32F103C8T6作為主控MCU,無線通信技術(shù)選用GPRS技術(shù),使用通行模塊型號(hào)為M26,外圍電路包括測(cè)溫電路、存儲(chǔ)電路、實(shí)時(shí)時(shí)鐘電路和GPRS通信電路,硬件模塊的結(jié)構(gòu)組成如圖3所示。該測(cè)溫終端可以將采集到的數(shù)據(jù)通過GPRS模塊以Socket嵌套字的形式上傳至服務(wù)器進(jìn)行解析處理。
系統(tǒng)軟件可以分為服務(wù)器軟件設(shè)計(jì)和數(shù)據(jù)通信軟件設(shè)計(jì)。其中,服務(wù)器部分可以根據(jù)Django框架分為模型設(shè)計(jì)、模板設(shè)計(jì)和視圖設(shè)計(jì)。
室溫監(jiān)控平臺(tái)界面的整體功能包括用戶的登錄與注冊(cè)、設(shè)備信息管理、溫度報(bào)警、實(shí)時(shí)熱力圖和歷史溫度數(shù)據(jù)查詢等功能。
3.1.1 模型設(shè)計(jì)
使用Pycharm軟件建立Django項(xiàng)目后,可以在models.py文件中建立數(shù)據(jù)模型,模型建立后可以使用指令python manage.py makemigratetions和指令python manage.py migrate通過該模型在MySQL數(shù)據(jù)庫中建立對(duì)應(yīng)表單用于后續(xù)的數(shù)據(jù)存儲(chǔ)工作。
本文設(shè)計(jì)的監(jiān)控平臺(tái)共建立3個(gè)數(shù)據(jù)模型,即User(用戶模型)、UserItom(設(shè)備模型)和ItomDetail(設(shè)備信息模型)。3個(gè)表單均為一對(duì)多關(guān)系,各個(gè)模型之間可以通過關(guān)鍵詞ForeignKey建立外部聯(lián)系,模型關(guān)系結(jié)構(gòu)和具體ForeignKey如圖4所示。
模型User用于用戶信息表單建立,涉及用戶賬號(hào)、密碼、地址區(qū)域等信息;模型UserItom用于設(shè)備信息表單建立,涉及設(shè)備ID、設(shè)備地址、經(jīng)緯度等信息的存儲(chǔ);模型ItomDetail主要用于設(shè)備采集溫度表單建立,其功能主要為保存測(cè)溫終端上傳的溫度數(shù)據(jù)和采集時(shí)間。
3.1.2 視圖設(shè)計(jì)
Django框架中視圖設(shè)計(jì)包含2個(gè)內(nèi)容:路由(URL)設(shè)置和視圖函數(shù)設(shè)計(jì)。
路由是根據(jù)用戶請(qǐng)求的URL連接來判斷對(duì)應(yīng)的處理程序,同時(shí)返回處理結(jié)果,即Django框架通過URL來將用戶請(qǐng)求與視圖函數(shù)建立映射關(guān)系。Django路由使用正則表達(dá)式在urls.py中進(jìn)行配置,urls.py中的每一條配置對(duì)應(yīng)響應(yīng)的處理方法。本文設(shè)計(jì)的系統(tǒng)路由配置如圖5所示。
3.1.3 模板設(shè)計(jì)
Django框架中的模板語言是一種將HTML語言與邏輯控制代碼相結(jié)合的新型語言,可以在服務(wù)端后端的數(shù)據(jù)變量嵌入到HTML文件中進(jìn)行渲染后,返回給瀏覽器來達(dá)到前后端代碼分離、頁面動(dòng)態(tài)顯示的目的。Django模板語言的優(yōu)勢(shì)主要展現(xiàn)在母版繼承和include組件嵌套。
母版繼承以減少網(wǎng)頁公用頁面區(qū)域重復(fù)使用造成的代碼冗余,通過在母版定義block塊,子版繼承母版后僅需編寫塊中內(nèi)容即可實(shí)現(xiàn)網(wǎng)頁的快速編寫,例如圖6中的base.html文件為用戶登錄后的系統(tǒng)樣式文件,子版繼承后就可在此基礎(chǔ)上實(shí)現(xiàn)其余功能,如圖7所示,紅色區(qū)域內(nèi)為子版繼承后編寫的block塊。
Include組件嵌套則可以方便對(duì)HTML中需要的CSS和JavaScript代碼進(jìn)行整合形成公共組件,其他代碼則可以通過標(biāo)簽{% include %}進(jìn)行調(diào)用。
熱力圖的設(shè)計(jì)是以百度地圖為基礎(chǔ),在HTML文件中通過script標(biāo)簽接入百度地圖的API接口,使用JavaScript完成地圖創(chuàng)建,確定地圖中心坐標(biāo)和其余地圖設(shè)置。
熱力圖數(shù)據(jù)可以在后端以json格式通過render函數(shù)傳遞給前端的JavaScript函數(shù),json數(shù)據(jù)中要包含建立熱力點(diǎn)所需要的設(shè)備經(jīng)緯度信息和溫度等級(jí)信息,溫度等級(jí)范圍是0~100,可以根據(jù)實(shí)際使用的溫度范圍進(jìn)行自定義劃分,不同等級(jí)在圖中展示的顏色也會(huì)不同。百度地圖提供的heatmapOverlay.setDateSet()可以根據(jù)提供的熱力信息完成熱力圖制作,熱力圖如圖8所示。
測(cè)溫終端作為客戶端,使用綁定的服務(wù)器IP地址和預(yù)留端口號(hào),利用GPRS實(shí)現(xiàn)對(duì)服務(wù)器的連接和訪問。服務(wù)端則利用Python Socket編寫腳本用以偵聽GPRS發(fā)送的TCP/IP請(qǐng)求。當(dāng)終端GPRS模塊與服務(wù)端監(jiān)聽程序設(shè)置的IP地址及端口一致時(shí),就可以建立兩者通信。之后,通過建立MySQL數(shù)據(jù)庫游標(biāo)將終端上傳的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中,通信流程如圖9所示。
在熱力圖顯示界面,為方便用戶更加詳細(xì)地了解實(shí)時(shí)數(shù)據(jù)情況,引入實(shí)時(shí)數(shù)據(jù)展示功能。該功能可以將各個(gè)設(shè)備的最新溫度數(shù)據(jù)進(jìn)行滾動(dòng)式循環(huán)顯示,同時(shí),使用JavaScript編寫腳本函數(shù)用不同顏色區(qū)分各個(gè)溫度區(qū)域:溫度數(shù)據(jù)低于10 ℃或高于27 ℃標(biāo)記為異常溫度,用紅色進(jìn)行標(biāo)識(shí);溫度處于10~18 ℃之間標(biāo)記低溫,用藍(lán)色進(jìn)行標(biāo)識(shí);溫度處于18~23 ℃之間標(biāo)記為正常溫度,用綠色進(jìn)行標(biāo)識(shí);溫度處于23~27 ℃之間標(biāo)記為高溫,用黃色進(jìn)行標(biāo)識(shí)。此外,可以使用HTML編寫鼠標(biāo)懸停功能,當(dāng)鼠標(biāo)懸停于某個(gè)數(shù)據(jù)上時(shí),該數(shù)據(jù)會(huì)變?yōu)榘咨珮?biāo)記,同時(shí)顯示該數(shù)據(jù)的采集時(shí)間,方便用戶查詢,實(shí)時(shí)數(shù)據(jù)功能如圖10所示。
服務(wù)器使用Python Socket腳本對(duì)端口進(jìn)行偵聽,接收來自測(cè)溫終端的連接請(qǐng)求和數(shù)據(jù),并將接收的數(shù)據(jù)存入MySQL數(shù)據(jù)庫中。用戶注冊(cè)、登錄系統(tǒng)后,可以看到已經(jīng)綁定的設(shè)備信息以及已經(jīng)上傳的歷史溫度數(shù)據(jù)和實(shí)時(shí)熱力圖。系統(tǒng)部分功能界面如圖11所示。
本文結(jié)合物聯(lián)網(wǎng)和GPRS無線通信技術(shù)設(shè)計(jì)了室溫監(jiān)控平臺(tái)。平臺(tái)設(shè)計(jì)基于Django框架,給出了詳細(xì)的軟件設(shè)計(jì)流程以及具體工具的使用方法,經(jīng)過測(cè)試,該平臺(tái)可以穩(wěn)定接收終端數(shù)據(jù),方便用戶遠(yuǎn)程管理設(shè)備,通過熱力圖直觀展現(xiàn)區(qū)域供熱分布情況。本系統(tǒng)與傳統(tǒng)的室溫統(tǒng)計(jì)方法相比,在極大減少人力成本的同時(shí)提高了數(shù)據(jù)的實(shí)時(shí)性,從而為智慧供熱整體控制提供更為可靠的數(shù)據(jù)支持。