薛 峰,李 娟,王如龍
(1.北京信息科技大學 自動化學院,北京 100192;2.中熱智能(北京)工程技術有限公司,北京 100085)
隨著我國城市建設的快速發展,集中供熱的規模更加龐大,是我國冬季主要的供暖形式之一。由于供熱系統具有大慣性和大滯后等特點[1],供熱不均和水力失衡等問題時常出現[2]。為解決此類問題,熱力公司需要對室內供暖的實際溫度進行獲取,以此指導熱網的自動化調度工作,調整供熱策略,從而達到按需供熱的重要目標[3]。
無線通信技術因具有成本低、靈活性高、適應性強和便于維護等優勢,在各行業及溫度監測領域得到廣泛的應用[4-5]。文獻[6]利用ZigBee技術進行溫度傳感器組網,對室內多個點位的溫度進行監測。但ZigBee技術僅適用于短距離、小范圍內的設備組網,信號穿墻能力弱,不適用于長距離通信。文獻[7]采用近年來推出的遠距離無線電(Long Range Radio,LoRa)技術設計了一種環境溫濕度監測節點,可以實時監測車間內的溫濕度變化,對異常情況進行報警提醒。但LoRa網絡在實際使用時,除了在現場終端設備中安裝LoRa射頻模塊外,還需根據終端設備的數量,部署相應的匯聚網關,部署難度大,成本較高[8]。文獻[9]運用通用無線分組業務(General Packet Radio Service,GPRS)技術對集中供熱用戶住房內的溫度進行監測。但GPRS設備工作電流較大,整體功耗高[10],不適合用于長期由電池供電的工作場景。窄帶物聯網(Narrow Band Internet of Things,NB-IoT)作為近些年發展較快的物聯網無線通信技術,使用授權頻段,具有低功耗、低速率和強連接等特點,與非實時、低頻次的定時上報數據類業務較契合[11-12]。
因此,本文設計一種基于NB-IoT技術,采用UDP的遠程供熱溫度監測系統,溫度終端可用電池供電,按照設置的時間周期定時采集環境和設備的有關信息,并上傳至云服務器;熱力公司可通過電腦端瀏覽器打開Web頁面查閱當前和歷史數據,也可通過手機APP查看當前供熱情況。系統對于協助熱力公司掌握供熱狀況、提高供熱質量具有實際意義。
基于NB-IoT的供熱溫度監測系統總體結構如圖1所示。由溫度終端、移動通信網絡、百度云服務器和客戶端等四部分組成。溫度終端作為現場設備,采集和處理室內的環境溫濕度數據和設備相關信息,并通過NB-IoT網絡上傳至移動通信基站;移動通信基站通過UDP協議與云服務器交換數據,云服務器對數據進行解析、存儲;手機APP和電腦Web瀏覽器可通過HTTP協議訪問云服務器查看最新數據。

圖1 供熱溫度監測系統組成
NB-IoT支持TCP、UDP、HTTP、消息隊列遙測傳輸(Message Queuing Telemetry Transport,MQTT)、受限應用協議(Constrained Application Protocol,CoAP)等眾多協議。其中,UDP協議的報文結構簡單,且無需保持長連接,對流量和電量消耗少,適用于低功耗的應用場景。
供熱溫度監測系統終端的硬件總體結構如圖2所示,主要由鋰電池、低壓差線性穩壓器、主控單元、NB-IoT通信模組、溫濕度傳感器和電池電量檢測電路等部分組成。

圖2 溫度終端硬件總體結構
低壓差線性穩壓器ME6211C33M5G-N將電池電源穩壓后給各部分供電;主控單元包括主控微處理器(Micro Control Unit,MCU)及其外圍電路,MCU型號為STM32L071CBT6,待機模式的消耗電流為0.85 μA,外圍電路包括串行接口電路、供電插口、晶振、濾波電容、復位按鈕等;NB-IoT通信模組包括模組本體及其外圍電路,模組本體選用中國移動M5310-A,外圍電路包括串行接口電路、SIM卡、天線和復位按鈕。M5310-A支持UDP協議及其他多種通信協議,在節能模式(Power Saving Mode,PSM)狀態下的運行電流低至5 μA;溫濕度傳感器型號為奧松AHT25,采用I2C協議進行通信,體積小,精度良好,使用1.27 mm間距的插銷式接口與MCU連接。
根據電池電量和電壓的曲線關系[13],設計了電池電量檢測電路。利用電阻分壓和ADC采樣功能,估算鋰電池的剩余電量。電池電量檢測電路原理如圖3所示。VCC為電池的供電引腳,BAT_ADC為ADC采樣引腳,SWITCH引腳用來控制PMOS管Q2的通斷,防止分壓電阻在設備休眠期間對地產生電流,浪費電能。

圖3 電池電量檢測電路
系統軟件設計包括溫度終端嵌入式程序、監測系統服務程序和安卓APP三部分。嵌入式程序開發工具為MDK5和STM32CubeMX,STM32CubeMX可對MCU進行初始化配置,提高開發效率;監測系統服務程序和安卓APP的開發工具分別為IntelliJ IDEA 2021.2.2和Android Studio 2021.3.1。
嵌入式程序主要包括終端初始化、數據收集及處理、通信配置、數據發送、休眠與喚醒。程序流程如圖4所示。

圖4 嵌入式程序流程
終端上電啟動,MCU完成時鐘、USART、GPIO、I2C、ADC轉換等初始化任務,同時M5310-A完成駐網工作等初始化任務;初始化成功后,分別通過AHT25、電池電量檢測電路、AT命令收集需要發送的各類數據,如環境溫濕度、設備溫度、信號值等,并將數據處理成字符串形式以備數據發送任務;進行通信配置任務,指定服務器地址和端口,發送UDP數據。發送完畢,M5310-A進入PSM模式,MCU啟動RTC,定時5 min,進入待機模式。此時的測溫周期為5 min,即MCU的待機時間。MCU待機時間到則被喚醒,隨即喚醒M5310-A使其退出PSM模式,再次進行數據收發任務。M5310-A使用的AT命令見表1所列。

表1 AT命令
在數據收集和處理過程中,對于環境溫濕度數據,可以重復多次讀取傳感器的數值并進行均值濾波處理,使數據更加準確。
監測系統服務程序部署于百度云服務器內,通過9999端口與M5310-A進行通信,M5310-A通過UDP協議向云服務器的9999端口發送數據。監測系統服務程序一方面負責接收、解析、存儲M5310-A發送的數據,并將歷史數據以電腦端Web頁面可視化呈現;另一方面向外提供接口給手機APP查詢最新數據使用。監測系統服務程序整體使用Spring Boot框架進行搭建,數據的存儲和查詢使用持久層框架Mybatis,數據庫采用MySQL,針對Web頁面使用Thymeleaf和Echarts進行頁面可視化效果的渲染和顯示;使用Netty網絡程序應用框架接收并處理M5310-A發送的UDP數據。系統服務程序結構如圖5所示。

圖5 系統服務程序結構
手機APP采用原生開發方式,基于Java語言編寫,通過HTTP協議與百度云服務器通信,采用OkHttp網絡請求框架[14]向云服務器發送GET請求,云服務器中的系統服務程序接收到GET請求后會回復一組響應數據;APP使用Gson庫將獲取到的HTTP響應數據解析為Java對象,最終將Java對象顯示到綁定的界面控件上,完成數據顯示任務。手機APP設計框圖如圖6所示。

圖6 手機APP設計框圖
由于百度云服務器擁有公網IP且具有防火墻功能,因此在測試前,需打開相應端口的防火墻權限,放行Web和APP對云服務器的請求。
使用IDEA內置的MAVEN工具將服務程序打包成jar包,將jar包上傳至云服務器并啟動,啟動服務程序界面如圖7所示。

圖7 啟動服務程序界面
服務程序成功啟動后,將終端上電,等待其以5 min的時間間隔發送10次數據。發送完畢后,使用Chrome瀏覽器訪問云服務器的8080端口,服務器顯示的Web界面如圖8所示。

圖8 Web界面
啟動手機APP查詢最近一次設備上報的數據。點擊“獲取最新數據”按鈕,數據界面可顯示最新一次上報的時間、環境溫濕度、設備溫度、設備電量、信號強度和測溫周期等數據。數據顯示界面如圖9所示。觀察Web界面和手機APP顯示,二者的溫濕度等數據一致且完整。

圖9 APP數據顯示界面
本文主要開發了一種基于NB-IoT的遠程供熱溫度監測系統,該系統運用UDP協議進行數據傳輸,具有運行穩定、數據傳輸完整和功耗低等特點。熱力公司工作人員可使用電腦端Web頁面和安卓APP查看歷史和最新數據,實現了物聯網技術與集中供熱系統的結合,為集中供熱系統向智慧化、低碳化轉變提供了參考。后續研究將豐富手機APP等功能。