sap2000二次开发的理解与基础工作开展

前言

​ 随着数字化进程的加快,不甘心满足于传统行业的阵痛,于是在业余时间开始寻求一些相应的解决办法、“谋生”与创新。所以这篇文章我也暂时是讲一些比较笼统的概念,在后面的时间和文章里面慢慢的对一些细节进行相应的整理与分享。只有通过不断消化整理之后的东西才是真正属于自己的。但其实这一过程如果不是在一个团队中真正的成长并沉淀下来的,周期应该也是有点长的。(先不想那么多,往前走了再说……)。

​ sap2000是我最早接触的通用有限元软件(同类型的当然也还有abaqus),因为它不仅功能强大,而且操作相对比较简便,可以自动划分网格,即使对有限元的原理没什么理解,也可以建模计算,获得的结果往往是可以作为参考的。所以我觉得学习结构分析软件可以从sap2000入手,先掌握建模方法,可以算出结果,获得小小的成就感之后,再深入学习有限元知识和软件的计算原理。

​ sap2000还有一个优势,就是它是基于面向对象技术开发的,而且接口开放。使用者既可以利于软件提供的图形操作界面来建模和分析,也可以通过编程连接其接口来建模分析。前者的优势是非常直观,适合小体量的结构,而后者对于大型结构非常有效,可以减少很多工作量。

​ sap2000的API接口支持多种语言,包括VBA, VB, C#, C++,Fortran, Matlab。早期可能比较好用的是VBA,因为VBA可以直接通过宏与Microsoft Word和Excel连接,而Excel中又提供了很多可以直接在单元格中操作的简易函数,将单元格、函数、VBA、sap2000结合使用,可以实现用户的很多需求(比如允许用户自动建模、分析和设计模型所需要的许多过程,得到自定义的分析和设计结果以及与第三方软件的交互,为与其他程序的双向交换模型提供了一条非常好的路径)。相比之下,Visual Studio的开发方式下,显示数据和计算就没有Excel那样方便直观,想显示图形界面还要操作很多控件增加了工作量,后面随着各种语言的发展,单纯的用VBA可能有些效率和代码的简易程度就略显不足。excle、matlab、Visual Studio、 C#开发、内部调用(插件的开发与集成)、交互式编辑可能是未来会经常用到的(也许时间很长,也许时间会很短)。自己一有时间就要往这个方面去想,去琢磨,等到真正用的时候会发现相应的优势所在。

​ 自己目前主打的就是将sap2000与python两个软件有机结合起来,做到在使用的过程中更加的灵活和方便,有助于后面的深入的学习和交互。python是解释型语言,关键字少,结构也简单,既支持面向过程的函数编程,也支持面向对象的抽象编程,具有丰富的库文件,可以进行各种类型项目的开发,而sap2000就像前面所说的:也是属于基于面向对象开发的(当然有自己暂时对python更加熟悉一点,同时也限于自己的认知水平)。对于IDE编译器来说:自己目前使用的比较多的是Visual Studio Code,鉴于代码是用Python写的,使用PyCharm来写的话据说会更加的方便,能够提高相应的开发效率(调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、以及版本控制。)
​ 关于PyCharm开发环境的配置:在Python中通过COM组件调用sap2000的接口进行软件的控制,使用Python不能直接调用COM组件,需要借助可以访问COM组件的comtypes库。(comtypes是一个轻量级的python库,通过这个库文件,直接对COM组件进行对象的创建,实现对sap2000的调用)

配置基本环境的文件

  1. sap2000v1.dll :用C#或C++或python进行编程
  2. sap2000v1.tlb :用于vba的编程

说明参考书:CSI_OAPI_Documentation.chm

各个spa2000版本之间经常会有一些更新与差异,也需要使用者去多多的甄别与学习。

主要的接口函数及功能

  • General Functions:提供通用函数,包括程序的启动、关闭、单位、容差等
  • Analysis Model:提供获得模型各个对象的计算信息
  • Edit:对应菜单栏中编辑选项所提供的功能
  • File:对应菜单栏中文件选项下的新模型提供的功能
  • Definitions:对应菜单栏中定义选项所提供的功能:材料、截面、荷载模式、荷载组合以及反应谱函数的定义等、点、线、面单元、连接单元等
  • Object Model:提供各种对象(面、实体、杆等)的编辑和定义的功能:荷载、组、构件参数指定
  • Analysis Results:提供获取分析结果相关功能:包括指定分析选项、运行分析、获取应力、内力、位移等
  • Design:对应菜单栏中的设计选项提供的功能:包括设置首选项、覆盖项以及提取设计结果
  • Select:对象菜单栏中的选择选项中提供的功能:包括按组选择、按属性选择、按区域选择Options

通过API能够完成什么?

  1. 对软件的控制
  2. 对模型的操作
    1. 启动、关闭程序
    2. 打开和保存文件
    3. 隐藏、显示程序界面(让程序后台运行)
    4. 控制程序运行计算和设计(实现迭代运算)
    5. 指定条件选择单元(想选什么就选什么)
  3. 获取计算结果
  4. 获取设计结果
    1. 设计参数的设置
    2. 不满足设计的杆件数量
    3. 获取设计总信息

经验总结

​ 以一个小点作为切入口,对自己感兴趣的这一块好好的打磨一下。(自己的第一步是从python语言入手的,但是实际的操作过程中可能还有其他的一些语言,自己慢慢的摸索着去掌握的)。里面有些东西还是很深的,需要自己耐着性子的去琢磨琢磨,这才是解决问题的关键所在。弄懂二次开发里面的东西,一边在实际项目中成长,一边时刻打磨这一块的内容。

  1. 必须要对系统各模块要了解,只有这样才能了解自己需要去开发哪些功能怎么开发,并且在开发过程中能合理分类

  2. 熟悉数据结构、代码逻辑,不要让代码显得混乱,不能开发到最后自己也看不懂自己写的代码,这是一个好的程序员的基本要求(虽然自己连一个业余的程序员可能都算不上)。

  3. 要了解开发接口,主要是了解各个函数的功能,参数和返回值

  4. 开发语言最好选择自己熟悉的,这样上手会比较快。不推荐使用VB编写,VB的代码显得有些混乱,定义也不够合理,虽然API文档是用VB作为示例的,但是如果你熟悉你的开发语言的话上手会很快,没必要选择VB去牺牲很多效率。很多人还是推荐C#,作为新生的语言,它合简单易用与功能强大与一体,无论用JAVA的还是C++的人都可以在一两天内了解它。

  5. 开发后置难度太大,作为商业开发还可以,个人就算了。前置开发些材料模块和截面模块之类的,使之符合自己使用习惯,提高前期效率,个人用户开发做到这些就差不多了。

星标公众号推荐

​ 一些公众号里面的一些东西还是不错的,都是涉及到一切跨界的东西,不仅是跨界,更多的是将所做的东西正真转化成为了产品,也就是它落地了,都是值得行业内学习的知识,以下是整理的我认为还可以的公众号,就当做免费推广了🍗🍗。

  1. 非解构
  2. Istructure
  3. 建筑结构参数化
  4. Dino结构笔记
  5. NoteplusShareTheWorld
  6. Nikko结构空间
  7. 以诗为码
  8. ……

后记

​ 接下来的一篇会以帮助文件中自带的一个python二次开发的例子作为引子(例子来源是sap2000的验证问题示例1-001,这个例子从头开始创建示例来验证这个问题,运行分析、提取结果并将结果与手算的值进行比较。),将一些基础性的东西慢慢展开。这个案例在筑信达的官方推送中也做了一个比较详细的分析,值得自己将两者结合起来一起看比较好,有助于理解的更加的深刻,所用的例子虽然很小,但是很有用。

ToTOP