复杂形态钢结构设计培训班

首页 非解构-公众号 Python — 连接SAP2000与ABAQUS的桥梁

Python — 连接SAP2000与ABAQUS的桥梁

在设计过程中,对于一些复杂的节点或是关键的构件,我们有时候会采用ABAQUS、ANSYS等通用有限元软件进行分析。在这一过程中,建模往往会花费大量的时间。

SAP2000 API 支持Python在内的多种编程语言,用户可以通过编写程序控制SAP2000,调用各种功能,实现建模、分析、后处理等;同时ABAQUS提供了用Python进行二次开发的能力。于是我想,是否可以利用Python将ABAQUS与SAP2000连接,使ABAQUS可以直接访问SAP2000的模型信息,在SAP2000中选择一个节点或是一个构件,就可以在ABAQUS中直接将模型建出。本文是我对解决这一问题的过程进行的一些整理。

整体思路大致如下:

1. 实现在ABAQUS中访问SAP2000。

2. 通过SAP2000 API读取建模时所需要的信息,如截面尺寸、节点坐标等。

3. 利用Python在ABAQUS中进行参数化建模。在以往的文章中有过介绍,本文不再赘述。

01.

安装comtypes包

SAP2000二次开发的帮助文档(CSi_OAPI_Documentation.chm)中,给出了Python访问SAP2000的方法:

//访问已经打开的SAP2000模型

1.importcomtypes.client

2. SapObject=comtypes.client.GetActiveObject(“CSI.SAP2000.API.SapObject”)

3.SapModel=SapObject.SapModel

(文中代码及路径均可向右滑动)

//访问未打开的SAP2000模型

1.importcomtypes.client

2. SapObject=comtypes.client.CreateObject(“CSI.SAP2000.API.SapObject”)

3. SapObject.ApplicationStart()

4. SapModel=SapObject.SapModel.

5. SapModel.File.OpenFile(path)#path为模型的路径

因此,要实现通过ABAQUS访问SAP2000,只需要安装comtypes包即可。以下介绍安装过程。

(1) 在ABAQUS安装目录中找到python2.7文件夹,以我的电脑为例,路径为:

C:SIMULIAAbaqus6.14-4toolsSMApypython2.7

(2) 设置环境变量:右击此电脑-属性,在高级系统设置中打开环境变量,编辑系统变量中的Path变量,将刚刚的路径及路径下的Scripts文件夹导入Path中。

(3) 安装comtypes包:在CMD中输入下列代码并回车。

pip install comtypes -i http://pypi.douban.com/simple –trusted-host pypi.douban.com

当其显示“Successfully installed comtypes”时,comtypes安装成功!

(4) 验证ABAQUS是否可以访问SAP2000:打开ABAQUS,在界面下方的命令行接口处键入以下命令:

>>> importcomtypes.client

>>> SapObject=comtypes.client.CreateObject(CSI.SAP2000.API.SapObject”)

>>> SapObject.ApplicationStart()

如果SAP2000成功运行,那么就恭喜你,ABAQUS中的Python已经可以控制SAP2000了!

02.

通过SAP2000 API获取模型信息

SAP2000二次开发的帮助文档(CSi_OAPI_Documentation)中提供了丰富的函数,可以帮助我们实现绝大多数在SAP2000中的操作。接下来以SapObject.SapModel.SelectObj.GetSelected函数为例,简单介绍如何通过SAP2000 API获取模型信息。

SapObject.SapModel.SelectObj.GetSelected是用于检索模型中被选对象的函数。在模型中随意选几个节点或单元,在命令行中输入该函数并按回车,返回了一个列表。

>>> SapObject.SapModel.SelectObj.GetSelected()

[5, (1, 2, 2, 2, 2), (u’3415′, u’5086′, u’5087′, u’5175′, u’5176′), 0]

结合帮助文档,我们依次来看列表中4个元素分别表示什么意思:

  • “5”为NumberItems,表示一共选中5个对象;

  • “(1, 2, 2, 2, 2)”为ObjectType,表示这5个对象各种的类型,由帮助文档可知,这5个对象处第一个为Point对象外,其余均为Frame对象;

  • “(u’3415′, u’5086′, u’5087′, u’5175′, u’5176′)”为 ObjectName,表示这5个对象各种的编号;

  • 最后的一个“0”代表函数成功运行。

进一步的,比如我们想知道u‘3415’号节点的坐标:

>>> SapObject.SapModel.PointObj.GetCoordCartesian(u’3415′)

[958621.335, 343173.664, 23670.996, 0]

想知道u‘5086’号杆件的截面:

>>> SapObject.SapModel.FrameObj.GetSection(u’5086′)

[u’FB4′, u”, 0]

等等,都可以通过很方便的在帮助文档中找到想要运用的函数以及函数输出的结果代表的意思,从而一步步的获得我们建模时所需要的信息。

03.

快速建模

基于上述思路和方法,将从SAP2000中获取模型信息的代码和在ABAQUS中建模的代码整合到一起稍加处理,就可以实现在SAP2000中选取我们所关心的对象在ABAQUS中快速建模的效果。

注:以上软件使用版本为:SAP2000 V21.0.2、 ABAQUS6.14,操作系统为Windows 10 64位,其他版本可能出现不兼容情况,可参考帮助文档调整代码。

为了方便大家交流技术和互通行业资讯,

请添加我们“转自:非解构-公众号”微信,

加入相关讨论交流群。

往期回顾
结构不只有眼前的CAD,还有python和秀发!
Python爬虫实战——从太平洋地震工程研究中心数据库自动下载地震波时程
基于Grasshopper与Ghpython的平面节点排序程序
基于ABAQUS二次开发的钢结构支撑端节点板式节点板参数化分析
盈建科,二次开发
本文来自网络,不代表钢构人的立场,转载请注明出处。搜索工程类文章,就用钢构人网站。 https://www.ganggouren.com/2020/08/d11c1afc76/
上一篇
下一篇

作者: ganggouren

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

17717621528

在线咨询: QQ交谈

邮箱: 1356745727@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部