補(bǔ)舒棋,楊 蕾
(陜西省水利電力勘測(cè)設(shè)計(jì)研究院,陜西 西安 710001)
CAITA(法國(guó)達(dá)索軟件)在水利水電行業(yè)中的應(yīng)用已經(jīng)越來(lái)越廣泛,其知識(shí)工程模塊的應(yīng)用對(duì)解決工程設(shè)計(jì)智能批量化非常具有優(yōu)勢(shì),該模塊為通過(guò)提供方便易用的知識(shí)工程環(huán)境來(lái)創(chuàng)建、訪問(wèn)以及應(yīng)用企業(yè)知識(shí)庫(kù)[1]。利用軟件的知識(shí)工程陣列功能可以實(shí)現(xiàn)幾何元素的批量實(shí)例化,CATIA 軟件自帶的陣列功能有時(shí)不能滿足復(fù)雜的設(shè)計(jì)要求,因此可利用知識(shí)工程陣列來(lái)達(dá)到目的。本文以某地下廠房洞室群為例,利用知識(shí)工程陣列及UDF(User Defined Feature)知識(shí)工程模板分別完成地下洞室錨桿及排水帷幕的自動(dòng)批量實(shí)例化設(shè)計(jì)布置。
通過(guò)CATIA 知識(shí)工程模塊中的product knowledge template 創(chuàng)建知識(shí)工程陣列特征,該特征以腳本語(yǔ)言批處理(非交互)方式在CATIA 零件文檔中進(jìn)行模板實(shí)例化、生成目標(biāo)幾何元素(點(diǎn)、直線、曲線、圓、平面、曲面、體等),其特點(diǎn)能一次性自動(dòng)在CATIA 零件文檔中處理生成重復(fù)性的幾何結(jié)構(gòu),是CATIA 知識(shí)工程高級(jí)應(yīng)用[2]。
某地下洞室群布置見圖1,從左至右,三大洞室分別為主廠房洞室、主變洞室、尾水閘洞室。經(jīng)過(guò)有限元計(jì)算分析,地下洞室群錨桿布置型式為:主廠房、主變洞頂拱、上下游邊墻按Φ28@L=6 m/9 m 間隔布置,排距為1.5 m×1.5 m,尾水閘室按Φ28@L=6 m/9 m 間隔布置,排距為1.5 m×1.5 m。按照以上參數(shù)在CATIA 中運(yùn)用知識(shí)工程陣列模板布置出三大洞室的錨桿型式及知識(shí)工程應(yīng)用界面。
圖1 地下廠房主要洞室群錨桿布置
在知識(shí)工程陣列編輯器中來(lái)輸入代碼,并創(chuàng)建若干列表,列表對(duì)應(yīng)相應(yīng)的幾何圖形集,通過(guò)代碼定義列表(利用CATIA知識(shí)工程中的詞典Gernerative functions)來(lái)實(shí)現(xiàn)把創(chuàng)建的元素(利用詞典中的點(diǎn)構(gòu)造函數(shù)、運(yùn)算構(gòu)造函數(shù)、線構(gòu)造函數(shù)、平面構(gòu)造函數(shù)等來(lái)創(chuàng)建幾何元素)依次按循環(huán)放入相應(yīng)的幾何圖形集,相互關(guān)系見圖2,其設(shè)計(jì)難點(diǎn)主要在于如何實(shí)現(xiàn)長(zhǎng)短錨桿交錯(cuò)布置及參數(shù)的循環(huán)算法,設(shè)計(jì)步驟思路如下:
提取洞室外輪廓面→錨桿間距相隔的洞室輪廓線(用等間距的面橫向切割洞室輪廓面得到輪廓線)→將輪廓線由中心面一分為二→左半部分偶數(shù)序號(hào)輪廓線錨桿布置(單輪廓線上的的長(zhǎng)短錨桿交錯(cuò)布置通過(guò)內(nèi)部判斷輪廓線的等間距的點(diǎn)的奇偶來(lái)實(shí)現(xiàn))→左半部分奇數(shù)序號(hào)輪廓線錨桿布置(左半部分所有輪廓線的錨桿交錯(cuò)布置通過(guò)輪廓線的奇偶數(shù)進(jìn)行判斷)。
右半部分輪廓線錨桿布置與左半部分相同,只需在選擇halfc=split(c,`主要輪廓中心面`,true)中修改“true”為“false”得到另一側(cè)輪廓,再執(zhí)行知識(shí)工程陣列得到另一邊的錨桿布置,其最終布置見圖2。
圖2 知識(shí)工程陣列中列表、幾何元素之間的關(guān)系
代碼開始前先進(jìn)行循環(huán)變量定義及幾何元素定義:let i(integer);let k(integer);let p(point);let pl(plane);let c(curve);let top(point);let halfc(curve);let phf(point);let j(integer);let L(line)。其中循環(huán)創(chuàng)建幾何元素是通過(guò)i,j,k 來(lái)進(jìn)行實(shí)現(xiàn):k 為輪廓線總數(shù)目,i 為輪廓線的序號(hào),j 為輪廓線上錨桿布置點(diǎn)的序號(hào)。
需實(shí)現(xiàn):第1 根輪廓線第1 點(diǎn)長(zhǎng)錨桿,第2 點(diǎn)短錨桿,第3點(diǎn)長(zhǎng)錨桿,第4 點(diǎn)短錨桿……
第2 根輪廓線第1 點(diǎn)短錨桿,第2 點(diǎn)長(zhǎng)錨桿,第3 點(diǎn)短錨桿,第4 點(diǎn)長(zhǎng)錨桿……
……
第i 根輪廓線第1 點(diǎn)短錨桿,第2 點(diǎn)長(zhǎng)錨桿,第3 點(diǎn)短錨桿,第4 點(diǎn)長(zhǎng)錨桿……
通過(guò)((j+i)+(i-1)*(k-1)-1)來(lái)實(shí)現(xiàn)循環(huán)輪廓線上每一個(gè)點(diǎn)的錨桿布置并存儲(chǔ)在列表中。
實(shí)現(xiàn)錨桿布置的關(guān)鍵代碼如下所示:
i=1 /*設(shè)定起始循環(huán)數(shù)值*/
k=int(length(`主要輪廓走線`)/`拱頂支護(hù)參數(shù)錨桿間距`)/*
設(shè)定外圍參數(shù)來(lái)控制循環(huán)數(shù)量*/
for i while i<=k
{ /*根據(jù)知識(shí)工程陣列中的Generative functions 創(chuàng)建需要的幾何元素,將定義好的元素給定相應(yīng)的列表存放,并對(duì)應(yīng)PART 中的相應(yīng)的幾何圖形集,那么根據(jù)循環(huán)產(chǎn)生的元素就會(huì)依次生成放在幾何圖形集中。*/
p=CreateOrModifyDatum("point",`ALL point`,`關(guān)系知識(shí)工程陣列.2列表.1`,i)
/*定義外部幾何圖形集元素與列表對(duì)應(yīng),Dictionary 列表提供了可以在關(guān)系式中應(yīng)用的函數(shù)、操作符以及特征屬性等項(xiàng)[1]*/
p=pointoncurve (`主要輪廓走線`,`主要輪廓起點(diǎn)`,`拱頂支護(hù)參數(shù)錨桿間距` *i,true) /*點(diǎn)構(gòu)造函數(shù)*/
pl=CreateOrModifyDatum("plane",`ALL plane`,`關(guān)系 知識(shí)工程陣列.2列表.2`,i)
/*同上,在洞室中心線上建立面集*/
pl=planenormal(`主要輪廓走線`,p) /*平面構(gòu)造函數(shù)*/
c=CreateOrModifyDatum("curve",`ALL opcurve` ,`關(guān)系知識(shí)工程陣列.2列表.3`,i) /*同上建立曲線集*/
c=intersect(`主要輪廓掃掠.1` ,`關(guān)系知識(shí)工程陣列.2列表.2` ->GetItem(i))
/*線框構(gòu)造函數(shù),利用洞室外輪廓面與每一個(gè)中心線上相隔布置間距的法方平面相交得到一個(gè)相交輪廓線*/
c.Color="Green" /*給線條賦色*/
top=CreateOrModifyDatum ("point",`ALL oppoints` ,`關(guān)系知識(shí)工程陣列.2列表.4`,i)
top=intersect (`關(guān)系知識(shí)工程陣列.2列表.3`->GetItem(i),`主要輪廓中心面` )
/*建立相交輪廓線上的起始端點(diǎn),為陣列輪廓上錨桿布置做準(zhǔn)備*/
halfc=CreateOrModifyDatum ("curve",`ALL ophalfcurve`,`關(guān)系知識(shí)工程陣列.2列表.5`,i) /*將相交輪廓線切割成兩半,先得到一半輪廓線*/
halfc=split(c,`主要輪廓中心面`,true)
j=1
if mod(i,2)==0 /*偶數(shù)的半邊輪廓線布置錨桿*/
{
for j while j<=int(length(halfc)/`拱頂支護(hù)參數(shù)錨桿間距`)
{
/*在洞室一半的輪廓線上根據(jù)建好的點(diǎn)來(lái)放錨桿,交錯(cuò)布置*/
phf=CreateOrModifyDatum("point",`ALL halfcurvepoints` ,`關(guān)系知識(shí)工程陣列.2列表.6`,((j+i)+(i-1)*(k-1)-1))
phf=pointoncurve (halfc ,top ,`拱頂支護(hù)參數(shù)錨桿間距` *j ,true)
if mod(j,2)==0
{ L=CreateOrModifyDatum("line",linesonthehalfcurve,`關(guān)系知識(shí)工程陣列.2列表.7`,((j+i)+(i-1)*(k-1)-1))
L=lineangle (halfc,pl,phf,true,0mm,`錨桿1 長(zhǎng)`,90deg,true)
/*陣列錨桿,通過(guò)外部參數(shù)`錨桿1 長(zhǎng)`控制錨桿交錯(cuò)布置長(zhǎng)度*/
L.Color="green"
}
else
{ L=CreateOrModifyDatum("line",linesonthehalfcurve,`關(guān)系知識(shí)工程陣列.2列表.7`,((j+i)+(i-1)*(k-1)-1))
L=lineangle(halfc,pl,phf,true,0mm,`錨桿2 長(zhǎng)`, 90deg,true)
L.Color="blue"
}
}
}
else {……} /*奇數(shù)的半邊輪廓線布置錨桿在此不贅述*/
按以上知識(shí)工程代碼步驟創(chuàng)建錨桿陣列,通過(guò)替換相應(yīng)的洞室輪廓線,可創(chuàng)建其他洞室輪廓線上的錨桿陣列。
排水系統(tǒng)布置見圖3,需要在地下廠房上游及兩側(cè)布置三層排水廊道及排水帷幕,排水帷幕主要為排水廊道頂拱和底板上布置的長(zhǎng)度不等的排水孔,排水孔為Φ76,間距3 m,通過(guò)排水帷幕攔截廠房周圍圍巖的地下水,從而達(dá)到降低廠區(qū)地下水的目的,與洞室輪廓線的錨桿知識(shí)陣列不同的是,在排水帷幕的布置中使用了結(jié)合UDF 知識(shí)工程模板進(jìn)行知識(shí)工程陣列的方式,首先需創(chuàng)建排水孔模板,將其加入自定的目錄庫(kù),定義其相應(yīng)特征及存儲(chǔ)名稱,以方便代碼中直接輸入相應(yīng)的名稱就可以識(shí)別并調(diào)用該UDF 模板,其次調(diào)用UDF 后,再編寫將其進(jìn)行陣列的代碼。
1)創(chuàng)建UDF 模板:建立排水孔“輸入條件”,即給定點(diǎn)、排水孔陣列的方向;其次創(chuàng)建相關(guān)參數(shù);排水孔長(zhǎng)度、孔間距、孔與排水廊道夾角等參數(shù),編輯草圖定義參數(shù)完成排水孔建模,最后插入知識(shí)工程模板中的用戶特征。定義用戶特征時(shí),內(nèi)部部件選擇“輸入條件”以外的所有參數(shù),發(fā)布相關(guān)參數(shù)。
2)調(diào)用UDF 模板及相關(guān)代碼:定義用戶特征中應(yīng)自動(dòng)指定SuperType 及生成Type 類型,在目錄knowledgeTypesCustom 生成PktCylinder.CATGScript 文件,以此完成排水孔知識(shí)工程模板創(chuàng)建,以下為調(diào)用并陣列模板的知識(shí)工程代碼。
let i(integer) /*實(shí)數(shù)*/
let p(point) /*點(diǎn)*/
let udf(LDPS1) /*UDF 模板*/
i=1
for i while i<= int(length(`上層設(shè)計(jì)過(guò)程設(shè)計(jì)曲線`)/`排水孔間距`) /*創(chuàng)建UDF 輸入條件的點(diǎn)集*/
{
p=CreateOrModifyDatum ("point",`points`,`關(guān)系知識(shí)工程陣列.1points` ,i)
p=pointoncurve(`上層設(shè)計(jì)過(guò)程設(shè)計(jì)曲線`,`上層設(shè)計(jì)過(guò)程端點(diǎn)`,i*`排水孔間距` ,true)
udf=CreateOrModifyTemplate ("psk",`sldps`,`關(guān)系知識(shí)工程陣列.1PSK` ,i) /*調(diào)用UDF 模板*/
udf.P =p
udf.L =`上層設(shè)計(jì)過(guò)程設(shè)計(jì)曲線` /* 設(shè)置UDF 模板輸入條件*/
EndModifyTemplate(udf) /*結(jié)束模板實(shí)例化*/
}
按以上知識(shí)工程代碼步驟創(chuàng)建的排水帷幕見圖3。
圖3 排水廊道及錨桿布置
通過(guò)以上知識(shí)工程陣列在洞室錨桿支護(hù)布置及排水帷幕布置中的應(yīng)用,實(shí)現(xiàn)了批量自動(dòng)可視化設(shè)計(jì)工作,利用碰撞檢查提高了洞室布置設(shè)計(jì)的合理性,同時(shí)其成果對(duì)于類似工作的批量化操作可重復(fù)利用,大大提高了工作效率和質(zhì)量,從側(cè)面也反映出CATIA 知識(shí)工程模塊解決類似問(wèn)題的優(yōu)越性,希望以上的設(shè)計(jì)思路及代碼能對(duì)其他工程技術(shù)人員解決類似問(wèn)題時(shí)起到一定的借鑒作用。