李得龍 張樂為 王 歡
(河北省石津灌區(qū)管理局 河北 石家莊 050000)
石津灌區(qū)水情數(shù)據(jù)采集系統(tǒng)的作用是從各類傳感器處獲得數(shù)據(jù),并將處理好的結(jié)果存入數(shù)據(jù)庫中,以便綜合展示系統(tǒng)和數(shù)據(jù)分析系統(tǒng)的提取和使用。
1.1 采集。從常用的幾種傳感器中采集實測數(shù)據(jù)。傳感器電氣接口為RS485或最終轉(zhuǎn)化為RS485,通過網(wǎng)絡轉(zhuǎn)換模塊連接至中心服務器,數(shù)據(jù)采集系統(tǒng)運行于中心服務器上,根據(jù)各傳感器的通訊協(xié)議與傳感器進行通訊并獲取數(shù)據(jù),協(xié)議具體內(nèi)容可以參考附件。通信方式應包括串口通信和網(wǎng)絡通信。應用串口通信時,服務器上安裝虛擬串口軟件,相當于所有傳感器在一條485總線上,運行時通過串口進行通信;應用網(wǎng)絡通信時,傳感器端為Client端,服務器為Server端,傳感器端通過公網(wǎng)IP地址連接至服務器,運行時通過網(wǎng)絡進行通信。
1.2 處理。首先應從接收到的通信碼中提取有效數(shù)據(jù),然后計算出傳感器實際測得的數(shù)值,再根據(jù)用戶的需求對數(shù)值進行調(diào)整。程序在采集到數(shù)據(jù)后,要同時記錄采集時間,還要從通信碼中提取設備的地址值。
1.3 存儲。數(shù)據(jù)處理完畢后,要將設備地址、設備所在站點名稱(通過設備表查得)、采集時間、最終數(shù)據(jù)、數(shù)據(jù)狀態(tài)等項目存進數(shù)據(jù)庫。存儲前要將最終數(shù)據(jù)進行校驗,看其是否在正常的數(shù)值范圍內(nèi)。數(shù)據(jù)存儲頻率默認為2 min/次。系統(tǒng)運行一段時間后,數(shù)據(jù)庫中的數(shù)據(jù)會越來越多,為了避免綜合展示系統(tǒng)運行緩慢,程序需要考慮數(shù)據(jù)庫結(jié)構(gòu)和存儲方式的問題。10min都沒有從某個傳感器處獲得數(shù)據(jù),則自動填入1條數(shù)據(jù),存儲監(jiān)測數(shù)值外的其他內(nèi)容,在數(shù)據(jù)狀態(tài)中填入“故障”。在重新獲得數(shù)據(jù)之前不再存入此傳感器的數(shù)據(jù)。為減少數(shù)據(jù)庫的體積,監(jiān)測值和之前重復的數(shù)據(jù)不重復記錄,但要能保證通信狀態(tài)的判斷和歷史數(shù)據(jù)的查詢。存儲時要具備同時寫入多個數(shù)據(jù)庫的功能。
1.4 用戶自定義項目。用戶應可以對以下參數(shù)進行設定:①采集周期,即對1個設備多久采集1次。②采集的設備,即對哪些設備進行輪詢。③增減設備,用戶可以登記新設備和刪除已有設備,增減設備時對設備表做相應的調(diào)整。④增加通訊協(xié)議,用戶確定的內(nèi)容包括發(fā)碼規(guī)則、收碼中數(shù)據(jù)位及字節(jié)數(shù)、數(shù)值計算規(guī)則。⑤存儲周期、各設備數(shù)值的正常范圍、顯示故障的限制時間。參數(shù)設定模塊需要加密。
2.1 數(shù)據(jù)表。ID值、設備編號、站點名稱、采集值、采集時間、時間戳、數(shù)據(jù)狀態(tài)。數(shù)據(jù)表包括水位表、流量表、閘位表、雨量表等等,插入數(shù)據(jù)時按照測點類型分別插入。
2.2 設備表。設備順序號、設備編號、設備地址、設備類型、站點名稱、數(shù)據(jù)正常值范圍。
2.3 用戶表。ID值、用戶名、密碼、用戶姓名、所屬單位、權(quán)限、聯(lián)系方式等。
2.4 測點表。ID值、測點名稱、測點類型、測點位置、上級渠道、斷面參數(shù)、經(jīng)驗公式。
編寫程序時,必須根據(jù)底層設備的協(xié)議來進行通訊和實現(xiàn)采集,系統(tǒng)中應預先加入規(guī)范的接口協(xié)議,在添加設備時直接選擇與其對應的協(xié)議即可。以最為常用的Modbus協(xié)議進行說明。利用Modbus通訊協(xié)議的03功能碼,讀取儀表參數(shù)的數(shù)值。主機的命令格式為:從機地址、功能碼、起始地址、數(shù)據(jù)長度(1個數(shù)據(jù)長度為雙字節(jié)數(shù)即為16位)及CRC碼。從機響應的命令格式為:從機地址、功能碼、數(shù)據(jù)區(qū)字節(jié)數(shù)(讀N個數(shù)據(jù)點返回2N個數(shù)據(jù)字節(jié))數(shù)據(jù)區(qū)及CRC碼。數(shù)據(jù)區(qū)的數(shù)據(jù)是二進制碼,2個或4個字節(jié),高位在前。CRC碼都是1個字節(jié),低位在前。
3.1 信息幀格式(假設從機地址為01,均為十六進制數(shù)據(jù))
3.1.1 主機發(fā)送。主機發(fā)送內(nèi)容見表1。T1表示每個幀頭和幀尾都要預留一定的總線靜止期,建議最少1 s,靜止期是保證儀表有時間對液位進行測量。站號(地址):1個字節(jié)“01”;功能碼:1個字節(jié)“03”,表示讀取指定寄存器的數(shù)據(jù);起始地址:2個字節(jié),其定義需要參考寄存器數(shù)據(jù)結(jié)構(gòu)表;讀取長度:2個字節(jié),根據(jù)不同的數(shù)據(jù)范圍,可取0001或0002,分別表示讀取2個字節(jié)和4個字節(jié);CRC:循環(huán)冗余校驗碼,2個字節(jié)。
表1 主機發(fā)送內(nèi)容
3.1.2 從機應答。從機應答內(nèi)容見表2。定義與主機發(fā)送碼基本相同,真實數(shù)據(jù)值需要根據(jù)傳感器的定義進行解析。
表2 從機應答內(nèi)容
3.2 校驗碼。校驗碼在發(fā)送和接收的數(shù)據(jù)包中都會出現(xiàn),其目的是檢測或校驗數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯誤,它是利用除法及余數(shù)的原理來做錯誤偵測的。為盡量提高接收方收到數(shù)據(jù)的正確率,在接收方接收數(shù)據(jù)之前需要對數(shù)據(jù)進行差錯檢測,當且僅當檢測的結(jié)果為正確時接收方才真正收下數(shù)據(jù)。檢測的方式有多種,常見的有奇偶校驗、因特網(wǎng)校驗和循環(huán)冗余校驗等。
采集系統(tǒng)的作用就是獲取基礎數(shù)據(jù),供上層應用系統(tǒng)使用。所以在編寫時,要深刻了解下層和上層接口的定義與邏輯,起到承上啟下的作用。