基于Python的Abaqus二次开发实例讲解.docx
- 文档编号:30023997
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:20
- 大小:149.38KB
基于Python的Abaqus二次开发实例讲解.docx
《基于Python的Abaqus二次开发实例讲解.docx》由会员分享,可在线阅读,更多相关《基于Python的Abaqus二次开发实例讲解.docx(20页珍藏版)》请在冰豆网上搜索。
基于Python的Abaqus二次开发实例讲解
基于Python的Abaqus二次开发实例讲解
(asian582013.6.26)
基于Python的Abaqus的二次开发便捷之处在于:
1、所有的代码均可以先在Abaqus\CAE中操作一遍后再通过rp文件读取,然后再在此基础上进行相应的修改;
2、Python是一种解释性语言,读起来非常清晰,因此在修改程序的过程中,不存在程序难以理解的问题;
3、Python是一种通用性的、功能非常强大的面向对象编程语言,有许多成熟的类似于Matlab函数的程序在网络上流传,为后期进一步的数据处理提供了方便。
为了更加方便地完成Abaqus的二次开发,需进行一些相关约定:
1、所有参数化直接通过点的坐标值进行,直接对几何尺寸的参数化反而更加繁琐;
2、程序参数化已不允许在模型中添加太多的Tie,因此不同零部件的绑定直接通过共节点来进行,这就要求建模方法与常规的建模方法有所区别。
思路如下:
将一个整机拆成几个大的Part来建立,一个Part中包含许多零件,这样在划分网格式时就可以自动实现共节点的绑定。
不同的零件可通过建立不同的Set来进行区分,不同Part的绑定可以通过Tie来实现。
将一个复杂的结构拆成几个恰当的Part来建立,一方面可以将复杂的模型简单化,使建立复杂模型成为可能;另一方面,不同的Part可单独调用,从而又可实现程序的模块化,增加程序的适应范围,延长程序的使用寿命,也方便后期程序的维护和修改。
3、通过py文件建立起的模型要进行参数优化,已不适合采用Isight中Abaqus模块,需要用到Isight的Simcode模块。
下面详细解释一个臂架的py文件。
#此程序用来绘制臂架前段
#导入相关模块
#-*-coding:
mbcs-*-
fromabaqusimport*
fromabaqusConstantsimport*
#定义整个臂架的长、宽、高
L0=14300
W0=1650
H0=800
#创建零件P01_12
L1=H0+200
W1=200
T1=12
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=2000.0)
g,v,d,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=STANDALONE)
s.rectangle(point1=(W0/2,L1/2),point2=(W0/2+W1,-L1/2))
s.rectangle(point1=(-W0/2,L1/2),point2=(-W0/2-W1,-L1/2))
p=mdb.models['Model-1'].Part(name='Part-1',dimensionality=THREE_D,
type=DEFORMABLE_BODY)
p=mdb.models['Model-1'].parts['Part-1']
p.BaseShell(sketch=s)
session.viewports['Viewport:
1'].setValues(displayedObject=p)
delmdb.models['Model-1'].sketches['__profile__']
#定义零件的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
pickedFaces01=f.findAt(((W0/2,L1/2,0),),((-W0/2,L1/2,0),),)
p.assignThickness(faces=pickedFaces01,thickness=T1)
p.Set(faces=pickedFaces01,name='P01_12')
#创建辅助平面和辅助坐标系
p=mdb.models['Model-1'].parts['Part-1']
p.DatumCsysByThreePoints(name='Datumcsys-1',coordSysType=CARTESIAN,origin=(
0.0,0.0,0.0),line1=(1.0,0.0,0.0),line2=(0.0,1.0,0.0))
p=mdb.models['Model-1'].parts['Part-1']
p.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE,offset=L0)
#创建零件P02_12
L2=L1
W2=W1
T2=12
p=mdb.models['Model-1'].parts['Part-1']
d=p.datums
#将草图原点参数化
t=p.MakeSketchTransform(sketchPlane=d[5],sketchUpEdge=d[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,origin=(0.0,0.0,L0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=29006.85,gridSpacing=725.17,transform=t)
g,v,d1,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p=mdb.models['Model-1'].parts['Part-1']
s.rectangle(point1=(W0/2,L2/2),point2=(W0/2+W2,-L2/2))
s.rectangle(point1=(-W0/2,L2/2),point2=(-W0/2-W2,-L2/2))
p=mdb.models['Model-1'].parts['Part-1']
d2=p.datums
p.Shell(sketchPlane=d2[5],sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1,
sketchOrientation=RIGHT,sketch=s)
s.unsetPrimaryObject()
delmdb.models['Model-1'].sketches['__profile__']
#定义零件的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
pickedFaces02=f.findAt(((W0/2,L1/2,L0),),((-W0/2,L1/2,L0),),)
p.assignThickness(faces=pickedFaces02,thickness=T2)
p.Set(faces=pickedFaces02,name='P02_12')
#创建零件P03_12和零件P04_08
T3=12
T4=8
p=mdb.models['Model-1'].parts['Part-1']
d=p.datums
t=p.MakeSketchTransform(sketchPlane=d[5],sketchUpEdge=d[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,origin=(0.0,0.0,L0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=29006.85,gridSpacing=725.17,transform=t)
g,v,d1,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
#创建草图
p=mdb.models['Model-1'].parts['Part-1']
s.Line(point1=(-W0/2-W1,H0/2),point2=(-W0/2,H0/2))
s.Line(point1=(W0/2,H0/2),point2=(W0/2+W1,H0/2))
s.Line(point1=(-W0/2-W1,-H0/2),point2=(-W0/2,-H0/2))
s.Line(point1=(W0/2,-H0/2),point2=(W0/2+W1,-H0/2))
p=mdb.models['Model-1'].parts['Part-1']
d2=p.datums
p.ShellExtrude(sketchPlane=d2[5],sketchUpEdge=d2[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,sketch=s,depth=L0,
flipExtrudeDirection=ON)
s.unsetPrimaryObject()
delmdb.models['Model-1'].sketches['__profile__']
#定义零件P03_12的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
pickedFaces03=f.findAt(((-W0/2,H0/2,L0/2),),((W0/2,H0/2,L0/2),),)
p.assignThickness(faces=pickedFaces03,thickness=T3)
p.Set(faces=pickedFaces03,name='P03_12')
#定义零件P04_12的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
pickedFaces04=f.findAt(((-W0/2,-H0/2,L0/2),),((W0/2,-H0/2,L0/2),),)
p.assignThickness(faces=pickedFaces04,thickness=T4)
p.Set(faces=pickedFaces04,name='P04_12')
#创建零件P05_08
T5=8
p=mdb.models['Model-1'].parts['Part-1']
d=p.datums
t=p.MakeSketchTransform(sketchPlane=d[5],sketchUpEdge=d[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,origin=(0.0,0.0,L0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=29006.85,gridSpacing=725.17,transform=t)
g,v,d1,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p=mdb.models['Model-1'].parts['Part-1']
s.Line(point1=(-W0/2-W1/2,H0/2),point2=(-W0/2-W1/2,-H0/2))
s.Line(point1=(W0/2+W1/2,H0/2),point2=(W0/2+W1/2,-H0/2))
p=mdb.models['Model-1'].parts['Part-1']
d2=p.datums
p.ShellExtrude(sketchPlane=d2[5],sketchUpEdge=d2[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,sketch=s,depth=L0,
flipExtrudeDirection=ON)
s.unsetPrimaryObject()
delmdb.models['Model-1'].sketches['__profile__']
#定义零件P05_8的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
pickedFaces05=f.findAt(((-W0/2-W1/2,0,L0/2),),((W0/2+W1/2,0,L0/2),),)
p.assignThickness(faces=pickedFaces05,thickness=T5)
p.Set(faces=pickedFaces05,name='P05_08')
#创建零件P06_08
L6=W0+W1
n=L0//2520+1
T6=8
p=mdb.models['Model-1'].parts['Part-1']
f,d=p.faces,p.datums
t=p.MakeSketchTransform(sketchPlane=f[0],sketchUpEdge=d[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,origin=(W0/2+W1/2,-H0/2,
0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=28684,gridSpacing=717,transform=t)
g,v,d1,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p=mdb.models['Model-1'].parts['Part-1']
#循环命令绘制平行隔板
foriinrange(0,n):
s.Line(point1=(-500-(i*2520),H0),point2=(-500-(i*2520),0.0))
p=mdb.models['Model-1'].parts['Part-1']
f1,d2=p.faces,p.datums
p.ShellExtrude(sketchPlane=f1[0],sketchUpEdge=d2[4].axis2,
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,sketch=s,depth=L6,
flipExtrudeDirection=ON)
s.unsetPrimaryObject()
delmdb.models['Model-1'].sketches['__profile__']
#定义零件P06_08的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
foriinrange(0,n):
pickedFaces=f.findAt(((0,H0/4,500+i*2520),))
p.assignThickness(faces=pickedFaces,thickness=T6)
p.Set(faces=pickedFaces,name='P06_08_'+str(1+i))
#创建零件P07_12,P08_12
W7=200
L7=W0+W1
T7=12
T8=12
p=mdb.models['Model-1'].parts['Part-1']
f,e=p.faces,p.edges
t=p.MakeSketchTransform(
sketchPlane=f.findAt(coordinates=(W0/2+W1/2,0.0,100.0)),
sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2,0.0,0.0)),
sketchOrientation=RIGHT,sketchPlaneSide=SIDE1,
origin=(W0/2+W1/2,-H0/2,0.0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=53678,gridSpacing=1341,transform=t)
g,v,d,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p=mdb.models['Model-1'].parts['Part-1']
#循环命令绘制平行隔板
foriinrange(0,n):
s.Line(point1=(400+i*2520,-H0),point2=(600+i*2520,-H0))
s.Line(point1=(400+i*2520,0),point2=(600+i*2520,0))
p=mdb.models['Model-1'].parts['Part-1']
f1,e1=p.faces,p.edges
p.ShellExtrude(
sketchPlane=f.findAt(coordinates=(W0/2+W1/2,0.0,100.0)),
sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2,0.0,0.0)),
sketchPlaneSide=SIDE1,
sketchOrientation=RIGHT,sketch=s,depth=W0+W1,flipExtrudeDirection=ON,
keepInternalBoundaries=ON)
s.unsetPrimaryObject()
delmdb.models['Model-1'].sketches['__profile__']
#定义零件P07_12的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
foriinrange(0,n):
pickedFaces07=f.findAt(((0,H0/2,400+i*2520),),((0,H0/2,600+i*2520),),)
p.assignThickness(faces=pickedFaces07,thickness=T7)
p.Set(faces=pickedFaces07,name='P07_12_'+str(1+i))
#定义耦合set
fp=[]
foriinrange(0,2):
fp.append(f.findAt(((0,H0/2,400+i*2520),),((0,H0/2,600+i*2520),),))
p.Set(faces=fp,name='P07_fp')
#定义零件P08_12的厚度
p=mdb.models['Model-1'].parts['Part-1']
f=p.faces
foriinrange(0,n):
pickedFaces08=f.findAt(((0,-H0/2,400+i*2520),),((0,-H0/2,600+i*2520),),)
p.assignThickness(faces=pickedFaces08,thickness=T7)
p.Set(faces=pickedFaces08,name='P08_12_'+str(1+i))
#为中间隔板创建空腔
#定义相关参数边界距离、圆角
d0=100
r0=100
p=mdb.models['Model-1'].parts['Part-1']
f1,e1=p.faces,p.edges
t=p.MakeSketchTransform(
f.findAt(coordinates=(0,0.0,500.0)),
sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2,0.0,500.0)),
sketchPlaneSide=SIDE1,sketchOrientation=RIGHT,
origin=(0.0,0.0,500.0))
s=mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=5910.0,gridSpacing=147.0,transform=t)
g,v,d1,c=s.geometry,s.vertices,s.dimensions,s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p=mdb.models['Model-1'].parts['Part-1']
p.projectReferencesOntoSketch(sketch=s,filter=COPLANAR_EDGES)
#创建矩形
s.rectangle(point1=(-W0/2-W1/2+d0,H0/2-d0),point2=(W0/2+W1/2-d0,-H0/2+d0))
#创建圆角
s.FilletByRadius(radius=r0,curve1=g[29],nearPoint1=(-W0/2-W1/2+d0,
H0/2-d0),curve2=g[26],nearPoint2=(-W0/2-W1/2+d0,H0/2-d0))
s.FilletByRadius(radius=r0,curve1=g[26],nearPoint1=(-W0/2-W1/2+d0,
-H0/2+d0),curve2=g[27],nearPoint2=(-W0/2-W1/2+d0,-H0/2+d0))
s.FilletByRadius(radius=r0,curve1=g[27],nearPoint1=(W0/2+W1/2-d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Python Abaqus 二次开发 实例 讲解