abaqus RSG插件二次开发(二)

本次我们相比上次做的稍微复杂一点,这次的案列是一个钢箱板梁桥的一部分

即左跨包括挑梁这一段,各种情况都包括了,好了我们来看图吧

右侧是可以自动修改的U肋  左侧是球形肋,球形肋分成两种180mm和200mm

由于用壳单元建模时,无法建出球肋的厚度,所以就近似代替。

这是一段已经在CATIA里建完的模型,catia有自带的参数化设计,

现在我们希望将这个功能用到abaqus上,通过设置参数大小自动建立模型

先打开RSG设置好需要选择的参数,进行界面布置,注意所以类型要选择float浮点型

界面布置如下:

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

这时候就有一个问题,

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

不同的情况下连线所需要的个数是不一样的,所以需要 if 判别一下,

同时,根据不同的挑梁长度,球肋的个数以及球肋的间距也是有区别的

这方面我是之前写了一段matlab的代码区别了一下

这一段大家可以不用关系,简单的穷举判断。

但是同理在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文件,

其余的界面代码可以自动生成就不多说了

上一下结果图:

希望对大家有帮助

发布了30 篇原创文章 · 获赞 21 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/cywtiancai/article/details/82226761