SAP2000API入门之写道虚功题
乐观的米饭
2020年12月11日 14:32:22
来自于SAP2000
只看楼主

作为结构力学中的经典理论,虚功(虚位移)原理想来早已被各位土木工程人士镌刻在灵魂深处,在本科考试、考研、一注基础中用过的图乘法没有上千也有成百。 奈何小编曾经的熟练自如在时间的流逝中消失的一干二净,在今年的一注基础考试中结构力学题做得哆哆嗦嗦如履薄冰。作为一直处于参数化设计入门阶段的小编灵机一动,决定通过编程在SAP2000中实现一个虚功原理题的自动计算。

作为结构力学中的经典理论,虚功(虚位移)原理想来早已被各位土木工程人士镌刻在灵魂深处,在本科考试、考研、一注基础中用过的图乘法没有上千也有成百。


奈何小编曾经的熟练自如在时间的流逝中消失的一干二净,在今年的一注基础考试中结构力学题做得哆哆嗦嗦如履薄冰。作为一直处于参数化设计入门阶段的小编灵机一动,决定通过编程在SAP2000中实现一个虚功原理题的自动计算。


01

外部程序调用SAP2000


SAP2000自v11.0版本以后,引进了SAP2000 API功能,即表用软件编程接口。本为采用的是v22版本。

本文在Visual Studio2019中通过C#实现对SAP2000 API的调用。由于程序并不复杂,只需建一个控制台程序(Console.App)来显示结果即可。


  添加对SAP2000 API的引用:

点击菜单栏“项目/添加引用”,找到SAP2000的安装目录,以本文为例,选中sap2000v1.dll文件,并按确定,VS将生成对sap2000 API的引用。

在以往的文章中已经介绍了利用python访问SAP2000的方法,且SAP2000二次开发文档(CSi_OAPI_Documentation.chm)中提供了VBA、VB.NET、C#等7种语言的访问示例和说明,这里不再详细介绍,仅提供代码以作参考:


  实例化SAP2000类


  实启动SAP2000程序


小编初学API接口时一直迷惑于ret的含义和作用,后来懂得查阅CSi文档时发现官方写得明明白白,SAP2000类库中的函数都会返回一个Integer(整数型)数值,因此可以在程序开头事先声明一个变量ret,如果函数正确执行功能就返回0,不正确返回非零数,这在调试程序时非常的有用!


02

虚功原理:来做题!

小编先在sap2000中建立了一个简单的双跨连续梁,单跨3m,采用混凝土C30,梁截面200x400,跨中布置了30kN的集中力,计算时不计入自重。

而本文的目标是用外部程序来计算梁跨中的挠度是多少。


先让我们简单回顾下虚功原理。


在K点沿指定方向施加一个虚设的单位集中力 Fk =1,引起的支座反力为 F R ,结构中某一微段上的虚内力为 F N 、M、 F s 。支座的实际位移为c,微段上的相应变形为 γds ,根据虚功原理, K 点实际位移 Δk 为:



根据公式,我们来理一下程序的思路:

(1) 提取实际工况下的构件内力,受弯构件主要提取弯矩;

(2) 在跨中节点施加竖向单位力,提取虚功工况下的弯矩;

(3) 根据图乘法计算获得梁跨中位移。

接下来就是通过不同的功能函数一步步地实现:


  打开“虚功位移题”


  提取实际工况下的弯矩


  添加虚功工况和单位力;虚功内力提取同上


  最后用简单的加减乘除,不涉及API函数调用,根据图乘法规则对提取的内力进行计算(小编发现手算可能比写个程序计算更快一点)


   这个程序中需要注意的是:

SapModel.SetModelIsLocked 即解锁模型函数的位置,很多时候ret返回值不为0都是因为模型锁定状态下而无法编辑。

最后我们来运行下程序看下结果:

这个小程序没有什么实际意义,但有助于熟悉SAP2000二次开发所需函数。其实SAP2000软件自带虚功图功能,小编能力和时间有限,以后会对这块进行学习研究。


03

SAP2000 API函数


一个简单的小程序,已经运用了一些眼花缭乱的函数方法,可想而知SAP2000 API中提供的函数种类繁多且功能齐全、细致到位,满满的都是细节。掌握其中一部分就可以从外部程序对SAP2000模型“做许多你想做的事情”。为了方便用户查找、使用和记忆,SAP2000 API中的函数命名遵循一定的规则,即由简单的英语单词或简写拼装组成,对于这些函数的理解,英语四级够用了。


最后,小编在程序化设计入门阶段停留这么久发现,在丰富的资源中培养高效的搜索能力非常重要。比如小编曾经因为对“ret”的费解,在设计软件二次开发的门槛前迟迟无法迈入;又比如昨晚在CSi帮助文档内寻找目标函数到最后迷失方向而浪费掉的时间,熬多晚的夜,掉多少的头发。

免费打赏

相关推荐

APP内打开