(遼寧軌道交通職業(yè)學(xué)院,遼寧 沈陽 110023)
物聯(lián)網(wǎng)應(yīng)用技術(shù)是當(dāng)下的一個熱點,其應(yīng)用領(lǐng)域可以分為四大類,分別是用于提高生產(chǎn)效率、保障社會安全、方便日常生活以及服務(wù)公共事業(yè)。在服務(wù)公共事業(yè)的領(lǐng)域,在日常環(huán)境監(jiān)測、保護工作中,通過布設(shè)物聯(lián)網(wǎng)使得環(huán)境信息化,能夠建立起環(huán)境監(jiān)測、污染源監(jiān)控、生態(tài)保護和核安全與輻射環(huán)境安全等信息系統(tǒng),有利于實時收集大量準(zhǔn)確數(shù)據(jù),進行定量和定性的分析,為環(huán)境管理工作提供科學(xué)決策支持[1]。
大型機房如果沒有溫濕度的實時監(jiān)控設(shè)備,會由于高溫高濕而導(dǎo)致設(shè)備故障。工作期間的設(shè)備故障會嚴(yán)重影響企業(yè)正常工作的進行,甚至造成嚴(yán)重的財產(chǎn)損失。而24小時不間斷全功率開啟空調(diào)又耗電量巨大,因此,大型機房需要配套環(huán)境監(jiān)控系統(tǒng),以實時監(jiān)控溫濕度的變化,在溫度過高時調(diào)高空調(diào)的功率,濕度過高時啟動除濕器,并在實施溫濕度控制后仍然不能達到環(huán)境標(biāo)準(zhǔn)時向值班員報警,提醒值班員實施干預(yù)。
本系統(tǒng)為BS結(jié)構(gòu),系統(tǒng)組成結(jié)構(gòu)圖1所示。系統(tǒng)整體上由兩大部分組成,數(shù)據(jù)采集模塊和遠(yuǎn)程監(jiān)控模塊。數(shù)據(jù)采集模塊由51單片機和溫濕度傳感器組成,遠(yuǎn)程監(jiān)控模塊由傳感器數(shù)據(jù)管理程序(以下簡稱“管理程序”)、瀏覽器和移動客戶端(兩者以下簡稱“客戶端”)構(gòu)成。
圖1 系統(tǒng)結(jié)構(gòu)
根據(jù)本系統(tǒng)的設(shè)計特點,單片機采用低成本的51單片機。單片機可接多個溫度和濕度傳感器,管理程序通過串口定時輪詢單片機上所連接的溫濕度傳感器的狀態(tài)。管理程序與單片機之間的通信采用工業(yè)上廣泛應(yīng)用的Modbus協(xié)議,在符合Modbus通信協(xié)議的基礎(chǔ)上,本項目做出了一些定制。Modbus通信協(xié)議定義了多種功能碼,本項目整體上用到其中的4個,分別是0x02讀離散輸入寄存器、0x04讀輸入寄存器、0x05寫單個線圈寄存器和0x06寫單個保持寄存器。管理程序讀取傳感器狀態(tài)時用的是功能碼0x04。
送信。送信的通信格式與Modbus功能碼與0x04的查詢命令一致,即讀輸入寄存器。本項目定制的部分是寄存器地址必須跳躍設(shè)置,即0、2、4…或者1、3、5…。這樣設(shè)置的目的是既要符合Modbus通信協(xié)議又希望返信時能夠攜帶更多的信息。
返信。返信的通信格式也是同Modubs功能碼0x04的返信格式。本項目的定制部分有以下幾處。
(1)字節(jié)數(shù):8bit,值固定為4,指定從字節(jié)數(shù)之后的固定的4個字節(jié)。
(2)寄存器地址:8bit(0~255),由于采用異步傳輸,上位機得知道返回的消息是那個寄存器的地址。由于8bit的二進制數(shù)最多可以表示256個整數(shù),理論上最多可以連接256個傳感器,但是由于為了在單次通信的時候攜帶更多的信息,每次讀兩個寄存器地址,實際上只有128個地址可用。
(3)設(shè)備類型:8bit,1-溫度傳感器,2-濕度傳感器,3-光照傳感器(擴展),4-煙霧傳感器(擴展)。本系統(tǒng)目前只用到了溫濕度傳感器,光照和煙霧傳感器以及其他類型的傳感器可根據(jù)今后的使用情況進行擴展。
(4)傳感器讀數(shù):16 bit,浮點數(shù)乘以100 后再強制類型轉(zhuǎn)換成short型。常溫的取值范圍必定在-100℃~100℃以內(nèi),溫度值為浮點數(shù),相對濕度以百分?jǐn)?shù)表示,也是浮點數(shù)。如果存放溫濕度的值,8bit是不夠的,因此用16bit來存放溫濕度。存放的方法為,將溫濕度的值強制轉(zhuǎn)換為精度為兩位小數(shù)的浮點數(shù),乘以100再強制轉(zhuǎn)換成整數(shù),存放在16bit里。當(dāng)管理程序讀取到這16bit值的時候,先強制轉(zhuǎn)換成浮點數(shù)在除以100并保留兩位小數(shù)就得到了原始的溫濕度值。
在本系統(tǒng)中,空調(diào)采用的是EMERSON公司出品的大型機房Pex空調(diào),該空調(diào)配備支持Modbus通信協(xié)議的OC485通信卡,管理程序所在服務(wù)器通過RS485串口與OC485通信卡相連接。通過定時向OC485通信卡發(fā)送查詢指令,管理程序可以實時掌握空調(diào)的工作狀態(tài)。OC485通信卡的RS485傳輸模式及通信格式可以參考PeX空調(diào)OC485卡Modbus通訊協(xié)議官方文檔。管理程序與空調(diào)的通信用到了功能碼0x02、0x04、0x05和0x06。
遠(yuǎn)程監(jiān)控模塊的主要功能由部署在服務(wù)器上的管理程序完成。管理程序啟動后首先連接數(shù)據(jù)庫,然后開啟一個定時任務(wù),該任務(wù)的工作有兩個方面。一方面定時向單片機發(fā)送指令讀取其所連接傳感器的狀態(tài),讀取到的傳感器讀數(shù)除了保存在內(nèi)存中供客戶端查詢,還要寫入數(shù)據(jù)庫中作為溫濕度的歷史數(shù)據(jù)。這些歷史數(shù)據(jù)做成曲線可以反映出機房中溫濕度隨季節(jié)變換的趨勢,也可以作為溫濕度與機房故障關(guān)聯(lián)性的分析之用。另一方面該任務(wù)定時向空調(diào)發(fā)出指令讀取空調(diào)的狀態(tài)并保存在內(nèi)存中供客戶端顯示并控制空調(diào)的運行之用。
這兩方面的工作需要執(zhí)行的頻率并不相同。通常溫濕度的變化是一個相對緩慢的過程,過于頻繁的采集是沒有意義的,因此對溫濕度數(shù)據(jù)的讀取可以設(shè)定在5分鐘一次。對空調(diào)狀態(tài)的監(jiān)控實時性要求比較高,因此可以設(shè)定每5秒鐘讀取一次空調(diào)的狀態(tài),這兩方面的工作可以放在一個定時任務(wù)中執(zhí)行??蛻舳说卿浌芾沓绦虺晒螅瑑烧咧g將建立一個WebSocket連接,管理程序會定時向客戶端推送傳感器和空調(diào)的狀態(tài),管理程序的工作流程。
數(shù)據(jù)存儲部分可采用MySQL。MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),目前屬于Oracle 旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在WEB應(yīng)用方面,MySQL是最好的RDBMS應(yīng)用軟件。由于其社區(qū)版的性能卓越,搭配JSP和Apache可組成良好的開發(fā)環(huán)境[2]。
管理程序啟動后,按照指定的時間間隔,將采集到的溫濕度信息插入到數(shù)據(jù)庫中的表history。表history用來存放每天24小時內(nèi)的傳感器數(shù)據(jù),從00:00開始,每隔5分鐘上傳一條,每個個傳感器每天將有288條數(shù)據(jù)。這些數(shù)據(jù)可被服務(wù)器讀取并顯示成圖表,用來分析數(shù)據(jù)、天氣、用電量以及機房故障之間的關(guān)系。表history需要的字段有:device_id,設(shè)備編號,即傳感器或其他設(shè)備的編號;device_type,設(shè)備類型,表示溫度傳感器,濕度傳感器或其他設(shè)備;value,傳感器或其他設(shè)備的值;timestamp,讀取到傳感器值的時間戳。
瀏覽器和移動客戶端需要支持WebSocket協(xié)議,WebSocket協(xié)議可以在客戶端和服務(wù)器之間建立全雙工的通信,改善用戶體驗[3]。瀏覽器和移動客戶端成功登錄管理程序后首先從管理程序讀取傳感器的配置信息,并顯示畫面上,然后向服務(wù)器發(fā)起WebSocket連接,連接建立后,服務(wù)器將定時推送傳感器實時信息,畫面上的傳感器信息也隨之更新。
經(jīng)過測試本解決方案可有效地實時監(jiān)控機房的溫濕度變化,并可長期穩(wěn)定運行。如果將光照傳感器,空調(diào),加濕器,照明,窗簾等控制設(shè)備也加入,并增加根據(jù)溫濕度、光照等智能控制設(shè)備的開啟和關(guān)閉的功能,則該解決方案也可以用于企業(yè)的智能工作環(huán)境的搭建。同時,本系統(tǒng)也應(yīng)用于教學(xué)實踐,在服務(wù)器開發(fā)和移動應(yīng)用開發(fā)相關(guān)課程中取得了良好的教學(xué)效果。