本發(fā)明屬于電力調(diào)度自動(dòng)化領(lǐng)域,具體涉及一種電力系統(tǒng)CIM/E模型文件解析方法,采用事件驅(qū)動(dòng)模型實(shí)現(xiàn)對(duì)CIM/E模型文件高速解析,同時(shí)對(duì)模型語(yǔ)法規(guī)范性進(jìn)行校驗(yàn)。
背景技術(shù):
基于IEC6190標(biāo)準(zhǔn)CIM模型作為電網(wǎng)模型描述的載體在電力系統(tǒng)調(diào)度自動(dòng)化領(lǐng)域廣泛使用。CIM模型描述方式在規(guī)范中使用XML標(biāo)準(zhǔn)為載體IEC61970-552,業(yè)界稱之為CIM/XML標(biāo)準(zhǔn)。基于E格式的CIM模型描述方式被提出后業(yè)界稱之為CIM/E標(biāo)準(zhǔn),CIM/E標(biāo)準(zhǔn)正在逐步推廣使用并進(jìn)入IEC61970國(guó)際標(biāo)準(zhǔn)體系IEC61970-555。CIM/E相較與CIM/XML格式有描述效率高的優(yōu)勢(shì),相同大小的模型用CIM/E描述文件大小明顯小于CIM/XML,目前CIM/XML遵循XML格式標(biāo)準(zhǔn)在計(jì)算機(jī)領(lǐng)域有大量的開發(fā)包支持對(duì)XML文件的解析處理,在工程實(shí)施方面有豐富的技術(shù)支撐。CIM/E格式的模型解析一般由各個(gè)廠商定制開發(fā)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)上述問題,本發(fā)明提出一種基于事件驅(qū)動(dòng)的電網(wǎng)CIM/E模型解析方法,該方法基于事件驅(qū)動(dòng),分類處理CIM/E規(guī)范中的各類保留字、標(biāo)簽、引導(dǎo)符,將其作為回調(diào)的觸發(fā)事件,通過觸發(fā)回調(diào)應(yīng)用層的處理接口將CIM/模型中對(duì)象、屬性數(shù)據(jù)傳遞給應(yīng)用程序,由應(yīng)用程序根據(jù)需要實(shí)現(xiàn)存儲(chǔ)邏輯,只存儲(chǔ)需要的內(nèi)容形成對(duì)象內(nèi)存庫(kù),采用狀態(tài)遷移機(jī)制監(jiān)測(cè)CIM/E模型文件的語(yǔ)法規(guī)范性,實(shí)現(xiàn)模型文件的高效解析。
實(shí)現(xiàn)上述技術(shù)目的,達(dá)到上述技術(shù)效果,本發(fā)明通過以下技術(shù)方案實(shí)現(xiàn):
一種基于事件驅(qū)動(dòng)的電網(wǎng)CIM/E模型解析方法,包括以下步驟:
步驟一、將模型解析過程中出現(xiàn)的各類信息定義為對(duì)應(yīng)的各個(gè)狀態(tài);
步驟二、將CIM/E模型規(guī)范中的保留字符、引導(dǎo)符定義為與各個(gè)狀態(tài)相對(duì)應(yīng)的驅(qū)動(dòng)事件字符;
步驟三、將模型解析過程中各個(gè)狀態(tài)之間的遷移定義為狀態(tài)遷移路徑,狀態(tài)遷移路徑包括:正常路徑、告警路徑、未定義路徑;
步驟四、對(duì)每條狀態(tài)遷移路徑定義狀態(tài)轉(zhuǎn)移函數(shù)、回調(diào)函數(shù);
步驟五、模型解析過程以“開始”作為初始狀態(tài),判斷驅(qū)動(dòng)事件字符,得到當(dāng)前的狀態(tài)遷移路徑,然后執(zhí)行相應(yīng)的狀態(tài)轉(zhuǎn)移函數(shù)和回調(diào)函數(shù);
步驟六、以文件結(jié)束符EOF作為模型解析完成標(biāo)志,實(shí)現(xiàn)基于事件驅(qū)動(dòng)的電網(wǎng)CIM/E模型解析。
所述步驟一中的各類信息包括:開始、頭信息、頭結(jié)束、類信息、屬性、對(duì)象、類結(jié)束、完成。
所述步驟二具體為:定義“<!”為頭信息驅(qū)動(dòng)符、“!>”為頭結(jié)束標(biāo)志符、“<”為類信息引導(dǎo)符、“@”為屬性引導(dǎo)符、“#”為對(duì)象引導(dǎo)符、“</”為類結(jié)束標(biāo)志符、“EOF”為完成標(biāo)識(shí)符,“開始”狀態(tài)為模型解析的初始狀態(tài),表示打開模型文件準(zhǔn)備讀取,無特殊字符。
所述步驟三中,正常路徑為符合CIM/E模型語(yǔ)義的狀態(tài)遷移路徑;告警路徑為符合CIM/E模型格式不影響后續(xù)解析,但缺失部分信息的狀態(tài)遷移路徑;未定義路徑為其他狀態(tài)之間的遷移,出現(xiàn)未定義路徑,說明文件不符合CIM/E模型規(guī)范。
所述步驟四中,狀態(tài)轉(zhuǎn)移函數(shù)用于監(jiān)測(cè)模型錯(cuò)誤,包括屬性名唯一性校驗(yàn)、屬性個(gè)數(shù)和對(duì)象個(gè)數(shù)一致性校驗(yàn);回調(diào)函數(shù)用于對(duì)CIM對(duì)象及屬性進(jìn)行篩選、分配和保存。
所述步驟五具體為:按行讀取CIM/E模型文件,將一行內(nèi)容作為字符串傳遞給狀態(tài)轉(zhuǎn)移函數(shù),狀態(tài)轉(zhuǎn)移函數(shù)根據(jù)CIM/E規(guī)范保留字符判斷該數(shù)據(jù)含義,根據(jù)引導(dǎo)符判斷是否為屬性行,解析所有屬性并判斷屬性名是否重復(fù),記錄該類的所有屬性,在讀取到對(duì)象引導(dǎo)符時(shí),解析對(duì)象的屬性值并和上次讀到的屬性聲明個(gè)數(shù)進(jìn)行比較,如果不一致,說明模型文件有錯(cuò)誤;狀態(tài)轉(zhuǎn)移函數(shù)將讀取到內(nèi)容傳遞給回調(diào)函數(shù),并執(zhí)行回調(diào)函數(shù),回調(diào)函數(shù)判斷當(dāng)前狀態(tài)獲知該數(shù)據(jù)含義并進(jìn)行解析,分配內(nèi)存,形成設(shè)定的內(nèi)存結(jié)構(gòu)保存模型對(duì)象及屬性,最終生成全模型對(duì)象內(nèi)存庫(kù)。
本發(fā)明的有益效果:
1、高速解析,讀取一遍文件即完成了模型文件的解析,CIM/E模型文件以“行”為單位讀取。
2、基本校驗(yàn),通過狀態(tài)遷移過程中定義的正常遷移、異常遷移實(shí)現(xiàn)模型文件基本語(yǔ)法的校驗(yàn)。
3、隨機(jī)訪問,解析模塊通過回調(diào)函數(shù)將對(duì)象信息傳輸給應(yīng)用程序,應(yīng)用程序根據(jù)需要篩選信息,將模型對(duì)象保存在計(jì)算機(jī)內(nèi)存中,應(yīng)用程序可從內(nèi)存中隨機(jī)訪問任意對(duì)象的任意屬性,理論時(shí)間復(fù)雜度為O(1)。
4、內(nèi)存小,文件解析過程沒有預(yù)讀取過程,回調(diào)函數(shù)形成的對(duì)象內(nèi)存為應(yīng)用程序需要的最小集無冗余數(shù)據(jù)。
附圖說明
圖1為本發(fā)明模型解析狀態(tài)切換示意圖。
圖2為本發(fā)明模型對(duì)象內(nèi)存存儲(chǔ)結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
下面結(jié)合附圖對(duì)本發(fā)明的應(yīng)用原理作詳細(xì)的描述。
一種基于事件驅(qū)動(dòng)的電網(wǎng)CIM/E模型解析方法,包括以下步驟:
步驟一、將模型解析過程中出現(xiàn)的各類信息定義為對(duì)應(yīng)的各個(gè)狀態(tài);
步驟二、將CIM/E模型規(guī)范中的保留字符、引導(dǎo)符定義為與各個(gè)狀態(tài)相對(duì)應(yīng)的驅(qū)動(dòng)事件字符;
步驟三、將模型解析過程中各個(gè)狀態(tài)之間的遷移定義為狀態(tài)遷移路徑,狀態(tài)遷移路徑分為正常路徑、告警路徑、未定義路徑;
優(yōu)選地,正常路徑為符合CIM/E模型語(yǔ)義的狀態(tài)遷移路徑,如圖1中用實(shí)線箭頭表示;告警路徑為符合CIM/E模型格式,不影響后續(xù)解析但缺失部分信息的狀態(tài)遷移路徑,如圖1中用虛線箭頭表示;未定義路徑為圖1中沒有標(biāo)識(shí)出的其他狀態(tài)之間的遷移,出現(xiàn)這種情況,說明文件不符合CIM/E模型規(guī)范;
步驟四、對(duì)每條狀態(tài)遷移路徑定義狀態(tài)轉(zhuǎn)移函數(shù)和回調(diào)函數(shù);
步驟五、模型解析過程以“開始”作為初始狀態(tài),判斷驅(qū)動(dòng)事件字符,得到當(dāng)前的狀態(tài)遷移路徑,然后執(zhí)行相應(yīng)的狀態(tài)轉(zhuǎn)移函數(shù)和回調(diào)處理函數(shù);
步驟六、以文件結(jié)束符EOF作為模型解析完成標(biāo)志,實(shí)現(xiàn)基于事件驅(qū)動(dòng)的電網(wǎng)CIM/E模型解析。
在本發(fā)明的一種實(shí)施例中,所述步驟一中的各類信息包括:開始、頭信息、頭結(jié)束、類信息、屬性、對(duì)象、類結(jié)束、完成。
在本發(fā)明的一種實(shí)施例中,所述步驟二具體為:定義“<!”為頭信息驅(qū)動(dòng)符、“!>”為頭結(jié)束標(biāo)志符、“<”為類信息引導(dǎo)符、“@”為屬性引導(dǎo)符、“#”為對(duì)象引導(dǎo)符、“</”為類結(jié)束標(biāo)志符、“EOF”為完成標(biāo)識(shí)符,“開始”狀態(tài)為模型解析的初始狀態(tài),表示打開模型文件準(zhǔn)備讀取,無特殊字符。
在本發(fā)明的一種實(shí)施例中,所述步驟四中,狀態(tài)轉(zhuǎn)移函數(shù)用于監(jiān)測(cè)模型錯(cuò)誤,包括屬性名唯一性校驗(yàn)、屬性個(gè)數(shù)和對(duì)象個(gè)數(shù)一致性校驗(yàn);回調(diào)函數(shù)用于對(duì)CIM對(duì)象及屬性進(jìn)行篩選、分配和保存;
具體地,狀態(tài)轉(zhuǎn)移函數(shù)用于判斷模型文件中的保留字符或者引導(dǎo)符,并記錄解析過程的狀態(tài);回調(diào)函數(shù)接收狀態(tài)轉(zhuǎn)移函數(shù)提交的模型數(shù)據(jù)片段,形成模型對(duì)象及其屬性,并能夠?qū)⒃计翁峁┙o應(yīng)用程序使用,即回調(diào)函數(shù)用于將模型對(duì)象提交給應(yīng)用程序,回調(diào)函數(shù)還用于形成模型內(nèi)存庫(kù);
更具體地:狀態(tài)轉(zhuǎn)移函數(shù)對(duì)讀取模型信息根據(jù)保留字符或者引導(dǎo)符判斷是類信息、屬性聲明信息還是屬性值信息,將一個(gè)CIM對(duì)象提交給回調(diào)函數(shù),回調(diào)函數(shù)判斷當(dāng)前狀態(tài)獲知該數(shù)據(jù)含義(即回調(diào)函數(shù)檢查屬性聲明信息、屬性值信息),并進(jìn)行解析,分配內(nèi)存,形成設(shè)定的內(nèi)存結(jié)構(gòu)保存模型對(duì)象及屬性,最終得到對(duì)象內(nèi)存庫(kù)。
在本發(fā)明的一種實(shí)施例中,所述步驟五具體為:按行讀取CIM/E模型文件,將一行內(nèi)容作為字符串傳遞給狀態(tài)轉(zhuǎn)移函數(shù),狀態(tài)轉(zhuǎn)移函數(shù)根據(jù)CIM/E規(guī)范保留字符判斷該數(shù)據(jù)含義,根據(jù)引導(dǎo)符判斷是否為屬性行,解析所有屬性并判斷屬性名是否重復(fù),記錄該類的所有屬性,在讀取到對(duì)象引導(dǎo)符時(shí),解析對(duì)象的屬性值并和上次讀到的屬性聲明個(gè)數(shù)進(jìn)行比較,如果不一致,說明模型文件有錯(cuò)誤;狀態(tài)轉(zhuǎn)移函數(shù)將讀取到內(nèi)容傳遞給回調(diào)函數(shù),并執(zhí)行回調(diào)函數(shù),回調(diào)函數(shù)判斷當(dāng)前狀態(tài)獲知該數(shù)據(jù)含義并進(jìn)行解析,分配內(nèi)存,形成設(shè)定的內(nèi)存結(jié)構(gòu)保存模型對(duì)象及屬性,最終生成全模型對(duì)象內(nèi)存庫(kù)。
實(shí)施例一
(1)將CIM/E模型解析過程定義成8個(gè)狀態(tài),包括開始、頭信息、頭結(jié)束、類信息、屬性、對(duì)象、類結(jié)束、完成;
(2)定義CIM/E模型解析過程中的驅(qū)動(dòng)事件,頭信息驅(qū)動(dòng)符“<!”、頭結(jié)束標(biāo)志符“!>”、類信息引導(dǎo)符“<”、屬性引導(dǎo)符“@”、對(duì)象引導(dǎo)符“#”、類結(jié)束標(biāo)志符“</”;
(3)形成狀態(tài)切換表,狀態(tài)遷移路徑分為正常、告警、未定義,未定義的遷移路徑作為錯(cuò)誤狀態(tài)遷移路徑;
(4)執(zhí)行狀態(tài)轉(zhuǎn)移函數(shù),讀取模型文件中的一行,檢測(cè)其中的驅(qū)動(dòng)字符,判斷需切換到哪個(gè)狀態(tài),形成狀態(tài)遷移路徑,判斷狀態(tài)遷移路徑是否合理,如果不合理,表示模型文件有語(yǔ)法錯(cuò)誤;狀態(tài)轉(zhuǎn)移函數(shù)監(jiān)測(cè)模型是否錯(cuò)誤,根據(jù)引導(dǎo)符判斷是否為屬性聲明行,解析所有屬性并判斷屬性名是否重復(fù),如果重復(fù)說明模型文件有錯(cuò)誤,則形成錯(cuò)誤報(bào)告并終止模型解析過程;如果不重復(fù),則記錄該類的所有屬性聲明;在讀取到對(duì)象引導(dǎo)符時(shí),解析對(duì)象的屬性值并和上次讀到的屬性聲明個(gè)數(shù)進(jìn)行比較,如果不一致說明模型文件有錯(cuò)誤則形成錯(cuò)誤報(bào)告并終止模型解析過程,如果一致,則執(zhí)行下一步驟;
(5)狀態(tài)轉(zhuǎn)移函數(shù)將讀取到內(nèi)容傳遞給回調(diào)函數(shù),并執(zhí)行回調(diào)函數(shù),回調(diào)函數(shù)判斷當(dāng)前狀態(tài)獲知該數(shù)據(jù)含義并進(jìn)行解析,分配內(nèi)存形成如圖2的結(jié)構(gòu)保存模型對(duì)象及屬性;
(6)讀取文件下一行重復(fù)執(zhí)行步驟(4)~(5)直到讀取文件完畢。
以上顯示和描述了本發(fā)明的基本原理和主要特征和本發(fā)明的優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)施例的限制,上述實(shí)施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會(huì)有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。本發(fā)明要求保護(hù)范圍由所附的權(quán)利要求書及其等效物界定。