本發(fā)明涉及一種基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成方法及系統(tǒng)。
背景技術(shù):
現(xiàn)有技術(shù)是根據(jù)配電終端設(shè)備通信管理模塊主配置文件,設(shè)計設(shè)備樹信息以及子節(jié)點相互關(guān)聯(lián)等數(shù)據(jù),是一個標準的多叉樹,只需遍歷樹就能獲取數(shù)據(jù)信息然后生成轉(zhuǎn)發(fā)表,但針對根據(jù)用戶需求定制的,不規(guī)則的,亂序的主配置文件信息無法生成正常的可供配電終端設(shè)備使用的轉(zhuǎn)發(fā)表信息。
現(xiàn)有技術(shù)只針對標準樹形結(jié)構(gòu)和標準模式的XML文件進行解析,然后生成數(shù)據(jù)信息。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是為了解決上述問題,提供一種基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成方法及系統(tǒng),本發(fā)明是在配電終端主配置文件中,主站根據(jù)需求重新定制轉(zhuǎn)發(fā)表,該定制轉(zhuǎn)發(fā)表是從不同設(shè)備中選取測點信息,由于設(shè)備的ID不同,需要生成多個設(shè)備的遙測、遙信、遙控、功能定值等信息,由于功能定值的特殊性,將定值信息分組,每組定值下面都有相應(yīng)的描述信息以及參數(shù)信息,在生成轉(zhuǎn)發(fā)表時,需要反向查找該參數(shù)信息屬于哪個組別,該組別屬于哪個設(shè)備,因此在每個參數(shù)查找對應(yīng)的組別和設(shè)備信息,都需要將前一個信息進行保存,然后形成一個樹形鏈表,最后根據(jù)鏈表信息生成該定制轉(zhuǎn)發(fā)表的信息。
為了實現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成方法,包括:
步驟(1):根據(jù)配電終端設(shè)備類型新建設(shè)備數(shù)組,并將設(shè)備數(shù)組進行初始化;讀取XML配置文件;判斷XML配置文件格式是否正確,若正確進入步驟(2),否則,結(jié)束;
步驟(2):定位XML配置文件<custom>節(jié)點,獲取<custom>節(jié)點數(shù)據(jù),判斷<custom>節(jié)點數(shù)據(jù)是否為空;若<custom>節(jié)點數(shù)據(jù)不為空,進入步驟(3);反之,結(jié)束;
步驟(3):獲取<custom>節(jié)點的子節(jié)點個數(shù)N,若N>0,進入步驟(4),反之,結(jié)束;
步驟(4):將<custom>節(jié)點的子節(jié)點的數(shù)據(jù)記錄存儲到數(shù)據(jù)記錄表中;
步驟(5):將數(shù)據(jù)記錄表中的所有數(shù)據(jù)記錄逐一對應(yīng)存儲到步驟(1)新建的設(shè)備數(shù)組中;
步驟(6):根據(jù)設(shè)備數(shù)組中的設(shè)備信息以及對應(yīng)設(shè)備下的四遙信息和定值信息組成一個自頂向下由父節(jié)點和子節(jié)點組成的多叉樹結(jié)構(gòu)的設(shè)備信息;根據(jù)用戶的需求,通過對多叉樹結(jié)構(gòu)的設(shè)備信息的循環(huán)遍歷,生成對應(yīng)設(shè)備的自定義定制轉(zhuǎn)發(fā)表。
所述步驟(1):
新建的設(shè)備數(shù)組包括:設(shè)備ID、設(shè)備名稱、設(shè)備地址、四遙數(shù)組和定值數(shù)組。
所述四遙數(shù)組包括:遙測數(shù)組、遙信數(shù)組、遙脈數(shù)組和遙控數(shù)組。
所述四遙數(shù)組的數(shù)據(jù)記錄包括:記錄ID、設(shè)備ID、設(shè)備地址、記錄類型、記錄內(nèi)序號和記錄描述等信息,
所述記錄描述是對配電終端設(shè)備線路上的電壓、電流、功率、開關(guān)狀態(tài)和遠程控制等信息的描述。
所述定值數(shù)組包括:若干個定值組,每個定值組包括若干個定值數(shù)據(jù)記錄。
所述定值組和所述定值記錄都包含記錄ID,設(shè)備ID,設(shè)備地址,設(shè)備類型和設(shè)備描述信息,定值記錄是對配電終端設(shè)備的運行參數(shù)進行描述和設(shè)定。
所述步驟(1):判斷XML配置文件格式是否正確是根據(jù)XmlSerializer文件序列化庫函數(shù)Serialize()判斷XML配置文件格式是否正確。
所述步驟(2)定位XML配置文件<custom>節(jié)點是指XML文件管理類根據(jù)xmlRoot根節(jié)點的屬性XmlAttribute、字段命名空間Namespace和節(jié)點類型XmlElement定位XML配置文件<custom>節(jié)點。
所述步驟(3)<custom>節(jié)點的子節(jié)點包括遙測類型節(jié)點<YC>、遙信類型節(jié)點<YX>、遙脈類型節(jié)點<YM>、遙控類型節(jié)點<YK>和定值類型節(jié)點<FV>。
所述步驟(4)首先獲取遙測類型節(jié)點<YC>下的所有數(shù)據(jù)記錄,然后獲取遙信類型節(jié)點<YX>下的所有數(shù)據(jù)記錄,然后獲取遙脈類型節(jié)點<YM>下的所有數(shù)據(jù)記錄,然后獲取遙控類型節(jié)點<YK>下的所有數(shù)據(jù)記錄,最后獲取定值類型節(jié)點<FV>下的所有數(shù)據(jù)記錄;將所有的數(shù)據(jù)記錄按獲取順序全部存儲到數(shù)據(jù)記錄表中,將數(shù)據(jù)記錄表的首條數(shù)據(jù)記錄標識為k=1,進入步驟(5);
所述數(shù)據(jù)記錄包括:記錄ID,設(shè)備ID,設(shè)備地址,記錄類型,記錄內(nèi)序號和記錄描述。
所述步驟(5)還包括:
步驟(51):判斷當(dāng)前數(shù)據(jù)記錄是否為首條數(shù)據(jù)記錄,
若是,則根據(jù)數(shù)據(jù)記錄中的設(shè)備ID,在設(shè)備數(shù)組中新建設(shè)備信息,并將新建設(shè)備信息中的四遙數(shù)組和定值數(shù)組初始化,進入步驟(52);設(shè)備信息包括:設(shè)備ID、設(shè)備名稱和設(shè)備地址、四遙數(shù)組、定值數(shù)組;
若不是首條數(shù)據(jù)記錄,就根據(jù)數(shù)據(jù)記錄中的設(shè)備ID判斷設(shè)備數(shù)組中是否已經(jīng)存在設(shè)備ID,
若存在,根據(jù)設(shè)備ID,從數(shù)據(jù)記錄中獲取對應(yīng)的設(shè)備信息,進入步驟(52);
若不存在,根據(jù)設(shè)備ID,在設(shè)備數(shù)組中新建設(shè)備信息,并將新建設(shè)備信息中的四遙數(shù)組和定值數(shù)組初始化,進入步驟(52)。
步驟(52):繼續(xù)判斷數(shù)據(jù)記錄所屬節(jié)點的節(jié)點類型;
若節(jié)點類型為四遙類型,讀取當(dāng)前數(shù)據(jù)記錄,并將當(dāng)前數(shù)據(jù)記錄插入到設(shè)備數(shù)組中對應(yīng)設(shè)備下的四遙數(shù)組下;
若節(jié)點數(shù)據(jù)類型為定值類型,讀取當(dāng)前數(shù)據(jù)記錄,根據(jù)記錄內(nèi)序號判斷當(dāng)前數(shù)據(jù)記錄信息的父節(jié)點是否存在,
若存在,將當(dāng)前數(shù)據(jù)記錄放入父節(jié)點下的子節(jié)點數(shù)據(jù)記錄中,將父節(jié)點數(shù)據(jù)以及父節(jié)點下的子節(jié)點數(shù)據(jù)存到設(shè)備數(shù)組對應(yīng)設(shè)備下的定值數(shù)組中;
若不存在,將當(dāng)前數(shù)據(jù)記錄直接存到設(shè)備數(shù)組對應(yīng)設(shè)備下的定值數(shù)組中。
所述步驟(5)與步驟(6)之間還包括步驟(50):
步驟(50):讀取數(shù)據(jù)記錄表當(dāng)前數(shù)據(jù)記錄的下一條記錄,判斷下一條記錄所屬節(jié)點的節(jié)點類型是否發(fā)生改變,若發(fā)生改變,則當(dāng)前節(jié)點類型的數(shù)據(jù)記錄讀取完畢,若未發(fā)生改變,則繼續(xù)讀取;若讀取到數(shù)據(jù)記錄表的下一條記錄為空,則所有數(shù)據(jù)記錄已經(jīng)讀取完畢,進入步驟(6),否則,返回步驟(3);
所述自定義定制轉(zhuǎn)發(fā)表包括遙測類型以及遙測數(shù)據(jù)記錄、遙信類型以及遙信數(shù)據(jù)記錄、遙脈類型以及遙脈數(shù)據(jù)記錄、遙控類型以及遙控數(shù)據(jù)記錄、定值類型以及定值數(shù)據(jù)記錄。
一般的轉(zhuǎn)發(fā)表是每個設(shè)備下都有對應(yīng)固定結(jié)構(gòu)的、分類明確、有序的、層次清晰的遙測、遙信、遙脈、遙控以及定值信息,自定義定制的轉(zhuǎn)發(fā)表是一個平坦的、分類清晰但結(jié)構(gòu)及次序混亂的信息表。
四遙數(shù)組包括遙測數(shù)組、遙信數(shù)組、遙控數(shù)組和遙脈數(shù)組;所述遙測數(shù)組包括若干遙測數(shù)據(jù)記錄,所述遙信數(shù)組包括若干遙信數(shù)據(jù)記錄,所述遙脈數(shù)組包括若干遙脈數(shù)據(jù)記錄,所述遙控數(shù)組包括若干遙控數(shù)據(jù)記錄。
四遙類型包括遙測<YC>、遙信<YX>、遙脈<YM>、遙控<YK>。
所述父節(jié)點下面可以是一個子節(jié)點,也可以是多個子節(jié)點。
判斷下一條記錄的節(jié)點信息類型是否發(fā)生改變,例如,由當(dāng)前記錄的節(jié)點信息類型是遙測類型,下一條記錄的節(jié)點信息類型是遙信類型,則判斷為發(fā)生改變。
基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成系統(tǒng),包括:
設(shè)備數(shù)組新建模塊:根據(jù)配電終端設(shè)備類型新建設(shè)備數(shù)組,并將設(shè)備數(shù)組進行初始化;
配置文件讀取判斷模塊:讀取XML配置文件;判斷XML配置文件格式是否正確,若正確進入節(jié)點定位模塊,否則,結(jié)束;
節(jié)點定位模塊:定位XML配置文件<custom>節(jié)點,獲取<custom>節(jié)點數(shù)據(jù),判斷<custom>節(jié)點數(shù)據(jù)是否為空;若<custom>節(jié)點數(shù)據(jù)不為空,進入節(jié)點獲取模塊;反之,結(jié)束;
節(jié)點獲取模塊:獲取<custom>節(jié)點的子節(jié)點個數(shù)N,若N>0,進入數(shù)據(jù)記錄表生成模塊,反之,結(jié)束;
數(shù)據(jù)記錄表生成模塊:將<custom>節(jié)點的子節(jié)點的數(shù)據(jù)記錄存儲到數(shù)據(jù)記錄表中;
存儲模塊:將數(shù)據(jù)記錄表中的所有數(shù)據(jù)記錄逐一對應(yīng)存儲到設(shè)備數(shù)組新建模塊新建的設(shè)備數(shù)組中;
定值轉(zhuǎn)發(fā)表生成模塊:根據(jù)設(shè)備數(shù)組中的設(shè)備信息以及對應(yīng)設(shè)備下的四遙信息和定值信息組成一個自頂向下由父節(jié)點和子節(jié)點組成的多叉樹結(jié)構(gòu)的設(shè)備信息;根據(jù)用戶的需求,通過對多叉樹結(jié)構(gòu)的設(shè)備信息的循環(huán)遍歷,生成對應(yīng)設(shè)備的自定義定制轉(zhuǎn)發(fā)表。
本發(fā)明的有益效果:能夠自定義設(shè)備轉(zhuǎn)發(fā)表信息,并根據(jù)自定義的轉(zhuǎn)發(fā)表節(jié)點文件生成相應(yīng)的轉(zhuǎn)發(fā)表文件,能夠更準確的定位節(jié)點對應(yīng)的設(shè)備信息和快速查詢該設(shè)備的四遙信息,使設(shè)備配置方便自由,信息簡潔,效率高。
附圖說明
圖1為本發(fā)明的方法流程圖;
圖2為本發(fā)明的多叉樹設(shè)備信息。
具體實施方式
下面結(jié)合附圖與實施例對本發(fā)明作進一步說明。
如圖1-2所示,基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成方法,包括:
步驟(1):根據(jù)配電終端設(shè)備類型新建設(shè)備數(shù)組,并將設(shè)備數(shù)組進行初始化;讀取XML配置文件;判斷XML配置文件格式是否正確,若正確進入步驟(2),否則,結(jié)束;
步驟(2):定位XML配置文件<custom>節(jié)點,獲取<custom>節(jié)點數(shù)據(jù),判斷<custom>節(jié)點數(shù)據(jù)是否為空;若<custom>節(jié)點數(shù)據(jù)不為空,進入步驟(3);反之,結(jié)束;
步驟(3):獲取<custom>節(jié)點的子節(jié)點個數(shù)N,若N>0,進入步驟(4),反之,結(jié)束;
步驟(4):將<custom>節(jié)點的子節(jié)點的數(shù)據(jù)記錄存儲到數(shù)據(jù)記錄表中;
步驟(5):將數(shù)據(jù)記錄表中的所有數(shù)據(jù)記錄逐一對應(yīng)存儲到步驟(1)新建的設(shè)備數(shù)組中;
步驟(6):根據(jù)設(shè)備數(shù)組中的設(shè)備信息以及對應(yīng)設(shè)備下的四遙信息和定值信息組成一個自頂向下由父節(jié)點和子節(jié)點組成的多叉樹結(jié)構(gòu)的設(shè)備信息;根據(jù)用戶的需求,通過對多叉樹結(jié)構(gòu)的設(shè)備信息的循環(huán)遍歷,生成對應(yīng)設(shè)備的自定義定制轉(zhuǎn)發(fā)表。
所述步驟(1):新建的設(shè)備數(shù)組包括:設(shè)備ID、設(shè)備名稱、設(shè)備地址、四遙數(shù)組和定值數(shù)組。所述四遙數(shù)組包括:遙測數(shù)組、遙信數(shù)組、遙脈數(shù)組和遙控數(shù)組;所述四遙數(shù)組的記錄信息包括:記錄ID、設(shè)備ID、設(shè)備地址、記錄類型、記錄內(nèi)序號和記錄描述,所述記錄描述是對配電終端設(shè)備線路上的電壓、電流、功率、開關(guān)狀態(tài)和遠程控制的描述。所述定值數(shù)組包括:若干個定值組,每個定值組包括若干個定值記錄,所述定值組和所述定值記錄都包含記錄ID,設(shè)備ID,設(shè)備地址,設(shè)備類型和設(shè)備描述信息,定值記錄是對配電終端設(shè)備的運行參數(shù)進行描述和設(shè)定。
所述步驟(1):判斷XML配置文件格式是否正確是根據(jù)XmlSerializer文件序列化庫函數(shù)Serialize()判斷XML配置文件格式是否正確。
所述步驟(2)定位XML配置文件<custom>節(jié)點是指XML文件管理類根據(jù)xmlRoot根節(jié)點的屬性XmlAttribute、字段命名空間Namespace和節(jié)點類型XmlElement定位XML配置文件<custom>節(jié)點。
所述步驟(3)<custom>節(jié)點的子節(jié)點包括遙測類型節(jié)點<YC>、遙信類型節(jié)點<YX>、遙脈類型節(jié)點<YM>、遙控類型節(jié)點<YK>和定值類型節(jié)點<FV>。
所述步驟(4)首先獲取遙測類型節(jié)點<YC>下的所有數(shù)據(jù)記錄,然后獲取遙信類型節(jié)點<YX>下的所有數(shù)據(jù)記錄,然后獲取遙脈類型節(jié)點<YM>下的所有數(shù)據(jù)記錄,然后獲取遙控類型節(jié)點<YK>下的所有數(shù)據(jù)記錄,最后獲取定值類型節(jié)點<FV>下的所有數(shù)據(jù)記錄;將所有的數(shù)據(jù)記錄按獲取順序全部存儲到數(shù)據(jù)記錄表中,將數(shù)據(jù)記錄表的首條數(shù)據(jù)記錄標識為k=1,進入步驟(5);
所述數(shù)據(jù)記錄包括:記錄ID,設(shè)備ID,設(shè)備地址,記錄類型,記錄內(nèi)序號和記錄描述。
所述步驟(5)還包括:步驟(51):判斷當(dāng)前數(shù)據(jù)記錄是否為首條數(shù)據(jù)記錄,若是,則根據(jù)數(shù)據(jù)記錄中的設(shè)備ID,在設(shè)備數(shù)組中新建設(shè)備信息,并將新建設(shè)備信息中的四遙數(shù)組和定值數(shù)組初始化,進入步驟(52);設(shè)備信息包括:設(shè)備ID、設(shè)備名稱和設(shè)備地址、四遙數(shù)組、定值數(shù)組;若不是首條數(shù)據(jù)記錄,就根據(jù)數(shù)據(jù)記錄中的設(shè)備ID判斷設(shè)備數(shù)組中是否已經(jīng)存在設(shè)備ID,若存在,根據(jù)設(shè)備ID,從數(shù)據(jù)記錄中獲取對應(yīng)的設(shè)備信息,進入步驟(52);若不存在,根據(jù)設(shè)備ID,在設(shè)備數(shù)組中新建設(shè)備信息,并將新建設(shè)備信息中的四遙數(shù)組和定值數(shù)組初始化,進入步驟(52)。
步驟(52):繼續(xù)判斷數(shù)據(jù)記錄所屬節(jié)點的節(jié)點類型;若節(jié)點類型為四遙類型,讀取當(dāng)前數(shù)據(jù)記錄,并將當(dāng)前數(shù)據(jù)記錄插入到設(shè)備數(shù)組中對應(yīng)設(shè)備下的四遙數(shù)組下;若節(jié)點數(shù)據(jù)類型為定值類型,讀取當(dāng)前數(shù)據(jù)記錄,根據(jù)記錄內(nèi)序號判斷當(dāng)前數(shù)據(jù)記錄信息的父節(jié)點是否存在,若存在,將當(dāng)前數(shù)據(jù)記錄放入父節(jié)點下的子節(jié)點數(shù)據(jù)記錄中,將父節(jié)點數(shù)據(jù)以及父節(jié)點下的子節(jié)點數(shù)據(jù)存到設(shè)備數(shù)組對應(yīng)設(shè)備下的定值數(shù)組中;若不存在,將當(dāng)前數(shù)據(jù)記錄直接存到設(shè)備數(shù)組對應(yīng)設(shè)備下的定值數(shù)組中。
所述步驟(5)與步驟(6)之間還包括步驟(50):
步驟(50):讀取數(shù)據(jù)記錄表當(dāng)前數(shù)據(jù)記錄的下一條記錄,判斷下一條記錄所屬節(jié)點的節(jié)點類型是否發(fā)生改變,若發(fā)生改變,則當(dāng)前節(jié)點類型的數(shù)據(jù)記錄讀取完畢,若未發(fā)生改變,則繼續(xù)讀?。蝗糇x取到數(shù)據(jù)記錄表的下一條記錄為空,則所有數(shù)據(jù)記錄已經(jīng)讀取完畢,進入步驟(6),否則,返回步驟(3);
所述自定義定制轉(zhuǎn)發(fā)表包括遙測類型以及遙測數(shù)據(jù)記錄、遙信類型以及遙信數(shù)據(jù)記錄、遙脈類型以及遙脈數(shù)據(jù)記錄、遙控類型以及遙控數(shù)據(jù)記錄、定值類型以及定值數(shù)據(jù)記錄。
一般的轉(zhuǎn)發(fā)表是每個設(shè)備下都有對應(yīng)固定結(jié)構(gòu)的、分類明確、有序的、層次清晰的遙測、遙信、遙脈、遙控以及定值信息,自定義定制的轉(zhuǎn)發(fā)表是一個平坦的、分類清晰但結(jié)構(gòu)及次序混亂的信息表。
四遙數(shù)組包括遙測數(shù)組、遙信數(shù)組、遙控數(shù)組和遙脈數(shù)組;
四遙類型包括遙測<YC>、遙信<YX>、遙脈<YM>、遙控<YK>。
所述父節(jié)點下面可以是一個子節(jié)點,也可以是多個子節(jié)點。
判斷下一條記錄的節(jié)點信息類型是否發(fā)生改變,例如,由當(dāng)前記錄的節(jié)點信息類型是遙測類型,下一條記錄的節(jié)點信息類型是遙信類型,則判斷為發(fā)生改變。
基于配電終端設(shè)備XML文件的定制轉(zhuǎn)發(fā)表生成系統(tǒng),包括:
設(shè)備數(shù)組新建模塊:根據(jù)配電終端設(shè)備類型新建設(shè)備數(shù)組,并將設(shè)備數(shù)組進行初始化;
配置文件讀取判斷模塊:讀取XML配置文件;判斷XML配置文件格式是否正確,若正確進入節(jié)點定位模塊,否則,結(jié)束;
節(jié)點定位模塊:定位XML配置文件<custom>節(jié)點,獲取<custom>節(jié)點數(shù)據(jù),判斷<custom>節(jié)點數(shù)據(jù)是否為空;若<custom>節(jié)點數(shù)據(jù)不為空,進入節(jié)點獲取模塊;反之,結(jié)束;
節(jié)點獲取模塊:獲取<custom>節(jié)點的子節(jié)點個數(shù)N,若N>0,進入數(shù)據(jù)記錄表生成模塊,反之,結(jié)束;
數(shù)據(jù)記錄表生成模塊:將<custom>節(jié)點的子節(jié)點的數(shù)據(jù)記錄存儲到數(shù)據(jù)記錄表中;
存儲模塊:將數(shù)據(jù)記錄表中的所有數(shù)據(jù)記錄逐一對應(yīng)存儲到設(shè)備數(shù)組新建模塊新建的設(shè)備數(shù)組中;
定值轉(zhuǎn)發(fā)表生成模塊:根據(jù)設(shè)備數(shù)組中的設(shè)備信息以及對應(yīng)設(shè)備下的四遙信息和定值信息組成一個自頂向下由父節(jié)點和子節(jié)點組成的多叉樹結(jié)構(gòu)的設(shè)備信息;根據(jù)用戶的需求,通過對多叉樹結(jié)構(gòu)的設(shè)備信息的循環(huán)遍歷,生成對應(yīng)設(shè)備的自定義定制轉(zhuǎn)發(fā)表。
上述雖然結(jié)合附圖對本發(fā)明的具體實施方式進行了描述,但并非對本發(fā)明保護范圍的限制,所屬領(lǐng)域技術(shù)人員應(yīng)該明白,在本發(fā)明的技術(shù)方案的基礎(chǔ)上,本領(lǐng)域技術(shù)人員不需要付出創(chuàng)造性勞動即可做出的各種修改或變形仍在本發(fā)明的保護范圍以內(nèi)。