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