桂小智, 馬 政, 潘本仁, 熊小伏, 陳星田
(1. 國網(wǎng)江西省電力有限公司電力科學(xué)研究院, 江西 南昌 330096; 2. 輸配電裝備及系統(tǒng)安全與新技術(shù)國家重點實驗室(重慶大學(xué)), 重慶 400044; 3. 重慶元虎科技有限公司, 重慶 400030)
自2006年云南省電網(wǎng)公司110 kV曲靖翠峰變電站[1]依據(jù)DL/T860(IEC61850)標(biāo)準(zhǔn)開始改造以來,國內(nèi)數(shù)字化變電站和智能變電站建設(shè)已將近15年,變電站也從最初的綜合自動化變電站不斷向智能變電站發(fā)展。
根據(jù)《智能變電站技術(shù)導(dǎo)則》[2],現(xiàn)已建立基于IEC61850 的智能變電站“三層兩網(wǎng)”通信網(wǎng)絡(luò)模型[3],但隨著智能化進程的不斷推進、智能電子設(shè)備的數(shù)量以及種類不斷增多,主要面臨兩方面問題:一是通過網(wǎng)絡(luò)通信傳輸?shù)男盘柫砍时l(fā)式增長,若不進行輕量化處理將大大加重服務(wù)器負荷,嚴重時將造成通信設(shè)備故障[4];二是圖像監(jiān)測裝置已經(jīng)廣泛存在于智能變電站中,受制于圖像分辨率及需求等因素的影響,造成傳輸圖像大小可變,而常規(guī)建模方法靈活性較差,無法對可變長度數(shù)據(jù)建模。
目前對智能變電站數(shù)據(jù)輕量化的研究中,文獻[5]基于壓縮感知理論或低秩矩陣填充理論對海量數(shù)據(jù)進行采樣后采用矢量映射、參量編碼和協(xié)議報文封裝,文獻[6,7]采用壓縮感知算法對系統(tǒng)中諧波和間諧波進行壓縮采樣,文獻[8]基于離散傅里葉變換對信號進行稀疏分析后壓縮采樣。但上述僅是在采樣上進行了壓縮處理,沒有涉及到在通信模型上進行輕量化研究。文獻[9]分析了智能變電站報文的數(shù)據(jù)結(jié)構(gòu)特點,提出基于上下文預(yù)測的deflate算法,縮小了報文大小,但只是對已有的報文進行分析壓縮,沒有涉及到基礎(chǔ)建模部分。
對智能變電站通信建模的研究中,早期主要由幾個開發(fā)保護裝置的大公司進行。后來為規(guī)范變電站通信網(wǎng)絡(luò)和系統(tǒng)國際標(biāo)準(zhǔn)的應(yīng)用,實現(xiàn)各制造廠商設(shè)備的互操作性[10],提高IEC61850標(biāo)準(zhǔn)設(shè)備生產(chǎn)、調(diào)試、檢修、測試[11]、運行的便利性,特制定IEC61850工程應(yīng)用模型[12],即Q/GDW 1396-2012《IEC61850工程繼電保護應(yīng)用模型》,包括線路保護、斷路器保護、變壓器保護、母線保護、電抗器保護、測控裝置、智能終端、合并單元、錄波裝置等邏輯節(jié)點類型定義[13-16]。大部分智能裝置的制造報文規(guī)范(Manufacturing Message Specification,MMS)通信模型,通過SCL設(shè)計工具軟件就可以設(shè)計出新的DA數(shù)據(jù)模型、DO數(shù)據(jù)類型以及邏輯節(jié)點模型[17-20],該模型在MMS服務(wù)器程序解析后加載就能運行,修改路徑映射的回調(diào)函數(shù)綁定就可以完成數(shù)據(jù)的發(fā)布。所有DO數(shù)據(jù)類型和DA數(shù)據(jù)類型的設(shè)計均為基于MMS通信模型的基本類型的組合。但隨著變電站各種智能裝置的廣泛應(yīng)用,基于繼電保護的數(shù)據(jù)通信模型并不完全適用于其他智能裝置,并且對圖像等可變數(shù)據(jù)長度建模完全無法實行,需要在數(shù)據(jù)模型中進行擴展。根據(jù)國際電工委員會2018年發(fā)布的SCL.xsd(2007B4版)所規(guī)范的基本數(shù)據(jù)類型共計38個,其中除了“Struct”類型是遞歸外,其他類型都是確定類型,理論上任何數(shù)據(jù)結(jié)構(gòu)都可以通過這些基本類型進行組合完成,比如單點狀態(tài)信息“SPS”在DOType中的定義中,“stVal”表示狀態(tài)的值,其他變量是該值的屬性。常用0和1來表示一個開關(guān)的兩種狀態(tài),若表示多個開關(guān)的二種狀態(tài)就需要多次實例化“SPS”,該過程將產(chǎn)生大量冗余數(shù)據(jù)。
對于多點狀態(tài)的一種擴充方式是在“stVal”屬性中添加“count”子屬性,填入重復(fù)次數(shù),并修改“id”名稱和“cdc”類別。這也是大部分多點狀態(tài)信息的通用擴充方法,這種方法中“stVal”在通信中根據(jù)ASN.1[21]語法規(guī)則要使用三個字節(jié)表示,用十六進制“83 01 00”或“83 01 01”表示兩種不同的狀態(tài),實際值只使用了一位。對較少點數(shù),特別是十點以下使用是很方便。當(dāng)狀態(tài)量多達數(shù)百點時,若單點傳送則效率很低,若一次傳送全站所有開關(guān)狀態(tài)或傳送一張圖片,此時該結(jié)構(gòu)十分浪費空間,且因以太網(wǎng)字節(jié)長度限制必須進行多次分幀,傳輸效率也不盡人意。
針對此類工程問題,文中提出基于數(shù)據(jù)類型擴充的智能變電站通信建模方法,首先介紹了BitString數(shù)據(jù)類型;然后通過實例展示數(shù)據(jù)類型標(biāo)準(zhǔn)擴展、模型參數(shù)修改、服務(wù)器程序修改,詳細介紹了BitString數(shù)據(jù)類型的具體擴充方法;最后,通過算例測試,即報文抓取結(jié)果,驗證了提出的方法可以顯著降低報文大小,提高通信模型對復(fù)雜數(shù)據(jù)結(jié)構(gòu)的適應(yīng)性。
BitString類型是MMS數(shù)據(jù)使用的數(shù)據(jù)通信類型,但目前主要是用在固定幾個數(shù)據(jù)類型的變量中,但其并非基本數(shù)據(jù)類型,在目前的應(yīng)用中每種基本類型均為固定位寬,具體見表1。
BitString數(shù)據(jù)類型每一位都可以表示一點的兩種狀態(tài),當(dāng)位寬不能被8整除時使用padding字節(jié)表示不使用的位數(shù),因此根據(jù)ASN.1語法規(guī)則,一個BitString數(shù)據(jù)封裝結(jié)構(gòu)如圖1所示。
圖1 BitString數(shù)據(jù)結(jié)構(gòu)Fig.1 Data structure of BitString
由于BitString數(shù)據(jù)類型使用密度很高,通過padding字節(jié)的附加來表示8點狀態(tài),但固定位寬長度對數(shù)據(jù)建模有一定限制,因為使用場景較多,所需位寬并不唯一,故需要對各種靈活多變結(jié)構(gòu)進行建模才能使用?;跀?shù)據(jù)類型擴充的通信建模流程圖如圖2所示。
圖2 基于數(shù)據(jù)類型擴充的通信建模Fig.2 Communication modeling based on data type expansion
基于BitString擴充的通信建模過程包括:基本數(shù)據(jù)類型標(biāo)準(zhǔn)擴展DOType修改、LNodeType修改、IED中邏輯節(jié)點實例化、SCL文件修改等,具體介紹如下。
為了支持任意長度BitString建模要求,首先需要在標(biāo)準(zhǔn)描述文件中添加“
標(biāo)準(zhǔn)修改后需要在SCL建模工具軟件中添加此基本數(shù)據(jù)類型,然后在SCL解析程序中進行識別、解析、建立數(shù)據(jù)類型,在服務(wù)程序中對讀取回調(diào)函數(shù)進行值的綁定。方法流程如圖3所示。
圖3 BitString擴展模型修改流程Fig.3 Modification of BitString extend model
以SISCO公司的“MMS-Lite”源代碼為例,說明BitString的擴展使用方法。
新建一個“DOType”,屬性“cdc”設(shè)置為“MPS”,意為多點狀態(tài)類型。屬性“id”設(shè)置為“MPSb”,用來被“LNodeType”所引用。在新建的“DOType”中添加一個“Data Attribute”,“name”設(shè)置為“stVal”,“fc”設(shè)置為“CO”,“bType”設(shè)置為“BitString300”,意為狀態(tài)位寬為300。
為了對比,再新建一個“DOType”,直接使用“BOOLEAN”來擴展多點狀態(tài)信息,屬性“cdc”設(shè)置為“MPS”,屬性“id”設(shè)置為“MPSa”。添加一個“Data Attribute”,“name”設(shè)置為“stVal”,“fc”設(shè)置為“ST”,“bType”設(shè)置為“BOOLEAN”,“count”設(shè)置為“300”,表示有300個點狀態(tài)。
以上為針對多點開關(guān)控制數(shù)據(jù)模型的新建模方法,除此之外,在復(fù)雜數(shù)據(jù)結(jié)構(gòu)建模時同樣可以使用Bitstring擴展來簡化。如假設(shè)有一種數(shù)據(jù)結(jié)構(gòu)PMU定時數(shù)據(jù)傳送結(jié)構(gòu)體,通過衛(wèi)星同步時間進行觸發(fā)傳送,根據(jù)常規(guī)的基本數(shù)據(jù)類型建模需按數(shù)據(jù)結(jié)構(gòu)進行逐個定義,結(jié)構(gòu)冗長,而使用文中提出方法即“BitstringXXX”來建模則十分簡單。只要計算出整個數(shù)據(jù)結(jié)構(gòu)的大小即可,其建模過程如下:
bType="BitString7840" fc="MX" /> 其中,“BitString7840”即為整個結(jié)構(gòu)體轉(zhuǎn)換為位后的長度,至此可實現(xiàn)對簡單數(shù)據(jù)結(jié)構(gòu)建模。而面對復(fù)雜數(shù)據(jù)結(jié)構(gòu)如圖片時,例如在輸電線路在線監(jiān)測過程中,檢測裝置對某處進行探測時發(fā)現(xiàn)異常時需傳送一幀圖片至終端,假設(shè)圖像數(shù)據(jù)為640×480像素,每個像素為RGB三色256級。使用常規(guī)基本數(shù)據(jù)類型建模,需先后建立兩個模型,即DAType與DOType模型,而使用BitstringXXX來建模,只用一個模型即可完成,其建模過程如下: 在“LNodeType”建模中,新建一個邏輯節(jié)點,因為每個IED中“LN0”邏輯節(jié)點是不可缺少的,為了簡化IED模型,就新建一個“LN0”的邏輯節(jié)點,屬性“l(fā)nClass”設(shè)置為“LLN0”,只包含一個DO“Health”。另外分別新建四個邏輯節(jié)點類型,分別為多開關(guān)數(shù)據(jù)“CSWIa”、波形數(shù)據(jù)“PHDa”、圖像數(shù)據(jù)“MMXUa”、圖像數(shù)據(jù)“MMXUb”,建立多個邏輯節(jié)點類型的目的是為了防止單個邏輯節(jié)點裝入所有DO會導(dǎo)致邏輯節(jié)點緩沖區(qū)過大,從而無法實例化成功,圖像數(shù)據(jù)“MMXUa”邏輯節(jié)點由于采用常規(guī)基本數(shù)據(jù)類型建模,即便單獨一個邏輯節(jié)點也已超出緩沖區(qū)最大值,而無法使用的,強行修改服務(wù)器端邏輯節(jié)點大小和MMS報文最大字節(jié)數(shù)能啟動服務(wù)端,但在MMS客戶端連接時,讀取邏輯節(jié)點目錄也易失敗。 新建一個IED,命名為“CA2201”,在IED內(nèi)添加一個“AccessPoint”命名為“S1”,其內(nèi)添加一個“Server”,其內(nèi)添加一個“LDevice”,實例化名稱“inst”命名為“LD0”,在“LD0”內(nèi)添加邏輯節(jié)點“LN0”,屬性“l(fā)nType”設(shè)置為“LN0”,屬性“l(fā)nClass”設(shè)置為“LLN0”,屬性“inst”設(shè)置為空“”。其中IED內(nèi)“Services”用來描述IED所提供的服務(wù),不可缺少。 對添加的IED,設(shè)置一個通信IP地址以便外部訪問,其中“iedName”設(shè)置為前邊所添加的IED名稱,“apName”設(shè)置為前邊所添加的IED的“AccessPoint”的名稱。 到此,最簡化的ICD文件就已經(jīng)建立完畢了,如果是用建模工具軟件設(shè)計,可以導(dǎo)出“CA2201”的ICD文件,如果是用xml編輯軟件設(shè)計的直接存儲為“CA2201.icd”即可。 由于引入了新的基本類型,MMS服務(wù)器的SCL解析程序不能識別,直接加載會導(dǎo)致MMS服務(wù)器建模失敗,因此在SCL解析階段,必需對其進行修改,完成模型的創(chuàng)建。同時在讀取和寫入回調(diào)函數(shù)中也要進行相應(yīng)修改,來完成數(shù)據(jù)的更新和發(fā)布。以SISCO公司的“MMS-Lite”源代碼為例實現(xiàn)BitString數(shù)據(jù)類型的擴展使用。 MMS-Lite的SCL文件解析程序在“sclproc.c”文件中,函數(shù)“ms_rt_bld_61850_add_btype”用來生成每種基類的數(shù)據(jù)類型,因此需要在此函數(shù)中添加對“BitString”基本數(shù)據(jù)的支持。 比較類型關(guān)鍵字“btype”字符串前9個字符,如果是“BitString”,轉(zhuǎn)換后邊的字符為寬度值;如果寬度不為零,則創(chuàng)建此寬度的數(shù)據(jù)模型。“pInt”、“bits”為前置聲明局部變量,僅供轉(zhuǎn)換長度使用。 MMS讀回調(diào)函數(shù)在“userleaf2.c”文件中的“u_custom_rd_ind”函數(shù),每個邏輯變量都有一個數(shù)據(jù)路徑映射的“DATA_MAP”指針,在“datamap.cfg”文件中添加需要回調(diào)設(shè)置的變量,就能生成映射,讀回調(diào)函數(shù)中“DATA_MAP”的指針就會指向真實的通信地址。比較葉子路徑名稱,就可以知道當(dāng)前所讀取的變量。因此在“u_custom_rd_ind”函數(shù)中,當(dāng)“map_entry”指針變量有效時,添加如圖4所示代碼。 圖4 MMS讀取回調(diào)修改Fig.4 Read and callback modification of MMS 其中,“BOOLEAN_PATH”為“CSWI1$CO$B1$stVal”,一旦建模完成,變量路徑就固定。變量類型為普通單點狀態(tài)信息變量,個數(shù)為300,MMS內(nèi)部建模為數(shù)組變量,每個變量一個字節(jié),數(shù)組起始指針為“map_entry->dataPtr”,封裝數(shù)組就需要900個字節(jié)。讀取數(shù)組需要循環(huán)300次,本程序只是每次將讀取的值取反,實際應(yīng)用中應(yīng)該綁定到內(nèi)部變量?!癇ITSTRING_PATH”為“CSWI1$CO$B2$stVal”,為擴展?fàn)顟B(tài)信息變量,位寬為300,用38個字節(jié)表示,一次讀取全部數(shù)據(jù)。本程序變量讀取時,先全部清零,然后每讀一次將鄰近的高位置為“1”。如果傳送其他類型的數(shù)據(jù),可以直接用“memcpy”命令,將所有數(shù)據(jù)傳入“map_entry->dataPtr”所指向的起始指針。 針對前述PMU定時數(shù)據(jù)傳送結(jié)構(gòu)體,需在讀回調(diào)函數(shù)添加代碼,實現(xiàn)數(shù)據(jù)的封裝。 封裝過程中需對結(jié)構(gòu)體的每個數(shù)據(jù)對象先進行路徑分析,再賦值相應(yīng)的數(shù)據(jù),一次只返回一個數(shù)據(jù),封裝全部結(jié)構(gòu)體數(shù)據(jù)要反復(fù)多次才能完成。并且每個結(jié)構(gòu)體元素命名一旦在模型中被修改,封裝數(shù)據(jù)的名稱檢查也要同步修改,這對于復(fù)雜的結(jié)構(gòu)體數(shù)據(jù)封裝來說非常繁瑣,工程應(yīng)用中也極易出錯。 封裝數(shù)據(jù)直接用memcpy將整個結(jié)構(gòu)體拷貝到通信地址即可,流程大大簡化。 針對圖像數(shù)據(jù)傳輸,用傳統(tǒng)標(biāo)準(zhǔn)模型建模時,因為“pdu_size”遠大于65 000字節(jié)的缺省設(shè)置,普通客戶端軟件一般無法通過讀取名字鏈表來動態(tài)建立數(shù)據(jù)模型,極易失敗導(dǎo)致客戶端死鎖。IEDScout4.1在讀取“img”命名表時便因死鎖而無法使用。使用“BitstringXXX”建模后雖然封裝數(shù)據(jù)后尺寸明顯減小,但“pdu_size”也大于65 000缺省設(shè)置大小,所以客戶端也需要修改“pdu_size”最大尺寸才能動態(tài)建模成功。這時服務(wù)器端可以直接以內(nèi)存拷貝方式來封裝結(jié)構(gòu)體數(shù)據(jù),如下代碼所示: else if (strncmp(map_entry->leaf, MMXU4_PIC2_PATH, strlen(MMXU4_PIC2_PATH)) == 0) {//"MMXU4$MX$Pic2$img" mvluRdVaCtrl->rt->u.p.el_len = PIC_640_480_ BYTES * 8; memcpy(map_entry->dataPtr, &pic_data, PIC_640_480_BYTES); retcode = SD_SUCCESS;} 但這種數(shù)據(jù)可能有大量空間浪費,數(shù)據(jù)重復(fù)率比較高時,合理壓縮可將傳輸量減少數(shù)倍,由于壓縮后的尺寸不可預(yù)知,一般建模方法只能建立固定長度模型,而使用“BitstringXXX”建模后,數(shù)據(jù)長度可以在運行當(dāng)中動態(tài)修正,這種靈活性更可以讓IEDScout4.1客戶端不修改“pdu_size”也可能成功讀取數(shù)據(jù)。從文件讀入一段文本數(shù)據(jù)到圖像結(jié)構(gòu)體來演示壓縮數(shù)據(jù)傳送,壓縮后的長度“desLen”賦給最終傳送的尺寸大小,大大提高了帶寬的利用率。 MMS寫入回調(diào)函數(shù)通過路徑映射的“DATA_MAP”指針進行操作,與讀操作方向相反。若沒有綁定外部信號,數(shù)據(jù)寫入后保留在“map_entry->dataPtr”所指的內(nèi)存中,無需修改程序。 由于在當(dāng)前的通信建模中暫無相關(guān)研究,故本部分只和常規(guī)方法作對比。 MMS-Lite的服務(wù)器程序是scl_srvr,運行前將模型文件復(fù)制到執(zhí)行程序目錄,并修改“startup.cfg”文件,“SCLFileName”設(shè)置為“CA2201.cid”,“IEDName”設(shè)置為“CA2201”。運行一遍程序,然后退出,會在目錄下生成新的“datamapout.cfg”文件,復(fù)制此文件,并重新命名為“datamap.cfg”,這樣所有變量就生成了映射,重新運行程序,MMS服務(wù)器即可正常工作。在Window下服務(wù)器終端輸出如圖5所示信息,表示服務(wù)器已經(jīng)啟動完成。 圖5 模型通信測試Fig.5 Model communication test Wireshark啟動網(wǎng)絡(luò)報文捕獲后對報文進行過濾,避免無關(guān)報文進入分析程序。抓取的通信報文信息如圖6所示。 圖6 抓取通信報文示例Fig.6 Example of capturing communication messages 針對300個普通單點狀態(tài)信息的應(yīng)答報文封裝為以太網(wǎng)后,其大小對比如圖7所示。 圖7 兩種方法對單點信息建模大小對比Fig.7 Comparison of size of single point information modeling by two methods 由圖7可知常規(guī)通信建模方法封裝后報文大小為999個字節(jié),而使用BitString擴展后的多點信息應(yīng)答報文只有124個字節(jié),大小僅為常規(guī)方法建模的12.4%,輕量化效果顯著。 針對固定大小圖像數(shù)據(jù)建模時,其大小對比如圖8所示。 圖8 兩種方法對圖像信息建模大小對比Fig.8 Comparison of size of image information modeling by two methods 常規(guī)通信建模方法是由多個COTP數(shù)據(jù)段連接而成,尺寸非常大,由圖8可知達921 646字節(jié),而使用BitString擴展后的圖像報文只有14 064個字節(jié),大小僅為常規(guī)方法建模的1.5%,輕量化效果顯著。 針對可變長度數(shù)據(jù),常規(guī)方法無法有效建模,文中提出的方法不受影響。 MMS通信是智能變電站報文通信的重要組成部分,隨著電網(wǎng)的智能化發(fā)展不斷推進,智能設(shè)備不斷增加,已有的基于基本數(shù)據(jù)類型創(chuàng)建的 “DO”和“LN”數(shù)據(jù)通信模型并不完全適用于所有測控裝置,若都使用這些基本模型來建立一些特殊變量的通信模型,會導(dǎo)致通信報文大量增長,加重服務(wù)器負荷,埋下故障隱患。文中提出了一種基本數(shù)據(jù)類型BitString的具體擴展建模,有效減小了報文大小,并且BitString擴展類型作為MMS通信基本模型使用,特別適用于多點狀態(tài)信息的集合通信,同時也適用于傳送圖像、文件以及封裝的結(jié)構(gòu)化數(shù)據(jù),極大地簡化數(shù)據(jù)的封裝。它的寬度可以在建模時設(shè)計指定;MMS服務(wù)器程序設(shè)計完成后程序運行時可以動態(tài)修改寬度,大大增加了模型建立靈活度和模型的適應(yīng)性。通信測試表明,文中提出的基礎(chǔ)數(shù)據(jù)類型BitString的擴充方法,對于智能變電站的通信報文輕量化及通信模型適應(yīng)性提高顯著,對智能變電站通信建模的工程應(yīng)用具有較大借鑒意義。3.3 LNodeType修改
3.4 IED中邏輯節(jié)點實例化
3.5 SCL文件的其他修改
4 MMS服務(wù)器端程序修改
4.1 SCL解析程序修改
4.2 MMS讀取回調(diào)修改
4.3 MMS寫入回調(diào)修改
5 擴展模型的通信測試
6 結(jié)論