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