李志遠,胡廣朋,王永強
(江蘇科技大學 江蘇 鎮(zhèn)江 212000)
在對變電站環(huán)境監(jiān)控的過程中要對變電站環(huán)境進行實時的掌控。環(huán)境數(shù)據(jù)的實時采集是通過不同的探測器來實現(xiàn),如溫濕度采集器、風速采集器和水浸等設備。對探測器的數(shù)據(jù)采集是通過RS-485和GPIO口來完成,采集的數(shù)據(jù)通過網(wǎng)關根據(jù)協(xié)議對數(shù)據(jù)進行解析提取然后再根據(jù)應用協(xié)議將數(shù)據(jù)打包。為了實現(xiàn)遠程監(jiān)控的功能還要將數(shù)據(jù)通過網(wǎng)絡傳輸?shù)街行谋O(jiān)控平臺,數(shù)據(jù)的傳輸是通過TCP/IP網(wǎng)絡協(xié)議來完成。將數(shù)據(jù)包傳輸?shù)街行谋O(jiān)控平臺之后再通過應用協(xié)議對數(shù)據(jù)包進行解析從而得到實時的變電站環(huán)境數(shù)據(jù)。
TCP/IP的全稱是傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議[1],其協(xié)議族是許多不同層次的許多協(xié)議的組合。在Linux操作系統(tǒng)中TCP/IP協(xié)議普遍被認為是由四層協(xié)議組成的協(xié)議系統(tǒng)而且每一層負責不同的通信功能。這4個層分別為:應用層(Telnet、FTP、e-mail),運輸層(TCP、UDP),網(wǎng)絡層(IP、ICMP、IGMP),鏈路層(包括設備驅動程序以及接口卡)如表1所示。
套接字(英文名socket)[2]作為網(wǎng)絡傳輸層供應給應用程序的網(wǎng)絡編程接口是最為通用的應用接口。在兩臺主機之間進行通信時,通過傳輸層進行數(shù)據(jù)的傳輸,而數(shù)據(jù)一般都是在應用層獲取,將應用層的數(shù)據(jù)通過傳輸層傳送就要用socket來實現(xiàn)。在Linux操作系統(tǒng)中是通過其內(nèi)核來完成應用層數(shù)據(jù)向網(wǎng)絡設備硬件接口的不斷傳輸,應用層中的操作對象就是socket的文件描述符。在通信時將通信的目的IP地址、網(wǎng)絡層協(xié)議以及端口號結合起來與對應的socket相匹配,這樣就可以在應用層的數(shù)據(jù)通過網(wǎng)絡層傳輸時將不同的程序應用進程區(qū)分開從而實現(xiàn)數(shù)據(jù)傳輸?shù)臏蚀_性。

圖1 Socket在數(shù)據(jù)傳輸中的作用Fig.1 Socket role in data transmission
Socket編程采用的是C/S模式來進行應用程序的編譯,其不僅能在本地網(wǎng)絡上進行通信也可以接入互聯(lián)網(wǎng)實現(xiàn)全球范圍內(nèi)的網(wǎng)絡通信。Socket是一種交互式通訊機制,如圖1所示發(fā)送進程和接收進程都有各自的套接字來對自己的端口進行描述。通過交互式的通訊機制可以使數(shù)據(jù)的傳輸更加準確和更有目的性。
Linux網(wǎng)絡編程中最普遍的是Socket編程[4],而Socket的類型分為兩種即面向連接的網(wǎng)絡編程和面向無連接的網(wǎng)絡編程。其中面向連接的編程時以TCP協(xié)議為基礎的編程,面向無連接的編程時以UDP協(xié)議為基礎的編程[3]。在用TCP客戶與服務端進程之間產(chǎn)生事件時,服務器首先要啟動,然后客戶啟動來連接服務器。客戶給服務器發(fā)送請求之后服務器來處理這個請求,收到請求后給客戶發(fā)回響應,這過程一直持續(xù)下去知道結束,客戶關閉連接。當事件結束時服務器發(fā)送一個EOF通知,服務器緊接著關閉連接的服務端[5]。以下介紹為完成一個事件各函數(shù)的時間順序。
1)socket()函數(shù):在執(zhí)行網(wǎng)絡I/O時,每一個網(wǎng)絡進程首先要做的是調用socket函數(shù)用來指定期望的通信協(xié)議類型。
2)connect()函數(shù):面向連接的套接字客戶端通過調用connect()函數(shù)在套接字數(shù)據(jù)結構中保存本地信息和遠端信息,從而建立與遠程服務端的一個TCP連接。
3)listen()函數(shù):此函數(shù)的作用是讓套接字處于被動的監(jiān)聽模式,為該套接字建立一個保存到達的服務請求的輸入數(shù)據(jù)隊列,隊列的使用直到有程序對它進行處理。
4)accept()函數(shù):函數(shù)作用是讓服務器接收客戶端的連接請求,當建立好輸入隊列之后服務器就調用此函數(shù)等待客戶的連接請求。
5)sendto()函數(shù):sendto()函數(shù)在 Linux 系統(tǒng)中的作用是將數(shù)據(jù)由指定的socket套接字傳給對方的主機,在套接著上進行數(shù)據(jù)傳輸。
6)close()函數(shù):數(shù)據(jù)傳輸操作結束之后可以通過調用close()函數(shù)釋放套接字,用來停止在要停止的套接字上的所有數(shù)據(jù)的傳輸。

圖2 連接服務編程模型Fig.2 Connected services programming model
無連接的網(wǎng)絡編程模式主要協(xié)議是UDP協(xié)議的編程[6],UDP在數(shù)據(jù)發(fā)送時不提供可靠性。它只是將應用程序要傳給IP協(xié)議層的數(shù)據(jù)發(fā)送出去,并不能保證這些數(shù)據(jù)能否到達要發(fā)送的目的地。由于這種不確定性,在協(xié)議連接時就不需要像TCP那樣需要3次握手來確保數(shù)據(jù)能傳輸?shù)街付康牡厮运木幊棠J揭蚕鄬唵巍H鐖D3所示。

圖3 無連接服務編程模型Fig.3 Connectionless service progtamming model
電力網(wǎng)關是數(shù)據(jù)在不同應用設備協(xié)議之間傳輸?shù)臉屑~,從應用上將分為對上和對下兩個部分。對下是對各變電站監(jiān)控設備采集到的數(shù)據(jù)的提取,對上是將這些數(shù)據(jù)發(fā)送到遠程監(jiān)控中心的監(jiān)控平臺上。這些數(shù)據(jù)是通過不同的協(xié)議來打包封裝的,經(jīng)網(wǎng)關封裝好的數(shù)據(jù)根據(jù)網(wǎng)絡傳輸協(xié)議(TCP/IP協(xié)議)通過互聯(lián)網(wǎng)發(fā)送至監(jiān)控中心,監(jiān)控中心根據(jù)具體應用協(xié)議將數(shù)據(jù)解析之后發(fā)送至監(jiān)控平臺,然后將數(shù)據(jù)顯示在友好界面上從而方便監(jiān)控人員對變電站環(huán)境狀態(tài)的實時監(jiān)控。網(wǎng)關與監(jiān)控平臺的數(shù)據(jù)傳輸方式如圖4所示。

圖4 數(shù)據(jù)傳輸方式Fig.4 Data transmission
網(wǎng)關發(fā)送數(shù)據(jù)至平臺的傳輸協(xié)議的格式中要用1byte來標明協(xié)議的版本,之所以標明協(xié)議版本是因為在整個的電力網(wǎng)關中存在著很多的傳輸協(xié)議為了避免之間不必要的沖突影響導致數(shù)據(jù)無法正確傳輸。長度是網(wǎng)絡字節(jié)序用來在TCP/IP傳輸數(shù)據(jù)時所傳數(shù)據(jù)能夠被正確解釋。子協(xié)議的類型指的是不同設備的協(xié)議,包括保留位、告警數(shù)據(jù)、普通數(shù)據(jù)、命令應答等協(xié)議類型。如表2所示。

表2 網(wǎng)關發(fā)送至平臺傳輸協(xié)議Tab.2 Send to a transport protocol gateway platform
子協(xié)議類型:


各設備在網(wǎng)關向平臺發(fā)送信息的子協(xié)議定義如表3所示。

表3 GPIO口協(xié)議Tab.3 GPIO port protocol

數(shù)據(jù)位的不定長度是由于不同設備的的功能不同傳輸?shù)臄?shù)據(jù)長度不同而定的。
在RS-232與RS-485端口下的數(shù)據(jù)采集是電力網(wǎng)關的主要采集通道,如表4所示。

表4 RS-485、RS-232通信協(xié)議及數(shù)據(jù)格式Tab.4 RS-485RS-232 communication protocols and data formats

在電力網(wǎng)關中主要的環(huán)境監(jiān)測和控制系統(tǒng)包括空調、風速采集以及溫濕度。它們的子協(xié)議在0106協(xié)議類型的下,通過它們的狀態(tài)數(shù)據(jù)來掌控變電站的具體環(huán)境情況。不同的設備的功能不同導致其數(shù)據(jù)的傳輸?shù)母袷揭灿兴煌运鼈兊臓顟B(tài)定義的格式也不同,以下是幾種不同設備的不同狀態(tài)定義。如表5、表6所示。

表5 0100600空調狀態(tài)協(xié)議Tab.5 0100600 conditioning status protocol

表6 0100601風速狀態(tài)協(xié)議及溫濕度數(shù)據(jù)協(xié)議Tab.6 0100601 wind speed and temperature and humidity data state protocal agreement
01006的狀態(tài)定義:
將設備采集到的環(huán)境狀態(tài)數(shù)據(jù)通過網(wǎng)關提取之后用以上協(xié)議打包,然后發(fā)送到監(jiān)控平臺。監(jiān)控平臺在根據(jù)協(xié)議將數(shù)據(jù)解析,從而提取出環(huán)境狀態(tài)數(shù)據(jù),完成監(jiān)控系統(tǒng)的功能。如表7、表 8所示。

表7 010602燈光控制器狀態(tài)協(xié)議Tab.7 010602 lighting controller status agreement

表8 010603tm主機數(shù)據(jù)協(xié)議Tab.8 010603 tm host data protocol

之所以將SF6/O2分成兩個組成部分是為了能更好的檢測出SF6/O2氣體,探測器采用的是一主機多探頭的設備。探頭檢測出到SF6/O2氣體的濃度之后將數(shù)據(jù)發(fā)送給主機經(jīng)過主機收集到氣體的濃度之后再做相應的分析處理,將數(shù)據(jù)歸類打包后在發(fā)送給平臺。主機協(xié)議中包括探頭的數(shù)量、探頭的設備NO號以及從探頭中采集到的數(shù)據(jù)。
電力網(wǎng)關主要運用在無人變電站。通過實驗室和真實無人變電站環(huán)境下的不斷試驗和數(shù)據(jù)的分析來看,所選用的ARM9處理器和Linux操作系統(tǒng)環(huán)境下的程序運行可靠,軟硬件結合良好,數(shù)據(jù)的傳輸效率高,其中RS485數(shù)據(jù)失真率在2%以內(nèi),GPIO口傳輸失真率在1%以內(nèi)。產(chǎn)品達到了預期的設計效果。
[1]孫瓊.嵌入式Linux應用程序開發(fā)詳解[M].北京:人民郵電出版社,2006.
[2]W.Richard Stevens.TCP/IP詳解[M].范建華,等譯.北京:機械工業(yè)出版社,2000.
[3]王雷,王子淘.基于Linux的Socket網(wǎng)絡編程的性能優(yōu)化[J].電子設計工程,2010 17(9):101-103.
[4]張斌,高波.Linux網(wǎng)絡編程[M].北京:清華大學出版社,2006.
[5]宋寶華.Linux設備驅動開發(fā)詳解[M].2版.人民郵電出版社2010.
[6]王楓,羅家融.Linux下多線程socket通訊的研究與應用[J].計算機工程與應用,2004,40(16): 106-109.