作为结构力学中的经典理论,虚功(虚位移)原理想来早已被各位土木工程人士镌刻在灵魂深处,在本科考试、考研、一注基础中用过的图乘法没有上千也有成百。 奈何小编曾经的熟练自如在时间的流逝中消失的一干二净,在今年的一注基础考试中结构力学题做得哆哆嗦嗦如履薄冰。作为一直处于参数化设计入门阶段的小编灵机一动,决定通过编程在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,微段上的相应变形为 dμ 、 dφ 、 γds ,根据虚功原理, K 点实际位移 Δk 为:
根据公式,我们来理一下程序的思路:
(1) 提取实际工况下的构件内力,受弯构件主要提取弯矩;
(2) 在跨中节点施加竖向单位力,提取虚功工况下的弯矩;
(3) 根据图乘法计算获得梁跨中位移。
接下来就是通过不同的功能函数一步步地实现:
打开“虚功位移题”
提取实际工况下的弯矩
添加虚功工况和单位力;虚功内力提取同上
最后用简单的加减乘除,不涉及API函数调用,根据图乘法规则对提取的内力进行计算(小编发现手算可能比写个程序计算更快一点)
这个程序中需要注意的是:
SapModel.SetModelIsLocked 即解锁模型函数的位置,很多时候ret返回值不为0都是因为模型锁定状态下而无法编辑。
最后我们来运行下程序看下结果:
这个小程序没有什么实际意义,但有助于熟悉SAP2000二次开发所需函数。其实SAP2000软件自带虚功图功能,小编能力和时间有限,以后会对这块进行学习研究。
03
SAP2000 API函数
一个简单的小程序,已经运用了一些眼花缭乱的函数方法,可想而知SAP2000 API中提供的函数种类繁多且功能齐全、细致到位,满满的都是细节。掌握其中一部分就可以从外部程序对SAP2000模型“做许多你想做的事情”。为了方便用户查找、使用和记忆,SAP2000 API中的函数命名遵循一定的规则,即由简单的英语单词或简写拼装组成,对于这些函数的理解,英语四级够用了。
最后,小编在程序化设计入门阶段停留这么久发现,在丰富的资源中培养高效的搜索能力非常重要。比如小编曾经因为对“ret”的费解,在设计软件二次开发的门槛前迟迟无法迈入;又比如昨晚在CSi帮助文档内寻找目标函数到最后迷失方向而浪费掉的时间,熬多晚的夜,掉多少的头发。