衣明華,王天驕,江偉仙
(1.中車長(zhǎng)春軌道客車股份有限公司,長(zhǎng)春 130062;2.西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 611756)
大型復(fù)雜機(jī)電設(shè)備通常由數(shù)百萬(wàn)個(gè)零部件構(gòu)成,例如:一架波音747飛機(jī)大約由600萬(wàn)個(gè)零部件構(gòu)成,一列動(dòng)車約由5萬(wàn)個(gè)零部件構(gòu)成,怎樣合理地組織管理這些種類繁多、數(shù)量龐大的零部件信息一直是個(gè)難題[1-3]。作為一種典型的大型復(fù)雜機(jī)電裝備,動(dòng)車組
的結(jié)構(gòu)功能復(fù)雜、零部件眾多,從設(shè)計(jì)、制造到運(yùn)營(yíng)、維修和保養(yǎng),整個(gè)生命周期會(huì)形成幾千萬(wàn)條維修保養(yǎng)的數(shù)據(jù)記錄,因此,合理、規(guī)范地組織和管理龐大的列車信息和狀態(tài)數(shù)據(jù),對(duì)提高列車設(shè)計(jì)、制造、運(yùn)營(yíng)管理水平,實(shí)現(xiàn)列車信息的有效控制、記錄及追溯具有重要的意義[4-5]。
鑒于常規(guī)的結(jié)構(gòu)樹管理模式不能滿足動(dòng)車組結(jié)構(gòu)樹高效存儲(chǔ)、查詢和管理的需求[6-7],本文提出了一種基于樹形結(jié)構(gòu)編碼的數(shù)據(jù)字典設(shè)計(jì)方案,利用一種獨(dú)特的編碼規(guī)則設(shè)計(jì),系統(tǒng)不僅能為結(jié)構(gòu)樹上的每個(gè)節(jié)點(diǎn)生成唯一的編碼,而且可以通過(guò)該編碼快速地查詢到它的父、子節(jié)點(diǎn)。結(jié)合建立典型產(chǎn)品的結(jié)構(gòu)樹模板,該方案可以實(shí)現(xiàn)百萬(wàn)級(jí)零部件結(jié)構(gòu)樹的快速建模。最后在數(shù)據(jù)庫(kù)設(shè)計(jì)方面,通過(guò)采用動(dòng)態(tài)添加數(shù)據(jù)表列的方式,將數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu)表與樹形結(jié)構(gòu)進(jìn)行綁定,方便實(shí)現(xiàn)結(jié)構(gòu)樹節(jié)點(diǎn)的增刪改查以及結(jié)構(gòu)樹的復(fù)制操作,方便及時(shí)更新節(jié)點(diǎn)信息,降低存儲(chǔ)冗余,進(jìn)而有效提高動(dòng)車數(shù)據(jù)的管理效率。在中車長(zhǎng)春軌道客車股份有限公司高速列車全壽命周期數(shù)據(jù)管理與分析系統(tǒng)開發(fā)實(shí)踐中,通過(guò)使用論文設(shè)計(jì)的方案,極大地降低了數(shù)據(jù)存儲(chǔ)的冗余,提高了結(jié)構(gòu)樹復(fù)制、查詢的效率,實(shí)現(xiàn)了動(dòng)車模型的高效管理。
在分析現(xiàn)有成熟軌道列車產(chǎn)品結(jié)構(gòu)樹的基礎(chǔ)上,參照文獻(xiàn)[8],將動(dòng)車組從“全車–系統(tǒng)–子系統(tǒng)–功能組–功能件–零部件”逐級(jí)分解為功能單一、結(jié)構(gòu)獨(dú)立的便于實(shí)現(xiàn)的簡(jiǎn)單產(chǎn)品,主要按照功能劃分為車體、車端連接、轉(zhuǎn)向架及其輔助、主供電等15大功能系統(tǒng)。將分解后的全車節(jié)點(diǎn)按照樹形結(jié)構(gòu)化組織起來(lái),形成產(chǎn)品結(jié)構(gòu)樹,描述動(dòng)車產(chǎn)品構(gòu)成的全貌。動(dòng)車組產(chǎn)品結(jié)構(gòu)樹的部分結(jié)構(gòu),如圖1所示。
(1)在“樹干”層次將動(dòng)車組劃分為車體、車端連接、轉(zhuǎn)向架及其輔助等15個(gè)系統(tǒng);
(2)以“車體”為例,在“樹杈”層面分解得到車體骨架結(jié)構(gòu)等4個(gè)子系統(tǒng);
(3)以“車體其他功能結(jié)構(gòu)”為例,在“樹杈”層面分解得到車體排障結(jié)構(gòu)等5個(gè)功能組;
(4)以“車頂附件”為例,功能組下一層級(jí)可以分解為4個(gè)功能件;
(5)功能件再往下細(xì)分即為具體的零部件,不再單列出來(lái)。
采用類似方法可對(duì)動(dòng)車組其他系統(tǒng)、子系統(tǒng)等進(jìn)行產(chǎn)品樹構(gòu)建,最后得到一棵“倒置”的動(dòng)車組產(chǎn)品結(jié)構(gòu)樹。動(dòng)車組結(jié)構(gòu)樹是一個(gè)典型的樹形結(jié)構(gòu),以一對(duì)多的形式表示動(dòng)車各層級(jí)零部件之間的上下級(jí)關(guān)系。
圖1 動(dòng)車組產(chǎn)品結(jié)構(gòu)樹基本劃分
軌道高速動(dòng)車屬于大型復(fù)雜鐵路技術(shù)裝備,其結(jié)構(gòu)功能復(fù)雜,部件種類、數(shù)量繁多,需要一種科學(xué)、規(guī)范的編碼方法來(lái)區(qū)別零部件,從而方便構(gòu)建產(chǎn)品結(jié)構(gòu)樹。
動(dòng)車編碼核心功能是唯一區(qū)分結(jié)構(gòu)樹上每一個(gè)層級(jí)的零部件。針對(duì)動(dòng)車功能結(jié)構(gòu)的層級(jí)信息和拓?fù)潢P(guān)系,受文獻(xiàn)[2]啟發(fā),決定采用由功能區(qū)分碼和識(shí)別碼兩個(gè)部分組成的編碼方案。功能區(qū)分碼的特性是對(duì)零件進(jìn)行歸類,確定功能系統(tǒng)的逐級(jí)編碼形式。識(shí)別碼是用來(lái)對(duì)不同零件區(qū)分和標(biāo)識(shí),避免通用性強(qiáng)的零件間重用時(shí)出現(xiàn)編碼混亂的問(wèn)題。該編碼方案可了解零部件的基本信息,便于零部件的管理及提高配置效率,便于計(jì)算機(jī)進(jìn)行處理,有較好的擴(kuò)展性。動(dòng)車編碼結(jié)構(gòu),如圖2所示。
圖2 動(dòng)車編碼結(jié)構(gòu)
1.2.1 功能區(qū)分碼
功能區(qū)分碼主要根據(jù)結(jié)構(gòu)功能系統(tǒng)劃分規(guī)則來(lái)進(jìn)行編碼。本文將功能系統(tǒng)劃分為5級(jí),分別是“系統(tǒng)–子系統(tǒng)–功能組–功能件–零部件”,用戶也可以按需求擴(kuò)充到8級(jí)。功能區(qū)分碼的每一級(jí)占2個(gè)碼位,由純數(shù)字組成,量級(jí)為01~99。
1.2.2 識(shí)別碼
識(shí)別碼主要用于對(duì)同一節(jié)車輛上完全相同的多個(gè)零部件的識(shí)別,可以是順序號(hào),也可以是表示位置的位置號(hào),編碼方式由用戶決定。識(shí)別碼占2個(gè)碼位,量級(jí)為00~99(00表示同種零件只有一個(gè)),針對(duì)同一節(jié)車輛,可以表示最多99個(gè)相同的零部件。
編碼主要涉及到模板和產(chǎn)品結(jié)構(gòu)樹。模板和產(chǎn)品結(jié)構(gòu)樹上相同零部件可能會(huì)分配到不同的車輛上,同樣的零部件也可能會(huì)出現(xiàn)在同一個(gè)車輛上,為保證編碼的唯一性,識(shí)別碼會(huì)按照順序進(jìn)行自動(dòng)編號(hào),或者根據(jù)用戶自訂規(guī)則進(jìn)行識(shí)別碼編碼。
動(dòng)車是由零部件組成的,建模的過(guò)程就是把這些零部件按照現(xiàn)實(shí)動(dòng)車中零部件的層次結(jié)構(gòu)存儲(chǔ)在計(jì)算機(jī)中,從而方便編程模擬動(dòng)車。本文采用結(jié)構(gòu)樹來(lái)組織動(dòng)車數(shù)據(jù)。
由于每輛動(dòng)車上的每個(gè)零部件都有自己的生命周期,因而每一輛動(dòng)車產(chǎn)品都需要單獨(dú)建模。上萬(wàn)個(gè)零部件建模需要很大的開銷,為了方便模型的生成,節(jié)約開銷,這里提出同一個(gè)系列的動(dòng)車模型使用同一個(gè)模板構(gòu)建的解決辦法。模板是對(duì)同一系列動(dòng)車的抽象,包含了該系列車型整輛動(dòng)車的系統(tǒng)及功能,其與模型的區(qū)別在于模板是同系列模型的縮影。
為了方便動(dòng)車模板的創(chuàng)建,本文在Oracle11g數(shù)據(jù)庫(kù)中設(shè)計(jì)了一個(gè)基于節(jié)點(diǎn)編碼的數(shù)據(jù)字典,用于存儲(chǔ)動(dòng)車的系統(tǒng)、子系統(tǒng)及零部件。動(dòng)車產(chǎn)品有上萬(wàn)個(gè)零件,每次創(chuàng)建模板都需要按照動(dòng)車層次結(jié)構(gòu)從零件庫(kù)中篩選出當(dāng)前系統(tǒng)需要的零部件,我們提出把創(chuàng)建模板過(guò)程中生成的系統(tǒng)、子系統(tǒng)、部件存儲(chǔ)在數(shù)據(jù)字典中的辦法,下次創(chuàng)建模板時(shí)直接使用數(shù)據(jù)字典集中的元素,或者經(jīng)過(guò)簡(jiǎn)單的復(fù)制修改后使用,節(jié)省了從大量數(shù)據(jù)中檢索組裝零件的時(shí)間,節(jié)約開銷。數(shù)據(jù)字典最初只是個(gè)零件庫(kù),隨著模板的創(chuàng)建逐漸有子系統(tǒng)、系統(tǒng)加入,它是動(dòng)車產(chǎn)品所有零部件以及子系統(tǒng)、系統(tǒng)的集合。
2.4.1 動(dòng)車產(chǎn)品結(jié)構(gòu)模型
利用結(jié)構(gòu)樹來(lái)創(chuàng)建動(dòng)車產(chǎn)品結(jié)構(gòu)模型,查詢數(shù)據(jù)字典,查看是否已經(jīng)創(chuàng)建好該系列動(dòng)車的模板,如果模板存在可以直接根據(jù)模板實(shí)例化動(dòng)車即可完成動(dòng)車建模;否則先要?jiǎng)?chuàng)建該系列動(dòng)車產(chǎn)品的模板,根據(jù)車廂節(jié)數(shù)和每節(jié)車廂具體情況實(shí)例化模板,最終生成該動(dòng)車的結(jié)構(gòu)樹模型。
動(dòng)車按照層次結(jié)構(gòu)至上而下逐級(jí)分解為“動(dòng)車-系統(tǒng)-子系統(tǒng)-功能組-功能件-零部件”,動(dòng)車模板的創(chuàng)建也是按照這個(gè)層次結(jié)構(gòu)自頂向下遞歸進(jìn)行,模板采用樹形結(jié)構(gòu)存儲(chǔ)。模板創(chuàng)建的具體步驟如下:
(1)創(chuàng)建該系列動(dòng)車的根節(jié)點(diǎn),根節(jié)點(diǎn)包含這個(gè)系列動(dòng)車信息,包括下一層次中系統(tǒng)相關(guān)信息。
(2)根據(jù)動(dòng)車中系統(tǒng)的數(shù)量創(chuàng)建第2層節(jié)點(diǎn),然后根據(jù)某個(gè)具體系統(tǒng)的信息,查詢數(shù)據(jù)字典,如果字典中存在該系統(tǒng),直接引用,否則先創(chuàng)建該系統(tǒng),引用該系統(tǒng),直到所有的系統(tǒng)都完成引用。
(3)子系統(tǒng)和設(shè)備層(功能組和功能件)的創(chuàng)建與系統(tǒng)的創(chuàng)建類似,也是一個(gè)遞歸的過(guò)程。按照結(jié)構(gòu)層次依次迭代,直到子節(jié)點(diǎn)是零件級(jí),創(chuàng)建子節(jié)點(diǎn)引用該零件,至此設(shè)備層創(chuàng)建完成。
2.4.2 動(dòng)車實(shí)例化建模
在長(zhǎng)春軌道客車股份有限公司(簡(jiǎn)稱:長(zhǎng)客)高速列車全壽命周期數(shù)據(jù)管理與分析系統(tǒng)項(xiàng)目開發(fā)中,我們利用上述方案創(chuàng)建了CRH5、CR400BF等動(dòng)車組結(jié)構(gòu)樹模板,將結(jié)構(gòu)樹模型、零部件物料號(hào)、物料名稱、零部件供應(yīng)商信息存儲(chǔ)在結(jié)構(gòu)樹中。模板創(chuàng)建完成后,實(shí)例化模板即可創(chuàng)建動(dòng)車模型。動(dòng)車的實(shí)例化需要按照車廂進(jìn)行,步驟如下:
(1)實(shí)例化模板得到第1節(jié)車廂,具體是指從模板中選擇該動(dòng)車第1節(jié)車廂所具有的系統(tǒng),添加該系統(tǒng)具體的信息,包括零部件、子系統(tǒng)的信息,第1節(jié)車廂建模完成。
(2)根據(jù)動(dòng)車的具體情況,實(shí)例化n節(jié)車廂,至此,動(dòng)車模型創(chuàng)建完成。
每輛動(dòng)車產(chǎn)品至少需要數(shù)萬(wàn)條記錄才能實(shí)現(xiàn)動(dòng)車建模及動(dòng)車管理,常規(guī)的結(jié)構(gòu)樹管理方式不能滿足高效存儲(chǔ)、查詢和管理的需求。本文提出了在數(shù)據(jù)庫(kù)表中動(dòng)態(tài)添加列的方式建模,不僅節(jié)省了存儲(chǔ)空間,而且加快數(shù)據(jù)庫(kù)查詢速度,進(jìn)而方便動(dòng)車管理。基于此建立的數(shù)據(jù)庫(kù)模型,如圖3所示。
圖3 數(shù)據(jù)庫(kù)E-R模型圖
(1)結(jié)構(gòu)樹模板基本信息表
模板基本信息表用來(lái)抽象描述系統(tǒng)的基本構(gòu)成,它不帶有型號(hào)、廠家痕跡,是對(duì)一類系統(tǒng)的高度抽象表達(dá),是建模的基礎(chǔ)。
(2)結(jié)構(gòu)樹模板節(jié)點(diǎn)表
結(jié)構(gòu)樹模板節(jié)點(diǎn)表主要用來(lái)存儲(chǔ)產(chǎn)品的層次結(jié)構(gòu)信息,用來(lái)記錄一個(gè)系列產(chǎn)品模板的完整結(jié)構(gòu)樹的各個(gè)節(jié)點(diǎn)與其父節(jié)點(diǎn)的層次關(guān)系,因此一個(gè)層次結(jié)構(gòu)關(guān)系在產(chǎn)品模板節(jié)點(diǎn)表中只存在一行記錄值,在表行中儲(chǔ)存有父節(jié)點(diǎn)ID、節(jié)點(diǎn)層級(jí)、所屬模板ID等。
(3)結(jié)構(gòu)樹實(shí)例基本信息表
實(shí)例是模板的一個(gè)具體實(shí)例化結(jié)果。一個(gè)具體的出廠產(chǎn)品,就是一個(gè)真實(shí)的實(shí)例。
(4)結(jié)構(gòu)樹實(shí)例節(jié)點(diǎn)組成表
該表記錄一個(gè)實(shí)例從對(duì)應(yīng)的產(chǎn)品模板中選中哪些節(jié)點(diǎn),每一條記錄都對(duì)應(yīng)產(chǎn)品模型結(jié)構(gòu)樹的一個(gè)節(jié)點(diǎn)。其中,實(shí)例表是對(duì)結(jié)構(gòu)樹模板節(jié)點(diǎn)表的擴(kuò)展,只是預(yù)先添加了8節(jié)動(dòng)車車廂,當(dāng)動(dòng)車車廂節(jié)數(shù)超過(guò)8節(jié)可以繼續(xù)動(dòng)態(tài)添加。如果某輛動(dòng)車的某個(gè)車廂(例如:車廂1)存在某個(gè)零件,就在該零件對(duì)應(yīng)車廂1的字段上填寫車廂ID,表明該車廂具有這個(gè)零件。
(5)車廂基本信息表
車廂基本信息表用于保存動(dòng)車組每一節(jié)車廂的基本信息。
(6)列車零件記錄表
列車零件記錄表為動(dòng)車上的每一個(gè)零件創(chuàng)建一個(gè)唯一的ID。原則上,動(dòng)車上的每一個(gè)零件都應(yīng)該在這個(gè)表中有一條記錄,該記錄中的ID就是這個(gè)零件的唯一身份。操作中,為了減少不必要的記錄,一些不在維修范圍內(nèi)的零件,可以沒(méi)有ID和對(duì)應(yīng)的記錄,可以在需要的時(shí)候,動(dòng)態(tài)創(chuàng)建。
(7)結(jié)構(gòu)樹實(shí)例信息擴(kuò)展表
該表用于擴(kuò)展實(shí)例基本信息表的內(nèi)容,針對(duì)不同的行業(yè),擴(kuò)展不同的表字段。
動(dòng)車是由很多節(jié)車廂組成,車廂之間有很多結(jié)構(gòu)是相同的。本文提出了動(dòng)態(tài)添加列的方式來(lái)減少存儲(chǔ)冗余,具體是指如果動(dòng)車的某節(jié)車廂(例如:車廂1)存在某個(gè)節(jié)點(diǎn),就在該節(jié)點(diǎn)對(duì)應(yīng)車廂1的字段上填寫車廂ID,表明該車廂具有這個(gè)節(jié)點(diǎn)。傳統(tǒng)的結(jié)構(gòu)樹存儲(chǔ)方式為每節(jié)車廂的車體系統(tǒng)創(chuàng)建一條記錄,動(dòng)態(tài)添加車廂列的方式則為整輛動(dòng)車不同車廂相同的車體系統(tǒng)創(chuàng)建了一條共享的記錄,這樣不僅降低存儲(chǔ)冗余,而且有助于快速查找,因?yàn)楫a(chǎn)品模型結(jié)構(gòu)樹實(shí)例是按照車廂劃分的,不管是查找某節(jié)車廂的某個(gè)節(jié)點(diǎn),還是查找它在各個(gè)車廂的情況,查找的速度都比傳統(tǒng)結(jié)構(gòu)樹遍歷查詢的方式快。此外,動(dòng)態(tài)增加車廂列的方式對(duì)于車廂的復(fù)制只需要完成車廂列數(shù)據(jù)的拷貝,相比傳統(tǒng)結(jié)構(gòu)樹復(fù)制記錄修改數(shù)據(jù)的方式更為方便。
根據(jù)上述建模流程完成產(chǎn)品結(jié)構(gòu)樹的建立。圖4為在設(shè)計(jì)階段通過(guò)手工創(chuàng)建或經(jīng)過(guò)產(chǎn)品設(shè)計(jì)階段后由系統(tǒng)自動(dòng)創(chuàng)建生成的層次產(chǎn)品結(jié)構(gòu)樹,依此展開就得到了整個(gè)產(chǎn)品的結(jié)構(gòu)關(guān)系。在這棵結(jié)構(gòu)樹上不僅可以很直觀地顯示出產(chǎn)品的結(jié)構(gòu)層次關(guān)系, 而且還能進(jìn)行復(fù)制、粘貼、刪除等常用的操作。將它保存為模板,在實(shí)例化車輛時(shí)可以直接調(diào)用。
圖4 產(chǎn)品結(jié)構(gòu)樹界面
如圖5所示,開始創(chuàng)建動(dòng)車模型時(shí),從已有模板中選擇該動(dòng)車車廂所具有的系統(tǒng)(該模板結(jié)構(gòu)樹的各層均可選擇),添加該系統(tǒng)具體的信息,包括零部件、子系統(tǒng)的信息等,點(diǎn)擊“添加至車輛”,一節(jié)車廂建模完成,如圖5中右邊所示。完成建模的車廂也可以對(duì)節(jié)點(diǎn)進(jìn)行操作,細(xì)化車廂的具體結(jié)構(gòu)。
針對(duì)動(dòng)車組結(jié)構(gòu)樹零部件數(shù)量龐大、信息繁雜、管理困難等問(wèn)題,結(jié)合動(dòng)車組產(chǎn)品層次化結(jié)構(gòu)功能特點(diǎn),本文設(shè)計(jì)一種結(jié)構(gòu)樹零部件規(guī)范編碼的方法,建立一種基于編碼字典的數(shù)據(jù)存儲(chǔ)管理模式,并給出動(dòng)車組結(jié)構(gòu)樹建模方法?;诠?jié)點(diǎn)編碼,本文研究了系統(tǒng)結(jié)構(gòu)樹與列車模板、車廂、零部件信息的關(guān)聯(lián)關(guān)系,實(shí)現(xiàn)了以結(jié)構(gòu)樹為中心的列車信息組織管理,將錯(cuò)綜復(fù)雜的列車信息有條理地加以組織管理,建立了典型產(chǎn)品的結(jié)構(gòu)樹模板。目前,基于該方案的長(zhǎng)客高速列車全壽命周期數(shù)據(jù)管理與分析系統(tǒng)已投入實(shí)際應(yīng)用,實(shí)現(xiàn)了10萬(wàn)條數(shù)據(jù)記錄的秒級(jí)處理。研究表明,該方案不僅適用于動(dòng)車組產(chǎn)品,對(duì)其他復(fù)雜機(jī)電設(shè)備結(jié)構(gòu)樹的管理具有普遍的適用性[9-10]。
圖5 實(shí)例化結(jié)構(gòu)樹