python检索路径下文件夹_Python — 连接SAP2000与ABAQUS的桥梁

本文介绍了如何利用Python的comtypes库连接SAP2000和ABAQUS,实现从SAP2000中获取模型信息并在ABAQUS中进行参数化建模。通过SAP2000 API获取选中对象的详细信息,如节点坐标和截面尺寸,从而实现模型在不同软件间的迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在设计过程中,对于一些复杂的节点或是关键的构件,我们有时候会采用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.  import comtypes.client

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

3.  SapModel = SapObject.SapModel

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

//访问未打开的SAP2000模型

1.  import comtypes.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:\SIMULIA\Abaqus\6.14-4\tools\SMApy\python2.7

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

68d922f184b38af3d6985470734731f2.png beae958d3ef4c80abfc00d41d2e3a5ee.png

(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,在界面下方的命令行接口处键入以下命令:

>>> import comtypes.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”代表函数成功运行。

67c4ef617fed4010f1bd82de3cb14d72.png

进一步的,比如我们想知道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中快速建模的效果。

405572ec-a94c-eb11-8da9-e4434bdf6706.gif

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

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

请添加我们“大菲儿”微信,

加入相关讨论交流群。

1f2992097b6688d948aa58b528b5b89f.png 7b9392ed84743636634835d8b7229cef.png 往期回顾 结构不只有眼前的CAD,还有python和秀发! Python爬虫实战——从太平洋地震工程研究中心数据库自动下载地震波时程 基于Grasshopper与Ghpython的平面节点排序程序 基于ABAQUS二次开发的钢结构支撑端节点板式节点板参数化分析 盈建科,二次开发 6cde55eb5aef14c0f9a0b06c7b858595.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值