張鵬遠
1 系統總體設計方案
本監(jiān)控系統由單片機監(jiān)控模塊、Wi-Fi傳輸模塊、監(jiān)測網站三部分組成。
該系統以CC2530單片機和Wi-Fi模塊為基礎,以ASP.NET設計監(jiān)控網站,SQL Server 作為服務器數據庫,所完成的主要功能是實現設備工作狀態(tài)的遠程監(jiān)測。單片機監(jiān)控模塊可以檢測到設備的運行、關閉等狀態(tài),并記錄各狀態(tài)發(fā)生改變的時刻。檢測到的設備狀態(tài)信息以及相應的設備編號將通過Wi-Fi模塊實時傳送到服務器數據庫并在監(jiān)測網站的網頁上顯示。當服務器停止工作時,單片機將繼續(xù)存儲收集來的信息于Flash存儲器中,當服務器恢復工作時自動向單片機存儲器調取數據并存儲于數據庫。本文還是設計了符合系統的通信協議,應用了數據加密技術保證了數據的準確性和安全性。
2 SQL Server 數據庫庫表
2.1數據庫表結構設計
數據庫的設計對于整個系統而言起著不可替代的作用,完善的數據庫結構可以讓整個數據存儲脈絡清晰,不至于引起不必要的混亂。本系統的數據庫表分為三個:第一個用戶信息表;第二個節(jié)點信息存儲表;第三個控制命令表。
2.1.1 用戶信息表
用戶信息表是與用戶登錄相關的表,登陸頁面與用戶信息表相關聯,當用戶登錄時,通過SQL 語句數據庫搜索引擎在數據庫中搜索與注冊用戶信息相符的信息,如果信息相符,返回相應的數據,然后再根據權限登錄到不同的頁面,如果是管理員的話將登錄管理員界面,可以向各節(jié)點發(fā)送命令。如果沒有相應的數據信息,將不能登錄。用戶信息表包括:用戶名、用戶密碼、用戶權限和用戶郵箱。
2.1.2節(jié)點信息存儲表
節(jié)點信息存儲表是系統中最關鍵的一張表,它記錄了所有設備的所有開關機信息和狀態(tài)信息,是為管理員有效管理設備提供重要參考的一張表。系統各個節(jié)點一直檢測設備的狀態(tài),當設備狀態(tài)發(fā)生改變的時候,將發(fā)送信息到服務器,網站接收各個節(jié)點傳送過來的信息根據不同的數據類型存儲于表中。節(jié)點信息存儲表字段包括:設備號、事件時間、設備狀態(tài)。
2.1.3控制命令表
管理員要想控制各個節(jié)點需要在監(jiān)測網站上輸入控制命令,而控制命令不能由網站直接發(fā)送到節(jié)點,首先要將控制命令存儲到數據庫再由數據發(fā)送應用程序發(fā)送至節(jié)點。將控制命令保存到數據庫同時也是歷史信息的保存,對于系統運行的分析將提供一定的信息資源參考??刂泼畋碜侄伟ǎ涸O備號和控制命令。
3 數據安全問題設計
3.1通信協議的制定
3.1.1采集數據格式
開始標志:接收方判斷一個消息開始的表示,為了避免引起混亂,必須不同于其他信息,在這里設置為AAFF。
設備號:各節(jié)點設備的編號,用來知道是哪個設備采集來的數據。
數據長度:在本設計中,一般情況下要傳送的數據信息的長度是固定的。
數據類型:01 表示狀態(tài)改變時間;02表示設備狀態(tài)。
數據:采集的設備狀態(tài)和狀態(tài)發(fā)生時的時間。
停止位:數據包結束標識符。
3.1.2命令信息格式
起始位:設置為AAEE.
設備號:接受節(jié)點的編號。如果設備號為EE,則表示該命令需要廣播給網絡中的所有節(jié)點;如果設備號是E1,則表示該命令需要廣播至一組的路由節(jié)點;如果設備號為E2,則表示該命令需要廣播至二組的所有節(jié)點;如果是E3則表示該命令需要廣播至三組的路由節(jié)點;如果是某個節(jié)點的編號,則該命令只針對這個節(jié)點。
數據長度:命令幀的數據長度也是固定的。
命令標識符:用來區(qū)分各種不同的命令,如表6表示。
結束標識符:AA99
通信模式采取了實時上報和應答相結合的模式。實時上報模式,就是每個節(jié)點的狀態(tài)在發(fā)生改變的時候數據會及時發(fā)送到服務器數據庫,這樣就保證了監(jiān)測網站可以準確的把握每個節(jié)點的當前工作狀態(tài),進而可以準確的進行控制。命令——應答模式,是用戶根據需要,對節(jié)點發(fā)出命令,節(jié)點收到命令后,根據命令內容作相應的處理。命令——應答模式是一個雙向的數據通信系統,其具體步驟如下所示:
1 用戶發(fā)送命令給目標節(jié)點。
2 目標節(jié)點解讀命令,執(zhí)行命令。如果目標節(jié)點收到未定義的命令,則認為是無效的數據包,目標節(jié)點會通知用戶信息無效;如果目標節(jié)點處理命令信息失敗,則協調器發(fā)送失敗的應答信息,用戶需要重新發(fā)送命令。
3 完成。
3.2節(jié)點及服務器異常處理
3.2.1節(jié)點異常處理
在網絡運行中,節(jié)點可能會由于硬件問題或者遭受碰撞攻擊等,導致喪失工作能力。用戶可以通過預設的命令,在網絡中進行廣播,節(jié)點收到信息后進行回復,當有節(jié)點沒有回復的時候再進行通信,如果三次都沒有回復,便認為該節(jié)點出現了故障,需要從網絡中移除或維修。
3.2.2服務器異常處理
理論上說服務器應該是24小時工作的,但是很難保證不會有意外情況的發(fā)生,如斷電,數據庫維護等都會使服務器暫時停止工作。由于各節(jié)點采用的是實時上報模式,所以服務器停止工作時各節(jié)點的數據將不能發(fā)送到服務器數據庫,如果節(jié)點單片機不先將信息進行存儲的話將導致數據的丟失。
在單片機檢測模塊本文設計采用了16M內存的Flash存儲器用于對采集的信息進行存儲,Flash存儲器掉電后不會自動擦除數據,所以能保障數據在故障時的安全。當節(jié)點采集到數據時將試圖發(fā)送到服務器數據庫,如果數據發(fā)送成功,服務器方面將把信息存儲在網絡數據庫,同時,單片機將發(fā)送成功的數據保存在Flash存儲器中;如果數據發(fā)送失敗,則在數據包加一個標識位1,并將該條信息保存至Flash存儲器中。單片機定期遍歷Flash存儲器中的數據,將標識位為1的信息重新發(fā)送,發(fā)送成功后取消標識位存儲于Flash存儲器中,發(fā)送失敗等待下次發(fā)送。
由于Flash存儲器的內存有限,所以不能把所有的數據全部都存儲于Flash存儲器中,本文設計定期擦除Flash存儲器中的已經發(fā)送成功的數據,未發(fā)送成功的數據將繼續(xù)保留,直至發(fā)送成功。為了確保沒有數據的丟失,從檢測網站可以任意調取各個節(jié)點任何時間段的信息,管理員可以在網站管理界面輸入想要的時間段數據至某一個或幾個節(jié)點,節(jié)點接收到命令后從Flash存儲器中調取相應信息發(fā)送至服務器。這樣直接從Flash存儲器調取數據將比從數據庫中調取信息使得信息更加準確可靠。
3.3數據加密
在Z—Stack協議棧當中,這個加密算法默認是關閉的,使用時需要開啟這個功能:首先將f8wConfig配置文件中的DSECURE值設置為1,這是一個總按鈕;然后將ZGlobal.c中的zgPreConfigKeys的值由FALSE改為TRUE;最后在函數nwk-global.c中設置一個128bit的秘鑰。啟動數據密功能,發(fā)送數據的節(jié)點將明文經過AES-128加密算法加密后,使其變成密文傳送出去接收節(jié)點在接收到復雜的密文后,使用相同的秘鑰和AES-128解密算法,將其還原為明文,保證了數據在傳輸過程中的安全。
(作者單位:河北科技學院)