一種數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及變電站報文領(lǐng)域,特別涉及一種數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法及
目.0
【背景技術(shù)】
[0002]目前,goose報文和smv報文均采用ASN.1編碼方式。ASN.1是一種IS0/ITU-T標準,描述了一種對數(shù)據(jù)進行表示、編碼、傳輸和解碼的數(shù)據(jù)格式。它提供了一整套正規(guī)的格式用于描述對象的結(jié)構(gòu),而不管語言上如何執(zhí)行及這些數(shù)據(jù)的具體指代,也不用去管到底是什么樣的應用程序,在任何需要以數(shù)字方式發(fā)送信息的地方,ASN.1都可以發(fā)送各種形式的信息(例如聲頻、視頻、數(shù)據(jù)等等)。ASN.1和特定的ASN.1編碼規(guī)則推進了結(jié)構(gòu)化數(shù)據(jù)的傳輸,尤其是網(wǎng)絡(luò)中應用程序之間的結(jié)構(gòu)化數(shù)據(jù)傳輸,它以一種獨立于計算機架構(gòu)和語言的方式來描述數(shù)據(jù)結(jié)構(gòu)。因此ASN.1是一種較為復雜的編碼格式,同樣,在解碼的時候,也是一個極其復雜的過程。但是在數(shù)字化變電站中,由于報文流量較大,對于網(wǎng)絡(luò)報文處理性能有極高的要求,需要實時處理每一條報文并給出業(yè)務(wù)邏輯判斷。因此,需要采用高效的解碼算法,提高處理性能。
[0003]然而,目前報文的解碼主要是針對ASN.1結(jié)構(gòu)逐層的進行解析。由于ASN.1編碼適應各種數(shù)據(jù)結(jié)構(gòu),組合方式非常靈活,被稱為“自描述”報文格式。因此其編碼方式復雜,解碼的時候,按照其編碼進行逐層的解析,其解碼效率低下,處理性能較差。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述解碼效率低下、處理性能較差的缺陷,提供一種解碼效率較高、提高處理性能的數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法及
目.ο
[0005]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法,包括如下步驟:
[0006]A)接收數(shù)據(jù)報文,并對其進行解析獲取報文類型;
[0007]B)判斷所述數(shù)據(jù)報文是否是smv報文,如是,獲取所述smv報文的長度,執(zhí)行步驟C);否則,執(zhí)行步驟D);
[0008]C)判斷所述smv報文的數(shù)據(jù)頭類型并依據(jù)其數(shù)據(jù)頭類型的內(nèi)容解析數(shù)據(jù)內(nèi)容,執(zhí)行步驟F);
[0009]D)判斷所述數(shù)據(jù)報文是否是goose報文,如是,獲取所述goose報文的長度,執(zhí)行步驟E);否則,不執(zhí)行任何操作;
[0010]E)判斷所述goose報文的數(shù)據(jù)頭類型并依據(jù)其數(shù)據(jù)頭類型的內(nèi)容解析數(shù)據(jù)內(nèi)容,執(zhí)行步驟F);
[0011]F)判斷所述數(shù)據(jù)內(nèi)容是否解析完畢,如是,結(jié)束;否則,返回所述步驟C)或步驟E)。
[0012]在本發(fā)明所述的數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法中,所述步驟C)進一步包括:
[0013]Cl)判斷smv報文的標識是否為0x80,如是,獲取所述smv報文中結(jié)構(gòu)體的個數(shù),執(zhí)行步驟C3);否則,執(zhí)行步驟C2);
[0014]C2)出現(xiàn)錯誤提示并跳出程序;
[0015]C3)判斷所述smv報文的標識是否為0x81,如是,獲取所述smv報文的安全等級數(shù)據(jù),執(zhí)行步驟C4);否則,返回步驟C2);
[0016]C4)判斷所述smv報文的標識是否為0xa2,如是,獲取所述smv報文中結(jié)構(gòu)體的數(shù)據(jù)內(nèi)容,執(zhí)行步驟C5);否則,返回步驟C2);
[0017]C5)依次解析采樣值ID、數(shù)據(jù)集字符串、采樣計數(shù)、配置版本、刷新時間、采樣同步和米樣率。
[0018]在本發(fā)明所述的數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法中,所述步驟E)進一步包括:
[0019]El)判斷goose報文的標識是否為0x80,如是,獲取所述goose報文中結(jié)構(gòu)體的個數(shù),執(zhí)行步驟E3);否則,執(zhí)行步驟E2);
[0020]E2)出現(xiàn)錯誤提示并跳出程序;
[0021]E3)依次解析控制塊引用、生成時間、數(shù)據(jù)集引用、goose應用標識、事件時間、狀態(tài)計數(shù)、序列計數(shù)、測試、版本、需要重新配置和數(shù)據(jù)集條目數(shù),執(zhí)行步驟E4);
[0022]E4)判斷所述goose報文的標識是否為0x82,如是,將其解析為bool (布爾)類型,執(zhí)行步驟E5);否則,返回步驟E2);
[0023]E5)判斷所述goose報文的標識是否為0x84,如是,將其解析為bit_string(位串)類型,執(zhí)行步驟E6);否則,返回步驟E2);
[0024]E6)判斷所述goose報文的標識是否為0x85,如是,將其解析為int (整型)類型,執(zhí)行步驟E7);否則,返回步驟E2);
[0025]E7)判斷所述goose報文的標識是否為0x86,如是,將其解析為unsigned (無符號整型)類型,執(zhí)行步驟ES);否則,返回步驟E2);
[0026]E8)判斷所述goose報文的標識是否為0x87,如是,將其解析為float (浮點)類型,執(zhí)行步驟E9);否則,返回步驟E2);
[0027]E9)判斷所述goose報文的標識是否為0x91,如是,將其解析為UTC類型,執(zhí)行步驟E10);否則,返回步驟E2);
[0028]E10)判斷所述goose報文的標識是否為0xa2,如是,將其解析為數(shù)據(jù)結(jié)構(gòu)體類型;否則,返回步驟E2)。
[0029]在本發(fā)明所述的數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法中,在所述步驟B)中,獲取所述smv報文的長度后,還根據(jù)所述smv報文的長度進行數(shù)據(jù)的有效性驗證。
[0030]在本發(fā)明所述的數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法中,在所述步驟D)中,獲取所述goose報文的長度后,還根據(jù)所述goose報文的長度進行數(shù)據(jù)的有效性驗證。
[0031]本發(fā)明還涉及一種實現(xiàn)上述數(shù)字化變電站網(wǎng)絡(luò)報文的解碼方法的裝置,包括:
[0032]報文接收解析單元:用于接收數(shù)據(jù)報文,并對其進行解析獲取報文類型;
[0033]smv報文判斷單元:用于判斷所述數(shù)據(jù)報文是否是smv報文,如是,獲取所述smv報文的長度;否則,繼續(xù)判斷是否為goose報文;
[0034]smv報文數(shù)據(jù)頭類型判斷單元:用于判斷所述smv報文的數(shù)據(jù)頭類型并依據(jù)其數(shù)據(jù)頭類型的內(nèi)容解析數(shù)據(jù)內(nèi)容;
[0035]goose報文判斷單元:用于判斷所述數(shù)據(jù)報文是否是goose報文,如是,獲取所述goose報文的長度;否則,不執(zhí)行任何操作;
[0036]goose報文數(shù)據(jù)頭類型判斷單元:用于判斷所述goose報文的數(shù)據(jù)頭類型并依據(jù)其數(shù)據(jù)頭類型的內(nèi)容解析數(shù)據(jù)內(nèi)容;
[0037]解析判斷單元:用于判斷所述數(shù)據(jù)內(nèi)容是否解析完畢,如是,結(jié)束;否則,返回。
[0038]在本發(fā)明所述的裝置中,所述smv報文數(shù)據(jù)頭類型判斷單元進一步包括:
[0039]第一 smv報文標識判斷模塊:用于判斷smv報文的標識是否為0x80,如是,獲取所述smv報文中結(jié)構(gòu)體的個數(shù);否則,出現(xiàn)錯誤提示并跳出程序;
[0040]第一錯誤提示模塊:用于出現(xiàn)錯誤提示并跳出程序;
[0041]第二 smv報文標識判斷模塊:用于判斷所述smv報文的標識是否為0x81,如是,獲取所述smv報文的安全等級數(shù)據(jù);否則,返回;
[0042]第三smv報文標識判斷模塊:用于判斷所述smv報文的標識是否為0xa2,如是,獲取所述smv報文中結(jié)構(gòu)體的數(shù)據(jù)內(nèi)容;否則,返回;
[0043]smv報文解析模塊:用于依次解析采樣值ID、數(shù)據(jù)集字符串、采樣計數(shù)、配置版本、刷新時間、采樣同步和采樣率。
[0044]在本發(fā)明所述的裝置中,所述goose報文數(shù)據(jù)頭類型判斷單元進一步包括:
[0045]第一 goose報文標識判斷模塊:用于判斷goose報文的標識是否為0x80,如是,獲取所述goose報文中結(jié)構(gòu)體的個數(shù);否則,出現(xiàn)錯誤提示并跳出程序;
[0046]第二錯誤提示模塊:用于出現(xiàn)錯誤提示并跳出程序;
[0047]goose報文解析模塊:用于依次解析控制塊引用、生成時間、數(shù)據(jù)集引用、goose應用標識、事件時間、狀態(tài)計數(shù)、序列計數(shù)、測試、版本、需要重新配置和數(shù)據(jù)集條目數(shù);
[0048]第二 goose報文標識判斷模塊:用于判斷所述goose報文的標識是否為0x82,如是,將其解析為bool類型;否則,返回;
[0049]第三goose報文標識判斷模塊:用于判斷所述goose報文的標識是否為0x84,如是,將其解析為bit-string類型;否則,返回;
[0050]第四goose報文標識判斷模塊:用于判斷所述goose報文的標識是否為0x85,如是,將其解析為int類型;否則,返回;
[0051]第五goose報文標識判斷模塊:用于判斷所述goose報文的標識是否為0x86,如是,將其解析為unsigne