王春衛(wèi)
(上海繼電器有限公司,上海200072)
國內(nèi)光纖縱差線路保護屏的工程項目中,常采用上海施耐德電氣電力自動化有限公司(原AREVA電力自動化有限公司)的P546電流差動保護裝置。這些保護裝置選用的是Modbus-RTU通訊協(xié)議,而這些工程項目的技術(shù)協(xié)議書要求保護裝置必須采用標準的IEC-103通訊協(xié)議與后臺監(jiān)控及信息子站通訊(IEC 60870-5-103協(xié)議,簡稱IEC 103協(xié)議,是一個用于電力系統(tǒng)控制和信息采集的通信協(xié)議,由國際電工委員會(International Electrotechnical Commission,IEC)57號工作組制定)。為了滿足這一要求,必須添加一臺規(guī)約轉(zhuǎn)換器實現(xiàn)此功能。規(guī)約轉(zhuǎn)換器主要用于各種自動化網(wǎng)絡(luò)通信場合,進行通訊規(guī)約的轉(zhuǎn)換,即將不同的2種通訊語言,通過它來完成翻譯,經(jīng)程序處理后按照用戶指定的通信語言送往監(jiān)控后臺或其他應(yīng)用系統(tǒng)。本Modbus規(guī)約轉(zhuǎn)換器需將P546的信息由Modbus總線通訊協(xié)議轉(zhuǎn)為國內(nèi)通用的IEC-103通訊協(xié)議規(guī)約,再轉(zhuǎn)發(fā)給后臺監(jiān)控和信息子站。該規(guī)約轉(zhuǎn)換器若從AREVA公司購買非常昂貴,上海繼電器有限公司的線路保護屏也就失去了競爭力,故決定自行開發(fā)規(guī)約轉(zhuǎn)換器。
在某變電站綜合自動化工程項目中,有一款上海繼電器有限公司研發(fā)生產(chǎn)的CBZ6800通訊管理機,它在變電站綜合自動化系統(tǒng)中作為各級智能設(shè)備與上級監(jiān)控中心之間的數(shù)據(jù)樞紐,并帶有完善的IEC-103通訊協(xié)議。在實際應(yīng)用中,與其他公司的監(jiān)控設(shè)備配合良好,故以此通訊管理機作為開發(fā)規(guī)約轉(zhuǎn)換器的軟硬件平臺可以起到事半功倍的效果。由于硬件是現(xiàn)成的,故只要對軟件架構(gòu)進行調(diào)整,并編寫相關(guān)的源代碼,該規(guī)約轉(zhuǎn)換器開發(fā)工作即可完成。
CBZ6800通信管理機的軟件從結(jié)構(gòu)上分為3層,即引導(dǎo)程序、系統(tǒng)程序和用戶進程,如圖1所示[1]。

圖1 軟件層次結(jié)構(gòu)
在通信管理機系統(tǒng)上電或復(fù)位時,首先運行的是引導(dǎo)程序(Basic Input Output System,BIO),引導(dǎo)程序?qū)PU及周邊接口部件進行初始化,執(zhí)行系統(tǒng)自診斷程序,判斷系統(tǒng)程序及用戶進程是否有效[2]。系統(tǒng)引導(dǎo)成功后將控制權(quán)交給系統(tǒng)程序并開始運行用戶進程。在自診斷出致命的錯誤(如ROM出錯、RAM出錯等)后,引導(dǎo)程序?qū)⒉辉龠\行系統(tǒng)程序和用戶進程。而這3個層次程序按優(yōu)先級的不同分成3塊,每一塊程序占用CPU不同的資源,由調(diào)度程序進行管理[3],如圖2所示。

圖2 軟件優(yōu)先級結(jié)構(gòu)
位于頂端的任務(wù)優(yōu)先級最高,它可以打斷其他兩級任務(wù)而被優(yōu)先執(zhí)行,所有對時間敏感的服務(wù)程序均存放于此;位于中間的一部分服務(wù)程序40ms左右被調(diào)用一次,所有對時間要求較高的服務(wù)程序均放于此;主程序1s左右被調(diào)用一次,在層次圖最下面,所有對時間要求不高的服務(wù)程序均存放于此[1]。
管理機的各個應(yīng)用程序進程之間通過發(fā)送消息進行通信。消息隊列是保存消息的數(shù)據(jù)結(jié)構(gòu),按照先進先出的隊列原則存放消息。系統(tǒng)產(chǎn)生的消息從隊列的尾部插入,處理時從隊列的頭部讀取消息[4]。一個應(yīng)用進程最多可接受8個消息。當某一個任務(wù)(進程)希望請求其他任務(wù)服務(wù)時,該進程先創(chuàng)建一個臨時消息結(jié)構(gòu),然后調(diào)用消息發(fā)送程序?qū)⒃撓l(fā)往目標任務(wù)。應(yīng)用進程不斷地檢查自己的消息隊列,當收到新的消息后,從消息隊列中讀取一條消息進行處理,處理完畢后重新更改消息隊列指針以便接收新的消息。
用戶進程是位于系統(tǒng)程序和引導(dǎo)程序之上的完成各種用戶接口的程序。在該部分程序中實現(xiàn)了現(xiàn)場智能設(shè)備的接入和遠方調(diào)度規(guī)約。用戶進程按優(yōu)先級也分為3塊,但用戶進程不能直接運行,它必須等到系統(tǒng)調(diào)度并分配給資源之后才能被調(diào)度執(zhí)行。用戶進程采用面向?qū)ο髾C制生成,支持對象復(fù)制。同一時間可運行多個拷貝,在系統(tǒng)程序的支撐下用戶進程之間可相互發(fā)送消息和交換數(shù)據(jù)。典型的用戶進程的邏輯框圖如圖3所示[1]。
通過以上分析可知,只需要添加一個用于Modbus通訊的用戶進程子程序,并對IEC-103對應(yīng)的用戶進程子程序加以修改就可以滿足實際需求。

圖3 典型用戶通信進程邏輯圖
在現(xiàn)場實際應(yīng)用中,后臺監(jiān)控和信息子站均只需要讀取P546裝置的遙信、事件和定值,而不需要修改任何參數(shù)[5]。因此,可以確定通訊協(xié)議程序的主要功能如下。
(1)Modbus通訊子程序應(yīng)該能滿足讀遙信、遙測、事件記錄及保護定值;
(2)IEC-103通訊子程序應(yīng)在響應(yīng)總召喚報文時上送遙信狀態(tài),將遙測數(shù)據(jù)和定值數(shù)據(jù)都以組的形式以類型標識為ASDU10的報文上送,并主動上送最新發(fā)生的事件信息。
通過分析P546的Modbus信息點表可知:
(1)裝置共有32個開入量,存于4個連續(xù)的字節(jié)內(nèi),每個字節(jié)的每一位分別代表一個遙信位,32個遙信按順序排列。當實際位存在開入信息時,該位的值為“1”,否則為“0”。開入狀態(tài)可以通過一幀詢問報文讀取。
(2)裝置共有32個開出量,同開入信息類似,也順序的保存于4個連續(xù)的字節(jié)內(nèi),當實際開出位置閉合時,對應(yīng)位為“1”,否則為“0”。開出狀態(tài)也可以通過一幀詢問報文讀取。
(3)至于遙測數(shù)據(jù),現(xiàn)場只需要Ia、Ib、Ic三相電流幅值和Uab,Ubc,Uca這3個線電壓幅值,而在P546的Modbus信息點表中,這6個值也保存在連續(xù)的地址內(nèi);因此,可以通過一幀報文讀取。
(4)采用Modbus通訊協(xié)議讀取P546的事件記錄通常需要4個步驟。第1步,讀取一個地址固定的標志字節(jié),通過判斷該字節(jié)內(nèi)相應(yīng)的一位是否為“1”來判斷是否存在新事件(即未被確認的事件),該位如為“1”則表示有事件需要讀取,如為“0”則表示無新事件需要讀取。判斷存在新事件后,則進入第2步,向P546裝置一個指定地址發(fā)送報文寫入數(shù)據(jù),即通知P546裝置準備讀取事件。第3步,則是發(fā)送詢問報文讀取具體事件內(nèi)容。第4步,向指定地址寫入數(shù)據(jù),表示上一個事件已經(jīng)確認讀取。如果存在多個事件,則重復(fù)上述4個步驟即可。
(5)P546裝置將不同的保護定值通過不同的數(shù)據(jù)類型存儲于不同的寄存器地址內(nèi)。只需根據(jù)現(xiàn)場用戶提供的定值整定清單讀取所需的定值。現(xiàn)場定值一旦被輸入后,也不會輕易修改,故不必隨時讀取發(fā)送報文裝置定值。
通過上述情況分析,可以設(shè)計Modbus通訊過程流程圖如圖4所示。

圖4 通訊過程流程圖
Modbus通訊的通訊報文結(jié)構(gòu)如圖5所示,其中地址碼為P546裝置的通訊地址,由于現(xiàn)場一臺P546配置一臺規(guī)約轉(zhuǎn)換器,故地址可以固化。Modbus通訊報文中的功能碼、數(shù)據(jù)區(qū)中的地址與數(shù)據(jù)長度在之前的功能分析中都已明確,故之前所設(shè)計的4個通訊步驟中,對應(yīng)的6800管理機向P546裝置發(fā)送的讀取數(shù)據(jù)的報文內(nèi)容實際上都可以固定下來,這樣可以大大簡化程序內(nèi)容,只需在相應(yīng)的通訊步驟中將固定的報文填入發(fā)送緩沖區(qū)內(nèi)即可。

圖5 Modbus通訊報文結(jié)構(gòu)
對于Modbus通訊程序,當通訊過程和發(fā)送的報文確定后就需要對P546裝置返回的報文加以處理。首先應(yīng)對接受報文進行CRC校驗,算出校驗碼,與接受報文的校驗碼進行比較,若一致則判斷接受報文完整正確,然后再對報文內(nèi)的數(shù)據(jù)進行具體分析處理;若不一致則丟棄該幀接受報文,并重復(fù)發(fā)送上一次發(fā)送的報文,直到校驗正確為止。同時,對連續(xù)接受校驗不正確的報文次數(shù)進行計數(shù),當該計數(shù)達到一定值時,可以判斷通訊出錯,并發(fā)出通訊出錯的事件報文,這樣可以避免程序陷入死循環(huán)。校驗正確后,隨即處理具體的數(shù)據(jù)內(nèi)容。其中開入、開出和遙測數(shù)據(jù)相對容易處理,只需將相應(yīng)的數(shù)據(jù)存入公共數(shù)據(jù)緩沖區(qū)中,IEC-103轉(zhuǎn)發(fā)協(xié)議程序可以直接從該公共數(shù)據(jù)緩沖區(qū)中按照事先約定的格式和地址讀取相應(yīng)數(shù)據(jù)。另外,在Modbus報文中,開入開出信息存在于字節(jié)中的順序位,而IEC-103報文中則是一個開入量(或開出量)對應(yīng)一個字節(jié),所以,需要編寫程序?qū)odbus報文中保存開入開出信息的數(shù)據(jù)字節(jié)按位分離并將每一個數(shù)據(jù)位單獨保存為一個字節(jié),如:Modbus報文中的一個數(shù)據(jù)字節(jié)為47H,在程序中應(yīng)將該字節(jié)處理為4個8個字節(jié)“00H,01H,00H,00H,00H,01H,01H,01H”并保存。
由于P546裝置上送的Modbus報文中只提示發(fā)生遙信變位并上送時間信息,并沒有明確指出是哪一個遙信點發(fā)生變位事件,這就需要在程序內(nèi)部進行處理加以分辨。在程序中,除了將每次讀到的遙信狀態(tài)存于公共緩沖區(qū)內(nèi),還應(yīng)單獨存放一個固定位置作為歷史數(shù)據(jù)加以保存。每次讀到新的遙信數(shù)據(jù)都應(yīng)與歷史數(shù)據(jù)進行比較,采用按位異或的方式找出發(fā)生變位的遙信點號,再以該點號在當前遙信數(shù)據(jù)中查出對應(yīng)的狀態(tài)信息。將變位的遙信點號、遙信狀態(tài)和時間信息合成一條6800管理機內(nèi)部使用的消息,通過消息隊列發(fā)給IEC-103通訊協(xié)議程序,由IEC-103通訊協(xié)議程序解讀、打包并轉(zhuǎn)發(fā)。
對于事件信息,將P546通訊報文中包含的事件信息提取出來,只需要事件點號、事件狀態(tài)、時間信息,將這些信息按照消息的格式打包通過消息隊列發(fā)給IEC-103通訊協(xié)議程序,再由IEC-103轉(zhuǎn)發(fā)。
對于定值信息,可以將定值數(shù)據(jù)以約定好的格式存儲到具體的位置并將該位置的地址通過消息的方式傳送給IEC-103通訊協(xié)議程序。讀取定值需要較多步驟,應(yīng)當在讀取全部定值并將全部定值都按照相應(yīng)約定格式存儲完成后,才能使用消息通知IEC-103通訊程序。另外,在IEC-103相應(yīng)組值的報文中主要使用兩種數(shù)據(jù)類型:用ASICⅡ碼表示字符型數(shù)據(jù),用浮點數(shù)表示具體數(shù)值。而在P546中則使用實數(shù)表示具體數(shù)值,使用具體代碼表示定值字符串,所以需要對定值類型進行轉(zhuǎn)換。將P546通訊報文中的實數(shù)轉(zhuǎn)為浮點數(shù),用查表法將具體代碼轉(zhuǎn)為ASICⅡ碼字符串,將轉(zhuǎn)換后的數(shù)據(jù)存于相應(yīng)位置。
Modbus規(guī)約轉(zhuǎn)換器在實際工程中已投入使用近百套,運行穩(wěn)定可靠,充分說明本方案是完全可行并能滿足實際要求的,該規(guī)約轉(zhuǎn)換器的開發(fā)應(yīng)用為公司節(jié)約成本百萬余元。
[1]張毅剛,徐 輝,葉劍峰.多功能通信管理機[J].上海電器技術(shù),2008(2):34-39.
[2]趙 琦,姚慶梅.基于ARM及嵌入式操作系統(tǒng)的通信管理機[J].山東建筑大學(xué)學(xué)報,2009,24(1):54-58.
[3]尹小奪,閆 鵬.基于通信管理機的變電站自動化系統(tǒng)改造方案設(shè)計與實現(xiàn)[J].陜西電力,2008,36(9):16-19.
[4]牛青松,張 顏.DF3211通信管理機的結(jié)構(gòu)及功能[J].科技情報開發(fā)與經(jīng)濟,2010,20(1):109-111.
[5]劉振亞.智能電網(wǎng)知識讀本[M].北京:中國電力出版社,2010.