(1.江南大學(xué) 輕工過(guò)程先進(jìn)控制教育部重點(diǎn)實(shí)驗(yàn)室,江蘇 無(wú)錫 214122;2.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214122)
在人類(lèi)生產(chǎn)和生活中,水是不可替代的重要資源。然而,在人類(lèi)活動(dòng)中排出的大量污水對(duì)環(huán)境產(chǎn)生了巨大危害,人類(lèi)面臨的水污染形勢(shì)越來(lái)越嚴(yán)重。因此,迫切需要設(shè)計(jì)一種水質(zhì)環(huán)境監(jiān)控系統(tǒng),以便實(shí)時(shí)了解水質(zhì)狀況,調(diào)控水質(zhì),減輕水污染帶來(lái)的危害[1]。另一方面,隨著大數(shù)據(jù)時(shí)代的到來(lái),研究人員從大數(shù)據(jù)中提取有價(jià)值信息的應(yīng)用變得非常豐富,給人們的生活帶來(lái)了極大便利。然而,隨著數(shù)據(jù)泄露事件的屢屢發(fā)生,對(duì)信息安全的要求也在不斷提高[2]。保護(hù)信息安全、防止數(shù)據(jù)泄露、保證系統(tǒng)的正常運(yùn)作是當(dāng)前水質(zhì)監(jiān)控系統(tǒng)的一項(xiàng)重點(diǎn)要求。
傳統(tǒng)的人工儀表測(cè)量操作,存在耗時(shí)耗力、監(jiān)測(cè)周期過(guò)長(zhǎng)以及數(shù)據(jù)分析復(fù)雜等缺點(diǎn)。為解決以上問(wèn)題,國(guó)內(nèi)已經(jīng)開(kāi)展了對(duì)水質(zhì)監(jiān)測(cè)的應(yīng)用研究。韓玉冰等人提出了一種針對(duì)水產(chǎn)養(yǎng)殖的水質(zhì)監(jiān)測(cè)系統(tǒng),該系統(tǒng)應(yīng)用了無(wú)線(xiàn)傳感器網(wǎng)絡(luò),可以對(duì)大范圍區(qū)域進(jìn)行實(shí)時(shí)監(jiān)測(cè),而且布線(xiàn)簡(jiǎn)單方便[3]。張龍苗等人設(shè)計(jì)了一種基于Zigbee技術(shù)的水質(zhì)監(jiān)測(cè)系統(tǒng),該系統(tǒng)能夠?qū)崟r(shí)監(jiān)測(cè)醫(yī)院供水管網(wǎng)的水質(zhì),具有通信可靠、應(yīng)用性強(qiáng)的優(yōu)點(diǎn)[4]。董浩等人以STM32為處理器,結(jié)合嵌入式實(shí)時(shí)系統(tǒng)與物聯(lián)網(wǎng)技術(shù),設(shè)計(jì)了一種微型水質(zhì)監(jiān)控系統(tǒng),用以監(jiān)測(cè)家庭廢水的水質(zhì),具有很強(qiáng)的實(shí)用性[5]。但上述水質(zhì)監(jiān)測(cè)系統(tǒng)都忽略了信息安全方面,數(shù)據(jù)完全透明化地在網(wǎng)絡(luò)中進(jìn)行傳輸,存在被竊取記錄的風(fēng)險(xiǎn)。故以溫度、pH值、溶解氧濃度為監(jiān)測(cè)對(duì)象,設(shè)計(jì)了一套水質(zhì)監(jiān)控系統(tǒng),并增加了AES加解密環(huán)節(jié),提高了系統(tǒng)安全性,可以有效降低信息泄露的風(fēng)險(xiǎn)。
AES是由美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究所確立的傳統(tǒng)對(duì)稱(chēng)密碼算法[6]。它屬于迭代型分組密碼算法。其數(shù)據(jù)分組長(zhǎng)度和密鑰長(zhǎng)度并非唯一,而可以指定為128位、192位、256位,相對(duì)應(yīng)地,需要進(jìn)行10輪、12輪、14輪迭代加密運(yùn)算。每輪迭代運(yùn)算都是由4個(gè)變換組成[6]:S盒變換(SubBytes)、行移位變換(ShiftRows)、列混合變換(MixColumns)、輪密鑰加變換(AddRoundKey)。
由于所設(shè)計(jì)的系統(tǒng)中終端節(jié)點(diǎn)資源限制,所以節(jié)點(diǎn)中運(yùn)行的密碼算法是占用資源較低的128位AES算法(簡(jiǎn)記為AES-128)。
在AES-128加密過(guò)程中,數(shù)據(jù)分組長(zhǎng)度為128位,需要將明文劃分為若干個(gè)16字節(jié)的明文數(shù)據(jù)段。以其中一個(gè)數(shù)據(jù)段P為例,16個(gè)字節(jié)數(shù)據(jù)記為Px,其中x∈[0,15]。按照從上到下,從左至右的順序依次排列成4×4的矩陣,并將它復(fù)制到狀態(tài)矩陣State中。在隨后的10輪迭代變換中,矩陣State會(huì)被不斷更新,直到最后一步變換結(jié)束,再將狀態(tài)矩陣復(fù)制到密文矩陣C中。取出矩陣C中的內(nèi)容,就可以得到加密內(nèi)容。
與加密相比,在解密過(guò)程中,除了輪密鑰加變換不變之外,對(duì)其他三種變換求逆變換即可[7]。
1.2.1 S盒變換
使用一個(gè)被稱(chēng)為S盒的表格,對(duì)狀態(tài)矩陣State中的每一個(gè)字節(jié)進(jìn)行查表替換操作。在替換某一字節(jié)時(shí),先將該字節(jié)的高4位作為行值,低4位作為列值,然后帶入S盒中查找出對(duì)應(yīng)的元素并替換該字節(jié)。而S盒中的元素則結(jié)合了有限域GF(28)乘法逆元及可逆的仿射變換矩陣[8]。
1.2.2 行移位變換
行移位變換是將狀態(tài)矩陣State中的每一行進(jìn)行固定單位的循環(huán)偏移,而偏移的單位是字節(jié)。通常的操作步驟是狀態(tài)矩陣的第1行保持不變,第2行向左循環(huán)偏移1個(gè)字節(jié),第3行向左循環(huán)偏移2個(gè)字節(jié),第4行向左循環(huán)偏移3個(gè)字節(jié)[8]。
1.2.3 列混合變換
列混合變換可以對(duì)狀態(tài)矩陣State的各列起到混淆的作用。將狀態(tài)矩陣State的列視為GF(28)上的多項(xiàng)式s(x),變換公式為
s′(x)=c(x)·s(x)mod(x4+1)
(1)
其中常數(shù)多項(xiàng)式c(x)={03}·x3+{01}·x2+{01}·x+{02},多項(xiàng)式系數(shù)都是以十六進(jìn)制的形式表示的[8]。
1.2.4 輪密鑰加變換
輪密鑰加變換就是將輪密鑰與狀態(tài)矩陣State進(jìn)行異或操作,而輪密鑰則是由密鑰K通過(guò)密鑰擴(kuò)展算法得到的[8]。
對(duì)于AES-128,密鑰長(zhǎng)度是16個(gè)字節(jié),通常將密鑰K的每個(gè)字節(jié)按照從上到下、從左至右的順序表示成4×4的矩陣,將矩陣的每一列視為一個(gè)字,并且依次命名為W[0],W[1],W[2],W[3]。密鑰擴(kuò)展算法可以將4列原始密鑰擴(kuò)展成44列的密鑰W[i],其中i∈[0,43]。擴(kuò)展算法有兩種計(jì)算方式,具體等式如下:當(dāng)i的數(shù)值不能被4整除時(shí),則第i列密鑰由式(2)確定[8]。
W[i]=W[i-4]⊕W[i-1]
(2)
當(dāng)i是4的倍數(shù)時(shí),由式(3)確定第i列密鑰。
W[i]=W[i-4]⊕SubBytes(RotBytes(W[i-1]))⊕Rcon[i/4]
(3)
式中,⊕表示異或運(yùn)算;RotBytes函數(shù)是循環(huán)移動(dòng)一個(gè)字節(jié);SubBytes則是對(duì)每個(gè)字節(jié)進(jìn)行S盒替換;Rcon[i/4]為輪常量[8]。
整個(gè)系統(tǒng)的架構(gòu)主要包括終端節(jié)點(diǎn)、服務(wù)器端以及用戶(hù)端三個(gè)部分。終端節(jié)點(diǎn)主要將采集的數(shù)據(jù)進(jìn)行AES加密,然后通過(guò)GPRS無(wú)線(xiàn)傳輸模塊傳輸至云服務(wù)器。云服務(wù)器通過(guò)運(yùn)行后臺(tái)程序,將接收到的數(shù)據(jù)存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)中,并為用戶(hù)端提供訪問(wèn)接口。用戶(hù)可以通過(guò)網(wǎng)頁(yè)瀏覽器登錄訪問(wèn)云服務(wù)器,實(shí)時(shí)監(jiān)控水質(zhì)數(shù)據(jù)。另外,為了擴(kuò)展控制器件的接入,終端節(jié)點(diǎn)還增加了繼電器控制功能,方便用戶(hù)進(jìn)行遠(yuǎn)程控制。
終端節(jié)點(diǎn)主要包括電源模塊、處理器模塊、GPRS無(wú)線(xiàn)通信模塊、傳感器模塊、繼電器控制模塊,其硬件結(jié)構(gòu)如圖1所示。主要功能是對(duì)水質(zhì)溫度、pH值、溶解氧濃度、電導(dǎo)率、余氯等信息的采集、加密、發(fā)送,同時(shí)負(fù)責(zé)接收對(duì)繼電器的控制指令,并做出匹配的動(dòng)作。
終端節(jié)點(diǎn)采用STM32F103系列的單片機(jī),該單片機(jī)具有低功耗、低電壓、外圍電路簡(jiǎn)單等優(yōu)點(diǎn)。同時(shí)具
圖1 終端節(jié)點(diǎn)硬件結(jié)構(gòu)圖
有多路ADC、UART等接口,可以滿(mǎn)足多種應(yīng)用需求。在終端節(jié)點(diǎn)的正常工作狀態(tài)下,其工作時(shí)鐘由外部8 MHz的晶體振蕩器提供。
為了將采集到的傳感器數(shù)據(jù)及時(shí)可靠地傳到監(jiān)控中心,在終端節(jié)點(diǎn)上搭載了SIM800C組成的GPRS模塊,實(shí)現(xiàn)與服務(wù)器端的無(wú)縫連接。該模塊支持4種頻段傳輸,具有豐富的AT指令集,功能強(qiáng)大,操作簡(jiǎn)單。該模塊采用12 V供電,通信接口為3.3 V TTL電平,與STM32的UART2引腳交叉相連。
3.3.1 pH值傳感器調(diào)理電路
本系統(tǒng)采用E-201-C塑料外殼式pH電極測(cè)試水質(zhì)的pH數(shù)據(jù)。當(dāng)電極放置在待測(cè)液體中時(shí),電極會(huì)受待測(cè)液體的酸堿度影響而產(chǎn)生不同的DC電壓,而處理器可以根據(jù)電壓值計(jì)算得出相應(yīng)的pH值。鑒于這種微弱信號(hào)并不符合處理器自帶的ADC輸入電壓要求。故需要設(shè)計(jì)信號(hào)調(diào)理電路對(duì)信號(hào)進(jìn)行放大調(diào)整,信號(hào)調(diào)理電路如圖2所示[9]。
圖2 pH值傳感器調(diào)理電路
3.3.2 溫度傳感器調(diào)理電路
溫度傳感器采用了Pt100熱敏電阻器,該傳感器線(xiàn)性度良好,平均每變化1 ℃,阻值就會(huì)變化0.38 Ω。鑒于電阻變化小,為了削減長(zhǎng)距離通信環(huán)境下線(xiàn)路電阻帶來(lái)的測(cè)量誤差,該電路采用不平衡電橋的方式來(lái)測(cè)量溫度,并采用單電源儀表運(yùn)放AD623放大信號(hào)。溫度傳感器調(diào)理電路如圖3所示。
圖3 溫度傳感器調(diào)理電路
3.3.3 溶解氧和余氯傳感器通信電路
本系統(tǒng)選用了DOB-300C數(shù)字型溶解氧傳感器和DLS-600數(shù)字型余氯傳感器。這兩種傳感器都支持RS485通信,并遵循標(biāo)準(zhǔn)的Modbus協(xié)議。故需要根據(jù)MAX3485芯片設(shè)計(jì)通信電路,進(jìn)行邏輯電平與RS485電平的轉(zhuǎn)換,從而實(shí)現(xiàn)數(shù)據(jù)的正常采集。通信電路如圖4所示。
圖4 溶解氧傳感器通信電路
圖4中RO是接收端,DI是發(fā)送端,兩者連接處理器的外設(shè)UART1。RE和DE分別為接收和發(fā)送的使能端,通過(guò)處理器的一個(gè)管腳可以控制RS485總線(xiàn)上的數(shù)據(jù)收發(fā)[10]。而在測(cè)量時(shí),為保證正常通信,需要將兩種傳感器的通信線(xiàn)并聯(lián)接入終端節(jié)點(diǎn)的RS485通信端口。
3.3.4 電導(dǎo)率傳感器電路
本系統(tǒng)采用DJS-1型鉑黑電導(dǎo)電極對(duì)水質(zhì)電導(dǎo)率進(jìn)行測(cè)量,它的電導(dǎo)池常數(shù)是1.023,最佳的工作頻率是20 kHz左右。為了減少測(cè)量時(shí)出現(xiàn)的極化效應(yīng)帶來(lái)的誤差,本系統(tǒng)將交流激勵(lì)信號(hào)加到電極的兩端。產(chǎn)生交流激勵(lì)信號(hào)的電路如圖5所示。
在測(cè)量時(shí),將電極放置到水樣中,并將圖5中的Vpluse信號(hào)接到電導(dǎo)電極上。只需要測(cè)出電極間的電壓和回路中的電流就可以計(jì)算出電導(dǎo)率,而電導(dǎo)率是
圖5 交流激勵(lì)信號(hào)的產(chǎn)生電路
由電流值除以相應(yīng)的電壓值得到的。另外還需要將輸入和輸出的交流信號(hào)轉(zhuǎn)換為直流信號(hào),這樣才能方便處理器進(jìn)行ADC采樣[9]。
本系統(tǒng)設(shè)計(jì)了4路繼電器控制電路,其中一路如圖6所示。K1為繼電器開(kāi)關(guān),Q1為NPN型三極管。當(dāng)Relay1接口輸入低電平時(shí),三極管處于關(guān)斷狀態(tài)且繼電器不工作。而接入高電平時(shí),經(jīng)過(guò)限流電阻R14分壓后,使得三極管處于導(dǎo)通狀態(tài)。此時(shí),繼電器中的磁感應(yīng)線(xiàn)圈通過(guò)電流,產(chǎn)生磁場(chǎng)以拉動(dòng)開(kāi)關(guān),使得接口Vout輸出12 V電壓。
圖6 繼電器控制電路
在終端節(jié)點(diǎn)、服務(wù)器和用戶(hù)端之間傳輸數(shù)據(jù)時(shí),數(shù)據(jù)幀格式的設(shè)計(jì)非常重要。為識(shí)別傳輸過(guò)程中發(fā)生數(shù)據(jù)幀丟失的情況,在幀格式中增加了CRC校驗(yàn)部分。表1描述了終端節(jié)點(diǎn)與服務(wù)器之間通信的明文數(shù)據(jù)幀格式,從表1中可以看出,明文數(shù)據(jù)幀格式包含6個(gè)部分,數(shù)據(jù)單位為字節(jié)。
表1 明文數(shù)據(jù)幀格式
而用戶(hù)端與服務(wù)器之間的數(shù)據(jù)幀格式與表1中無(wú)太大差別,只是將設(shè)備號(hào)替換成用戶(hù)名和密碼兩部分。
終端節(jié)點(diǎn)是基于Keil μVision4集成開(kāi)發(fā)環(huán)境,采用C語(yǔ)言編程開(kāi)發(fā)。軟件部分主要包括數(shù)據(jù)采集和數(shù)據(jù)解析部分。而數(shù)據(jù)采集部分需要滿(mǎn)足觸發(fā)條件才會(huì)采集一次數(shù)據(jù)并加密上傳。觸發(fā)條件主要有兩個(gè),即定時(shí)器定時(shí)中斷和接收到采集指令。
在設(shè)備初始化過(guò)程中,處理器會(huì)讀取存儲(chǔ)在內(nèi)部閃存中的采樣周期T1,并啟動(dòng)定時(shí)器,當(dāng)采樣周期到達(dá)時(shí)會(huì)觸發(fā)中斷,并按照溫度傳感器,pH傳感器和溶解氧傳感器的順序進(jìn)行采集。隨后將以4.1節(jié)中的數(shù)據(jù)幀格式打包所有的采集數(shù)據(jù),并進(jìn)行加密,最終通過(guò)GPRS將完整的加密數(shù)據(jù)發(fā)送給服務(wù)器。數(shù)據(jù)采集流程如圖7所示。
圖7 數(shù)據(jù)采集流程圖
當(dāng)服務(wù)器通過(guò)網(wǎng)絡(luò)向終端節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí),GPRS接收中斷觸發(fā),待接收完畢后,進(jìn)入GPRS數(shù)據(jù)解析任務(wù),該任務(wù)首先對(duì)接收的數(shù)據(jù)包進(jìn)行解密操作,并進(jìn)行不同的響應(yīng)。若接收到的是控制繼電器指令,則對(duì)相應(yīng)的管腳置位;若是數(shù)據(jù)采集等其他有效指令,則進(jìn)行指令處理。數(shù)據(jù)解析如圖8所示。
圖8 GPRS數(shù)據(jù)解析流程圖
Web服務(wù)器是基于PHP+MySQL編程開(kāi)發(fā)的。用戶(hù)可以通過(guò)網(wǎng)頁(yè)瀏覽器訪問(wèn)服務(wù)器,登錄水質(zhì)監(jiān)控管理系統(tǒng)。該管理系統(tǒng)由數(shù)據(jù)顯示模塊、節(jié)點(diǎn)管理模塊、控制模塊、報(bào)警模塊等組成。數(shù)據(jù)顯示模塊可以通過(guò)折線(xiàn)圖或者表格實(shí)時(shí)顯示監(jiān)測(cè)的水質(zhì)參數(shù)信息;節(jié)點(diǎn)管理模塊可以綁定或者刪減用戶(hù)的終端節(jié)點(diǎn);控制模塊可以對(duì)指定終端節(jié)點(diǎn)上的繼電器進(jìn)行開(kāi)斷操作;而在報(bào)警模塊中,用戶(hù)可以設(shè)置各類(lèi)監(jiān)測(cè)數(shù)據(jù)的報(bào)警閾值,當(dāng)某時(shí)刻數(shù)據(jù)超過(guò)閾值時(shí),界面會(huì)彈出報(bào)警提示。
對(duì)水質(zhì)監(jiān)控系統(tǒng)的加密通信過(guò)程進(jìn)行實(shí)驗(yàn)測(cè)試。選擇一組未知的水樣,將所有傳感器置入水中,終端節(jié)點(diǎn)將傳感器采集的數(shù)據(jù)加密后上傳至服務(wù)器,經(jīng)過(guò)解密后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)瀏覽器監(jiān)控水質(zhì)參數(shù)。系統(tǒng)監(jiān)控界面如圖9所示。測(cè)試結(jié)果表明,系統(tǒng)能夠穩(wěn)定運(yùn)行,數(shù)據(jù)傳輸性能良好,數(shù)據(jù)加密和解密處理及時(shí)。
圖9 系統(tǒng)監(jiān)控界面圖
為了驗(yàn)證系統(tǒng)測(cè)量的準(zhǔn)確性,以溫度測(cè)試為例,采用實(shí)驗(yàn)室水溫計(jì)和系統(tǒng)中溫度傳感器對(duì)3種不同溫度的水樣進(jìn)行測(cè)量對(duì)比,測(cè)試結(jié)果如表2所示,結(jié)果表明,溫度的相對(duì)誤差小于4%,系統(tǒng)測(cè)量準(zhǔn)確性較高。
表2 水溫值測(cè)量結(jié)果
利用AES加密技術(shù)設(shè)計(jì)了一套水質(zhì)監(jiān)控系統(tǒng)。采用AES加密技術(shù),將控制指令和采集到的水質(zhì)參數(shù)進(jìn)行加密傳輸,可以降低數(shù)據(jù)泄露和被篡改的風(fēng)險(xiǎn)。同時(shí)使用GPRS模塊遠(yuǎn)程通信,用戶(hù)可以通過(guò)網(wǎng)頁(yè)瀏覽器實(shí)現(xiàn)對(duì)水質(zhì)數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè)和節(jié)點(diǎn)的控制。實(shí)驗(yàn)表明,該系統(tǒng)可靠性高,實(shí)時(shí)性好。下一步工作的重點(diǎn)是對(duì)終端節(jié)點(diǎn)的能耗和水質(zhì)參數(shù)的測(cè)量精度做研究改進(jìn)。