天天看點

abaqus RSG插件二次開發(二)

本次我們相比上次做的稍微複雜一點,這次的案列是一個鋼箱闆梁橋的一部分

即左跨包括挑梁這一段,各種情況都包括了,好了我們來看圖吧

abaqus RSG插件二次開發(二)

右側是可以自動修改的U肋  左側是球形肋,球形肋分成兩種180mm和200mm

由于用殼單元模組化時,無法建出球肋的厚度,是以就近似代替。

這是一段已經在CATIA裡建完的模型,catia有自帶的參數化設計,

現在我們希望将這個功能用到abaqus上,通過設定參數大小自動建立模型

先打開RSG設定好需要選擇的參數,進行界面布置,注意是以類型要選擇float浮點型

界面布置如下:

abaqus RSG插件二次開發(二)

要注意其中的球肋和U肋都是使用陣列的形式生成的

這時候就有一個問題,

s.Line(point1=(0.0, 0.0), point2=(-1100 - (n - 1) * 200, 0.0))
s.HorizontalConstraint(entity=g[18], addUndoState=False)      

不同的情況下連線所需要的個數是不一樣的,是以需要 if 判别一下,

同時,根據不同的挑梁長度,球肋的個數以及球肋的間距也是有差別的

這方面我是之前寫了一段matlab的代碼差別了一下

abaqus RSG插件二次開發(二)

這一段大家可以不用關系,簡單的窮舉判斷。

但是同理在python函數中,也有判斷各種情況又是幾個循環

接下來插入核心代碼

from abaqus import *
from abaqusConstants import *
import math

def createPlateFunction(H,A,N,n,h,Q):
    list1=[1100,1300,1500,1700,1900,2100]
    list2=[325,325,350,350,375,375]
    list3=[3,4,4,5,5,6]

    R=1100+(n-1)*200
    for i in range(6):
        if R==float(list1[i]):
            a=float(list2[i])
            b=list3[i]

    Q=float(Q)
    s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
                                                sheetSize=3000.0)
    g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
    s.setPrimaryObject(option=STANDALONE)
    s.Line(point1=(0.0, 0.0), point2=(100+600*N, 0.0))
    s.HorizontalConstraint(entity=g[2], addUndoState=False)
    s.ConstructionLine(point1=(400.0, 0.0), point2=(400.0, 450.0))
    s.VerticalConstraint(entity=g[3], addUndoState=False)
    s.Line(point1=(250.0, 0.0), point2=(300.0, -H))
    s.copyMirror(mirrorLine=g[3], objectList=(g[4],))
    s.HorizontalDimension(vertex1=v[3], vertex2=v[5], textPoint=(367.0419921875,
                                                                 -360.14013671875), value=A-H*2/4.5)
    s.Line(point1=(400-(A-H*2/4.5)/2, -H), point2=(400+(A-H*2/4.5)/2, -H))
    s.HorizontalConstraint(entity=g[6], addUndoState=False)

    s.FilletByRadius(radius=40.0, curve1=g[4], nearPoint1=(291.798278808594,
                                                           -200.214797973633), curve2=g[6],
                     nearPoint2=(371.829162597656,
                                 -253.40608215332))
    s.FilletByRadius(radius=40.0, curve1=g[5], nearPoint1=(521.689086914063,
                                                           -134.439208984375), curve2=g[6],
                     nearPoint2=(449.259521484375,
                                 -248.27099609375))
    if N > 1:
        s.linearPattern(geomList=(g[3], g[4], g[5], g[6], g[7], g[8]), vertexList=(),
                    number1=N, spacing1=600.0, angle1=0.0, number2=1, spacing2=300.0,
                    angle2=90.0)
        s.Line(point1=(0.0, 0.0), point2=(0.0, -h))
        s.VerticalConstraint(entity=g[15], addUndoState=False)
        s.Line(point1=(200.0, -370.0), point2=(-200.0, -370.0))
        s.HorizontalConstraint(entity=g[16], addUndoState=False)
        s.Line(point1=(250.0, -h), point2=(-250.0, -h))
        s.HorizontalConstraint(entity=g[17], addUndoState=False)
        s.Line(point1=(0.0, 0.0), point2=(-1100 - (n - 1) * 200, 0.0))
        s.HorizontalConstraint(entity=g[18], addUndoState=False)
        if a == 325:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[19], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[20], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[19], entity2=g[20], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[19], nearPoint1=(-322.638732910156,
                                                                    -139.701538085938), curve2=g[20],
                             nearPoint2=(-345.492401123047,
                                         -199.322738647461))
        if a == 350:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[19], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[20], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[19], entity2=g[20], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[19], nearPoint1=(-346.004302978516,
                                                                    -124.948425292969), curve2=g[20],
                             nearPoint2=(-366.399017333984,
                                         -200.446655273438))
        if a == 375:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[19], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[20], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[19], entity2=g[20], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[19], nearPoint1=(-384.071136474609,
                                                                    -115.328598022461), curve2=g[20],
                             nearPoint2=(-396.226287841797,
                                         -196.57243347168))

        s.linearPattern(geomList=(g[19], g[20], g[21]), vertexList=(), number1=b - 1,
                        spacing1=a, angle1=180.0, number2=1, spacing2=300.0, angle2=90.0)

        s.Line(point1=(-R + 25, 0.0), point2=(-R + 25, -300.0))
        s.VerticalConstraint(entity=g[22], addUndoState=False)


    else:
        s.Line(point1=(0.0, 0.0), point2=(0.0, -h))
        s.VerticalConstraint(entity=g[9], addUndoState=False)
        s.Line(point1=(200.0, -370.0), point2=(-200.0, -370.0))
        s.HorizontalConstraint(entity=g[10], addUndoState=False)
        s.Line(point1=(250.0, -h), point2=(-250.0, -h))
        s.HorizontalConstraint(entity=g[11], addUndoState=False)
        s.Line(point1=(0.0, 0.0), point2=(-1100 - (n - 1) * 200, 0.0))
        s.HorizontalConstraint(entity=g[12], addUndoState=False)
        if a == 325:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[13], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[14], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[13], entity2=g[14], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[13], nearPoint1=(-322.638732910156,
                                                                    -139.701538085938), curve2=g[14],
                             nearPoint2=(-345.492401123047,
                                         -199.322738647461))
        if a == 350:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[13], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[14], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[13], entity2=g[14], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[13], nearPoint1=(-346.004302978516,
                                                                    -124.948425292969), curve2=g[14],
                             nearPoint2=(-366.399017333984,
                                         -200.446655273438))
        if a == 375:
            s.Line(point1=(-a, 0.0), point2=(-a, -Q))
            s.VerticalConstraint(entity=g[13], addUndoState=False)
            s.Line(point1=(-a, -Q), point2=(-a - 40, -Q))
            s.HorizontalConstraint(entity=g[14], addUndoState=False)
            s.PerpendicularConstraint(entity1=g[13], entity2=g[14], addUndoState=False)
            s.FilletByRadius(radius=10.0, curve1=g[13], nearPoint1=(-384.071136474609,
                                                                    -115.328598022461), curve2=g[14],
                             nearPoint2=(-396.226287841797,
                                         -196.57243347168))

        s.linearPattern(geomList=(g[13], g[14], g[15]), vertexList=(), number1=b - 1,
                        spacing1=a, angle1=180.0, number2=1, spacing2=300.0, angle2=90.0)

        s.Line(point1=(-R + 25, 0.0), point2=(-R + 25, -300.0))
        s.VerticalConstraint(entity=g[16], addUndoState=False)

    p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,
                                   type=DEFORMABLE_BODY)
    p = mdb.models['Model-1'].parts['Part-1']
    p.BaseShellExtrude(sketch=s, depth=5000.0)
    s.unsetPrimaryObject()
    p = mdb.models['Model-1'].parts['Part-1']
    session.viewports['Viewport: 1'].setValues(displayedObject=p)
    del mdb.models['Model-1'].sketches['__profile__']
           

如上,大部分代碼由pythonreader錄入,或者可以選擇自己看rpy檔案,

其餘的界面代碼可以自動生成就不多說了

上一下結果圖:

abaqus RSG插件二次開發(二)
abaqus RSG插件二次開發(二)

希望對大家有幫助