專利名稱::一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及協(xié)同設(shè)計(jì)學(xué)及模板設(shè)計(jì)學(xué)領(lǐng)域,具體的說(shuō)一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法。
背景技術(shù):
:計(jì)算機(jī)支持的協(xié)同設(shè)計(jì)是CSCW(計(jì)算機(jī)支持的協(xié)同工作)在產(chǎn)品開發(fā)過(guò)程中的一個(gè)應(yīng)用。傳統(tǒng)的產(chǎn)品設(shè)計(jì)是以圖紙上手工設(shè)計(jì)為主,設(shè)計(jì)周期長(zhǎng),質(zhì)量不能保證,設(shè)計(jì)成本高。CAD技術(shù)的出現(xiàn)和發(fā)展大大改變了這種情況,產(chǎn)品設(shè)計(jì)有了質(zhì)的飛躍。隨著CAD系統(tǒng)的廣泛使用與CSCW領(lǐng)域研究的迅速發(fā)展,人們正在尋求將CAD技術(shù)與CSCW技術(shù)結(jié)合起來(lái),以開發(fā)計(jì)算機(jī)支持的協(xié)同設(shè)計(jì)系統(tǒng)。協(xié)同設(shè)計(jì)是協(xié)同技術(shù)在計(jì)算機(jī)輔助設(shè)計(jì)領(lǐng)域內(nèi)的重要應(yīng)用,主要是解決地域分散的設(shè)計(jì)人員,借助計(jì)算機(jī)網(wǎng)絡(luò)、多媒體技術(shù)等工具和技術(shù),相互合作交流,共同完成一個(gè)設(shè)計(jì)任務(wù)。協(xié)同設(shè)計(jì)中需要解決的問(wèn)題除了協(xié)同的主要問(wèn)題像文本交流、視頻交流、白板系統(tǒng)、并發(fā)和一致性控制等之外,還有一些特定于領(lǐng)域的問(wèn)題,如大文件的傳輸、設(shè)計(jì)結(jié)果的裝配、設(shè)計(jì)平臺(tái)的不一致性、協(xié)同編輯的一致性、版本控制等問(wèn)題。協(xié)同設(shè)計(jì)中的問(wèn)題比一般協(xié)同中的問(wèn)題要復(fù)雜的多。從1984年MIT的IrenGrief和DEC公司的PaulCashman兩人第一次正式提出了CSCW的概念,國(guó)內(nèi)外對(duì)于計(jì)算機(jī)支持的協(xié)同工作的研究在各個(gè)應(yīng)用領(lǐng)域取得很大的進(jìn)展。在協(xié)同設(shè)計(jì)方面已經(jīng)有很多成熟的商品化軟件。然而在目前的網(wǎng)絡(luò)帶寬環(huán)境下,真正的實(shí)現(xiàn)分布式協(xié)同設(shè)計(jì)的任務(wù)分解、信息交流、產(chǎn)品裝配等環(huán)節(jié),這些軟件由于網(wǎng)絡(luò)帶寬和速度的限制,在實(shí)時(shí)性、交互性、結(jié)果的正確性等方面較大的受到網(wǎng)絡(luò)條件的影響。
發(fā)明內(nèi)容本發(fā)明針對(duì)上述協(xié)同設(shè)計(jì)中出現(xiàn)的問(wèn)題,提出一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,將模板和協(xié)同設(shè)計(jì)相結(jié)合起來(lái),形成協(xié)同模板,其是具有語(yǔ)義功能的可以描述幾何及屬性信息的抽象的通用的數(shù)據(jù)表示,其不僅包含幾何屬性、工程屬性,更有網(wǎng)絡(luò)屬性、任務(wù)屬性等支持協(xié)同機(jī)制的特殊屬性信息,支持協(xié)同工程設(shè)計(jì)的全過(guò)程。協(xié)同模板采用分解、復(fù)合、替換、繼承等多種方式提高了網(wǎng)絡(luò)中設(shè)計(jì)模型的可擴(kuò)充性與多樣性。本發(fā)明的目的本發(fā)明的目的是在協(xié)同設(shè)計(jì)和模板技術(shù)的研究基礎(chǔ)上,結(jié)合工程設(shè)計(jì)的實(shí)際問(wèn)題,探索具有協(xié)同機(jī)制和模板相結(jié)合的協(xié)同模板的設(shè)計(jì)環(huán)境和流程框架,研究網(wǎng)絡(luò)協(xié)同環(huán)境下設(shè)計(jì)任務(wù)的分解、發(fā)布和控制以及模板的定義和表示、模板的復(fù)合、參數(shù)與結(jié)構(gòu)分離等方法,為新的網(wǎng)絡(luò)化產(chǎn)品設(shè)計(jì)提供原型框架和基礎(chǔ)。本發(fā)明的技術(shù)方案一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于先在計(jì)算機(jī)內(nèi)搜索模板庫(kù)的模板和相應(yīng)的任務(wù)匹配情況,有模板存在,在計(jì)算機(jī)內(nèi)進(jìn)行模板協(xié)同編輯工作,沒(méi)有模板存在,根據(jù)設(shè)計(jì)任務(wù)的外部約束、整體約束規(guī)則、部件位置關(guān)系、操作連接信息,在計(jì)算機(jī)內(nèi)創(chuàng)建相應(yīng)的任務(wù)數(shù)據(jù)庫(kù)并通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口;在計(jì)算機(jī)內(nèi)總設(shè)計(jì)端將設(shè)計(jì)任務(wù)劃分為一系列由一個(gè)或若干個(gè)相關(guān)部件組成,并且有相應(yīng)的子模板對(duì)應(yīng)子設(shè)計(jì)任務(wù),根據(jù)任務(wù)數(shù)據(jù)庫(kù)的約束信息,產(chǎn)生反映任務(wù)的串并行關(guān)系并控制子任務(wù)進(jìn)行的任務(wù)前趨圖,在計(jì)算機(jī)內(nèi)發(fā)布任務(wù)到可以顯示任務(wù)發(fā)布信息和前趨圖信息,并進(jìn)行子任務(wù)的申請(qǐng)和競(jìng)爭(zhēng)的子設(shè)計(jì)端;計(jì)算機(jī)根據(jù)子任務(wù)申請(qǐng)狀態(tài)來(lái)進(jìn)行任務(wù)的分配或者強(qiáng)行進(jìn)行子任務(wù)的分配;計(jì)算機(jī)任務(wù)分配后,子設(shè)計(jì)端接到分配的子任務(wù)和子任務(wù)設(shè)計(jì)要求文件,該子任務(wù)沒(méi)有前趨任務(wù)或者其前趨任務(wù)都已完成,則子設(shè)計(jì)者可以進(jìn)行子任務(wù)的設(shè)計(jì),否則子設(shè)計(jì)者在其子任務(wù)的所有前趨任務(wù)都完成了后進(jìn)行子任務(wù)的設(shè)計(jì);子設(shè)計(jì)者依據(jù)子模板結(jié)構(gòu)文件和子任務(wù)設(shè)計(jì)要求文件進(jìn)行子任務(wù)的設(shè)計(jì),得到并向總設(shè)計(jì)端提交子模板參數(shù)文件;總設(shè)計(jì)端進(jìn)行模板復(fù)合,實(shí)時(shí)解釋設(shè)計(jì)結(jié)果,檢測(cè)提交子任務(wù)的正確性,無(wú)錯(cuò)則確認(rèn)子任務(wù)結(jié)果,子任務(wù)由提交狀態(tài)變?yōu)橥瓿蔂顟B(tài),子任務(wù)確認(rèn)后,激活該任務(wù)的后繼子任務(wù)并且將相關(guān)信息傳遞給受之約束的其他子任務(wù),其他子任務(wù)接到激活信息后,判斷其前趨任務(wù)是否都已經(jīng)完成,沒(méi)有則繼續(xù)等待,否則該子任務(wù)開始進(jìn)行設(shè)計(jì);在設(shè)計(jì)過(guò)程中,并行任務(wù)之間、存在環(huán)約束的子任務(wù)之間通過(guò)文本通信、語(yǔ)音通信、白板系統(tǒng)等協(xié)同交流手段供設(shè)計(jì)者之間進(jìn)行信息交流;所有子任務(wù)完成之后,計(jì)算機(jī)內(nèi)總設(shè)計(jì)端進(jìn)行檢查、驗(yàn)證看結(jié)果是否符合設(shè)計(jì)要求,滿足則任務(wù)完成保存設(shè)計(jì)結(jié)果的模板,否則,計(jì)算機(jī)將那些不符合設(shè)計(jì)要求的子任務(wù)退回重新進(jìn)行設(shè)計(jì),重復(fù)進(jìn)行前面的過(guò)程,直到設(shè)計(jì)結(jié)果符合要求為止。所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的協(xié)同模板的結(jié)構(gòu)與參數(shù)分離,在計(jì)算機(jī)內(nèi)將模板的結(jié)構(gòu)和參數(shù)分離開來(lái),用模板參數(shù)文件表示設(shè)計(jì)對(duì)象的數(shù)據(jù),用模板結(jié)構(gòu)文件來(lái)表示設(shè)計(jì)對(duì)象的框架結(jié)構(gòu),用一個(gè)模板結(jié)構(gòu)來(lái)表示一類設(shè)計(jì)對(duì)象,而用不同的參數(shù)文件來(lái)表示該設(shè)計(jì)對(duì)象的不同實(shí)例,子設(shè)計(jì)端將表示設(shè)計(jì)結(jié)果的模板參數(shù)文件傳遞給總設(shè)計(jì)端,總設(shè)計(jì)端根據(jù)模板參數(shù)文件得到與模板參數(shù)文件一一對(duì)應(yīng)的模板結(jié)構(gòu)文件,根據(jù)模板結(jié)構(gòu)通過(guò)模板解釋器去解析模板參數(shù)文件,得出設(shè)計(jì)結(jié)果的完整信息,并通過(guò)造型解釋模塊將造型結(jié)果顯示出來(lái)。所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的協(xié)同模板的復(fù)合與裝配,包括總設(shè)計(jì)端發(fā)起任務(wù)時(shí)通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口產(chǎn)生的子模板參數(shù)文件和結(jié)構(gòu)文件、設(shè)計(jì)約束文件、位置關(guān)系文件、操作和連接文件,計(jì)算機(jī)首先判斷模板文件存在情況,模板文件不存在,計(jì)算機(jī)產(chǎn)生模板文件及基本模板元素框架,根據(jù)任務(wù)數(shù)據(jù)庫(kù)到XML的轉(zhuǎn)換接口產(chǎn)生總?cè)蝿?wù)的設(shè)計(jì)約束文件、位置關(guān)系文件、操作連接文件,并復(fù)合到總模板中,子模板文件是參數(shù)文件時(shí),將子模板參數(shù)文件和結(jié)構(gòu)文件相結(jié)合產(chǎn)生可以復(fù)合的子模板文件,預(yù)處理子模板文件,處理子模板多次復(fù)合問(wèn)題以及模板中部件名稱沖突問(wèn)題復(fù)合子模板文件,復(fù)合時(shí)根據(jù)子模板是否已經(jīng)復(fù)合來(lái)做相應(yīng)的動(dòng)作,子模板復(fù)合后更改任務(wù)數(shù)據(jù)庫(kù)中的任務(wù)復(fù)合標(biāo)志,保存模板,結(jié)束一次子模板復(fù)合。所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的基于協(xié)同模板的協(xié)同設(shè)計(jì)方法采用模板設(shè)計(jì)標(biāo)記語(yǔ)言。本發(fā)明的原理協(xié)同模板概念正是在協(xié)同設(shè)計(jì)技術(shù)近些年來(lái)迅速發(fā)展的前提下,結(jié)合模板在工程設(shè)計(jì)領(lǐng)域內(nèi)的應(yīng)用基礎(chǔ)應(yīng)運(yùn)而生的。它在模板的基礎(chǔ)上被賦予了新的網(wǎng)絡(luò)特性。協(xié)同模板同樣是具有語(yǔ)義功能的可以描述幾何及屬性信息的抽象的通用的數(shù)據(jù)表示,符合工程設(shè)計(jì)標(biāo)準(zhǔn)和規(guī)范,其不僅包含幾何屬性、工程屬性,更有網(wǎng)絡(luò)屬性、任務(wù)屬性等支持協(xié)同機(jī)制的特殊屬性信息,支持協(xié)同工程設(shè)計(jì)的全過(guò)程。CoT是協(xié)同模板的簡(jiǎn)稱,其形式化描述可以表示為CoT=<M-ID,T-ID,C,E,T,RU,RE,OP>,其中M-ID表示獨(dú)立的協(xié)同任務(wù)ID號(hào);T-ID代表唯一的協(xié)同模板ID號(hào);C指協(xié)同模板中的部件集;E則是一系列的表達(dá)式;T記錄了網(wǎng)絡(luò)協(xié)同和工作流程進(jìn)行所需的任務(wù)信息;RU指部件和任務(wù)的約束規(guī)則庫(kù);RE描述了位置關(guān)系;OP則是存儲(chǔ)模板操作的集。模板設(shè)計(jì)標(biāo)記語(yǔ)言形式上以XML(TheeXtensibleMarkupLanguage)作為表達(dá)的基礎(chǔ),不僅符合XML的語(yǔ)法規(guī)范,同時(shí)為了適應(yīng)描述設(shè)計(jì)對(duì)象,描述模板結(jié)構(gòu)及協(xié)同模板操作的特殊需要,TDML也具有自身的一套語(yǔ)法和語(yǔ)義規(guī)則。TDML作為協(xié)同模板及其操作的描述語(yǔ)言,主要具有以下幾個(gè)優(yōu)點(diǎn)可讀性好TDML的字段都是由文本和標(biāo)簽組成,通過(guò)匹配相應(yīng)的標(biāo)簽和文本,非常易于理解和解釋。嚴(yán)格的語(yǔ)法規(guī)范TDML具有極強(qiáng)的語(yǔ)法定義,十分適合用于描述富含標(biāo)準(zhǔn)和規(guī)則的協(xié)同模板??蓴U(kuò)展性基于XML定義的TDML具有充分的靈活性,可以為模板擴(kuò)充新的字段及規(guī)則創(chuàng)造條件。獨(dú)立的內(nèi)容和結(jié)構(gòu)TDML同樣被定義為一種語(yǔ)義—結(jié)構(gòu)語(yǔ)言,其內(nèi)容和標(biāo)簽可以很輕易的被剝離開來(lái),滿足了協(xié)同模板結(jié)構(gòu)與參數(shù)分離的特殊需要。通用的標(biāo)準(zhǔn)在XML的支持下,TDML能夠跨學(xué)科跨領(lǐng)域的描述多種信息。協(xié)同模板的表示方式與結(jié)構(gòu)模板設(shè)計(jì)標(biāo)記語(yǔ)言(TDML)是用于協(xié)同交流、命令控制及協(xié)同模板結(jié)構(gòu)、設(shè)計(jì)參數(shù)的描述語(yǔ)言,符合XML的語(yǔ)法規(guī)范,是協(xié)同模板的組織與表達(dá)方式。根據(jù)描述設(shè)計(jì)對(duì)象信息的需要,在模板設(shè)計(jì)標(biāo)記語(yǔ)言中定義了七大基本字段(七個(gè)模板基本元素)InputPara、Components、Expressions、Rules、Relations、Operations和Links,分別對(duì)應(yīng)七種設(shè)計(jì)信息。各個(gè)字段有各自相應(yīng)的詞匯和語(yǔ)法語(yǔ)義,每個(gè)詞匯表示一定的語(yǔ)法構(gòu)成和語(yǔ)義;并且每個(gè)字段由具有特定語(yǔ)義的子字段詞匯構(gòu)成。一個(gè)用于描述設(shè)計(jì)對(duì)象信息的TML文件(也叫模板文件)有一個(gè)模板根元素Template,它有TID、name等屬性,并由上述七個(gè)基本子元素組成。TDML的語(yǔ)法[1]TMLDocument∷=XMLDeclComment*TemplateComment*[2]Template∷=‘<Template>’InputPara?ComponentsExpressionsRules?Relations?Operations?Links?…‘</Template>’[3]InputPara∷=‘<InputPara>’(table|if|default|express|string|graph…)+‘</InputPara>’[4]Components∷=‘<Components>’ComponentInfo+‘</Components>’[5]Exressions∷=‘<Expressions>’(table|if|default|express|string|graph|…)+‘</Expressions>’[6]Rules∷=‘<Rules>’(table|if|default|express|string|graph|…)+‘</Rules>’[7]Relations∷=‘<Relations>’(UpComponent|LeftComponent|Parallel|Tangency|…)+‘</Relations>’[8]Operations∷=‘<Operations>’(Embedding|Luoliaokong|…)+‘</Operations>’[9]Links∷=‘<Links>’(luoding|xiaoding|daohuald|dagan|…)+‘</Links>’[10]UpComponent∷=‘<UpComponent>’Component1Component2xDistanceyDistancezDistance‘</UpComponent>’[11]Embedding∷=‘<Embedding>’Component1Component2Distance‘</Embedding>’[12]Table∷=‘<table>’VarnameTableNameDatabaseNameQueryItemCondition</table>’[13]if∷=‘<if>’VarnameConditionifValueElseValue‘</if>’[14]default|express|string|graph∷=‘<’(‘default’|‘express’|‘string’|‘graph’)‘>’VarnameValue‘</’(‘default’|‘express’|‘string’|‘graph’)‘>’[15]luoding/xiaoding/daohuald/dagan∷=‘<’(‘luoding’|‘Xiaoding’‘daohuald’|‘dagan’)‘>’LinknameComponent+‘</’(‘luoding’‘xiaoding’|‘daohuald’|‘dagan’)‘>’[16]ComponentInfo∷=‘<’ComponentType‘>’parentname‘</’ComponentType‘>’[17]Component∷=‘<Component>’ComponentName‘</Component>’[18]Varname∷=‘<Varname>’ComponentName“.”Name</Varname>’[19]Linkname∷=‘<Linkname>’LinkObjName‘</Linkname>’[20]parent∷=‘<parent>’ComponentType‘</parent>’[21]name∷=‘<name>’ComponentName‘</name>’[22]LinkObjName|ComponentName|ComponentType∷=Name[23]Value∷=‘<Value>’numberValue|expressValue|stringValue‘</Value>’[24]numberValue∷=(‘+’|‘-’)?()+(‘.’+)?[25]expressValue∷=expressValue(‘+’|‘-’|‘*’|‘/’)expressValue|‘(‘expressValue‘)’|numberValue|Varname[26]stringValue∷=Char*[27]Char∷=[#x1-#xD7FF]|[#xE000-#xFFFD]|[#x10000-#x10FFFF]/*anyUnicodecharacter,excludingthesurrogateblocks,F(xiàn)FFE,andFFFF.*/[28]NameStartChar∷=″:″|[A-Z]|″_″|[a-z]|[#xC0-#xD6]|[#xD8-#xF6]|[#xF8-#x2FF]|[#x370-#x37D]|[#x37F-#x1FFF]|[#x200C-#x200D]|[#x2070-#x218F]|[#x2C00-#x2FEF]|[#x3001-#xD7FF]|[#xF900-#xFDCF]|[#xFDFO#xFFFD][#x10000-#xEFFFF][29]NameChar∷=NameStartChar|″-″|#xB7|[#x0300-#x036F]|[#x203F-#x2040][30]Name∷=NameStartChar(NameChar)*句[1]說(shuō)明一個(gè)TML文件由XML申明、注釋及一個(gè)Template根元素組成。XMLDecl和Comment的EBNF表示與參考文獻(xiàn)[2]中XML語(yǔ)法表示是一樣的,這里沒(méi)有寫出。句[2]說(shuō)明一個(gè)Template模板根元素的構(gòu)成七大基本元素。在這里我們用“…”表示Template根元素可以擴(kuò)展新的基本元素字段。其他出現(xiàn)“…”的地方亦表示可擴(kuò)充性。[3]、[5]、[6]是InputPara、Expressions和Rules的語(yǔ)法構(gòu)成,它們有相似的子元素組成,只是所表示的設(shè)計(jì)信息含義不同。[12]、[13]、[14]是說(shuō)明其六個(gè)子元素語(yǔ)法構(gòu)成的。[4]所描述的是Components部件整體信息內(nèi)容。[7]、[8]、[9]分別表示Relations裝配關(guān)系、Operations操作及Links連接信息的表示。其他表示的分別是其子元素及子子元素的語(yǔ)法構(gòu)成。在[14]、[15]、[22]中“∷=”左邊出現(xiàn)了“|”符合表示或的關(guān)系,在EBNF中“|”只出現(xiàn)在右邊,我們?cè)谶@里表示的含義是由“|”連接的并列成分有相同的語(yǔ)法構(gòu)成,只是他們的名稱不同,他們名稱和右邊出現(xiàn)“|”的地方是一一對(duì)應(yīng)的。這里對(duì)TML的語(yǔ)法表示我們并沒(méi)有完整的都列出來(lái),主要由于篇幅的考慮,我們列出了最主要的語(yǔ)法表示部分。TDML的語(yǔ)義InputPara輸入?yún)?shù)段在我們對(duì)設(shè)計(jì)對(duì)象進(jìn)行研究時(shí),發(fā)現(xiàn)某些設(shè)計(jì)對(duì)象如冷沖模系統(tǒng)中需要一些外部輸入?yún)?shù)信息,這些信息對(duì)該設(shè)計(jì)對(duì)象起外部約束作用。如冷沖模中首先需要根據(jù)輸入制件等的信息得到輸入處理的參數(shù),我們把輸入處理的結(jié)果作為模板文件輸入?yún)?shù)信息。還有就是冷沖模中還要用到一些全局參數(shù)信息,如模柄嵌入距離、offset、global.lx_bian等,對(duì)這些信息,我們也作為輸入?yún)?shù)信息提供給模板,定義了InputPara元素來(lái)描述該類信息。這些外部輸入?yún)?shù)值的表示方法和Expressions中表示部件屬性值的表示方法是一樣的,我們將在介紹Expressions字段時(shí)介紹如何表示參數(shù)值的信息。Components部件信息段設(shè)計(jì)對(duì)象是由一系列基本部件按一定關(guān)系形成的,部件有零部件和連接件之分。為了描述設(shè)計(jì)對(duì)象的部件構(gòu)成信息,及每個(gè)部件的類型、名稱及父類等信息,模板標(biāo)記語(yǔ)言提供了Components字段來(lái)描述部件的信息。Components的各個(gè)子元素表示的是各種類型的部件信息,我們以部件類型的名稱作為部件元素的名稱。Expresssions屬性表達(dá)式段對(duì)于詳細(xì)設(shè)計(jì)來(lái)說(shuō),最主要的設(shè)計(jì)信息是設(shè)計(jì)對(duì)象各個(gè)部件的屬性信息。部件的屬性是指在描述一個(gè)部件時(shí)所需要的材料、顏色及幾何尺寸和形狀方面的信息。長(zhǎng)、寬、高就是長(zhǎng)方形類型部件的三個(gè)必要屬性,半徑就是一個(gè)球類型部件的屬性。Exprssions元素就是用來(lái)表示這些屬性及其屬性的值信息。Expressions的屬性信息是設(shè)計(jì)者可以進(jìn)行相應(yīng)的修改設(shè)計(jì)的部件屬性信息。我們把屬性值的類型分為default、express、if、table、string、graph六種類型,每個(gè)屬性的描述就用一個(gè)元素名為某個(gè)屬性值類型的元素來(lái)表示。每個(gè)屬性元素的構(gòu)成又有所不同,但它們都有一個(gè)表示屬性名稱的子元素Varname,以“部件名.部件屬性名”表示。下段是Expressions元素及其三種類型屬性元素的描述方式(default、string和graph的描述方式和express一樣)。<Expressions><express><Varname>xieliaoban.holeheight</Varname><Value>3*global.thickness</Value></express><table><Varname>aomo.box_height</Varname><DatabaseName>moju</DatabaseName><TableName>btch</TableName><QueryItem>h</QueryItem><Condition>b=global.length,t=global.thickness</Condition></table><if><Varname>aomo.box_height</Varname><Condition>aomo.box_height&lt;global.height</Condition><ifValue>global.height+10</ifValue><ElseValue>aomo.box_height</ElseValue></if></Expressions>屬性元素default、express、string、graph由Varname和Value組成。Value表示一個(gè)數(shù)值(default元素),或者是由數(shù)字、部件屬性名稱Varname通過(guò)四則運(yùn)算組合起來(lái)的表達(dá)式字符串(express元素),或者是表示材料顏色信息的字符串(string元素),或者是表示圖形文件的位置(graph元素)。屬性元素if則由Varname、Condition、ifValue和elseValue組成,分別表示部件屬性名、if條件表達(dá)式、條件表達(dá)式為true的屬性值和條件表達(dá)式為false的屬性值。屬性table由Varname、Databasename、Tablename、QueryItem和Condition,分別表示部件屬性名、數(shù)據(jù)庫(kù)名稱、表名稱、查詢項(xiàng)及查詢條件,屬性值就是查詢數(shù)據(jù)庫(kù)所得的值。Rules規(guī)則段它的元素組成和語(yǔ)法與Expressjons元素相同,只是規(guī)則段表示的是模板中部件的屬性設(shè)計(jì)信息中不可改變的部分,它主要表示的是不同部件的屬性之間的約束關(guān)系,如幾何尺寸的約束關(guān)系等,所以Rules段中主要是express屬性元素,表示一個(gè)屬性與其它屬性之間的關(guān)系。Expressions和Rules中的屬性信息加在一起就表示所有的部件的屬性信息,部件對(duì)象的每個(gè)屬性信息都在Expressions或者Rules可以找到唯一一個(gè)對(duì)應(yīng)的屬性值信息。Relations部件位置裝配關(guān)系段表示設(shè)計(jì)對(duì)象各個(gè)部件的裝配位置關(guān)系。設(shè)計(jì)對(duì)象是由一系列部件按照一定的裝配關(guān)系組裝而成的,裝配信息是設(shè)計(jì)對(duì)象重要的結(jié)構(gòu)信息。Relations元素就是表示設(shè)計(jì)對(duì)象各個(gè)部件之間的裝配位置關(guān)系信息的。部件之間常用的位置關(guān)系是上下位置關(guān)系,以及左右位置關(guān)系;還有平行、垂直、相切也屬于部件的位置關(guān)系。我們用UpComponent表示部件在Z方向(上下方向)的位置關(guān)系,它的語(yǔ)法構(gòu)成由Component1、Component2、zDistance、yDistance和xDistance五個(gè)子元素組成。Component1和Component2分別表示存在位置關(guān)系的兩個(gè)部件(用部件名表示)。zDistance表示部件1和部件2(參考部件)之間的Z方向間距。yDistance和xDistance表示Y方向(前后)和X方向(左右)的偏移距離。這主要是為了避免用多條不同位置關(guān)系語(yǔ)句來(lái)描述兩個(gè)部件之間的關(guān)系,而且也為了減少模板位置關(guān)系詞匯量,我們不必定義形如UpLeftComponent的元素來(lái)表示部件的位置關(guān)系。下段是一個(gè)表示Relations中的UpComponent位置關(guān)系的例子。<Relations><UpComponent><Component1>aomo</Component1><Component2>chongtou</Component2><zDistance>-global.thickness</zDistance><yDistance/><xDistance/></UpComponent></Relations>LeftComponent元素的語(yǔ)法構(gòu)成和UpComponent一樣,只不過(guò)表示的語(yǔ)義是兩部件的左右位置關(guān)系。對(duì)于平行、垂直和相切等位置關(guān)系,我們暫時(shí)還沒(méi)有定義詳細(xì)的詞匯和語(yǔ)法語(yǔ)義,我們會(huì)在后面的工作中擴(kuò)展這方面的工作,總結(jié)出一套可以描述部件之間各種位置關(guān)系的位置關(guān)系詞匯元素并對(duì)其的語(yǔ)義進(jìn)行描述。Operations操作關(guān)系字段在描述設(shè)計(jì)對(duì)象的信息時(shí),我們發(fā)現(xiàn)有些對(duì)象中有些特殊的設(shè)計(jì)信息,無(wú)法用裝配等方式來(lái)描述,我們擴(kuò)展增加了操作字段來(lái)描述這類信息。比如在冷沖模領(lǐng)域中經(jīng)常遇到嵌入和打落料孔兩種操作,這種操作僅用位置關(guān)系是無(wú)法完整描述的,它一方面表示了部件之間的某種位置關(guān)系,而且還表示一定的操作語(yǔ)義,我們解釋時(shí)要對(duì)其造型做一定的處理操作。我們用Operaitons元素來(lái)表示設(shè)計(jì)對(duì)象中的這類信息。比如我們用embedding和luoliaokong兩種操作元素分別描述冷沖模中常用的嵌入和打落料孔兩種操作。下段是冷沖模落料模板中的操作字段的luoliaokong信息的表示。<Operations><luoliaokong><PlineGraph>pline_luoliao.sat</PlineGraph><Component>xiadianban</Component><Component>xiamojia</Component><Distance>offdist</Distance></luoliaokong></Operations>Links連接關(guān)系段連接件是機(jī)械裝配中常用的用于連接和固定零部件的,對(duì)于連接件我們不僅要給出它的屬性信息,更重要的是它描述的是一組連接件穿過(guò)零件的信息,對(duì)于連接件穿過(guò)的部件我們還要做相應(yīng)的造型處理,這不是簡(jiǎn)單的確定位置關(guān)系。我們定義了Links元素來(lái)專門描述連接信息。Links的子元素是以連接件的類型來(lái)表示,不同的連接件就對(duì)應(yīng)特定的連接語(yǔ)義,在模板標(biāo)記語(yǔ)言中定義了四種連接子元素表示luoding(螺釘)、xiaoding(銷釘)、daohuald(導(dǎo)滑螺釘)、dagan(打桿)等四種類型的連接件的連接信息。下段是luoding連接信息,連接信息元素的名稱luoding表示連接件的類型是螺釘,它有一個(gè)Linkname子元素和若干Component元素組成。Linkname表示螺釘?shù)拿Q,(omponent表示螺釘穿過(guò)的部件的名稱,各個(gè)Component元素是按sequence順序表示螺釘依次穿過(guò)的各個(gè)零部件的名稱。連接件的屬性信息,如螺釘半徑、螺釘數(shù)目、螺釘分布方式等都是在Expressions和Rules元素中可以找到。<Links><luoding><Linkname>luoding1</Linkname><Component>shangmojia</Component><Component>shangdianban</Component><Component>gudingban</Component></luoding></Links>連接元素xiaoding、daohuald與luoding語(yǔ)法構(gòu)成和含義一樣。模板復(fù)合與裝配在協(xié)同模板運(yùn)行過(guò)程中,一個(gè)設(shè)計(jì)任務(wù)被分成若干子任務(wù),每個(gè)子任務(wù)由一個(gè)或若干部件組成。每個(gè)子任務(wù)可以根據(jù)相應(yīng)的子模板進(jìn)行設(shè)計(jì),設(shè)計(jì)結(jié)果以子模板參數(shù)文件的形式保存起來(lái)并傳遞給總設(shè)計(jì)端,而總設(shè)計(jì)端則利用模板復(fù)合操作將子任務(wù)設(shè)計(jì)結(jié)果復(fù)合起來(lái),最后形成完整的設(shè)計(jì)對(duì)象的模板信息。模板裝配就是將子模板按照分配的設(shè)計(jì)、裝配順序,仿照部件的裝配,累加合并成完整的設(shè)計(jì)結(jié)果。在實(shí)際的操作過(guò)程中,結(jié)構(gòu)與參數(shù)分離就是將文件中用于描述結(jié)構(gòu)的相對(duì)固定的信息與設(shè)計(jì)者設(shè)計(jì)的可修改的相對(duì)靈活的信息分離成兩個(gè)文件部分。完整的模板描述邏輯上具有結(jié)構(gòu)和設(shè)計(jì)參數(shù)兩大部分的信息,為了體現(xiàn)協(xié)同模板在網(wǎng)絡(luò)中應(yīng)用的優(yōu)勢(shì),減少網(wǎng)絡(luò)上的信息傳輸量,將協(xié)同模板的結(jié)構(gòu)與參數(shù)分離,在傳輸?shù)倪^(guò)程中在已經(jīng)擁有模板結(jié)構(gòu)的前提下,只傳輸設(shè)計(jì)的內(nèi)容,可以大大減少傳輸負(fù)擔(dān),提高效率。任務(wù)前趨圖,顧名思義,是一種反映了先后執(zhí)行關(guān)系的抽象的圖結(jié)構(gòu),存儲(chǔ)了任務(wù)節(jié)點(diǎn)以及它們之間的前趨后繼關(guān)系。在協(xié)同模板的設(shè)計(jì)環(huán)境中,任務(wù)控制及設(shè)計(jì)進(jìn)程皆以任務(wù)前趨圖為基礎(chǔ),其作用是不容忽視的。任務(wù)的發(fā)布與分配,設(shè)計(jì)任務(wù)的相互制約,串并行設(shè)計(jì)流程的控制,乃至模板最終的復(fù)合與檢測(cè)都依托于任務(wù)前趨圖的定義。任務(wù)前趨圖TPG=(PV,PE)PV集的每一個(gè)任務(wù)節(jié)點(diǎn)vi表示設(shè)計(jì)子任務(wù),PE集中的每一條有向邊則表示任務(wù)之間的直接驅(qū)動(dòng)關(guān)系,是一種前趨與后繼關(guān)系,具有傳遞性。在協(xié)同模板運(yùn)行過(guò)程中,一個(gè)設(shè)計(jì)任務(wù)被分成若干子任務(wù),每個(gè)子任務(wù)由一個(gè)或若干部件組成。每個(gè)子任務(wù)可以根據(jù)相應(yīng)的子模板進(jìn)行設(shè)計(jì),設(shè)計(jì)結(jié)果以子模板參數(shù)文件的形式保存起來(lái)并傳遞給總設(shè)計(jì)端,而總設(shè)計(jì)端則利用模板復(fù)合操作將子任務(wù)設(shè)計(jì)結(jié)果復(fù)合起來(lái),最后形成完整的設(shè)計(jì)對(duì)象的模板信息。模板的復(fù)合需要的信息包括子模板參數(shù)文件(設(shè)計(jì)結(jié)果)和結(jié)構(gòu)文件、設(shè)計(jì)約束文件、位置關(guān)系文件、操作和連接文件。其中子模板參數(shù)文件是子任務(wù)的設(shè)計(jì)結(jié)果。而設(shè)計(jì)約束、位置關(guān)系、操作連接文件則是總設(shè)計(jì)端發(fā)起總?cè)蝿?wù)時(shí)的任務(wù)總體約束信息、各個(gè)子任務(wù)間的任務(wù)關(guān)系信息。這些信息是總設(shè)計(jì)端發(fā)起任務(wù)時(shí)通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口產(chǎn)生的,我們?cè)谀0鍙?fù)合時(shí)要根據(jù)任務(wù)數(shù)據(jù)庫(kù)中的總體約束信息,轉(zhuǎn)換為模板中描述約束、位置關(guān)系和操作連接的XML文件信息,并復(fù)合到總模板中去。模板復(fù)合就是把子模板參數(shù)文件信息和結(jié)構(gòu)文件相組合,得到復(fù)合所需的子模板信息,再加上設(shè)計(jì)約束信息、位置關(guān)系信息、操作連接信息,就得到整個(gè)模板所需的完整內(nèi)容。CXMLTemplateReadAndWrite類的CompositeSubTemplate()接口是用于實(shí)現(xiàn)模板復(fù)合的函數(shù),參數(shù)為模板文件名,子模板文件名和參數(shù)文件標(biāo)志。在模板復(fù)合的過(guò)程中,總模板原先是不存在的。經(jīng)過(guò)第一次子模板復(fù)合后總模板創(chuàng)建并產(chǎn)生相應(yīng)的約束、裝配、操作連接等總體信息。其主要復(fù)合過(guò)程為1)判斷模板文件是否存在。如不存在說(shuō)明是第一次進(jìn)行復(fù)合,產(chǎn)生模板文件Document及一些基本模板元素框架。如果已經(jīng)存在則跳到第三步。2)如果是第一次復(fù)合則根據(jù)任務(wù)數(shù)據(jù)庫(kù)到XML的轉(zhuǎn)換接口產(chǎn)生總?cè)蝿?wù)的設(shè)計(jì)約束文件、位置關(guān)系文件、操作連接文件等,并復(fù)合到總模板中。3)判斷子模板義件是否為參數(shù)文件,如是參數(shù)文件則將子模板參數(shù)文件和結(jié)構(gòu)文件相結(jié)合產(chǎn)生可以復(fù)合的子模板文件。4)預(yù)處理子模板文件,主要是處理子模板多次復(fù)合問(wèn)題以及模板中部件名稱沖突問(wèn)題。因?yàn)槲覀兊哪0逯斜仨毐WC部件名稱的唯一性。5)復(fù)合子模板文件。復(fù)合時(shí)要根據(jù)子模板是否已經(jīng)復(fù)合來(lái)做相應(yīng)的動(dòng)作。子模板復(fù)合后更改任務(wù)數(shù)據(jù)庫(kù)中的任務(wù)復(fù)合標(biāo)志。6)保存模板Document,一次子模板復(fù)合結(jié)束。協(xié)同模板的結(jié)構(gòu)與參數(shù)分離協(xié)同模板概念的提出,其中一個(gè)主要原因是為了解決網(wǎng)絡(luò)上圖形文件的傳輸問(wèn)題。采用模板對(duì)設(shè)計(jì)對(duì)象進(jìn)行描述可以大大降低設(shè)計(jì)對(duì)象文件的大小。模板之所以可以大大降低設(shè)計(jì)結(jié)果的大小,主要是因?yàn)槲覀儗⒃O(shè)計(jì)結(jié)果的再現(xiàn)留給模板解釋器和底層的造型解釋模塊。離開模板解釋器,模板文件也就沒(méi)有任何意義。但是模板解釋器解釋的內(nèi)容必須是有數(shù)據(jù)和結(jié)構(gòu)語(yǔ)義的模板文件。仔細(xì)研究我們模板的構(gòu)成,可以發(fā)現(xiàn)模板實(shí)際上是由表示模板結(jié)構(gòu)的部分和表示數(shù)據(jù)的部分構(gòu)成的。如Components段、屬性名稱、裝配段、操作段表示的就是設(shè)計(jì)對(duì)象的結(jié)構(gòu)信息,而設(shè)計(jì)對(duì)象的數(shù)據(jù)信息則對(duì)應(yīng)于屬性表達(dá)式段的屬性值。如果我們可以將模板的結(jié)構(gòu)和參數(shù)分離開來(lái),用模板參數(shù)文件表示設(shè)計(jì)對(duì)象的數(shù)據(jù),用模板結(jié)構(gòu)文件來(lái)表示設(shè)計(jì)對(duì)象的框架結(jié)構(gòu),則可以進(jìn)一步降低設(shè)計(jì)結(jié)果的大小。我們目前實(shí)現(xiàn)了子模板的參數(shù)和結(jié)構(gòu)分離,因?yàn)樵趨f(xié)同模板中大量要傳輸、復(fù)合的設(shè)計(jì)結(jié)果都是跟子模板相關(guān)的。另一方面,對(duì)于某種設(shè)計(jì)對(duì)象類,其設(shè)計(jì)數(shù)據(jù)不同就代表有不同的實(shí)例。當(dāng)我們需要保存同一設(shè)計(jì)對(duì)象類的不同實(shí)例時(shí),他們的模板除了數(shù)據(jù)部分不同之外,模板的結(jié)構(gòu)框架是完全一樣的。如果將模板的結(jié)構(gòu)和參數(shù)分離開來(lái),則我們可以用一個(gè)模板結(jié)構(gòu)來(lái)表示一類設(shè)計(jì)對(duì)象,而用不同的參數(shù)文件來(lái)表示該設(shè)計(jì)對(duì)象的不同實(shí)例。這樣對(duì)于模板的管理,我們只需要管理模板的結(jié)構(gòu)就可以了。這樣也就將模板的功能及結(jié)構(gòu)框架和模板的參數(shù)數(shù)據(jù)分離開來(lái),不僅便于模板的管理,也進(jìn)一步大大降低了設(shè)計(jì)對(duì)象數(shù)據(jù)的大小。將模板結(jié)構(gòu)和參數(shù)分離之后,我們?cè)诰W(wǎng)絡(luò)上進(jìn)行設(shè)計(jì)時(shí),子設(shè)計(jì)端只需要將表示設(shè)計(jì)結(jié)果的模板參數(shù)文件傳遞給總設(shè)計(jì)者,模板參數(shù)文件中含有唯一標(biāo)志模板結(jié)構(gòu)文件的模板ID??傇O(shè)計(jì)端根據(jù)模板ID可以得到模板結(jié)構(gòu)文件(模板ID和模板結(jié)構(gòu)文件是一一對(duì)應(yīng)的關(guān)系),然后根據(jù)模板結(jié)構(gòu)去解析模板參數(shù)文件,最終得出設(shè)計(jì)結(jié)果的完整信息,并將造型結(jié)果顯示出來(lái)。這里有一個(gè)條件,就是相互傳遞模板參數(shù)文件的雙方必須都擁有相應(yīng)的模板結(jié)構(gòu)文件才能解釋模板參數(shù)文件。所以,將模板參數(shù)和結(jié)構(gòu)分離,不僅是合理的,而且很有必要。下一節(jié)我們將介紹如何將模板參數(shù)和結(jié)構(gòu)分離開來(lái)。要實(shí)現(xiàn)模板結(jié)構(gòu)和參數(shù)的分離,最關(guān)鍵的是如何界定模板的結(jié)構(gòu)和參數(shù),以及如何描述模板的結(jié)構(gòu),參數(shù)如何表示。當(dāng)然還要考慮分離了再如何組合起來(lái)。模板由輸入?yún)?shù)段、部件段、屬性表達(dá)式段、規(guī)則段、位置關(guān)系段、操作段及連接段。我們?cè)趨f(xié)同模板中主要涉及到的是子模板的參數(shù)和結(jié)構(gòu)分離、子模板的提交和復(fù)合等操作。所以我們主要實(shí)現(xiàn)的是子模板的參數(shù)和結(jié)構(gòu)分離。對(duì)于子模板來(lái)說(shuō),模板的某些字段大部分情況下內(nèi)容為空,如輸入?yún)?shù)段、操作段和連接段。而對(duì)于位置關(guān)系段來(lái)說(shuō),如果子模板描述的是單個(gè)部件則也為空,如果子模板表示的是若干相關(guān)部件組成,則可以有位置關(guān)系段、操作段和連接段。對(duì)于子模板的結(jié)構(gòu),部件段表示的是模板描述對(duì)象,屬于結(jié)構(gòu)內(nèi)容,由部件類型和名稱信息組成。然而對(duì)于部件的名稱信息,一個(gè)子模板結(jié)構(gòu)描述的是一種設(shè)計(jì)對(duì)象的結(jié)構(gòu)框架內(nèi)容,同一部件類型在不同設(shè)計(jì)領(lǐng)域或者不同的設(shè)計(jì)場(chǎng)合可能名稱并不一定都以結(jié)構(gòu)文件中的為準(zhǔn),或者一個(gè)子模板結(jié)構(gòu)在同一個(gè)設(shè)計(jì)任務(wù)中多次用到,這時(shí)部件名稱如果都以結(jié)構(gòu)文件的部件名稱為準(zhǔn),肯定會(huì)產(chǎn)生部件名稱沖突,不符合前面所說(shuō)的名稱唯一性規(guī)則。所以必須把部件名稱作為設(shè)計(jì)信息的一部分,提供給設(shè)計(jì)者修改部件名稱的權(quán)利。當(dāng)然,這只在必需的時(shí)候才這樣做,如果一個(gè)模板結(jié)構(gòu)在設(shè)計(jì)任務(wù)中只用了一次,不會(huì)產(chǎn)生名稱沖突,就沒(méi)有必要修改部件名稱。則段是模板中不可改變的部分,不屬于設(shè)計(jì)范疇,也屬于模板結(jié)構(gòu);對(duì)于位置關(guān)系,有兩種方式一種是位置關(guān)系不可改變,即模板描述對(duì)象的裝配位置不可改變,這說(shuō)明了模板描述的對(duì)象的結(jié)構(gòu)是不可改變的。另一種是設(shè)計(jì)對(duì)象各部件的位置關(guān)系可以進(jìn)行調(diào)整。相應(yīng)的如果位置關(guān)系不可調(diào)整,則位置關(guān)系段也作為模板結(jié)構(gòu)的一部分;如果位置關(guān)系可以調(diào)整的話,則位置關(guān)系內(nèi)容也是設(shè)計(jì)數(shù)據(jù)的一部分,應(yīng)該和結(jié)構(gòu)分離。在我們的協(xié)同模板中,各子任務(wù)部件的位置關(guān)系作為整體設(shè)計(jì)對(duì)象中由總設(shè)計(jì)者指定不可改變的部分,所以在我們的子模板中也體現(xiàn)了這種思路,即位置關(guān)系段內(nèi)容作為模板結(jié)構(gòu)的一部分,沒(méi)有進(jìn)行分離。對(duì)于操作段和連接段我們也是將之作為模板結(jié)構(gòu),并沒(méi)有分離其參數(shù)。模板的屬性段是設(shè)計(jì)對(duì)象各個(gè)部件的屬性內(nèi)容,這是設(shè)計(jì)的主要內(nèi)容,也是我們參數(shù)和結(jié)構(gòu)分離的所解決的主要問(wèn)題屬性的參數(shù)和結(jié)構(gòu)如何分離,在結(jié)構(gòu)文件和參數(shù)文件中如何表示相應(yīng)的屬性內(nèi)容。對(duì)于屬性段,每個(gè)屬性由屬性名稱和屬性值部分組成。屬性值由于類型不同,又分為default、express、table、if等六種。屬性值的類型不同,其值的表示方式也不相同。因而我們將屬性段分為兩部分屬性名稱和屬性值,屬性名稱是模板結(jié)構(gòu)部分,而屬性值部分(包括屬性值類型和值的表示方式)屬于模板的參數(shù)部分。模板的參數(shù)和結(jié)構(gòu)從模板中分離出來(lái),這樣模板的表示更加清晰,參數(shù)文件和結(jié)構(gòu)文件的內(nèi)容之和構(gòu)成模板文件的內(nèi)容。模板的結(jié)構(gòu)描述的是某類設(shè)計(jì)對(duì)象或部件,模板參數(shù)文件則表示該類設(shè)計(jì)對(duì)象的一個(gè)特定實(shí)例,也就是一個(gè)有具體屬性的對(duì)象。圖1本發(fā)明的流程示意圖。圖2本發(fā)明的協(xié)同過(guò)程中任務(wù)申請(qǐng)與分配流程圖。圖3本發(fā)明的協(xié)同串并行參數(shù)交流圖。圖4本發(fā)明的資源分布圖。具體實(shí)施例方式參見圖1-3??傇O(shè)計(jì)任務(wù)對(duì)于一個(gè)復(fù)雜的設(shè)計(jì)對(duì)象或者大型工程,可能涉及到不同領(lǐng)域的專業(yè)知識(shí),僅一個(gè)人完成所有設(shè)計(jì)幾乎是不可能的。必需將總?cè)蝿?wù)劃分成若干子任務(wù)由不同設(shè)計(jì)者完成。在我們的協(xié)同模板中,主要針對(duì)的是一個(gè)復(fù)雜設(shè)計(jì)對(duì)象的設(shè)計(jì)任務(wù)。復(fù)雜是相對(duì)的,我們的例子中的個(gè)人沙發(fā)、冷沖模、包層等就是作為總設(shè)計(jì)任務(wù)對(duì)象的。這些設(shè)計(jì)對(duì)象也許并不十分復(fù)雜,不過(guò)這并不影響我們研究利用協(xié)同模板來(lái)進(jìn)行復(fù)雜對(duì)象的設(shè)計(jì)過(guò)程。子任務(wù)相對(duì)簡(jiǎn)單的設(shè)計(jì)對(duì)象,一般是由一個(gè)或若干相關(guān)的部件組成。子任務(wù)主要是降低任務(wù)的復(fù)雜度。任務(wù)劃分、發(fā)布、分配、申請(qǐng)、復(fù)合等任務(wù)劃分是指總設(shè)計(jì)者將總設(shè)計(jì)任務(wù)分解為若干子任務(wù),一個(gè)子任務(wù)一般是一個(gè)或若干部件。任務(wù)發(fā)布指任務(wù)劃分之后,總設(shè)計(jì)者將各個(gè)子任務(wù)的信息,及子任務(wù)的約束關(guān)系(任務(wù)前趨圖)等傳給各個(gè)子設(shè)計(jì)端。任務(wù)分配是指總設(shè)計(jì)者將一個(gè)子任務(wù)分配給某個(gè)子設(shè)計(jì)者。任務(wù)申請(qǐng)指每個(gè)子設(shè)計(jì)者可以根據(jù)任務(wù)發(fā)布信息,去競(jìng)爭(zhēng)某個(gè)子任務(wù)。任務(wù)復(fù)合指各個(gè)子任務(wù)完成之后,總設(shè)計(jì)者將子任務(wù)的結(jié)果合成到一起,這主要是借助模板的復(fù)合來(lái)實(shí)現(xiàn)的。任務(wù)數(shù)據(jù)庫(kù)為了實(shí)現(xiàn)任務(wù)的分解、控制以及任務(wù)的復(fù)合,我們總結(jié)了在一個(gè)設(shè)計(jì)任務(wù)中需要的約束、關(guān)系信息,這些信息是任務(wù)分解的依據(jù)。主要有設(shè)計(jì)任務(wù)需要的外部信息、設(shè)計(jì)對(duì)象內(nèi)部的尺寸和位置約束、操作連接信息等。這些信息也是任務(wù)前趨圖產(chǎn)生的依據(jù),對(duì)任務(wù)的控制和復(fù)合都起重要作用。因?yàn)檫@些任務(wù)信息非常重要而且在任務(wù)的各個(gè)階段都需要,所以我們?cè)O(shè)計(jì)了任務(wù)數(shù)據(jù)庫(kù)來(lái)輸入和保存這些任務(wù)信息。任務(wù)約束一個(gè)總設(shè)計(jì)約束對(duì)象內(nèi)部存在各種約束關(guān)系,如尺寸、位置、拓?fù)潢P(guān)系、材料、力學(xué)等,將設(shè)計(jì)任務(wù)分解后,這些約束就反應(yīng)為各個(gè)子任務(wù)之間的約束。這種約束決定了任務(wù)的前趨后繼關(guān)系、串行并行關(guān)系。在我們的系統(tǒng)中通過(guò)任務(wù)前趨圖來(lái)反應(yīng)和控制任務(wù)之間的這種約束關(guān)系。任務(wù)前趨圖根據(jù)設(shè)計(jì)任務(wù)的約束信息,體現(xiàn)各個(gè)子任務(wù)的前趨后繼、并行串行關(guān)系的圖。類似于操作系統(tǒng)中的進(jìn)程前趨圖??傇O(shè)計(jì)者一次協(xié)同設(shè)計(jì)任務(wù)的發(fā)起者,其擁有對(duì)任務(wù)的總體控制、協(xié)調(diào)各子設(shè)計(jì)者的工作,對(duì)設(shè)計(jì)結(jié)果進(jìn)行復(fù)合、檢測(cè)和確認(rèn)??傇O(shè)計(jì)者對(duì)應(yīng)總設(shè)計(jì)任務(wù)。子設(shè)計(jì)者協(xié)同設(shè)計(jì)任務(wù)的參與者,總設(shè)計(jì)者將總設(shè)計(jì)任務(wù)分解成一個(gè)個(gè)子任務(wù),每個(gè)子任務(wù)分配給一個(gè)子設(shè)計(jì)者。子設(shè)計(jì)者對(duì)子任務(wù)進(jìn)行設(shè)計(jì),完成之后提交給總設(shè)計(jì)者。子設(shè)計(jì)者是和子任務(wù)相對(duì)應(yīng)的。服務(wù)器端、客戶端我們協(xié)同模板系統(tǒng)的結(jié)構(gòu)采用MCAM同構(gòu)協(xié)同設(shè)計(jì)平臺(tái)的結(jié)構(gòu)-基于C/S的同構(gòu)復(fù)制式結(jié)構(gòu)。事實(shí)上我們是基于MCAM同構(gòu)協(xié)同設(shè)計(jì)平臺(tái)基礎(chǔ)上進(jìn)行開發(fā)的。對(duì)于一次協(xié)同設(shè)計(jì)過(guò)程或者協(xié)同模板過(guò)程,總設(shè)計(jì)者發(fā)起一個(gè)任務(wù),打開協(xié)同服務(wù)器端;其他子設(shè)計(jì)者進(jìn)行參與,連接服務(wù)器端的機(jī)器,子設(shè)計(jì)端就對(duì)應(yīng)協(xié)同的客戶端。在我們的表達(dá)方式中,總設(shè)計(jì)端就指服務(wù)器端,子設(shè)計(jì)端指的是客戶端。元模板不可再分的模板,元模板描述的造型對(duì)象是基本的造型元素。比如說(shuō)點(diǎn)、線、圓、長(zhǎng)方體、圓柱等的模板就屬于元模板。這是跟模板描述的對(duì)象級(jí)別有關(guān),元模板可以對(duì)應(yīng)元部件的概念。元模板的解釋需要底層造型庫(kù)的支持,就是說(shuō)元模板的描述對(duì)象和解釋是和底層造型庫(kù)及造型方法緊密聯(lián)系的。子模板描述一個(gè)簡(jiǎn)單設(shè)計(jì)對(duì)象的模板,比如說(shuō)一個(gè)子任務(wù)的設(shè)計(jì)對(duì)象是一個(gè)或若干部件組成。一個(gè)簡(jiǎn)單部件是由若干元部件構(gòu)成,對(duì)應(yīng)的一個(gè)子模板是由若干元模板按一定的組合方式構(gòu)成。我們現(xiàn)在的造型庫(kù)是建立在部件級(jí)別上的,因而模板也是建立在子模板級(jí)別上。一個(gè)子任務(wù)對(duì)應(yīng)一個(gè)子模板??偰0逦覀兲岢隹偰0宓母拍睿饕轻槍?duì)復(fù)雜設(shè)計(jì)對(duì)象而言的??偰0搴妥幽0宓膮^(qū)別僅僅是在對(duì)象的復(fù)雜程度上和約束關(guān)系上。一個(gè)復(fù)雜對(duì)象內(nèi)部存在各種約束位置關(guān)系、尺寸關(guān)系、操作連接等;而對(duì)于一個(gè)簡(jiǎn)單對(duì)象內(nèi)部約束很簡(jiǎn)單或者沒(méi)有??偰0鍖?duì)應(yīng)的是我們協(xié)同模板中的總設(shè)計(jì)任務(wù),即一個(gè)復(fù)雜的設(shè)計(jì)對(duì)象。對(duì)于這個(gè)復(fù)雜設(shè)計(jì)對(duì)象,其模板并不存在,我們通過(guò)將任務(wù)分解成一個(gè)個(gè)可用子模板來(lái)設(shè)計(jì)的簡(jiǎn)單對(duì)象,作為子任務(wù)分配下去。然后通過(guò)模板復(fù)合將一些列子任務(wù)合成一個(gè)總?cè)蝿?wù),得到設(shè)計(jì)對(duì)象的總模板。一方面設(shè)計(jì)數(shù)據(jù)部分作為這次設(shè)計(jì)任務(wù)的結(jié)果;總模板的結(jié)構(gòu)也可以保存下來(lái),以后再要設(shè)計(jì)類似設(shè)計(jì)對(duì)象或者需要對(duì)該設(shè)計(jì)對(duì)象的數(shù)據(jù)作修改,通過(guò)模板可以很方便的實(shí)現(xiàn),不需要再經(jīng)過(guò)復(fù)雜的設(shè)計(jì)過(guò)程了。模板結(jié)構(gòu)文件和參數(shù)文件對(duì)于一個(gè)模板來(lái)描述的設(shè)計(jì)對(duì)象來(lái)說(shuō),它應(yīng)該既有對(duì)象的結(jié)構(gòu)、屬性信息,也有對(duì)象的設(shè)計(jì)數(shù)據(jù)。對(duì)于同一類型的設(shè)計(jì)對(duì)象,其不同之處僅在于參數(shù)數(shù)據(jù)不同,對(duì)象的結(jié)構(gòu)是一樣的。這類似于面向?qū)ο笾蓄惡蛯?duì)象之間的關(guān)系。模板一方面描述設(shè)計(jì)對(duì)象的結(jié)構(gòu),另一方面是表示具體設(shè)計(jì)對(duì)象的結(jié)果。所以我們將模板的結(jié)構(gòu)和參數(shù)分開,模板結(jié)構(gòu)文件是描述模板結(jié)構(gòu)的信息,也就是設(shè)計(jì)對(duì)象的結(jié)構(gòu);模板參數(shù)文件是描述模板參數(shù)數(shù)據(jù)的,也就是設(shè)計(jì)對(duì)象的設(shè)計(jì)數(shù)據(jù)信息,子任務(wù)的設(shè)計(jì)結(jié)果其實(shí)就是一個(gè)子模板參數(shù)文件。模板復(fù)合我們借助模板的復(fù)合來(lái)實(shí)現(xiàn)各個(gè)子任務(wù)的合成和裝配。借助模板復(fù)合操作,設(shè)計(jì)對(duì)象的裝配過(guò)程演變成了子模板的復(fù)合,大大降低了任務(wù)合成的復(fù)雜性,而且可以更好的控制對(duì)象的裝配。我們的協(xié)同模板所做的任務(wù)是針對(duì)一個(gè)還有沒(méi)有相應(yīng)模板的設(shè)計(jì)對(duì)象,通過(guò)總設(shè)計(jì)者任務(wù)分解,也就是將設(shè)計(jì)對(duì)象分成一系列子任務(wù),每個(gè)子任務(wù)是由一個(gè)或若干相關(guān)的部件組成,他們有相應(yīng)的子模板對(duì)應(yīng)。也就是說(shuō)將設(shè)計(jì)對(duì)象分解成一系列可以由子模板來(lái)進(jìn)行的子任務(wù)。然后通過(guò)任務(wù)的分配、子任務(wù)的設(shè)計(jì)提交、子任務(wù)的復(fù)合,最終得到設(shè)計(jì)對(duì)象的模板。將該模板保存起來(lái),以后再遇到該設(shè)計(jì)對(duì)象的設(shè)計(jì)問(wèn)題時(shí),可不需要再進(jìn)行任務(wù)劃分過(guò)程,只要利用已有的模板和模板操作工具,就可以很容易地進(jìn)行該對(duì)象的設(shè)計(jì)。所以協(xié)同模板的過(guò)程不僅是完成一個(gè)新的設(shè)計(jì)任務(wù)的過(guò)程,更主要的是產(chǎn)生新的設(shè)計(jì)對(duì)象的模板、保存設(shè)計(jì)任務(wù)并重用及擴(kuò)充模板庫(kù)的過(guò)程。協(xié)同模板的過(guò)程主要有任務(wù)數(shù)據(jù)庫(kù)的創(chuàng)建,任務(wù)的劃分、發(fā)布與分配,子任務(wù)的設(shè)計(jì)、提交,子任務(wù)的復(fù)合與檢測(cè)等主要功能模塊,其中涉及到任務(wù)的申請(qǐng)和競(jìng)爭(zhēng),任務(wù)前趨圖的產(chǎn)生和任務(wù)的控制,設(shè)計(jì)要求文件的產(chǎn)生,設(shè)計(jì)者之間的信息交流,模板的復(fù)合與解釋等主要問(wèn)題。協(xié)同模板設(shè)計(jì)整體流程如下1)總設(shè)計(jì)者設(shè)計(jì)之前,先搜索模板庫(kù)看是否有模板和相應(yīng)的任務(wù)匹配。如果有模板存在,則只需進(jìn)行模板協(xié)同編輯工作即可。如果沒(méi)有則進(jìn)行下一步工作。2)總設(shè)計(jì)端根據(jù)設(shè)計(jì)任務(wù)的外部約束、整體約束規(guī)則、部件位置關(guān)系、操作連接信息等創(chuàng)建相應(yīng)的任務(wù)數(shù)據(jù)庫(kù)(通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口)。3)總設(shè)計(jì)者將設(shè)計(jì)任務(wù)劃分為一系列子設(shè)計(jì)任務(wù),根據(jù)任務(wù)數(shù)據(jù)庫(kù)的約束信息產(chǎn)生任務(wù)前趨圖,發(fā)布任務(wù)。每個(gè)子任務(wù)由一個(gè)或若干個(gè)相關(guān)部件組成,并且有相應(yīng)的子模板對(duì)應(yīng)。任務(wù)前趨圖用于反映任務(wù)的串并行關(guān)系并控制子任務(wù)的進(jìn)行。4)子設(shè)計(jì)端可以顯示任務(wù)發(fā)布信息和前趨圖信息,并進(jìn)行子任務(wù)的申請(qǐng)和競(jìng)爭(zhēng)??傇O(shè)計(jì)者根據(jù)子任務(wù)申請(qǐng)狀態(tài)來(lái)進(jìn)行任務(wù)的分配或者強(qiáng)行進(jìn)行子任務(wù)的分配。5)任務(wù)分配后,子設(shè)計(jì)端接到分配的子任務(wù)和子任務(wù)設(shè)計(jì)要求文件,如果該子任務(wù)沒(méi)有前趨任務(wù)或者其前趨任務(wù)都已完成,則子設(shè)計(jì)者可以進(jìn)行子任務(wù)的設(shè)計(jì);否則子設(shè)計(jì)者必須等到其子任務(wù)的所有前趨任務(wù)都完成了才能開始子任務(wù)的設(shè)計(jì)。6)子設(shè)計(jì)者進(jìn)行子任務(wù)的設(shè)計(jì),設(shè)計(jì)依據(jù)是子模板結(jié)構(gòu)文件和子任務(wù)設(shè)計(jì)要求文件,設(shè)計(jì)結(jié)果是子模板參數(shù)文件。設(shè)計(jì)完成后子設(shè)計(jì)者提交設(shè)計(jì)結(jié)果。7)總設(shè)計(jì)端接到子設(shè)計(jì)端提交的子任務(wù)(子模板參數(shù)文件)后進(jìn)行模板復(fù)合,實(shí)時(shí)解釋設(shè)計(jì)結(jié)果,檢測(cè)提交子任務(wù)的正確性。如果無(wú)錯(cuò)則確認(rèn)子任務(wù)結(jié)果,子任務(wù)由提交狀態(tài)變?yōu)橥瓿蔂顟B(tài)。子任務(wù)確認(rèn)后,激活該任務(wù)的后繼子任務(wù)并且將相關(guān)信息傳遞給受之約束的其他子任務(wù)。其他子任務(wù)接到激活信息后,判斷其前趨任務(wù)是否都已經(jīng)完成,如果沒(méi)有則繼續(xù)等待,否則該子任務(wù)也可以開始進(jìn)行設(shè)計(jì)。8)在設(shè)計(jì)過(guò)程中,并行任務(wù)之間、存在環(huán)約束的子任務(wù)之間需要交流設(shè)計(jì)信息,我們提供了文本通信、語(yǔ)音通信、白板系統(tǒng)等協(xié)同交流手段供設(shè)計(jì)者之間進(jìn)行信息交流。9)所有子任務(wù)完成之后,總設(shè)計(jì)端進(jìn)行檢查、驗(yàn)證看結(jié)果是否符合設(shè)計(jì)要求。如果滿足則任務(wù)完成保存設(shè)計(jì)結(jié)果的模板。否則,將那些不符合設(shè)計(jì)要求的子任務(wù)退回重新進(jìn)行設(shè)計(jì)。重復(fù)進(jìn)行前面的過(guò)程,直到設(shè)計(jì)結(jié)果符合要求為止。根據(jù)上一節(jié)協(xié)同模板的整體流程,系統(tǒng)按照功能模塊可以分為以下幾部分。1)任務(wù)數(shù)據(jù)庫(kù)及其創(chuàng)建任務(wù)數(shù)據(jù)庫(kù)設(shè)計(jì)任務(wù)要求、約束信息,裝配關(guān)系、操作連接信息等數(shù)據(jù)庫(kù)中記錄了設(shè)計(jì)對(duì)象的整體約束信息和各子部件之間的約束關(guān)系和位置關(guān)系等信息,以及記錄子任務(wù)分配信息、子模板文件等信息。這個(gè)數(shù)據(jù)庫(kù)是劃分子任務(wù)的依據(jù),而且在整個(gè)設(shè)計(jì)過(guò)程中其內(nèi)容也是不斷更新的。它也是模板復(fù)合時(shí)的依據(jù)。任務(wù)數(shù)據(jù)庫(kù)是通過(guò)我們提供相應(yīng)的輸入接口來(lái)產(chǎn)生的,當(dāng)然也可以手工輸入。2)模板匹配模塊根據(jù)一定的規(guī)則去查找、匹配模板,以判斷是否已經(jīng)存在模板與設(shè)計(jì)任務(wù)相對(duì)應(yīng)。但是如何根據(jù)設(shè)計(jì)任務(wù)的信息去查找、匹配模板,目前還沒(méi)有很好的解決辦法,此模塊留待以后擴(kuò)充實(shí)現(xiàn),暫時(shí)只留一接口。3)任務(wù)劃分、任務(wù)前趨圖的產(chǎn)生和子任務(wù)的分配任務(wù)劃分模塊將設(shè)計(jì)任務(wù)劃分為各個(gè)子任務(wù),并且將子任務(wù)信息保存起來(lái),更新任務(wù)數(shù)據(jù)庫(kù);根據(jù)子任務(wù)間的約束信息產(chǎn)生任務(wù)前趨圖,以反映各個(gè)子任務(wù)之間的前趨后繼關(guān)系,也就是任務(wù)串并行關(guān)系。將任務(wù)信息及前趨圖發(fā)布給各個(gè)子設(shè)計(jì)端。子任務(wù)分配模塊主要是用于分配子任務(wù),并根據(jù)任務(wù)數(shù)據(jù)庫(kù)中跟該子任務(wù)相關(guān)的約束設(shè)計(jì)信息產(chǎn)生子任務(wù)設(shè)計(jì)要求文件,并傳遞給子設(shè)計(jì)者。4)子模板定制模塊(子模板創(chuàng)建器)根據(jù)模板庫(kù)中對(duì)相應(yīng)子模板的定制和設(shè)計(jì),子模板結(jié)構(gòu)的確定。這也是解決子模板來(lái)源問(wèn)題的一個(gè)途徑。子模板設(shè)計(jì)時(shí)根據(jù)子模板結(jié)構(gòu)框架進(jìn)行設(shè)計(jì),增加相應(yīng)的部件信息,部件尺寸信息及約束信息等。此模塊接口留待以后擴(kuò)充完善。5)子任務(wù)設(shè)計(jì)模塊子任務(wù)設(shè)計(jì)模塊,主要解決如何子任務(wù)根據(jù)子任務(wù)所用的子模板結(jié)構(gòu)文件和子任務(wù)設(shè)計(jì)要求文件進(jìn)行子任務(wù)的設(shè)計(jì),并將設(shè)計(jì)結(jié)果以子模板參數(shù)文件的形式保存起來(lái)。6)子模板參數(shù)與結(jié)構(gòu)的分離和結(jié)合模塊協(xié)同模板中一個(gè)重要的環(huán)節(jié)是實(shí)現(xiàn)模板的參數(shù)和結(jié)構(gòu)分離,并且在子任務(wù)設(shè)計(jì)時(shí)利用模板結(jié)構(gòu)文件進(jìn)行子任務(wù)設(shè)計(jì),設(shè)計(jì)結(jié)果保存為參數(shù)文件。提交子模板參數(shù)文件作為設(shè)計(jì)結(jié)果,對(duì)于子模板參數(shù)文件的解釋必須在與對(duì)應(yīng)的子模板結(jié)構(gòu)文件結(jié)合后才可進(jìn)行。7)子模板解釋器對(duì)子模板文件進(jìn)行解釋分為兩步,首先讀取XML模板文件,將相關(guān)信息讀出并存入相應(yīng)的數(shù)據(jù)結(jié)構(gòu)(部件信息),然后從給定的數(shù)據(jù)結(jié)構(gòu)中獲得數(shù)據(jù),依據(jù)零部件的幾何特點(diǎn)形成三維模型。8)模板復(fù)合器依據(jù)任務(wù)數(shù)據(jù)庫(kù),在總設(shè)計(jì)者端對(duì)已提交的子任務(wù)參數(shù)文件進(jìn)行復(fù)合。模板復(fù)合器能夠?qū)哂羞壿嬳樞虻娜舾勺尤蝿?wù)進(jìn)行復(fù)合,而不僅僅是對(duì)所有子任務(wù)的復(fù)合。9)總模板解釋器模板解釋器讀取模板文件的部件、約束、位置、操作和連接等信息,并解釋為相關(guān)的模板造型信息,然后進(jìn)行部件的幾何造型。網(wǎng)絡(luò)協(xié)同交流與控制方法“消息”與文件通信機(jī)制基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,主要采用Socket通信的方式進(jìn)行各個(gè)設(shè)計(jì)端之間的互連與交流。設(shè)計(jì)者之間除了要進(jìn)行消息——任務(wù)發(fā)布、申請(qǐng)、分配等協(xié)同消息的傳遞以外,還要進(jìn)行模板文件——包括設(shè)計(jì)要求文件、模板的結(jié)構(gòu)文件、參數(shù)文件等的相互傳輸。類似于這些的交流都是通過(guò)建立Socket連接實(shí)現(xiàn)的?!跋ⅰ蓖ㄐ艡C(jī)制基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,利用了基于“消息”的通信機(jī)制,將設(shè)計(jì)中對(duì)三維信息模型的編輯操作包裝為網(wǎng)絡(luò)傳輸?shù)摹跋ⅰ保蟠鬁p少了網(wǎng)絡(luò)傳輸中的數(shù)據(jù)量,并較好的實(shí)現(xiàn)了三維信息模型的協(xié)同編輯技術(shù)。在本方法中,消息的傳遞機(jī)制是這樣的,當(dāng)一個(gè)設(shè)計(jì)端發(fā)出操作或控制命令時(shí),系統(tǒng)將此消息命令通過(guò)網(wǎng)絡(luò)傳遞給服務(wù)端,通過(guò)服務(wù)端將此消息轉(zhuǎn)發(fā)給其他客戶端,各個(gè)客戶端獲得消息后,在本地系統(tǒng)中查找對(duì)應(yīng)于此消息的消息處理函數(shù),執(zhí)行后得到相應(yīng)的操作效果。這種方式可以實(shí)現(xiàn)三維信息模型的協(xié)同瀏覽、三維信息模型的協(xié)同編輯等功能。下面一節(jié)將具體介紹三維信息模型協(xié)同編輯功能的實(shí)現(xiàn)。將所有的操作命令和控制命令歸納為一個(gè)消息類CMsg,通過(guò)一個(gè)消息類和一個(gè)消息處理函數(shù)聯(lián)系起來(lái),當(dāng)設(shè)計(jì)人員進(jìn)行一個(gè)操作的時(shí)候,系統(tǒng)根據(jù)消息類型查找到相應(yīng)消息處理函數(shù)執(zhí)行操作。消息類格式如下CMsg∷CObject{inttype;//消息的類型號(hào)intEntityID;//操作三維信息模型的實(shí)體ID號(hào)CPointpstart,pend;//操作的參數(shù)……//其他參數(shù)};其中,type為消息的類型號(hào),唯一的標(biāo)示消息的類型,這樣便于識(shí)別不同的消息并進(jìn)行相應(yīng)的操作,消息的類型號(hào)定義為一個(gè)枚舉型的結(jié)構(gòu);EntityID項(xiàng)指操作三維信息模型的實(shí)體ID號(hào),在對(duì)大型三維信息模型進(jìn)行編輯操作時(shí),如何標(biāo)示對(duì)模型中哪一個(gè)三維實(shí)體進(jìn)行操作,系統(tǒng)提供實(shí)體ID的概念,通過(guò)ID來(lái)唯一標(biāo)示實(shí)體;CMsg類中其它成員變量都為此消息的操作參數(shù)值,對(duì)于不同的消息操作參數(shù)具有不同的幾何涵義,例如Block消息用于產(chǎn)生一個(gè)長(zhǎng)方體,它的操作參數(shù)為特定坐標(biāo)系下的兩個(gè)三維點(diǎn),分別為長(zhǎng)方體對(duì)角線上的兩點(diǎn);系統(tǒng)根據(jù)不同的操作和控制命令,定義了幾十種消息,用枚舉型結(jié)構(gòu)MsgType說(shuō)明。消息的類型定義如下enumMsgType{Requestcontrol,//請(qǐng)求控制權(quán)消息Block,//繪制矩形消息Intersect,//實(shí)體“交”運(yùn)算消息Material,//三維信息模型中材料屬性消息……//其他消息類型}對(duì)應(yīng)于不同類型的消息有一個(gè)相應(yīng)的消息處理函數(shù),系統(tǒng)定義了消息處理函數(shù)類CHandleMsg,此類中為每一個(gè)消息定義了一個(gè)處理函數(shù),下面為此類的C++偽代碼,其中每一個(gè)函數(shù)都與上面MsgType中消息相對(duì)應(yīng);classCHandleMsg{BOOLHandleBlockMsg(CMsg*Msg);//處理繪制長(zhǎng)方體消息BOOLHandleIntersectMsg(CMsg*Msg);//處理實(shí)體“交”運(yùn)算消息BOOLHandleMaterialMsg(CMsg*Msg);//處理三維信息模型中材料屬性消息…………//其他消息處理函數(shù)}消息在網(wǎng)絡(luò)上的傳輸分為服務(wù)端和客戶端兩種,根據(jù)消息類和消息處理函數(shù)的定義,我們相應(yīng)的定義了負(fù)責(zé)消息傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)。在服務(wù)端的數(shù)據(jù)結(jié)構(gòu)如下classCCollaborate{CListenSoeketm_ListenSoeket;//監(jiān)聽套接字CArray<CConnectSocket*,CConnectSocket*>m_connectSocket;//已連接客戶端套接字鏈表BOOLBroadcast(CMsg*pMsg);//廣播消息……//其他成員}其中,CListenSocket和CConnectSocket都派生自CSocket類,m_ListenSocket為服務(wù)端的監(jiān)聽Socket,監(jiān)聽客戶端的連接;m_connectSocket保存了所有已經(jīng)連接上的客戶端套接字;服務(wù)端從客戶端接收到消息之后,會(huì)使用Broadcast函數(shù)來(lái)將此消息廣播到所有其它的客戶端;在客戶端數(shù)據(jù)結(jié)構(gòu)相對(duì)簡(jiǎn)單,它只需要有一個(gè)與服務(wù)端連接的套接字,同時(shí)可以接收來(lái)自服務(wù)端的消息和向服務(wù)端發(fā)送消息。消息的傳遞通過(guò)WinSock技術(shù)實(shí)現(xiàn),充分使用了MFC提供的CSocketFile和CArchive類來(lái)實(shí)現(xiàn)CSocket類數(shù)據(jù)通信,網(wǎng)絡(luò)上傳遞的數(shù)據(jù)信息都通過(guò)序列化把數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)文件中,當(dāng)相應(yīng)的套接字上有可讀信息到來(lái)時(shí),WindowsSocketsDLL就會(huì)發(fā)出WM_READ消息通知應(yīng)用程序調(diào)用相應(yīng)的函數(shù)在該套節(jié)字上讀取數(shù)據(jù)。在數(shù)據(jù)的發(fā)送和接收過(guò)程中,調(diào)用各自相應(yīng)的序列化函數(shù)對(duì)網(wǎng)絡(luò)文件進(jìn)行操作,減輕了開發(fā)的工作量。在協(xié)同模板的操作中關(guān)鍵涉及到以下幾種消息PublicMission總設(shè)計(jì)端發(fā)布任務(wù)給子設(shè)計(jì)端的消息DisplayPublicInfo總設(shè)計(jì)端通知子設(shè)計(jì)端顯示發(fā)布任務(wù)的消息AssignMission總設(shè)計(jì)端分配任務(wù)給子設(shè)計(jì)端的消息ApplyMission子設(shè)計(jì)端向總設(shè)計(jì)端申請(qǐng)任務(wù)的消息ShowMsg設(shè)計(jì)端之間相互通知任務(wù)進(jìn)程及設(shè)計(jì)狀態(tài)的消息AquireStatus子設(shè)計(jì)端向總設(shè)計(jì)端詢問(wèn)任務(wù)狀態(tài)的消息StatusBack總設(shè)計(jì)端向子設(shè)計(jì)端傳遞查詢的任務(wù)狀態(tài)的消息ChangeAfterMission子設(shè)計(jì)端完成設(shè)計(jì)任務(wù)后更新其約束的后繼任務(wù)的狀態(tài)的消息ChangeStatus總設(shè)計(jì)端通知各子設(shè)計(jì)端改變相應(yīng)任務(wù)的狀態(tài)的消息CompleteMission總設(shè)計(jì)端通知提交完成設(shè)計(jì)任務(wù)的子設(shè)計(jì)端設(shè)計(jì)結(jié)果已經(jīng)通過(guò)檢查、確定完成的消息CancelMission子設(shè)計(jì)端放棄任務(wù)設(shè)計(jì)的消息CheckJoinAfterPublic子設(shè)計(jì)端加入?yún)f(xié)同時(shí)檢查是否接收過(guò)總設(shè)計(jì)端發(fā)布的任務(wù)信息的消息設(shè)計(jì)端接收到消息后根據(jù)消息的類型進(jìn)行相應(yīng)的操作和反應(yīng),以達(dá)到協(xié)同通信與控制的目的,操作函數(shù)主要有BOOLHandlePublicMsg(CMsg*Msg);子設(shè)計(jì)端接收到總設(shè)計(jì)端的發(fā)布任務(wù)信息后的操作函數(shù)BOOLHandleApplyMsg(CMsg*Msg);總設(shè)計(jì)端接收到子設(shè)計(jì)端申請(qǐng)信息后的操作函數(shù)BOOLHandleAssignMissionMsg(CMsg*Msg);客戶端接收到總設(shè)計(jì)端分配的任務(wù)后的操作函數(shù)BOOLHandleShowMsg(CMsg*Msg);子設(shè)計(jì)端接收到總設(shè)計(jì)端顯示信息后的操作函數(shù)BOOLHandleAquireStatusMsg(CMsg*Msg);總設(shè)計(jì)端接收接收到子設(shè)計(jì)端要求獲取任務(wù)狀態(tài)信息后的操作函數(shù)BOOLHandleStatusBackMsg(CMsg*Msg);子設(shè)計(jì)端接收接收到總設(shè)計(jì)端任務(wù)狀態(tài)信息后的操作函數(shù)BOOLHandleChangeAfterMissionMsg(CMsg*Msg);子任務(wù)完成后改變其約束任務(wù)的相關(guān)數(shù)據(jù)及界面函數(shù)BOOLHandleChangeStatusMsg(CMsg*Msg);各設(shè)計(jì)端接收到任務(wù)狀態(tài)改變消息后的操作函數(shù)BOOLHandleDisplayPublicInfoMsg(CMsg*Msg);子設(shè)計(jì)端接收到發(fā)布任務(wù)消息后的操作函數(shù)BOOLHandleCompleteMissionMsg(CMsg*Msg);子設(shè)計(jì)端接收到設(shè)計(jì)任務(wù)被通過(guò)后的操作函數(shù)BOOLHandleCancelMissionMsg(CMsg*Msg);總設(shè)計(jì)端接收到子設(shè)計(jì)端放棄進(jìn)行設(shè)計(jì)任務(wù)消息的操作函數(shù)BOOLHandleCheckJoinAfterPublicMsg(CMsg*Msg);總設(shè)計(jì)端接收到子設(shè)計(jì)端加入?yún)f(xié)同后要求檢查是否在發(fā)布信息后加入的消息的操作函數(shù)文件的通信為了實(shí)現(xiàn)設(shè)計(jì)端之間文件的交流,建立了文件Socket。文件的傳輸主要是實(shí)現(xiàn)xml格式的模板相關(guān)文件在設(shè)計(jì)端之間的傳輸,包括要求文件、設(shè)計(jì)結(jié)果參數(shù)文件以及模板文件的傳輸。任務(wù)的發(fā)布總設(shè)計(jì)者在任務(wù)前趨圖產(chǎn)生之后,將任務(wù)通過(guò)函數(shù)CCommission∷Public()發(fā)布給各個(gè)連接的子設(shè)計(jì)端。發(fā)布的過(guò)程如下,首先利用消息傳輸通過(guò)循環(huán)發(fā)送的方式將任務(wù)信息傳輸?shù)礁髯釉O(shè)計(jì)端,傳輸?shù)娜蝿?wù)信息的內(nèi)容任務(wù)ID,受其約束的任務(wù)的ID,該任務(wù)設(shè)計(jì)的部件名稱,任務(wù)的次序,約束的類型,任務(wù)鎖的數(shù)目等等。其次,通知子設(shè)計(jì)端顯示發(fā)布任務(wù)信息。任務(wù)的發(fā)布是針對(duì)各個(gè)連接的子設(shè)計(jì)端進(jìn)行的,且發(fā)布的任務(wù)信息是初始的任務(wù)狀態(tài)。當(dāng)用戶在總設(shè)計(jì)端發(fā)布任務(wù)之后再加入連接時(shí),同樣可以接收發(fā)布信息,此時(shí)該信息則反映了當(dāng)前最新的任務(wù)狀態(tài)。任務(wù)的申請(qǐng)與分配在子設(shè)計(jì)端接收到發(fā)布的任務(wù)信息之后,通過(guò)函數(shù)CCommission∷Apply()可根據(jù)自身需求向總設(shè)計(jì)端申請(qǐng)?jiān)O(shè)計(jì)任務(wù),對(duì)于申請(qǐng)來(lái)說(shuō),各子設(shè)計(jì)端的地位是平等的,申請(qǐng)時(shí)將本地的主機(jī)名稱及ip地址傳至總設(shè)計(jì)端,供其參考和抉擇??傇O(shè)計(jì)端在接收到來(lái)自各地的申請(qǐng)信息之后,可以根據(jù)子設(shè)計(jì)者的請(qǐng)求,分配其相應(yīng)的子任務(wù),或者根據(jù)劃分的任務(wù)分配各子任務(wù)。分配過(guò)程主要通過(guò)函數(shù)CCommission∷Assign()來(lái)實(shí)現(xiàn)記錄本地分配狀態(tài),更新本地顯示,告知被分配的子設(shè)計(jì)端并通知各子設(shè)計(jì)端改變?nèi)蝿?wù)狀態(tài),繼而將相應(yīng)的設(shè)計(jì)要求文件傳輸與之??傇O(shè)計(jì)端的申請(qǐng)與分配信息單獨(dú)記錄于任務(wù)申請(qǐng)信息鏈表CArray<ApplyCommission.ApplyCommission>m_applyList和任務(wù)分配信息鏈表CArray<AssignCommission,AssignCommission>m_assignList之中。協(xié)同串并行參數(shù)的交流任務(wù)前趨圖反映了任務(wù)的串并行關(guān)系以及前趨任務(wù)對(duì)于后繼任務(wù)的約束關(guān)系。存在約束的串行的任務(wù)以及并行任務(wù)之間存在參數(shù)的交流,每一個(gè)任務(wù)都受制于約束其若干設(shè)計(jì)參數(shù)的前趨任務(wù),即前趨任務(wù)的完成驅(qū)動(dòng)后繼約束任務(wù),當(dāng)設(shè)計(jì)任務(wù)通過(guò)檢查完成后便通知其后繼子設(shè)計(jì)端任務(wù)已完成的消息,子設(shè)計(jì)端打開相應(yīng)的任務(wù)鎖,當(dāng)所有的任務(wù)鎖被打開后,子任務(wù)被激活,即需要的約束參數(shù)全部設(shè)計(jì)完畢,子設(shè)計(jì)者方可開始設(shè)計(jì)任務(wù)。串行任務(wù)之間的參數(shù)傳遞主要是通過(guò)程序控制消息的傳遞,不需要設(shè)計(jì)者之間的交流。而并行任務(wù)之間的參數(shù)交流則主要通過(guò)設(shè)計(jì)者之間選擇性的溝通和交互,靈活性更強(qiáng)。權(quán)利要求1.一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于先在計(jì)算機(jī)內(nèi)搜索以建成模板庫(kù)的模板和相應(yīng)的任務(wù)匹配情況,有模板存在,在計(jì)算機(jī)內(nèi)進(jìn)行模板協(xié)同編輯工作,沒(méi)有模板存在,根據(jù)設(shè)計(jì)任務(wù)的外部約束、整體約束規(guī)則、部件位置關(guān)系、操作連接信息,在計(jì)算機(jī)內(nèi)創(chuàng)建相應(yīng)的任務(wù)數(shù)據(jù)庫(kù)并通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口;在計(jì)算機(jī)內(nèi)總設(shè)計(jì)端將設(shè)計(jì)任務(wù)劃分為一系列由一個(gè)或若干個(gè)相關(guān)部件組成,并且有相應(yīng)的子模板對(duì)應(yīng)子設(shè)計(jì)任務(wù),根據(jù)任務(wù)數(shù)據(jù)庫(kù)的約束信息,產(chǎn)生反映任務(wù)的串并行關(guān)系并控制子任務(wù)進(jìn)行的任務(wù)前趨圖,在計(jì)算機(jī)內(nèi)發(fā)布任務(wù)到可以顯示任務(wù)發(fā)布信息和前趨圖信息,并進(jìn)行子任務(wù)的申請(qǐng)和競(jìng)爭(zhēng)的子設(shè)計(jì)端;計(jì)算機(jī)根據(jù)子任務(wù)申請(qǐng)狀態(tài)來(lái)進(jìn)行任務(wù)的分配或者強(qiáng)行進(jìn)行子任務(wù)的分配;計(jì)算機(jī)任務(wù)分配后,子設(shè)計(jì)端接到分配的子任務(wù)和子任務(wù)設(shè)計(jì)要求文件,該子任務(wù)沒(méi)有前趨任務(wù)或者其前趨任務(wù)都已完成,則子設(shè)計(jì)者可以進(jìn)行子任務(wù)的設(shè)計(jì),否則子設(shè)計(jì)者在其子任務(wù)的所有前趨任務(wù)都完成了后進(jìn)行子任務(wù)的設(shè)計(jì);子設(shè)計(jì)者依據(jù)子模板結(jié)構(gòu)文件和子任務(wù)設(shè)計(jì)要求文件進(jìn)行子任務(wù)的設(shè)計(jì),得到并向總設(shè)計(jì)端提交子模板參數(shù)文件;總設(shè)計(jì)端進(jìn)行模板復(fù)合,實(shí)時(shí)解釋設(shè)計(jì)結(jié)果,檢測(cè)提交子任務(wù)的正確性,無(wú)錯(cuò)則確認(rèn)子任務(wù)結(jié)果,子任務(wù)由提交狀態(tài)變?yōu)橥瓿蔂顟B(tài),子任務(wù)確認(rèn)后,激活該任務(wù)的后繼子任務(wù)并且將相關(guān)信息傳遞給受之約束的其他子任務(wù),其他子任務(wù)接到激活信息后,判斷其前趨任務(wù)是否都已經(jīng)完成,沒(méi)有則繼續(xù)等待,否則該子任務(wù)開始進(jìn)行設(shè)計(jì);在設(shè)計(jì)過(guò)程中,并行任務(wù)之間、存在環(huán)約束的子任務(wù)之間通過(guò)文本通信、語(yǔ)音通信、白板系統(tǒng)等協(xié)同交流手段供設(shè)計(jì)者之間進(jìn)行信息交流;所有子任務(wù)完成之后,計(jì)算機(jī)內(nèi)總設(shè)計(jì)端進(jìn)行檢查、驗(yàn)證看結(jié)果是否符合設(shè)計(jì)要求,滿足則任務(wù)完成保存設(shè)計(jì)結(jié)果的模板,否則,計(jì)算機(jī)將那些不符合設(shè)計(jì)要求的子任務(wù)退回重新進(jìn)行設(shè)計(jì),重復(fù)進(jìn)行前面的過(guò)程,直到設(shè)計(jì)結(jié)果符合要求為止。2.根據(jù)權(quán)利要求1所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的協(xié)同模板的結(jié)構(gòu)與參數(shù)分離,在計(jì)算機(jī)內(nèi)將模板的結(jié)構(gòu)和參數(shù)分離開來(lái),用模板參數(shù)文件表示設(shè)計(jì)對(duì)象的數(shù)據(jù),用模板結(jié)構(gòu)文件來(lái)表示設(shè)計(jì)對(duì)象的框架結(jié)構(gòu),用一個(gè)模板結(jié)構(gòu)來(lái)表示一類設(shè)計(jì)對(duì)象,而用不同的參數(shù)文件來(lái)表示該設(shè)計(jì)對(duì)象的不同實(shí)例,子設(shè)計(jì)端將表示設(shè)計(jì)結(jié)果的模板參數(shù)文件傳遞給總設(shè)計(jì)端,總設(shè)計(jì)端根據(jù)模板參數(shù)文件得到與模板參數(shù)文件一一對(duì)應(yīng)的模板結(jié)構(gòu)文件,根據(jù)模板結(jié)構(gòu)通過(guò)模板解釋器去解析模板參數(shù)文件,得出設(shè)計(jì)結(jié)果的完整信息,并通過(guò)造型解釋模塊將造型結(jié)果顯示出來(lái)。3.根據(jù)權(quán)利要求1所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的協(xié)同模板的復(fù)合與裝配,包括總設(shè)計(jì)端發(fā)起任務(wù)時(shí)通過(guò)任務(wù)數(shù)據(jù)庫(kù)創(chuàng)建接口產(chǎn)生的子模板參數(shù)文件和結(jié)構(gòu)文件、設(shè)計(jì)約束文件、位置關(guān)系文件、操作和連接文件,計(jì)算機(jī)首先判斷模板文件存在情況,模板文件不存在,計(jì)算機(jī)產(chǎn)生模板文件及基本模板元素框架,根據(jù)任務(wù)數(shù)據(jù)庫(kù)到XML的轉(zhuǎn)換接口產(chǎn)生總?cè)蝿?wù)的設(shè)計(jì)約束文件、位置關(guān)系文件、操作連接文件,并復(fù)合到總模板中,子模板文件是參數(shù)文件時(shí),將子模板參數(shù)文件和結(jié)構(gòu)文件相結(jié)合產(chǎn)生可以復(fù)合的子模板文件,預(yù)處理子模板文件,處理子模板多次復(fù)合問(wèn)題以及模板中部件名稱沖突問(wèn)題復(fù)合子模板文件,復(fù)合時(shí)根據(jù)子模板是否已經(jīng)復(fù)合來(lái)做相應(yīng)的動(dòng)作,子模板復(fù)合后更改任務(wù)數(shù)據(jù)庫(kù)中的任務(wù)復(fù)合標(biāo)志,保存模板,結(jié)束一次子模板復(fù)合。4.根據(jù)權(quán)利要求1所述的一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,其特征在于所述的基于協(xié)同模板的協(xié)同設(shè)計(jì)方法采用模板設(shè)計(jì)標(biāo)記語(yǔ)言,其基于可擴(kuò)展標(biāo)記語(yǔ)言的描述規(guī)則,包括七大基本字段輸入?yún)?shù)段、部件信息段、屬性表達(dá)式段、規(guī)則段、部件位置裝配關(guān)系段、操作關(guān)系字段、連接關(guān)系段。全文摘要本發(fā)明公開了一種基于協(xié)同模板的協(xié)同設(shè)計(jì)方法,通過(guò)總設(shè)計(jì)者對(duì)任務(wù)的分解,將設(shè)計(jì)對(duì)象劃分成一系列可以由子模板來(lái)輔助設(shè)計(jì)的子任務(wù),然后將子任務(wù)分配與子設(shè)計(jì)者,各設(shè)計(jì)者通過(guò)相互協(xié)作交流,利用所持子模板進(jìn)行子任務(wù)的設(shè)計(jì)與設(shè)計(jì)結(jié)果的提交,最終由總設(shè)計(jì)者進(jìn)行子任務(wù)的復(fù)合,得到設(shè)計(jì)對(duì)象的設(shè)計(jì)結(jié)果,并以協(xié)同模板的方式保存。本方法結(jié)合工程設(shè)計(jì)的實(shí)際問(wèn)題,探索具有協(xié)同機(jī)制和模板相結(jié)合的協(xié)同模板的設(shè)計(jì)環(huán)境和流程框架,研究網(wǎng)絡(luò)協(xié)同環(huán)境下設(shè)計(jì)任務(wù)的分解、發(fā)布和控制以及模板的定義和表示、模板的復(fù)合、參數(shù)與結(jié)構(gòu)分離等方法,為新的網(wǎng)絡(luò)化產(chǎn)品設(shè)計(jì)提供原型框架和基礎(chǔ)。文檔編號(hào)H04L12/18GK1700652SQ20051004041公開日2005年11月23日申請(qǐng)日期2005年6月1日優(yōu)先權(quán)日2005年6月1日發(fā)明者劉曉平申請(qǐng)人:合肥工業(yè)大學(xué)