李啟本,許菲菲,俞 玲
(國網(wǎng)上海市電力公司松江供電公司,上海 200090)
35 kV其昌變電站采用某國產(chǎn)保護(hù)測控裝置,該變電站站控層采用IEC 61850協(xié)議通信,投運(yùn)于2014年7月。于2020年1月出現(xiàn)部分遙信變位不上送調(diào)度的現(xiàn)象,在某倉10 kV開關(guān)保護(hù)動作后,調(diào)度僅收到保護(hù)動作記錄,未收到該故障倉位開關(guān)變位信號,而站內(nèi)綜自后臺信號均無問題。其后類似的通信異常情況在該站不同倉位的保護(hù)動作及開關(guān)遙控操作時多次出現(xiàn)。
在收到消缺任務(wù)后,可在現(xiàn)場利用該站的備用倉,反復(fù)進(jìn)行故障模擬,開關(guān)變位等試驗,在排除了站控層網(wǎng)絡(luò)結(jié)構(gòu)、通信配置及IP地址設(shè)置等錯誤可能性且備份現(xiàn)場裝置配置后,抓取裝置mms報文。
(1)開關(guān)位置為雙位置接點(diǎn),合位為KI10,分位為KI11,定義為雙點(diǎn)7。遙信初始狀態(tài)為KI10為0,KI11為1,進(jìn)行第1次開關(guān)變位,KI10的值變?yōu)?,KI11的值變?yōu)?,mms報文上送了第1次變位時KI10、KI11和對應(yīng)雙點(diǎn)7的值。
(2)進(jìn)行第2次開關(guān)變位,KI10的值變?yōu)?,KI11的值變?yōu)?,第二次變位的mms報文只上送了雙點(diǎn)7的遙信變位,未上送KI10和KI11的遙信變位。
通過分析裝置發(fā)出的mms報文,確認(rèn)存在遙信變位報文未上送且EntryID不連續(xù)現(xiàn)象,而裝置本地記錄并未丟失,即保護(hù)板記錄正常,同時通信板上送記錄緩存也正常。
BRCB報告控制塊信息存儲在通信程序全局鏈表中[1],現(xiàn)場打印全局鏈表信息,得到現(xiàn)場客戶端后臺和遠(yuǎn)動對應(yīng)的緩沖區(qū)情況。
根據(jù)內(nèi)存對比可知,每個控制塊的緩沖區(qū)最大為20 000,而遠(yuǎn)動當(dāng)前使用大小已超過20 000,即保護(hù)裝置給后臺上送報告對應(yīng)的內(nèi)存緩存區(qū)均正常,給遠(yuǎn)動上送報告對應(yīng)的內(nèi)存緩存區(qū)溢出。
對比后臺和遠(yuǎn)動的初始化流程,遠(yuǎn)動和后臺初始化流程和報告控制塊寫使能過程大致相同,但遠(yuǎn)動初始化流程會對PurgeBuf報告控制塊寫使能[2]。
后臺報告控制塊使能順序,以DL1005LD1/LLN0$BR$brcbDin01為例。
(1)后臺讀LLN0$BR$brcbDin01$RptEna,裝置返回FALSE;
(2)后臺寫LLN0$BR$brcbDin01$RptEna,F(xiàn)ALSE,裝置返回寫成功;
(3)后臺寫LLN0$BR$brcbDin01$OptFlds,值為bit-string:7900,裝置返回成功;
(4)后臺寫LLN0$BR$brcbDin01$TrgOps,值為bit-string:64,裝置返回成功;
(5)后臺寫LLN0$BR$brcbDin01$RptEna,值為True,裝置返回成功。
遠(yuǎn)動報告控制塊使能順序,以DL1005LD1/LLN0$BR$brcbDin01為例。
(1)遠(yuǎn)動讀LLN0$BR$brcbDin01$RptEna,裝置返回FALSE;
(2)遠(yuǎn)動寫LLN0$BR$brcbDin01$RptEna,F(xiàn)ALSE,裝置返回寫成功;
(3)遠(yuǎn)動寫LLN0$BR$brcbDin01$OptFlds,值為bit-string:7900,裝置返回成功;
(4)遠(yuǎn)動寫LLN0$BR$brcbDin01$TrgOps,值為bit-string:64,裝置返回成功;
(5)遠(yuǎn)動寫LLN0$BR$brcbDin03$PurgeBuf,值為:True,裝置回復(fù)成功;
(6)遠(yuǎn)動寫LLN0$BR$brcbDin01$RptEna,值為True,裝置返回成功。
綜合SOE報文分析、報告控制塊內(nèi)存分析以及后臺遠(yuǎn)動初始化流程分析,得到如下內(nèi)容。
(1)裝置上送給后臺的mms報文的EntryID連續(xù),但上送給遠(yuǎn)動mms報文的EntryID不連續(xù)且存在跳變,導(dǎo)致遠(yuǎn)動丟失部分遙信;
(2)對比通信程序的內(nèi)存,裝置給后臺上送報告對應(yīng)的內(nèi)存區(qū)正常,但給遠(yuǎn)動上送報告對應(yīng)的內(nèi)存區(qū)溢出;
(3)對比后臺和遠(yuǎn)動初始化流程,發(fā)現(xiàn)遠(yuǎn)動初始化流程會寫PurgeBuf報告控制塊,而后臺不會寫PurgeBuf報告控制塊。
通過分析總結(jié)可知,初步懷疑遠(yuǎn)動初始化流程對PurgeBuf報告控制塊寫使能,導(dǎo)致裝置長時間運(yùn)行后給遠(yuǎn)動上送報告的內(nèi)存區(qū)溢出,最終導(dǎo)致裝置給遠(yuǎn)動上送SOE記錄的EntryID不連續(xù),部分遙信不上送調(diào)度。
2.1.1 Purgebuf介紹
根據(jù)IEC61850-7-2協(xié)議,對Purgebuf控制塊解釋如下:PurgeBuf屬性代表應(yīng)丟棄緩沖事件的請求。
Purgebuf設(shè)置為TRUE,BRCB必須丟棄所有尚未發(fā)送給客戶端的緩沖事件,且丟棄緩沖事件后,該BRCB屬性應(yīng)自動設(shè)置為FALSE[3]。
2.1.2 BRCB數(shù)據(jù)打包流程
現(xiàn)場通信程序正常報告打包緩沖區(qū)判斷流程如圖1所示。
當(dāng)有新報告需打包上送時,程序先計算新報告占用空間大小,隨后判斷當(dāng)前緩沖區(qū)空間是否足夠存儲當(dāng)前報告,若足夠存儲則更新緩沖區(qū)計數(shù)cur_bufsize并將報告加入到發(fā)送隊列鏈表等待發(fā)送。反之當(dāng)緩存區(qū)空間不足時,若已發(fā)送隊列不為空,則釋放已發(fā)送隊列占用的空間,繼續(xù)判斷可用的緩沖區(qū)是否滿足要求,若已發(fā)送緩沖區(qū)占用空間全部釋放仍然無法滿足要求,則判斷待發(fā)送隊列是否為空,不為空則釋放待發(fā)送隊列空間,此時釋放的待發(fā)送隊列報告丟失。若將待發(fā)送隊列及已發(fā)送隊列占用空間全部釋放,仍然無法滿足條件,則使用bufsize以外空間存儲保證最新報告順利發(fā)送。
結(jié)合裝置給遠(yuǎn)動上送報告控制塊的內(nèi)存可知,給遠(yuǎn)動上送遙信Din的分配內(nèi)存區(qū)大小為20 000,實際使用的內(nèi)存大小為28 884,屬于使用定義緩沖區(qū)以外的空間保存報告的情況。
通過分析代碼流程數(shù)持續(xù)累加。裝置長時間運(yùn)行產(chǎn)生大量報告后會導(dǎo)致緩存區(qū)計數(shù)溢出,超出分配的內(nèi)存區(qū)大小,此時如果只是產(chǎn)生單個報告,使用分配的20 000以外的空間發(fā)送報告,報告發(fā)送成功后,當(dāng)前緩沖區(qū)計數(shù)仍繼續(xù)累加;如果一次產(chǎn)生多個報告,分配的20 000以外的空間都無法處理這些報告時,將丟失部分未及時發(fā)送的報告,表現(xiàn)為現(xiàn)場部分遙信不上送調(diào)度。
根據(jù)分析可知,使用現(xiàn)場備份,裝置上電初始化之后,客戶端對Purgebuf報告控制塊寫使能,按如下步驟進(jìn)行試驗。
(1)裝置和IEC 61850客戶端建立連接后,頻繁做開關(guān)變位后,打印緩沖區(qū)情況;
(2)斷開網(wǎng)線一段時間,客戶端和裝置通信恢復(fù)后,打印報告緩沖區(qū)情況,發(fā)現(xiàn)發(fā)送計數(shù)清零,但緩沖區(qū)大小未清零,此時當(dāng)前緩沖區(qū)計數(shù)已超過最大緩沖區(qū)限制;
(3)緩存區(qū)溢出后,再次進(jìn)行開關(guān)變位,遠(yuǎn)動出現(xiàn)報告丟失、緩沖區(qū)溢出。
客戶端與裝置中斷重連對PurgeBuf報告控制塊寫使能,只是將發(fā)送計數(shù)清零而緩存區(qū)大小未清零,導(dǎo)致后續(xù)進(jìn)行連續(xù)變位時,裝置發(fā)送報告緩存區(qū)溢出。完善通信程序,客戶端中斷重連時若收到Purgebuf寫使能,將發(fā)送計數(shù)和緩存區(qū)大小同時清零,進(jìn)行如下驗證試驗(改后程序產(chǎn)生大量變位內(nèi)存)。
(1)裝置更換通信程序后重啟,和客戶端重連后頻繁做開關(guān)變位,將當(dāng)前緩沖區(qū)空間使用近20 000;
(2) 斷開網(wǎng)線一段時間,當(dāng)客戶端和裝置通信恢復(fù),打印報告緩沖區(qū)情況,發(fā)現(xiàn)發(fā)送計數(shù)清零,緩沖區(qū)大小同樣清零,發(fā)送計數(shù)為1,為客戶端上電寫總召的報告(緩存區(qū)正常清零)。
根據(jù)現(xiàn)場異?,F(xiàn)象及驗證試驗,發(fā)現(xiàn)遠(yuǎn)動裝置和保護(hù)測控裝置建立通信連接時會對PurgeBuf報告控制塊寫使能,此時發(fā)送計數(shù)被清零,但清緩沖區(qū)大小未被清零。裝置長時間運(yùn)行產(chǎn)生大量變位后導(dǎo)致緩存區(qū)溢出,同時處理多個報告時會出現(xiàn)報告丟失的情況。
IEC61850規(guī)范定義了PurgeBuf報告控制塊屬性,未明確規(guī)定客戶端初始化流程是否需要對PurgeBuf報告控制塊寫使能,為避免在切機(jī)或切網(wǎng)過程中出現(xiàn)漏發(fā)信號的問題,一般初始化流程均未對PurgeBuf報告控制塊寫使能,后臺也未對PurgeBuf報告控制塊寫使能,但遠(yuǎn)動會對PurgeBuf報告控制塊寫使能。
本次通信異常為遠(yuǎn)動裝置初始化流程對PurgeBuf報告控制塊寫使能,裝置長時間運(yùn)行產(chǎn)生大量變位導(dǎo)致緩存區(qū)溢出而漏發(fā)報告,后臺初始化流程不會對PurgeBuf報告控制塊寫使能,故現(xiàn)場后臺未出現(xiàn)報告丟失的情況。可通過修改通信程序優(yōu)化IEC 61850報告控制塊使能機(jī)制,優(yōu)化內(nèi)存管理,從而消除缺陷,提高站控層通信穩(wěn)定性。