殷方園, 郭永平
(1. 空軍工程大學(xué) 防空反導(dǎo)學(xué)院, 陜西 西安 710038; 2. 寶雞文理學(xué)院 計(jì)算機(jī)學(xué)院, 陜西 寶雞 721016)
隨著人工智能、通訊技術(shù)、傳感器技術(shù)的快速發(fā)展,基于無(wú)人值守監(jiān)測(cè)站的監(jiān)控系統(tǒng)廣泛應(yīng)用于工業(yè)現(xiàn)場(chǎng)、水文、災(zāi)害點(diǎn)、農(nóng)業(yè)等領(lǐng)域,為人們不間斷的提供遠(yuǎn)程監(jiān)測(cè)對(duì)象狀態(tài)變化信息,是數(shù)據(jù)分析和輔助決策的得力助手[1]。然而常見的監(jiān)測(cè)預(yù)警系統(tǒng)都屬于B2B商業(yè)模式,是由專業(yè)的系統(tǒng)集成商開發(fā)的特定應(yīng)用系統(tǒng)。典型監(jiān)控系統(tǒng)由部署于現(xiàn)場(chǎng)的無(wú)人值守監(jiān)測(cè)站、數(shù)據(jù)傳輸網(wǎng)絡(luò)和位于監(jiān)控中心應(yīng)用軟件三部分組成,需要有獨(dú)立的辦公空間、專門的服務(wù)器及專業(yè)安裝運(yùn)維工作人員,建設(shè)成本和運(yùn)行維護(hù)成本都很高。一些微型企業(yè)和個(gè)人用戶對(duì)智能的監(jiān)測(cè)預(yù)警有著巨大的需求,如:小微企業(yè)對(duì)于營(yíng)業(yè)場(chǎng)所、小型倉(cāng)庫(kù)的安全,養(yǎng)殖個(gè)體戶對(duì)花圃苗圃、溫室大棚對(duì)土壤墑情、溫度的監(jiān)測(cè)預(yù)警,個(gè)人用戶對(duì)住宅的燃?xì)庑孤⑺芷屏训膶?shí)施監(jiān)測(cè);喜歡養(yǎng)魚人對(duì)魚缸內(nèi)的水質(zhì)等項(xiàng)目的監(jiān)測(cè)等等,但昂貴的建設(shè)和使用成本,制約著這部分需求的進(jìn)一步發(fā)展。利用遠(yuǎn)程監(jiān)控系統(tǒng)的實(shí)現(xiàn)原理,設(shè)計(jì)一種基于云端的B2C的監(jiān)測(cè)預(yù)警系統(tǒng),將各種不同的用戶進(jìn)行集中管理,滿足這部分用戶的需求。
本文以常見的安防系統(tǒng)中對(duì)溫濕度、煙霧、有害氣體指標(biāo)監(jiān)測(cè)為例,對(duì)其實(shí)現(xiàn)過(guò)程的技術(shù)關(guān)鍵點(diǎn)進(jìn)行分析,設(shè)計(jì)一個(gè)基于云平臺(tái)的小型監(jiān)測(cè)預(yù)警集中式管理平臺(tái)。
監(jiān)測(cè)預(yù)警系統(tǒng)由部署監(jiān)控現(xiàn)場(chǎng)的智能報(bào)警器、以云平臺(tái)服務(wù)器為硬件資源的監(jiān)控?cái)?shù)據(jù)中心及監(jiān)測(cè)預(yù)警應(yīng)用系統(tǒng)三個(gè)單元組成。智能報(bào)警器是監(jiān)測(cè)預(yù)警系統(tǒng)的基礎(chǔ)單元,由傳感器節(jié)點(diǎn)、MCU節(jié)點(diǎn)及4G通訊模塊硬件組成,傳感器根據(jù)電路設(shè)計(jì)與單片機(jī)上GPIO引腳連接,通訊模塊和視頻通過(guò)串口集成在一起,完成監(jiān)控現(xiàn)場(chǎng)數(shù)據(jù)采集與告警信息上報(bào)等功能[2]。監(jiān)控?cái)?shù)據(jù)中心使用的服務(wù)器使用阿里、華為、騰訊等企業(yè)提供的彈性云服務(wù)器,承擔(dān)著網(wǎng)絡(luò)端口、數(shù)據(jù)庫(kù)存儲(chǔ)和實(shí)時(shí)監(jiān)測(cè)和預(yù)警服務(wù)[3]。智能報(bào)警器通訊模塊內(nèi)置SIM卡插槽,通過(guò)SIM卡與三大運(yùn)營(yíng)商提供的無(wú)線通訊網(wǎng)絡(luò)與云端服務(wù)器連接,實(shí)現(xiàn)監(jiān)測(cè)指標(biāo)和設(shè)備運(yùn)行狀態(tài)數(shù)據(jù)的傳送;終端用戶通過(guò)移動(dòng)APP與數(shù)據(jù)中心進(jìn)行通訊,完成設(shè)備注冊(cè)、信息接收、閾值設(shè)置等功能,其網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 監(jiān)測(cè)預(yù)警系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)圖
監(jiān)測(cè)預(yù)警系統(tǒng)數(shù)據(jù)處理流程如下,首先終端用戶根據(jù)說(shuō)明書完成安裝智能報(bào)警器,安裝完成后,根據(jù)報(bào)警器提供的序列號(hào)使用專用APP根據(jù)報(bào)警器上的序列號(hào)和個(gè)人手機(jī)完成注冊(cè)功能,將注冊(cè)信息存入云端數(shù)據(jù)庫(kù)中;當(dāng)采集到數(shù)據(jù)觸發(fā)異常,位于現(xiàn)場(chǎng)led屏開始閃爍,同時(shí)啟動(dòng)蜂鳴器進(jìn)行長(zhǎng)鳴報(bào)警提醒現(xiàn)場(chǎng)工作人員,同時(shí)請(qǐng)求與位于云端的彈性云服務(wù)器SCOKET服務(wù)器建立連接,連接成功后,以字節(jié)流的方式將數(shù)據(jù)采集傳輸?shù)椒?wù)器上,服務(wù)器對(duì)報(bào)文進(jìn)行解析,根據(jù)解析后的站號(hào),獲取終端用戶的預(yù)存的電話號(hào)碼,通過(guò)短信息或語(yǔ)音電話通知相關(guān)的工作人員,并將此次報(bào)警信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。
監(jiān)測(cè)預(yù)警系統(tǒng)硬件主要涉及智能報(bào)警器的設(shè)計(jì),其余硬件如:服務(wù)器、用戶手持終端,均由專門的開發(fā)商提供。智能報(bào)警器硬件由傳感器單元、微控制單元(MCU)、通訊模塊、輸入輸出模塊和現(xiàn)場(chǎng)報(bào)警蜂鳴器組成。硬件組成結(jié)構(gòu),如圖2所示。
圖2 智能報(bào)警器硬件結(jié)構(gòu)圖
智能報(bào)警器MCU采用STM32F407VET6作為主控芯片,芯片中擁有多個(gè)通用輸入/輸出端口、A/D轉(zhuǎn)換端口,及USART、SPI通訊接口,集成有復(fù)位電路、JTAG/SWD調(diào)試接口電路、晶振電路等眾多資源,能夠與傳感器模塊電路、外圍的LED液晶電路、蜂鳴器電路及4G通訊模塊連接[4]。傳感器模塊與開發(fā)主板外接的GPIO引腳相連接,傳感器將監(jiān)測(cè)的環(huán)境因子轉(zhuǎn)化為MCU可識(shí)別處理的電信號(hào)或數(shù)字信號(hào),通過(guò)A/D轉(zhuǎn)換模塊進(jìn)行接收。示例項(xiàng)目選擇DHT11數(shù)字溫濕度傳感器、MQ-7傳感器煙霧濃度數(shù)據(jù),并集成蜂鳴器和led輸出模塊,通訊模塊通過(guò)RJ485接口實(shí)現(xiàn)與MCU的通信連接。實(shí)物連接圖如圖3所示。
圖3 智能報(bào)警器實(shí)物連接圖
DHT11濕溫度傳感器的數(shù)據(jù)傳輸使用單總線數(shù)據(jù)格式,使用一個(gè)引腳完成輸入輸出的功能,DHT11每次獲取到的數(shù)據(jù)包含16bit的溫度數(shù)據(jù),16 bit的濕度數(shù)據(jù)和8 bit校驗(yàn),共5個(gè)字節(jié)組成。MQ-7傳感器檢測(cè)可燃?xì)怏w和煙霧濃度數(shù)據(jù)。該傳感器中有較高靈敏度的氣敏電阻,空氣中的一些特殊氣體能夠改變它的電阻,電阻改變后會(huì)影響傳感器內(nèi)部電壓,傳感器通過(guò)電壓的變動(dòng)幅度來(lái)改變模擬信號(hào)來(lái)反映特殊氣體濃度數(shù)據(jù)。
監(jiān)控系統(tǒng)中軟件包括智能報(bào)警器軟件、云端預(yù)警數(shù)據(jù)處理軟件和客戶端預(yù)警接收APP三部分。
智能報(bào)警器軟件開發(fā)包括基于傳感器數(shù)據(jù)采集程序和對(duì)采集的數(shù)據(jù)標(biāo)準(zhǔn)化程序,即按照傳輸規(guī)約將數(shù)據(jù)封裝程報(bào)文。此類軟件是基于Keil uVision5開發(fā)環(huán)境,使用C語(yǔ)言嵌入式編程[5]。開發(fā)時(shí)需要根據(jù)傳感器工作原理和電路設(shè)計(jì),開發(fā)數(shù)據(jù)獲取程序,再根據(jù)傳輸規(guī)約生成報(bào)文,傳輸?shù)缴衔粰C(jī)上。傳感器數(shù)據(jù)采集軟件以溫濕度數(shù)據(jù)采集為例,執(zhí)行過(guò)程如下,首先由MCU完成初始化,將通信引腳設(shè)置為輸出模式,再將通信引腳的電平拉低,持續(xù)20 ms,然后再將引腳電平置為到電平保持大概30 us,完成信號(hào)發(fā)送工作,等待DHT11響應(yīng),再將通信引腳設(shè)為輸入模式,DHT11能夠響應(yīng)會(huì)自動(dòng)降低電平45us左右,然后升高電平并保持大概45 us,則獲取到的溫濕度數(shù)據(jù)以及校驗(yàn)數(shù)據(jù),最后將數(shù)據(jù)轉(zhuǎn)換為可以識(shí)別的數(shù)字。處理代碼如下:
void init_dht11(void)//初始化
{
Dht11_output(); //使PG9變?yōu)檩敵瞿J?/p>
PGout(9) = 0; //讓PG9變?yōu)榈碗娖剑掷m(xù)20 ms
delay_ms(20);
PGout(9) = 1; //讓PG9變?yōu)楦唠娖?,持續(xù)30 us
delay_us(30);
Dht11_input(); //使PG9變?yōu)檩斎肽J?/p>
}
uint32_t dht11_read_data(uint8_t* data) //讀取數(shù)據(jù)
{
uint32_ti= 0;
uint8_t check_sum = 0;
for (i=0;i<5;i++){
data[i] = dht_read_byte();
}
check_sum = data[0] + data[1] + data[2] + data[3];
if (check_sum != data[4]){
return 1;
}
else {
return 0;
}
}
void Trans_Data(uint64_t Data,uint8_t **buffer) //完成數(shù)據(jù)轉(zhuǎn)換
{
*buffer[0] = (Data<<40)>>56 ; //溫度的整數(shù)部分
*buffer[1] = (Data<<48)>>56 ; //溫度的小數(shù)部分
*buffer[2] = (Data<<24)>>56 ; //濕度的整數(shù)部分
*buffer[3] = (Data<<32)>>56 ; //濕度的小數(shù)部分
*buffer[4] = (Data<<56)>>56 ; //數(shù)據(jù)的檢驗(yàn)位
}
采集的數(shù)據(jù)標(biāo)準(zhǔn)化程序是在傳感器數(shù)據(jù)采集軟件完成數(shù)據(jù)轉(zhuǎn)換后,根據(jù)閾值判斷是否報(bào)警,并通過(guò)LED閃爍和蜂鳴器長(zhǎng)鳴進(jìn)行現(xiàn)場(chǎng)報(bào)警。采集的數(shù)據(jù)標(biāo)準(zhǔn)化是將預(yù)警信息格式化,按照傳輸規(guī)約編成報(bào)文,以字節(jié)流的方式向數(shù)據(jù)中心發(fā)送信息。傳輸規(guī)約是一種包含了地址碼、數(shù)據(jù)區(qū)和校驗(yàn)位的下位機(jī)和上位機(jī)約定的數(shù)據(jù)結(jié)構(gòu)[6],上位機(jī)根據(jù)規(guī)約中的數(shù)據(jù)結(jié)構(gòu)進(jìn)行報(bào)文字節(jié)流的截取及轉(zhuǎn)換,將報(bào)文轉(zhuǎn)換為人們可以識(shí)別的信息。采集的數(shù)據(jù)標(biāo)準(zhǔn)化程序同時(shí)完成由通訊值守程序下達(dá)的監(jiān)測(cè)指標(biāo)閾值報(bào)文信息的轉(zhuǎn)換與存儲(chǔ),報(bào)警器與云端服務(wù)器傳輸數(shù)據(jù),如表1所示。
表1 報(bào)警器4 G數(shù)據(jù)傳輸規(guī)約
通訊值守程序是安裝在云端服務(wù)器上的數(shù)據(jù)接收程序,完成接收、解譯、存儲(chǔ)并通過(guò)GSM短信和語(yǔ)音電話通知相關(guān)工作人員。通訊值守軟件的開發(fā)環(huán)境使用C#開發(fā)語(yǔ)言,通過(guò)socket與報(bào)警器數(shù)據(jù)傳輸模塊建立TCP/IP 通訊,獲取報(bào)警器推送的報(bào)警信息,主要包括創(chuàng)建SCOKET對(duì)象、初始化監(jiān)聽、與報(bào)警器節(jié)點(diǎn)建立連接、接收數(shù)據(jù)、數(shù)據(jù)校驗(yàn)、報(bào)文解譯、數(shù)據(jù)存儲(chǔ)及報(bào)警信息發(fā)布等環(huán)節(jié)。值守程序靜態(tài)類,如圖4所示。
圖4 通訊值守程序靜態(tài)類圖
服務(wù)主程序是值守程序的主入口和人機(jī)交互操作界面,主程序初始化創(chuàng)建報(bào)文接收對(duì)象,啟動(dòng)SCOKET監(jiān)聽服務(wù)。報(bào)文接收類負(fù)責(zé)報(bào)文接收及后續(xù)處理過(guò)程的組織,首先通過(guò)接受連接請(qǐng)求的回調(diào)函數(shù)中完成報(bào)文的接收,調(diào)用報(bào)文解譯對(duì)象對(duì)報(bào)文進(jìn)行校驗(yàn)和解譯,解譯完成通過(guò)用戶注冊(cè)的報(bào)警器序列號(hào)與聯(lián)系人的電話號(hào)碼,語(yǔ)音電話和GSM短信息將報(bào)警信息通知聯(lián)系人,再通過(guò)數(shù)據(jù)操作類將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中,供終端用戶查詢。短信和語(yǔ)音電話兩個(gè)類各自封裝了各自的信息發(fā)布業(yè)務(wù)邏輯。各個(gè)類各司其職、功能單一,滿足面向?qū)ο蟮膯我宦氊?zé)原則,為了考慮報(bào)文解譯時(shí)傳輸規(guī)約的變化,報(bào)文接收類依賴于報(bào)文接口,而不依賴于具體的傳輸規(guī)約,同時(shí)預(yù)警信息的發(fā)布,采用觀察者模式,提高了系統(tǒng)的擴(kuò)展性和可維護(hù)性;在報(bào)文解譯和編制的過(guò)程中,通常涉及一些數(shù)制轉(zhuǎn)換等通用方法,將其封裝到一個(gè)獨(dú)立的數(shù)制轉(zhuǎn)換類中,完成具體的報(bào)文解譯程序靜態(tài)調(diào)用,提高了代碼的復(fù)用性。
應(yīng)用程序是面向終端用戶和運(yùn)營(yíng)服務(wù)人員,是一款基于數(shù)據(jù)庫(kù)移動(dòng)APP系統(tǒng),數(shù)據(jù)庫(kù)管理系統(tǒng)使用mySQL數(shù)據(jù)庫(kù)、程序后端服務(wù)開發(fā)采用java開發(fā)語(yǔ)言,使用SSM框架開發(fā)的前后端完全分離應(yīng)用服務(wù),前端使用vue+vant框架開發(fā)的WEBAPP。終端用戶功能包括智能報(bào)警器信息注冊(cè)、注冊(cè)信息修改、監(jiān)測(cè)閾值的設(shè)置、報(bào)警歷史數(shù)據(jù)查詢、使用情況反饋五個(gè)功能模塊;運(yùn)營(yíng)服務(wù)人員用于對(duì)設(shè)備運(yùn)行狀態(tài),如:運(yùn)行電壓、預(yù)警歷史信息查詢、用戶使用情況反饋等。
基于云平臺(tái)監(jiān)測(cè)預(yù)警系統(tǒng)中智能報(bào)警器硬件結(jié)構(gòu)簡(jiǎn)單,安裝方便,無(wú)需專業(yè)人員進(jìn)行上門安裝,通過(guò)手機(jī)APP完成注冊(cè),通過(guò)現(xiàn)場(chǎng)、手機(jī)兩種告警方式通知到終端用戶;數(shù)據(jù)中心有專業(yè)人員完成對(duì)設(shè)備運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè),確保系統(tǒng)正常運(yùn)行,實(shí)現(xiàn)了一種B2C的監(jiān)測(cè)預(yù)警實(shí)現(xiàn)模式。