(北京航空航天大學(xué) 機(jī)械學(xué)院,北京 100191)
火箭、導(dǎo)彈等航天器產(chǎn)品復(fù)雜,航天器的設(shè)計(jì)過(guò)程涉及飛行器設(shè)計(jì)、機(jī)械、電子等多個(gè)學(xué)科,它的設(shè)計(jì)過(guò)程是自頂向下、從整體到局部,包含多個(gè)學(xué)科反復(fù)迭代的過(guò)程。采用智能主模型(Intelligent Master model,IMM)產(chǎn)品建模方法,使用模塊化技術(shù)、多層級(jí)骨架結(jié)構(gòu)及參數(shù)化驅(qū)動(dòng)技術(shù),通過(guò)參數(shù)化技術(shù)和多學(xué)科數(shù)據(jù)模型推送接口,能夠?qū)崿F(xiàn)設(shè)計(jì)與評(píng)估分析過(guò)程的自動(dòng)化,便于設(shè)計(jì)模型修改和迭代更替,縮短設(shè)計(jì)周期[1]。
在基于智能主模型的總體數(shù)字化協(xié)同設(shè)計(jì)環(huán)境中,產(chǎn)品設(shè)計(jì)的核心數(shù)據(jù)采用智能主模型表達(dá),同時(shí)智能主模型也是專(zhuān)業(yè)學(xué)科之間交換數(shù)據(jù)的媒介。隨之產(chǎn)生的問(wèn)題是基于智能主模型的產(chǎn)品設(shè)計(jì)環(huán)境中主模型數(shù)據(jù)庫(kù)包含大量不同學(xué)科、不同專(zhuān)業(yè)的設(shè)計(jì)數(shù)據(jù),這些數(shù)據(jù)的管理是智能主模型技術(shù)支持多學(xué)科協(xié)同設(shè)計(jì)成功的關(guān)鍵[1]。為了完成協(xié)同的設(shè)計(jì)流程,多專(zhuān)業(yè)的設(shè)計(jì)師將對(duì)同一份智能主模型實(shí)例中的數(shù)據(jù)進(jìn)行獲取和提交,為此有必要建設(shè)數(shù)據(jù)管理系統(tǒng)達(dá)到以下目標(biāo):
1)將個(gè)人產(chǎn)生的數(shù)據(jù)提交到集中的版本庫(kù)中,實(shí)現(xiàn)數(shù)據(jù)的傳遞和分享。
2)對(duì)數(shù)據(jù)變化的完成歷史進(jìn)行存檔。
3)以數(shù)據(jù)的關(guān)聯(lián)和演進(jìn)為線(xiàn)索,在多學(xué)科協(xié)同設(shè)計(jì)數(shù)據(jù)中建立譜系關(guān)系,從數(shù)據(jù)視角展示設(shè)計(jì)過(guò)程。
目前,在國(guó)外流行的項(xiàng)目數(shù)據(jù)管理軟件clearCase在數(shù)據(jù)版本監(jiān)控和管理方面功能強(qiáng)大,但是是收費(fèi)的,不開(kāi)源,而且配置管理操作復(fù)雜,不易掌握,并且缺少數(shù)據(jù)依賴(lài)的譜系追蹤和管理。江南大學(xué)和中船702聯(lián)合開(kāi)發(fā)的基于Redis的主模型管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[5],實(shí)現(xiàn)了主模型數(shù)據(jù)的版本管理和譜系管理功能,但是版本管理和譜系管理功能都是原生開(kāi)發(fā),沒(méi)有借用目前現(xiàn)有的版本管理功能的系統(tǒng)的功能,開(kāi)發(fā)成本較高、周期長(zhǎng)。
SVN(Subversion)版本管理軟件,是當(dāng)前最流行的一款開(kāi)源的版本控制工具,適用于多個(gè)組成分支共同開(kāi)發(fā)同一個(gè)項(xiàng)目,實(shí)現(xiàn)共享資源[2]。SVN的核心任務(wù)是實(shí)現(xiàn)歷史數(shù)據(jù)版本控制和協(xié)同開(kāi)發(fā)。通過(guò)在一臺(tái)服務(wù)器上建立一個(gè)中心版本庫(kù),版本庫(kù)中可以存放許多不同的項(xiàng)目資源,SVN通過(guò)URL來(lái)標(biāo)識(shí)版本庫(kù)中的資源,項(xiàng)目組成員可以通過(guò)SVN協(xié)議或http協(xié)議訪(fǎng)問(wèn)版本庫(kù)中的資源[2]。項(xiàng)目各分支成員在客戶(hù)端建立工作目錄,將版本庫(kù)里的項(xiàng)目文件檢出到客戶(hù)端機(jī)器中,然后在自己的工作拷貝中進(jìn)行任何修改,提交到SVN服務(wù)器,由它進(jìn)行綜合更新。當(dāng)每次提交時(shí),SVN將提交的項(xiàng)目資源的版本與原有版本進(jìn)行比較,如果有修改則記錄修改內(nèi)容,更新版本號(hào),項(xiàng)目組成員可以檢出以往的任一版本,同時(shí)SVN也提供了不同版本之間比較的功能[4]。
由于SVN的版本控制和數(shù)據(jù)管理的易操作和便利,為復(fù)雜產(chǎn)品的多學(xué)科協(xié)同開(kāi)發(fā)中主模型數(shù)據(jù)管理,提供了一條嶄新路徑。本文研究SVN的sever/client獲取和提交的數(shù)據(jù)共享框架原理,借用SVN對(duì)數(shù)據(jù)版本的修改提交、更新等事件的原子操作來(lái)保證主模型數(shù)據(jù)版本管理的準(zhǔn)確性。通過(guò)在xml中添加對(duì)于不同學(xué)科數(shù)據(jù)譜系的定義,實(shí)現(xiàn)客戶(hù)端和服務(wù)器端的數(shù)據(jù)譜系管理,同時(shí),通過(guò)對(duì)SVN本身用戶(hù)權(quán)限配置文件的管理和修改,來(lái)實(shí)現(xiàn)不同學(xué)科分支對(duì)于主模型數(shù)據(jù)的只讀和修改權(quán)限,開(kāi)發(fā)基于SVN的主模型數(shù)據(jù)管理系統(tǒng)。
本文提出的智能主模型數(shù)據(jù)管理方法建立在SVN版本管理框架上,SVN系統(tǒng)架構(gòu)和數(shù)據(jù)版本主要功能如圖1(a)和圖1(b)所示。
圖1 SVN版本管理框架
Repository按照一定格式存儲(chǔ)所有數(shù)據(jù),包括文件和目錄,版本庫(kù)會(huì)記錄每一次的更改,因而可以追溯歷史版本。經(jīng)過(guò)授權(quán)的客戶(hù)端連接到版本庫(kù),拷貝Repository中的文件和目錄到本地,建立一個(gè)工作目錄。
在提交修訂之前,SVN不會(huì)將你工作拷貝內(nèi)的任何修改上傳服務(wù)器與他人所作的修改進(jìn)行合并。并且SVN會(huì)在每個(gè)工作拷貝的一個(gè)特定位置(.svn的隱藏文件夾中)保存該工作拷貝最后一次提交時(shí)的文件及目錄情況,它可以用來(lái)幫助Subversion識(shí)別最近哪些文件作了修改,哪一個(gè)文件相對(duì)于其他人作的修改已經(jīng)過(guò)期,需要更新版本。
SVN的提交(Commit)操作是原子操作。每次提交完成后,版本庫(kù)的文件系統(tǒng)就進(jìn)入了一個(gè)新的狀態(tài),叫做一次修訂(Revision),每一次修訂都會(huì)賦予一個(gè)獨(dú)一無(wú)二的版本號(hào)[6]。
由于SVN系統(tǒng)本身在版本控制方面所做的比較完善的基礎(chǔ),及其與智能主模型數(shù)據(jù)管理系統(tǒng)版本功能的基本契合,基于SVN設(shè)計(jì)的智能主模型數(shù)據(jù)管理系統(tǒng)的總體架構(gòu)如圖2所示。
圖2 系統(tǒng)架構(gòu)
其中數(shù)據(jù)管理模塊建立在SVN客戶(hù)端基礎(chǔ)上,開(kāi)發(fā)模型數(shù)據(jù)管理系統(tǒng)和客戶(hù)端軟件,以SVN的標(biāo)準(zhǔn)命令行接口調(diào)用SVN客戶(hù)端,實(shí)現(xiàn)版本管理功能,并在此基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),實(shí)現(xiàn)譜系管理功能,該系統(tǒng)的整體為C/S架構(gòu)。權(quán)限管理部分為B/S架構(gòu),實(shí)現(xiàn)系統(tǒng)賬號(hào)管理和用戶(hù)權(quán)限管理,通過(guò)修改SVN服務(wù)器模塊配置文件的方式,實(shí)現(xiàn)基于SVN自身功能的用戶(hù)權(quán)限控制。權(quán)限管理模塊只影響客戶(hù)端用戶(hù)和權(quán)限信息,二者相對(duì)獨(dú)立。
根據(jù)系統(tǒng)架構(gòu),結(jié)合主模型數(shù)據(jù)管理系統(tǒng)的使用要求,將功能實(shí)現(xiàn)劃分為以下三個(gè)模塊,如圖3所示,分為三個(gè)功能,在客戶(hù)端實(shí)現(xiàn)版本管理功能和譜系管理功能,在服務(wù)器端實(shí)現(xiàn)權(quán)限管理功能。
圖3 智能主模型管理系統(tǒng)功能
主模型數(shù)據(jù)管理系統(tǒng)的版本管理功能主要是在客戶(hù)端登陸后,在系統(tǒng)用戶(hù)界面層通過(guò)SVN提供的Svnkit開(kāi)源包,調(diào)用其中的接口函數(shù)在界面層增加響應(yīng),實(shí)現(xiàn)當(dāng)前數(shù)據(jù)版本的更新、提交、還原、鎖定和解鎖功能。
1)更新:調(diào)用Svnkit中的SVNUpdateClient類(lèi)doUpdate()接口,實(shí)現(xiàn)從服務(wù)器中心版本庫(kù)中獲取當(dāng)前最新的數(shù)據(jù)版本到當(dāng)前的工作目錄。如果是首次創(chuàng)建的本地工作目錄,則調(diào)用doCheckOut()接口,從中心版本庫(kù)中檢出工作副本。
2)提交:調(diào)用Svnkit中的SVNCommitClient類(lèi)的doCommit()接口,將修改從工作副本提交到中心版本庫(kù)。
3)還原:調(diào)用Svnkit中的SVNUpdateClient類(lèi)接口,將工作目錄還原位于上次從服務(wù)器端下載版本完全一致的狀態(tài),所有在本地目錄的修改將被丟棄。
4)鎖定/解鎖:調(diào)用SvnLock()和SvnUnLock()接口,來(lái)實(shí)現(xiàn)對(duì)當(dāng)前目錄或者選定文件進(jìn)行鎖定。即被鎖定后,其他工作副本不得對(duì)此文件的操作為只讀而不可修改。此功能主要為了防止當(dāng)某個(gè)工作目錄正在修改文件時(shí),另外一個(gè)工作副本提交對(duì)此文件的修改,導(dǎo)致了數(shù)據(jù)不一致問(wèn)題,所以在當(dāng)前工作副本修改某文件時(shí),需使用鎖定功能,提交完修改后進(jìn)行解鎖。
由于多專(zhuān)業(yè)協(xié)同設(shè)計(jì)的特點(diǎn),智能主模型中的大部分?jǐn)?shù)據(jù)根據(jù)另一部分?jǐn)?shù)據(jù)生成,前者稱(chēng)為上游數(shù)據(jù),后者稱(chēng)為下游數(shù)據(jù),上游數(shù)據(jù)的修改更新會(huì)導(dǎo)致下游數(shù)據(jù)的版本過(guò)時(shí),原理上,下游數(shù)據(jù)需要重新生成。
主模型系統(tǒng)需要用戶(hù)定義的上下游數(shù)據(jù)之間的依賴(lài)關(guān)系,如圖4所示。
圖4 數(shù)據(jù)依賴(lài)關(guān)系示意
依賴(lài)關(guān)系的含義如下:
文件C依賴(lài)于文件E:文件C的版本更會(huì)導(dǎo)致文件E的版本過(guò)時(shí)。
目錄1依賴(lài)于目錄2:目錄2及其子目錄中任何文件的版本更新都會(huì)導(dǎo)致目錄1中的所有文件過(guò)時(shí)。
受到SVN的自身所賦予的數(shù)據(jù)版本號(hào)的概念的啟發(fā),利用存儲(chǔ)數(shù)據(jù)的版本號(hào)大小進(jìn)行比對(duì),一次來(lái)判斷當(dāng)前某個(gè)數(shù)據(jù)項(xiàng)是否“過(guò)期”或者“待更新”,由于SVN自身提供版本號(hào)是針對(duì)當(dāng)前所有數(shù)據(jù)整體,并不是某個(gè)單獨(dú)數(shù)據(jù)項(xiàng),意味著,數(shù)據(jù)集中有一個(gè)數(shù)據(jù)項(xiàng)發(fā)生變化,整體版本號(hào)便會(huì)自增1。因此,在SVN基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),來(lái)配置數(shù)據(jù)集中數(shù)據(jù)項(xiàng)的譜系關(guān)系和記錄各自的版本號(hào)。
XML語(yǔ)言作為一種描述性語(yǔ)言,具有以下特點(diǎn):格式簡(jiǎn)單、跨平臺(tái)和可擴(kuò)展。XML語(yǔ)言使用簡(jiǎn)單,具有許多現(xiàn)成的讀寫(xiě)接口,因此,利用XML來(lái)存儲(chǔ)數(shù)據(jù)的譜系管理信息。
建立一個(gè)名稱(chēng)為AncestryRelation的XML文件,在XML中每個(gè)節(jié)點(diǎn)設(shè)置以下幾個(gè)屬性值。如表1所示。
XML中每個(gè)節(jié)點(diǎn)的名稱(chēng)是當(dāng)前文件的全路徑加上“_Dir”或者“_File”來(lái)表示當(dāng)前設(shè)置譜系的是一個(gè)文件夾或者文件。
初始為某一個(gè)文件設(shè)置譜系。只能給當(dāng)前文件或者文件夾設(shè)置它的父親,首先,根據(jù)文件的名稱(chēng)在AncestryRelation里查找,若其已經(jīng)設(shè)置過(guò)父親,則需要給出提示,不能設(shè)置父親?;蛘呦葎h除原有父親,再進(jìn)行設(shè)置,若其沒(méi)有設(shè)置過(guò)父親,則可以設(shè)置父親。
每次在設(shè)置譜系后,保存譜系的時(shí)候,都需要確定當(dāng)前文件的版本號(hào)。首先,需要查看當(dāng)前文件或者文件夾所設(shè)置父親的版本號(hào),應(yīng)當(dāng)比當(dāng)前父親的版本號(hào)基礎(chǔ)上加1,若當(dāng)前父親還沒(méi)有xml,則置當(dāng)前文件的版本號(hào)為1。另外,若當(dāng)前文件存在下游,則把當(dāng)前文件的所有下游的是否判斷過(guò)期的標(biāo)志位全部置為false,即就是不判斷是否過(guò)期。
每次給當(dāng)前文件或者文件夾設(shè)置譜系關(guān)系的時(shí)候,都必須同時(shí)鎖定它的所有下游。修改文件或者文件夾的時(shí)候,需要同時(shí)鎖定它的下游。修改完畢提交的的時(shí)候,如果有修改文件的下游沒(méi)有鎖定,則無(wú)法提交。
每次修改完一次當(dāng)前文件,為了使他的下游過(guò)期。首先,當(dāng)前文件或者文件夾的所有下游全部的是否判斷過(guò)期的標(biāo)志位全部置為true。然后,當(dāng)前修改文件或者文件夾的xml中的版本號(hào),在其所有下游中的最大的版本號(hào)的基礎(chǔ)上+1,以此來(lái)保證所有的下游變成過(guò)期狀態(tài)。
智能主模型數(shù)據(jù)管理系統(tǒng)基于成熟的SVN版本管理系統(tǒng)搭建,通過(guò)修改SVN服務(wù)器模塊配置文件svnserve.conf和authz.conf的方式,其中svnserve.conf保存用戶(hù)的認(rèn)證信息,authz.conf中保存用戶(hù)的分組以及訪(fǎng)問(wèn)權(quán)限信息,實(shí)現(xiàn)基于SVN自身功能的用戶(hù)權(quán)限控制。
表1 AncestryRelation的XML文件說(shuō)明
為智能主模型數(shù)據(jù)管理系統(tǒng)的模塊設(shè)置“三員”賬號(hào)訪(fǎng)問(wèn),各賬號(hào)說(shuō)明如下:
系統(tǒng)管理員:負(fù)責(zé)創(chuàng)建和更新用戶(hù),負(fù)責(zé)創(chuàng)建版本庫(kù)。
安全保密管理員:負(fù)責(zé)分配每名用戶(hù)負(fù)責(zé)能夠訪(fǎng)問(wèn)的版本庫(kù)。
安全審計(jì)員:負(fù)責(zé)查看系統(tǒng)管理員和安全保密員的操作日志。
此種修改SVN自身配置文件的方式來(lái)設(shè)計(jì)權(quán)限管理功能,有效了復(fù)用了SVN自身的權(quán)限設(shè)置模塊,簡(jiǎn)化了開(kāi)發(fā)周期和成本。利用SVN自身的權(quán)限設(shè)置原理,保證的系統(tǒng)權(quán)限管理功能的正確性和有效性。
為了驗(yàn)證說(shuō)明基于SVN的主模型數(shù)據(jù)管理系統(tǒng),現(xiàn)以XX型號(hào)火箭設(shè)計(jì)為例,火箭總體設(shè)計(jì)數(shù)據(jù)協(xié)同管理中每輪方案論證模型都是支持火箭總體設(shè)計(jì)的產(chǎn)品主模型數(shù)據(jù),主模型基于功能的分解,可以得到底層的存儲(chǔ)單元,主模型中具有存儲(chǔ)單元列表,涉及火箭設(shè)計(jì)階段的四個(gè)不同專(zhuān)業(yè):總體、氣動(dòng)、彈道和姿控設(shè)計(jì)。存儲(chǔ)單元總體參數(shù)、發(fā)動(dòng)機(jī)參數(shù)、軌道需求等都是相互獨(dú)立的,它們?cè)诖鎯?chǔ)結(jié)構(gòu)中的位置不會(huì)有從屬關(guān)系,如圖5所示。設(shè)計(jì)學(xué)科間的數(shù)據(jù)相互傳遞,存儲(chǔ)單元不止能被某一學(xué)科訪(fǎng)問(wèn),文件具有訪(fǎng)問(wèn)權(quán)限,學(xué)科與存儲(chǔ)單元的訪(fǎng)問(wèn)權(quán)限決定了學(xué)科對(duì)文件的訪(fǎng)問(wèn)權(quán)限。例如,總體參數(shù)存儲(chǔ)單元的讀寫(xiě)學(xué)科只有總體參數(shù)專(zhuān)業(yè),剩下三個(gè)專(zhuān)業(yè)都是只讀權(quán)限。
在服務(wù)器端,利用SVN建立版本庫(kù)的函數(shù)實(shí)現(xiàn)智能主模型中心數(shù)據(jù)庫(kù)的建立,將火箭總體設(shè)計(jì)智能主模型數(shù)據(jù)添加到版本庫(kù)中。添加的智能主模型數(shù)據(jù)是根據(jù)火箭總體設(shè)計(jì)數(shù)據(jù)產(chǎn)品主模型的建立方法預(yù)先建立的。
圖5 火箭總體設(shè)計(jì)數(shù)據(jù)協(xié)同管理系統(tǒng)數(shù)據(jù)結(jié)構(gòu)
在客戶(hù)端,設(shè)計(jì)人員可以通過(guò)系統(tǒng)創(chuàng)建本地的工作目錄,并將服務(wù)器端的設(shè)計(jì)數(shù)據(jù)檢出或者更新到工作目錄中,數(shù)據(jù)協(xié)同管理系統(tǒng)的客戶(hù)端利用SVN類(lèi)中的函數(shù)開(kāi)發(fā),使用修改、還原等功能對(duì)本地學(xué)科對(duì)應(yīng)的存儲(chǔ)單元數(shù)據(jù)進(jìn)行修改上傳或者消除修改。尤其每個(gè)客戶(hù)端在使用修改功能時(shí)通過(guò)使用鎖定功能完成版本庫(kù)中響應(yīng)存儲(chǔ)單元數(shù)據(jù)鎖定,防止數(shù)據(jù)下載后其他客戶(hù)端下載數(shù)據(jù)造成數(shù)據(jù)的同時(shí)修改發(fā)生干涉現(xiàn)象。
對(duì)于多學(xué)科專(zhuān)業(yè)協(xié)同開(kāi)發(fā)的數(shù)據(jù)依賴(lài)數(shù)據(jù)一致性檢查功能是根據(jù)用戶(hù)設(shè)定的學(xué)科間數(shù)據(jù)依賴(lài)關(guān)系進(jìn)行檢查,如圖6所示,發(fā)動(dòng)機(jī)參數(shù)的設(shè)定依賴(lài)于總體參數(shù),則總體參數(shù)屬于上游,發(fā)動(dòng)機(jī)參數(shù)屬于下游。如果上游設(shè)計(jì)數(shù)據(jù)發(fā)生更新生成新的數(shù)據(jù)版本,則下游的設(shè)計(jì)輸入需要及時(shí)修改,使得下游使用數(shù)據(jù)與上游生成數(shù)據(jù)的版本信息一致,如果不一致則會(huì)發(fā)生數(shù)據(jù)沖突。
圖6 學(xué)科存儲(chǔ)單元間依賴(lài)關(guān)系
數(shù)據(jù)一致性視圖中檢查主體是主模型樹(shù)形結(jié)構(gòu)中的目標(biāo)項(xiàng),該視圖能夠在樹(shù)狀結(jié)構(gòu)中標(biāo)記出所有的過(guò)時(shí)的存儲(chǔ)單元目錄,同時(shí)還能夠標(biāo)記出由于哪些存儲(chǔ)單元的更新引起了文件數(shù)據(jù)的過(guò)時(shí)。具體來(lái)講,如果上游數(shù)據(jù)的具體版本號(hào)大于下游數(shù)據(jù)的具體版本號(hào),則系統(tǒng)會(huì)在目錄樹(shù)中顯示上游目錄過(guò)期標(biāo)志來(lái)提醒用戶(hù)進(jìn)行下游數(shù)據(jù)的更新,更新完畢后,下游數(shù)據(jù)版本號(hào)進(jìn)行相應(yīng)增大更新,以使下游版本號(hào)大于上游版本號(hào),消除過(guò)期標(biāo)志。需要注意的是,即數(shù)據(jù)的更新導(dǎo)致的數(shù)據(jù)過(guò)時(shí)只顯示直接下游數(shù)據(jù),而過(guò)時(shí)數(shù)據(jù)的下游不會(huì)因?yàn)樯嫌螖?shù)據(jù)的過(guò)時(shí)而過(guò)時(shí)。
設(shè)計(jì)并開(kāi)發(fā)基于SVN的智能主模型數(shù)據(jù)管理系統(tǒng),在SVN的版本控制功能基礎(chǔ)上,開(kāi)發(fā)智能主模型譜系管理功能,實(shí)現(xiàn)協(xié)同產(chǎn)品迭代開(kāi)發(fā)中智能主模型數(shù)據(jù)源的有效管理,采用SVN的sever/client框架和數(shù)據(jù)存儲(chǔ)技術(shù),通過(guò)xml文件定義數(shù)據(jù)的譜系依賴(lài)關(guān)系,實(shí)現(xiàn)協(xié)同迭代設(shè)計(jì)中多學(xué)科數(shù)據(jù)在不同專(zhuān)業(yè)傳遞與共享,同時(shí),開(kāi)發(fā)了權(quán)限管理文件和配置系統(tǒng)的權(quán)限管理功能。本文提出的方法有效性已在某型號(hào)火箭概要設(shè)計(jì)中數(shù)據(jù)管理得到初步的驗(yàn)證,將為多學(xué)科設(shè)計(jì)中的智能主模型數(shù)據(jù)管理提供有效可行的解決方案。