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