夏焱 朱巖
摘 要:為了滿足配電網自動化中高容量數據存儲、高速率數據通信的通信要求,根據異步傳輸的特點,結合IEC60870-5-104協議的參考模型,提出了異步傳輸方式在IEC60870-5-104規約中的應用設計。軟件部分以.NET為平臺,采用C#語言設計異步回調方法,結合多線程,實現數據傳輸,并快速、實時響應主站操作。結果表明,使用異步傳輸方式,可以滿足系統的實時性,快速性,有效性。
關鍵詞:IEC60870-5-104;異步傳輸;配電自動化;回調;多線程
隨著世界電力系統的飛速發展,電力技術日新月異,IEC60870-5-104規約也應運而生。IEC60870-5-104遠動規約主要應用于調度主站與RTU之間的數據傳輸。它將IEC60870-5-101的應用層與TCP/IP網絡傳輸層相結合,在確保規約標準化的同時也保證了通信的實時性和可靠性。
1 異步傳輸與同步傳輸要點
1.1 異步傳輸(Asynchronous Transmission)
異步傳輸是將數據(BIT)先分成若干個部分再進行傳輸。發送端發送數據是隨機的,可以在任意時刻發送,所以接收方不能準確的計算出數據何時會到達。
在異步傳輸模式中,需要在待傳送字符碼前添加起始位,用來表示字符碼傳輸的開始;而在字符碼后面同樣需要添加1-2個停止位,用來表示字符結束。通過起始位和停止位,接收方便可以判斷出一個新字符是否開始或結束,最終使得發送方與接收方達到同步[1]。
1.2 同步傳輸(Synchronous Transmission)
同步傳輸是把字符組合起來一并發送,同樣的,每個字符都需要加上起始位和停止位。我們把這些組合叫做數據幀,簡稱為幀[2]。
數據幀頭即起始位,它是一種特殊的比特組合,其作用是告知接收方數據幀是否已送達,同時,它還能使得發送方與接收方進入同步,保證了數據的傳輸速度和接收方的讀取速度相一致。數據幀尾是結束標志位,相當于停止位,其作用是表示數據已經傳輸結束,不會再有其他數據到達。
1.3 異步傳輸與同步傳輸的區別
由于字符之間通過異步方式來傳輸,所以異步傳輸方式并不需要發送方和接收方的時鐘同步。而對于同步傳輸方式來說,發送方和接收方則需時鐘同步,因為字符間的傳輸是同步的。
異步傳輸的時候,需要調用異步函數發送數據,這個函數立馬有返回值返回,程序可以繼續執行其他函數;接收時,當異步函數有數據來時,將會收到通知,或者直接調用回調函數。
同步傳輸的時候,對方在確認收到數據之前,該函數無返回值;接收時,線程就一直處于等待狀態,直到接收到返回值,然后繼續執行其他指令,否則不執行任何操作[3]。
2 IEC60870-5-104協議
為了適應網絡更安全更高效的傳輸,國際電工委員會制訂了IEC60870-5-104規約,它是以IEC60870-5-101遠動通信規約為基礎的。IEC60870-5-104規約利用以太網進行傳輸,網絡層使用TCP/IP協議,應用層使用IEC60870-5-101規約中的應用服務數據單元(ASDU)。
IEC60870-5-104遠動規約結構[4]如圖1所示。在該圖的5層結構中,IEC60870-5-104規約處于應用層協議的位置。IEC60870-5-104規約規定傳輸層使用的是TCP協議,每一種應用層協議都有一個網絡端口號對應。應用規約數據單元(APDU),是由應用規約控制信息(APCI)和應用服務數據單元(ASDU)兩部分組成,它是一個標準的數據幀[5]。
3 異步傳輸在104中的應用
IEC60870-5-104規約通信過程主要包括以下幾個步驟:
3.1 建立連接過程
TCP連接和建立采用客戶端/服務器端方式,在建立TCP連接之前,服務器端始終處于偵聽狀態以等待客戶端的連接請求,客戶端不斷的向服務器端發出連接請求;當服務器端接收到連接請求以后,TCP連接建立,并開始持續的監測TCP連接狀態,以便TCP連接被關閉或意外斷開后重新發出連接請求[6][9]。
3.2 啟動傳輸
其數據幀為U格式幀,主要用于測試鏈路、啟動/停止數據傳輸。在建立連接后,由于建立連接時STOPDT處于未確認狀態,服務器端不會發送任何數據,直到客戶端主動發送一個STARTDT指令用來激活用戶數據的傳輸[7]。如圖2所示:
3.3 總召
由主站啟動發送。子站收到總召命令后依次向主站發送總召確認幀、測試幀、結束幀,來完成整個總召激活過程。
3.4 數據傳輸
準備工作完成后,子站開始主動地向主站即服務器端發送數據。
3.5 對時
主站發送時間同步數據幀,啟動對時命令,子站在收到幀后更新時間,并向主站發送確認幀。
3.6 子站事件自動上傳
根據實際情況,子站將主動的向主站發送一些突發事件。以太網對于服務器端和客戶端都是一個高速的全雙工網絡,因此IEC6080-5-104的傳輸方式應當選擇非平衡式傳輸。
3.7 命令傳輸
主站向子站發送命令,子站返回確認并發送數據,最后子站向主站發送總召結束命令[8]。
由于IEC60870-5-104規約的特殊性,接收方不知道什么時候數據會到達,不能做到與發送方的時鐘同步,所以采用的是非平衡方式傳輸,即一方發起通訊,另一方進行響應。采用網絡協議的IEC60870-5-104規約,子站會將消息主動上傳到主站,數據幀解析后再將消息交給線程進行處理,所以采用的是異步傳輸方式。設計流程圖如圖3。
通訊過程中連接的建立使用Socket異步傳輸方法BeginReceiveAsync()和EndReceiveAsync()來接收、處理數據包,當數據處理結束后,使用AsyncCallback委托方法回調[10]。
// 啟動異步
this.socket.BeginReceiveFrom(packet.Data, 0, UdpPacket.BUFFERSIZE,SocketFlags.None,ref packet.RemoteEndPoint, new AsyncCallback(EndReceiveAsync), packet);
在建立TCP連接之前,服務器端需要始終處于偵聽狀態以等待客戶端的連接請求,這里使用的是TcpListener類進行偵聽;客戶端不斷的向服務器端發出連接請求,建立連接后,開始并持續監測TCP連接的狀態,當TCP連接被關閉或斷開后,客戶端立即重新向服務器端發出連接請求。
連接建立后,客戶端與服務器端之間就可以開始數據交互傳輸。由于同步傳輸是單線程的,等待操作的過程中可能會導致方法阻塞,異步方法很好的解決了這些問題,異步執行某個方法,程序在線程池里選取一個新線程來運行該異步方法,這樣主線程就不容易卡死。
由異步開辟出的新線程,用完之后我們要想辦法將它回收。這里我們使用的是異步回調方法。其核心如下:
⑴使用回調函數,異步操作結束后,程序將會自動調用此回調函數。
⑵在主線程的回調函數中使用EndInvoke方法。
異步回調的大致流程:啟動異步,在主程序里加上異步結束時所需執行的回調函數,然后就可以繼續執行其他程序,最后當此異步線程工作自動完成,就會執行主程序里的那個回調函數,將其結果返回給主函數,并執行下一步操作。如圖4所示:
采用異步回調的方法,并運用多線程的處理,可以在等待響應的過程中執行下一行代碼,大幅提高程序的運行速率,防止程序因等待過程的無響應而死掉。最好的體現就是在IEC60870-5-104中與連接有關的四個超時時間t0-t3。通過異步回調,程序可以在等待響應的時間段里繼續執行后面代碼,而通過回調函數可以接收到超時狀態,有效的解決了因等待而造成的程序停滯、癱瘓,體現了其快速性、高效性、可靠性。
4 結語
隨著計算機網絡技術和電力自動化技術的蓬勃發展,國家電網對配電自動化水平的要求越來越高,電力監控系統越來越多地使用IEC60870-5-104遠動規約。作為國際化標準,IEC60870-5-104規約能很好地保證通信的統一性和安全性。而使用異步傳輸方式,可以有效的提高IEC60870-5-104規約的傳輸效率,使得IEC60870-5-104規約更加簡單可靠,在未來的配電網自動化發展中的應用也將會越來越廣泛。
[參考文獻]
[1]D.W.CALDWELLA Distributed Spacecraft Thermal Control Architecture Using the Dallas Semicinductor MicroLan Products.Digital Avionics Systems Conference,1997,10:1-8.
[2]姜川.汽車音響系統中雙機通信的設計與實現[D].遼寧:大連理工大學.2007.
[3]葛紉秋,王玉花,馬秋菊,等.實用微機接口技術[M].北京:高等教育出版社.2003:172-175.
[4]劉玉芳.華為交換機維護心得[J].江西通信科技.2007.
[5]彭永峰.104規約通信在遠動系統的應用[J].科技資訊.2010.
[6]魯晶.基于DES理論的IEC60870-5-104通訊異常的自動探測方法[D].湖南:長沙理工大學.2013.
[7]薛飛.IEC60870-5-104協議的軟件建模與實現[D].北京:華北電力大學.2012.
[8]朱永利,王德文,邸劍,等.遵循IEC61850的新型網絡化電力遠動系統[J].華北電力大學學報.2008,35(6).
[9]邵留成.程控交換機的維護與管理[J].電力與能源.2009.
[10]陳什,朱巖.大規模車輛監控系統中通信服務器的設計與實現[J].計算機與現代化.2011.