衣明華,王天驕,江偉仙
(1.中車長春軌道客車股份有限公司,長春 130062;2.西南交通大學 信息科學與技術學院,成都 611756)
大型復雜機電設備通常由數百萬個零部件構成,例如:一架波音747飛機大約由600萬個零部件構成,一列動車約由5萬個零部件構成,怎樣合理地組織管理這些種類繁多、數量龐大的零部件信息一直是個難題[1-3]。作為一種典型的大型復雜機電裝備,動車組
的結構功能復雜、零部件眾多,從設計、制造到運營、維修和保養,整個生命周期會形成幾千萬條維修保養的數據記錄,因此,合理、規范地組織和管理龐大的列車信息和狀態數據,對提高列車設計、制造、運營管理水平,實現列車信息的有效控制、記錄及追溯具有重要的意義[4-5]。
鑒于常規的結構樹管理模式不能滿足動車組結構樹高效存儲、查詢和管理的需求[6-7],本文提出了一種基于樹形結構編碼的數據字典設計方案,利用一種獨特的編碼規則設計,系統不僅能為結構樹上的每個節點生成唯一的編碼,而且可以通過該編碼快速地查詢到它的父、子節點。結合建立典型產品的結構樹模板,該方案可以實現百萬級零部件結構樹的快速建模。最后在數據庫設計方面,通過采用動態添加數據表列的方式,將數據庫存儲結構表與樹形結構進行綁定,方便實現結構樹節點的增刪改查以及結構樹的復制操作,方便及時更新節點信息,降低存儲冗余,進而有效提高動車數據的管理效率。在中車長春軌道客車股份有限公司高速列車全壽命周期數據管理與分析系統開發實踐中,通過使用論文設計的方案,極大地降低了數據存儲的冗余,提高了結構樹復制、查詢的效率,實現了動車模型的高效管理。
在分析現有成熟軌道列車產品結構樹的基礎上,參照文獻[8],將動車組從“全車–系統–子系統–功能組–功能件–零部件”逐級分解為功能單一、結構獨立的便于實現的簡單產品,主要按照功能劃分為車體、車端連接、轉向架及其輔助、主供電等15大功能系統。將分解后的全車節點按照樹形結構化組織起來,形成產品結構樹,描述動車產品構成的全貌。動車組產品結構樹的部分結構,如圖1所示。
(1)在“樹干”層次將動車組劃分為車體、車端連接、轉向架及其輔助等15個系統;
(2)以“車體”為例,在“樹杈”層面分解得到車體骨架結構等4個子系統;
(3)以“車體其他功能結構”為例,在“樹杈”層面分解得到車體排障結構等5個功能組;
(4)以“車頂附件”為例,功能組下一層級可以分解為4個功能件;
(5)功能件再往下細分即為具體的零部件,不再單列出來。
采用類似方法可對動車組其他系統、子系統等進行產品樹構建,最后得到一棵“倒置”的動車組產品結構樹。動車組結構樹是一個典型的樹形結構,以一對多的形式表示動車各層級零部件之間的上下級關系。

圖1 動車組產品結構樹基本劃分
軌道高速動車屬于大型復雜鐵路技術裝備,其結構功能復雜,部件種類、數量繁多,需要一種科學、規范的編碼方法來區別零部件,從而方便構建產品結構樹。
動車編碼核心功能是唯一區分結構樹上每一個層級的零部件。針對動車功能結構的層級信息和拓撲關系,受文獻[2]啟發,決定采用由功能區分碼和識別碼兩個部分組成的編碼方案。功能區分碼的特性是對零件進行歸類,確定功能系統的逐級編碼形式。識別碼是用來對不同零件區分和標識,避免通用性強的零件間重用時出現編碼混亂的問題。該編碼方案可了解零部件的基本信息,便于零部件的管理及提高配置效率,便于計算機進行處理,有較好的擴展性。動車編碼結構,如圖2所示。

圖2 動車編碼結構
1.2.1 功能區分碼
功能區分碼主要根據結構功能系統劃分規則來進行編碼。本文將功能系統劃分為5級,分別是“系統–子系統–功能組–功能件–零部件”,用戶也可以按需求擴充到8級。功能區分碼的每一級占2個碼位,由純數字組成,量級為01~99。
1.2.2 識別碼
識別碼主要用于對同一節車輛上完全相同的多個零部件的識別,可以是順序號,也可以是表示位置的位置號,編碼方式由用戶決定。識別碼占2個碼位,量級為00~99(00表示同種零件只有一個),針對同一節車輛,可以表示最多99個相同的零部件。
編碼主要涉及到模板和產品結構樹。模板和產品結構樹上相同零部件可能會分配到不同的車輛上,同樣的零部件也可能會出現在同一個車輛上,為保證編碼的唯一性,識別碼會按照順序進行自動編號,或者根據用戶自訂規則進行識別碼編碼。
動車是由零部件組成的,建模的過程就是把這些零部件按照現實動車中零部件的層次結構存儲在計算機中,從而方便編程模擬動車。本文采用結構樹來組織動車數據。
由于每輛動車上的每個零部件都有自己的生命周期,因而每一輛動車產品都需要單獨建模。上萬個零部件建模需要很大的開銷,為了方便模型的生成,節約開銷,這里提出同一個系列的動車模型使用同一個模板構建的解決辦法。模板是對同一系列動車的抽象,包含了該系列車型整輛動車的系統及功能,其與模型的區別在于模板是同系列模型的縮影。
為了方便動車模板的創建,本文在Oracle11g數據庫中設計了一個基于節點編碼的數據字典,用于存儲動車的系統、子系統及零部件。動車產品有上萬個零件,每次創建模板都需要按照動車層次結構從零件庫中篩選出當前系統需要的零部件,我們提出把創建模板過程中生成的系統、子系統、部件存儲在數據字典中的辦法,下次創建模板時直接使用數據字典集中的元素,或者經過簡單的復制修改后使用,節省了從大量數據中檢索組裝零件的時間,節約開銷。數據字典最初只是個零件庫,隨著模板的創建逐漸有子系統、系統加入,它是動車產品所有零部件以及子系統、系統的集合。
2.4.1 動車產品結構模型
利用結構樹來創建動車產品結構模型,查詢數據字典,查看是否已經創建好該系列動車的模板,如果模板存在可以直接根據模板實例化動車即可完成動車建模;否則先要創建該系列動車產品的模板,根據車廂節數和每節車廂具體情況實例化模板,最終生成該動車的結構樹模型。
動車按照層次結構至上而下逐級分解為“動車-系統-子系統-功能組-功能件-零部件”,動車模板的創建也是按照這個層次結構自頂向下遞歸進行,模板采用樹形結構存儲。模板創建的具體步驟如下:
(1)創建該系列動車的根節點,根節點包含這個系列動車信息,包括下一層次中系統相關信息。
(2)根據動車中系統的數量創建第2層節點,然后根據某個具體系統的信息,查詢數據字典,如果字典中存在該系統,直接引用,否則先創建該系統,引用該系統,直到所有的系統都完成引用。
(3)子系統和設備層(功能組和功能件)的創建與系統的創建類似,也是一個遞歸的過程。按照結構層次依次迭代,直到子節點是零件級,創建子節點引用該零件,至此設備層創建完成。
2.4.2 動車實例化建模
在長春軌道客車股份有限公司(簡稱:長客)高速列車全壽命周期數據管理與分析系統項目開發中,我們利用上述方案創建了CRH5、CR400BF等動車組結構樹模板,將結構樹模型、零部件物料號、物料名稱、零部件供應商信息存儲在結構樹中。模板創建完成后,實例化模板即可創建動車模型。動車的實例化需要按照車廂進行,步驟如下:
(1)實例化模板得到第1節車廂,具體是指從模板中選擇該動車第1節車廂所具有的系統,添加該系統具體的信息,包括零部件、子系統的信息,第1節車廂建模完成。
(2)根據動車的具體情況,實例化n節車廂,至此,動車模型創建完成。
每輛動車產品至少需要數萬條記錄才能實現動車建模及動車管理,常規的結構樹管理方式不能滿足高效存儲、查詢和管理的需求。本文提出了在數據庫表中動態添加列的方式建模,不僅節省了存儲空間,而且加快數據庫查詢速度,進而方便動車管理。基于此建立的數據庫模型,如圖3所示。

圖3 數據庫E-R模型圖
(1)結構樹模板基本信息表
模板基本信息表用來抽象描述系統的基本構成,它不帶有型號、廠家痕跡,是對一類系統的高度抽象表達,是建模的基礎。
(2)結構樹模板節點表
結構樹模板節點表主要用來存儲產品的層次結構信息,用來記錄一個系列產品模板的完整結構樹的各個節點與其父節點的層次關系,因此一個層次結構關系在產品模板節點表中只存在一行記錄值,在表行中儲存有父節點ID、節點層級、所屬模板ID等。
(3)結構樹實例基本信息表
實例是模板的一個具體實例化結果。一個具體的出廠產品,就是一個真實的實例。
(4)結構樹實例節點組成表
該表記錄一個實例從對應的產品模板中選中哪些節點,每一條記錄都對應產品模型結構樹的一個節點。其中,實例表是對結構樹模板節點表的擴展,只是預先添加了8節動車車廂,當動車車廂節數超過8節可以繼續動態添加。如果某輛動車的某個車廂(例如:車廂1)存在某個零件,就在該零件對應車廂1的字段上填寫車廂ID,表明該車廂具有這個零件。
(5)車廂基本信息表
車廂基本信息表用于保存動車組每一節車廂的基本信息。
(6)列車零件記錄表
列車零件記錄表為動車上的每一個零件創建一個唯一的ID。原則上,動車上的每一個零件都應該在這個表中有一條記錄,該記錄中的ID就是這個零件的唯一身份。操作中,為了減少不必要的記錄,一些不在維修范圍內的零件,可以沒有ID和對應的記錄,可以在需要的時候,動態創建。
(7)結構樹實例信息擴展表
該表用于擴展實例基本信息表的內容,針對不同的行業,擴展不同的表字段。
動車是由很多節車廂組成,車廂之間有很多結構是相同的。本文提出了動態添加列的方式來減少存儲冗余,具體是指如果動車的某節車廂(例如:車廂1)存在某個節點,就在該節點對應車廂1的字段上填寫車廂ID,表明該車廂具有這個節點。傳統的結構樹存儲方式為每節車廂的車體系統創建一條記錄,動態添加車廂列的方式則為整輛動車不同車廂相同的車體系統創建了一條共享的記錄,這樣不僅降低存儲冗余,而且有助于快速查找,因為產品模型結構樹實例是按照車廂劃分的,不管是查找某節車廂的某個節點,還是查找它在各個車廂的情況,查找的速度都比傳統結構樹遍歷查詢的方式快。此外,動態增加車廂列的方式對于車廂的復制只需要完成車廂列數據的拷貝,相比傳統結構樹復制記錄修改數據的方式更為方便。
根據上述建模流程完成產品結構樹的建立。圖4為在設計階段通過手工創建或經過產品設計階段后由系統自動創建生成的層次產品結構樹,依此展開就得到了整個產品的結構關系。在這棵結構樹上不僅可以很直觀地顯示出產品的結構層次關系, 而且還能進行復制、粘貼、刪除等常用的操作。將它保存為模板,在實例化車輛時可以直接調用。

圖4 產品結構樹界面
如圖5所示,開始創建動車模型時,從已有模板中選擇該動車車廂所具有的系統(該模板結構樹的各層均可選擇),添加該系統具體的信息,包括零部件、子系統的信息等,點擊“添加至車輛”,一節車廂建模完成,如圖5中右邊所示。完成建模的車廂也可以對節點進行操作,細化車廂的具體結構。
針對動車組結構樹零部件數量龐大、信息繁雜、管理困難等問題,結合動車組產品層次化結構功能特點,本文設計一種結構樹零部件規范編碼的方法,建立一種基于編碼字典的數據存儲管理模式,并給出動車組結構樹建模方法。基于節點編碼,本文研究了系統結構樹與列車模板、車廂、零部件信息的關聯關系,實現了以結構樹為中心的列車信息組織管理,將錯綜復雜的列車信息有條理地加以組織管理,建立了典型產品的結構樹模板。目前,基于該方案的長客高速列車全壽命周期數據管理與分析系統已投入實際應用,實現了10萬條數據記錄的秒級處理。研究表明,該方案不僅適用于動車組產品,對其他復雜機電設備結構樹的管理具有普遍的適用性[9-10]。

圖5 實例化結構樹