楊智德,郭亞楠,陳獻(xiàn)慶
(許繼電氣股份有限公司,河南 許昌 461000)
隨著變電站綜合自動(dòng)化技術(shù)的發(fā)展,電力系統(tǒng)對(duì)電力自動(dòng)化設(shè)備,尤其是對(duì)繼電保護(hù)裝置的要求不斷提高。因此,繼電保護(hù)裝置的功能不斷增加,保護(hù)算法的不斷改進(jìn),導(dǎo)致了其內(nèi)部程序越來(lái)越龐大,所需存儲(chǔ)和使用的數(shù)據(jù)量也越來(lái)越多。
但是繼電保護(hù)裝置存儲(chǔ)空間十分有限。如何提高其數(shù)據(jù)復(fù)用率、提高有限空間的使用率一直是被廣泛關(guān)注和研究的問(wèn)題?,F(xiàn)有的普遍做法是使用壓縮格式對(duì)數(shù)據(jù)進(jìn)行保存,或者及時(shí)刪除過(guò)期數(shù)據(jù)以釋放存儲(chǔ)空間,但這都無(wú)法從根本上解決越來(lái)越大的數(shù)據(jù)存儲(chǔ)量。
網(wǎng)絡(luò)文件系統(tǒng)是一種分布式文件系統(tǒng),其允許一個(gè)系統(tǒng)在網(wǎng)絡(luò)上共享目錄和文件,供遠(yuǎn)端無(wú)縫透明訪問(wèn),從而實(shí)現(xiàn)資源使用最大化、占用空間最小化。對(duì)此,本文設(shè)計(jì)并實(shí)現(xiàn)了一種適用于繼電保護(hù)裝置的網(wǎng)絡(luò)文件系統(tǒng),為裝置提供了在存儲(chǔ)設(shè)備間進(jìn)行文件共享訪問(wèn)的使用方式,有效降低了本地存儲(chǔ)空間的使用,提高了數(shù)據(jù)的復(fù)用率。
目前,較為知名的網(wǎng)絡(luò)文件系統(tǒng)是由Sun Microsystems公司定義的、被稱為Sun的網(wǎng)絡(luò)文件系統(tǒng),或者簡(jiǎn)稱為網(wǎng)絡(luò)文件系統(tǒng)(network file system,NFS)。公司制定的NFS協(xié)議被收錄進(jìn)請(qǐng)求評(píng)議(request for comments,RFC)標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)在整個(gè)計(jì)算機(jī)工業(yè)中已被廣泛接受[1]。該公司提出NFS的目的是支持異構(gòu)系統(tǒng),使運(yùn)行在不同操作系統(tǒng)和不同硬件上的文件可以共享。NFS采用了客戶端和服務(wù)端協(xié)同工作的架構(gòu),將用戶共享的數(shù)據(jù)保存在服務(wù)端,供客戶端透明訪問(wèn)。
NFS迄今共發(fā)布了三個(gè)版本。其中:第一版NFSv2有較大的性能和安全缺陷;第二版NFSv3修正了版本一的缺陷,并提高了傳輸效率;第三版NFSv4支持服務(wù)器集群訪問(wèn)。
本文根據(jù)繼電保護(hù)裝置板卡間對(duì)共享數(shù)據(jù)并行訪問(wèn)少,對(duì)功能實(shí)現(xiàn)要求簡(jiǎn)單、可靠的特點(diǎn),參考第二版標(biāo)準(zhǔn)進(jìn)行網(wǎng)絡(luò)文件系統(tǒng)的設(shè)計(jì)[2]。
對(duì)于繼電保護(hù)裝置,從系統(tǒng)的角度看[3],網(wǎng)絡(luò)文件系統(tǒng)與其他系統(tǒng)(例如YAFFS Flash文件系統(tǒng)、FAT32文件等)并無(wú)區(qū)別,都處于文件系統(tǒng)抽象層之下。
文件系統(tǒng)體系架構(gòu)如圖1所示。
圖1 文件系統(tǒng)體系架構(gòu)
文件系統(tǒng)通過(guò)抽象層向上層屏蔽了各個(gè)文件系統(tǒng)的區(qū)別,對(duì)外部應(yīng)用程序只提供統(tǒng)一的標(biāo)準(zhǔn)文件系統(tǒng)接口,使各種文件系統(tǒng)對(duì)用戶透明。而對(duì)于文件系統(tǒng)接入抽象層的部分,提供了基于前綴的設(shè)備注冊(cè)管理機(jī)制,方便不同文件系統(tǒng)設(shè)備的注冊(cè)。例如網(wǎng)絡(luò)文件系統(tǒng),使用“nfs”作為前綴。如果應(yīng)用傳送的路徑以“nfs”為前綴,則會(huì)調(diào)用網(wǎng)絡(luò)文件系統(tǒng)進(jìn)行處理。
NFSv3標(biāo)準(zhǔn)中規(guī)定了網(wǎng)絡(luò)文件系統(tǒng)是基于遠(yuǎn)程過(guò)程調(diào)用(remote procedure call,RPC)實(shí)現(xiàn)的,具備掛接、端口映射、外部數(shù)據(jù)表示、認(rèn)證等功能,并規(guī)定了22個(gè)過(guò)程函數(shù),從而實(shí)現(xiàn)客戶端對(duì)遠(yuǎn)程服務(wù)端文件的訪問(wèn)[4-5]。但是標(biāo)準(zhǔn)制定是針對(duì)Linux操作系統(tǒng)的,有些功能并不適用于繼電保護(hù)裝置,例如認(rèn)證功能和端口映射功能。裝置板卡間通信無(wú)需進(jìn)行權(quán)限認(rèn)證,同時(shí)文件訪問(wèn)端口可固定,無(wú)需端口映射功能。所以在實(shí)現(xiàn)時(shí),針對(duì)實(shí)際應(yīng)用場(chǎng)景對(duì)標(biāo)準(zhǔn)規(guī)定的某些功能進(jìn)行了裁剪、增加和優(yōu)化,在減少了代碼量的同時(shí)也提高了通信效率,使其適用于繼電保護(hù)裝置。
網(wǎng)絡(luò)文件系統(tǒng)總體架構(gòu)如圖2所示。
圖2 網(wǎng)絡(luò)文件系統(tǒng)架構(gòu)
網(wǎng)絡(luò)文件系統(tǒng)采用的是客戶端/服務(wù)端的架構(gòu),所有的請(qǐng)求都由客戶端發(fā)起,通過(guò)網(wǎng)絡(luò)通信模塊進(jìn)行傳輸,客戶端主要完成的工作如下。
①通過(guò)客戶端掛接模塊發(fā)起掛接請(qǐng)求,將服務(wù)端開(kāi)放共享的文件夾路徑掛接到本地目錄。
②掛接完成后,可通過(guò)客戶端操作處理模塊對(duì)共享目錄下的文件或文件夾進(jìn)行操作。
服務(wù)端的功能主要是接收并響應(yīng)客戶端的請(qǐng)求。
①通過(guò)服務(wù)端掛接模塊,將客戶端請(qǐng)求的服務(wù)端本地允許共享的文件夾發(fā)送給客戶端。
②接收客戶端的操作,通過(guò)服務(wù)端操作處理模塊完成操作處理,并將結(jié)果返回給客戶端。
客戶端和服務(wù)端的請(qǐng)求和回復(fù)離不開(kāi)外部數(shù)據(jù)表示模塊和網(wǎng)絡(luò)通信模塊。外部數(shù)據(jù)表示模塊主要是對(duì)發(fā)送的數(shù)據(jù)進(jìn)行編碼,對(duì)接收的數(shù)據(jù)進(jìn)行解碼。這樣做的目的是對(duì)不同板卡間的數(shù)據(jù)類型進(jìn)行抽象和統(tǒng)一,使網(wǎng)絡(luò)文件系統(tǒng)能夠滿足不同硬件平臺(tái)的需要,提高系統(tǒng)通用性。網(wǎng)絡(luò)通信模塊主要實(shí)現(xiàn)了數(shù)據(jù)的可靠傳輸,重傳機(jī)制、超時(shí)機(jī)制、接收監(jiān)聽(tīng)都是在此模塊進(jìn)行規(guī)定和設(shè)計(jì)的。日志模塊會(huì)生成日志文件,其系統(tǒng)記錄了客戶端和服務(wù)端對(duì)某些文件的某種操作和操作結(jié)果,并生成相關(guān)的錯(cuò)誤信息供用戶或開(kāi)發(fā)人員查閱。日志文件是簡(jiǎn)單的文本文件,可直接閱讀。
網(wǎng)絡(luò)文件系統(tǒng)客戶端主要實(shí)現(xiàn)封裝并發(fā)送操作請(qǐng)求,以及接收并解析返回結(jié)果的功能。服務(wù)端主要實(shí)現(xiàn)接收并解析請(qǐng)求信息,以及封裝并向客戶端返回操作結(jié)果的功能。根據(jù)圖2的系統(tǒng)總體架構(gòu),可按照模塊逐個(gè)實(shí)現(xiàn)。
掛接操作是網(wǎng)絡(luò)文件系統(tǒng)運(yùn)行首先要進(jìn)行的必要步驟,即將服務(wù)端的文件夾目錄讀取到客戶端本地,供后續(xù)操作。
掛接操作實(shí)質(zhì)上是獲取服務(wù)端提供的根文件句柄的過(guò)程。文件句柄是網(wǎng)絡(luò)文件系統(tǒng)中的一個(gè)重要概念,用來(lái)引用服務(wù)器上的一個(gè)文件或目錄。它是由服務(wù)端創(chuàng)建并傳遞給客戶端的??蛻舳嗽L問(wèn)文件時(shí),使用對(duì)應(yīng)的文件句柄進(jìn)行訪問(wèn)[6-9]。文件句柄的內(nèi)容只對(duì)服務(wù)端有意義。保護(hù)裝置的句柄生成方案是在使用時(shí)開(kāi)辟全局存儲(chǔ)句柄的空間,將存儲(chǔ)的地址作為文件句柄使用,這樣既可保證句柄的唯一性,又提高了使用句柄時(shí)的查找效率。
客戶端提供了掛載文件系統(tǒng)、返回所有被掛載的文件系統(tǒng)的列表、卸載文件系統(tǒng)、結(jié)束對(duì)服務(wù)器目錄的掛載、列出服務(wù)端所有可以掛載的文件系統(tǒng)、卸載所有掛載項(xiàng)這6項(xiàng)功能。相應(yīng)地,服務(wù)端提供與這6項(xiàng)服務(wù)函數(shù)對(duì)應(yīng)的請(qǐng)求,并進(jìn)行相應(yīng)的處理。一次服務(wù)端處理掛接的完整過(guò)程主要經(jīng)過(guò)以下3個(gè)步驟。
①服務(wù)端監(jiān)聽(tīng)客戶端發(fā)送的掛接請(qǐng)求。
②收到掛接請(qǐng)求后,服務(wù)端判斷客戶端發(fā)送的掛接請(qǐng)求路徑是否在允許掛接的文件列表內(nèi)。
③如果在列表內(nèi),則根據(jù)路徑生成文件句柄,將文件句柄返回給客戶端;否則,返回給客戶端錯(cuò)誤碼。
其中,句柄的管理通過(guò)桶排序算法實(shí)現(xiàn)。
輸入X=(x1,x2,...,xn),句柄關(guān)鍵字K(xi)在區(qū)間(0,1]上均勻分布。
輸出Y=(y1,y2,...,yn)滿足y1≤y2≤yn。
鏈表P=(p1,p2,...,pn)為N個(gè)鏈表頭指針。
建立句柄數(shù)據(jù)表需要以下3個(gè)步驟。
①forj=1 toNdo
k=K(xi)
b=[kN]
將xi按照順序插入到pb中。
②forb=2 toNdo
將鏈表pb連接到p(b-1)之后。
③將X中記錄拷貝到Y(jié)。
以下可對(duì)算法復(fù)雜度進(jìn)行計(jì)算。
由于句柄關(guān)鍵字之間相互獨(dú)立,則:
桶排序算法的平局算法復(fù)雜度為O(N),具有較優(yōu)的算法效率。
建立了基于桶算法的鏈表之后,可通過(guò)每個(gè)句柄分配的下標(biāo)進(jìn)行句柄數(shù)據(jù)的存取。與輪詢查找的方法相比,該方法大大降低了查詢速度。
操作處理實(shí)現(xiàn)了繼電保護(hù)裝置中文件系統(tǒng)抽象層所需的接口函數(shù):獲取文件屬性,查找文件句柄,讀文件,寫(xiě)文件,創(chuàng)建文件,刪除文件,刪除文件夾,重命名,讀文件列表,獲取文件系統(tǒng)信息,獲取文件配置信息。這11個(gè)功能函數(shù)涵蓋了規(guī)定的接口函數(shù),滿足了裝置程序?qū)ξ募牟僮餍枨蟆?/p>
網(wǎng)絡(luò)文件系統(tǒng)的處理流程如圖3所示。
圖3 網(wǎng)絡(luò)文件系統(tǒng)處理流程圖
在客戶端,當(dāng)用戶調(diào)用到網(wǎng)絡(luò)文件系統(tǒng)操作時(shí),首先將報(bào)文ID號(hào)、報(bào)文類型(請(qǐng)求為0,回復(fù)為1)、程序號(hào)(網(wǎng)絡(luò)文件系統(tǒng)操作標(biāo)識(shí))、版本號(hào)(網(wǎng)絡(luò)文件系統(tǒng)版本)、函數(shù)號(hào)(操作處理函數(shù)編號(hào))五個(gè)元素寫(xiě)到報(bào)文頭部,再封裝上調(diào)用的參數(shù),發(fā)送給服務(wù)端后等待回應(yīng)。服務(wù)端收到報(bào)文后,會(huì)根據(jù)報(bào)文頭的五個(gè)元素解析并辨識(shí)操作請(qǐng)求,并將請(qǐng)求分發(fā)給對(duì)應(yīng)的操作函數(shù)進(jìn)行執(zhí)行。執(zhí)行完成后,將請(qǐng)求ID號(hào)、報(bào)文類型以及返回的結(jié)果進(jìn)行封裝,返回給客戶端。
外部表示模塊為數(shù)據(jù)的編碼和解碼提供支撐。這里的數(shù)據(jù)指的是客戶端和服務(wù)端進(jìn)行通信的數(shù)據(jù),例如報(bào)文類型、操作參數(shù)、操作結(jié)果等。采用外部表示的方式對(duì)數(shù)據(jù)進(jìn)行編解碼,可統(tǒng)一不同操作系統(tǒng)的數(shù)據(jù)存儲(chǔ)格式,使客戶端和服務(wù)端在不同的系統(tǒng)環(huán)境中進(jìn)行通信工作。
外部表示模塊也采用了面向?qū)ο蟮脑O(shè)計(jì)方法,分為抽象層、內(nèi)存編解碼模塊、記錄編解碼模塊。抽象層封裝了代碼接口,其他兩個(gè)模塊則實(shí)現(xiàn)了基本的數(shù)據(jù)操作。其中,內(nèi)存編解碼模塊用于用戶數(shù)據(jù)板協(xié)議(user datagram protocol,UDP)通信,而記錄編解碼模塊用于傳輸控制協(xié)議(transmission control protocol,TCP)通信。它的工作流程是發(fā)送者采用規(guī)定的格式構(gòu)造一個(gè)報(bào)文,然后接收者將此格式的報(bào)文轉(zhuǎn)換為本機(jī)的表示形式。
網(wǎng)絡(luò)通信模塊負(fù)責(zé)客戶端和服務(wù)端的通信功能,實(shí)現(xiàn)了UDP和TCP的兩種通信方式。在對(duì)繼電保護(hù)裝置的應(yīng)用場(chǎng)景分析中,由于需要傳輸?shù)臄?shù)據(jù)量較小,絕大部分是短消息,對(duì)實(shí)時(shí)性的要求較高,所以采用UDP的通信方式進(jìn)行。同時(shí),為了保證傳輸數(shù)據(jù)的可靠性,實(shí)現(xiàn)時(shí)設(shè)計(jì)了重發(fā)、超時(shí)以及數(shù)據(jù)校驗(yàn)機(jī)制[8-9]。
日志模塊主要是對(duì)操作過(guò)程中的錯(cuò)誤信息和關(guān)鍵操作進(jìn)行記錄,供開(kāi)發(fā)和運(yùn)維人員進(jìn)行運(yùn)行狀態(tài)的跟蹤以及出錯(cuò)原因查找。日志文件被設(shè)計(jì)為文本文件的格式,并逐條按照裝置時(shí)間進(jìn)行記錄以方便閱讀。
根據(jù)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),在某型號(hào)保護(hù)裝置上進(jìn)行了功能性測(cè)試、時(shí)效性測(cè)試和可移植性驗(yàn)證。
將保護(hù)裝置的其中一塊板卡運(yùn)行客戶端程序,另一塊板卡運(yùn)行服務(wù)端程序,并建立通信連接。
掛接功能主要測(cè)試掛接函數(shù),文件操作功能則對(duì)實(shí)現(xiàn)的功能函數(shù)進(jìn)行測(cè)試。
測(cè)試內(nèi)容包括功能測(cè)試,錯(cuò)誤碼結(jié)果測(cè)試和分支覆蓋測(cè)試。在通信工況良好的狀況下,網(wǎng)絡(luò)文件系統(tǒng)是可靠的。在通信工況延時(shí)較大、甚至出現(xiàn)通信中斷的情況下,本系統(tǒng)也能正確進(jìn)行重傳或返回正確錯(cuò)誤碼,沒(méi)有出現(xiàn)接收數(shù)據(jù)錯(cuò)誤情況。
功能測(cè)試結(jié)果如表1所示。
表1 功能測(cè)試結(jié)果
在保證系統(tǒng)功能正確的同時(shí),還需要對(duì)其時(shí)效性進(jìn)行驗(yàn)證,以提高用戶體驗(yàn)。由于除了寫(xiě)操作和讀操作會(huì)涉及到報(bào)文量較大的傳輸,其他的操作在通信正常的情況下只需一個(gè)或幾個(gè)通信回合就能完成功能,所以時(shí)效性只針對(duì)讀文件和寫(xiě)文件功能進(jìn)行測(cè)試。
本文設(shè)計(jì)了8 KB、16 KB、32 KB、64 KB、128 KB、256 KB的數(shù)據(jù),并分別對(duì)其進(jìn)行100次讀寫(xiě)操作,測(cè)試結(jié)果如圖4所示。
圖4 讀寫(xiě)操作測(cè)試結(jié)果
由圖4可知,讀寫(xiě)操作的時(shí)間效率相差不大,傳輸速率為64 KB/s左右,在保護(hù)裝置可接受的范圍內(nèi)。但是由于被測(cè)裝置在協(xié)議棧初始化時(shí)沒(méi)有設(shè)置巨幀數(shù)據(jù)包自動(dòng)分幀功能,所以測(cè)試時(shí)每幀的數(shù)據(jù)大小控制在1 024 B之內(nèi),導(dǎo)致服務(wù)端頻繁地進(jìn)行文件打開(kāi)和關(guān)閉操作;如果裝置能對(duì)巨幀數(shù)據(jù)包進(jìn)行分幀,則可避免服務(wù)端頻繁打開(kāi)、關(guān)閉文件,從而進(jìn)一步提升時(shí)間效率。
網(wǎng)絡(luò)文件系統(tǒng)系統(tǒng)的可移植性驗(yàn)證包括兩個(gè)方面,即對(duì)不同的硬件電子控制單元(electronic control unit,ECU)和不同的操作系統(tǒng)的可移植驗(yàn)證。首先,將網(wǎng)絡(luò)文件系統(tǒng)從主控芯片為MPC8377(16位)的ECU移植到主控芯片為MPC8309(16位)的ECU時(shí),功能正常,能夠通過(guò)所有的功能測(cè)試環(huán)節(jié),驗(yàn)證了系統(tǒng)在不同芯片類型下的可移植性。然后,對(duì)網(wǎng)絡(luò)文件系統(tǒng)進(jìn)行測(cè)試,使之分別充當(dāng)客戶端和服務(wù)端進(jìn)行通信,同樣功能正常,從而表明系統(tǒng)運(yùn)行正常。
本文實(shí)現(xiàn)的網(wǎng)絡(luò)文件系統(tǒng),參考標(biāo)準(zhǔn)化網(wǎng)絡(luò)文件架構(gòu),為繼電保護(hù)裝置提供了在板卡或存儲(chǔ)設(shè)備間進(jìn)行數(shù)據(jù)共享訪問(wèn)的解決方案。該方案可有效節(jié)省本地存儲(chǔ)空間的使用,提高數(shù)據(jù)的利用率,解決了繼電保護(hù)裝置存儲(chǔ)空間有限以及多板卡間文件同步問(wèn)題。功能性和時(shí)效性測(cè)試驗(yàn)證了本系統(tǒng)的有效性,可移植性測(cè)試驗(yàn)證了本系統(tǒng)的通用性,可為更多型號(hào)的繼電保護(hù)產(chǎn)品提供有力支撐。