Blog Links
-
Python语言 SAP2000 二次开发 —— 指定 (未完待续)
-
Python语言 SAP2000 二次开发 —— 分析 (未完待续)
-
Python语言 SAP2000 二次开发 —— 设计 (未完待续)
一、前言
本文主要介绍 SAP2000 GUI 主菜单栏中定义菜单内的有关内容。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
=============================
Author: DalNur
Email: liyang@alu.hit.edu.cn
=============================
"""
import win32com.client # 库导入
SapObject = win32com.client.Dispatch("Sap2000v15.SapObject") # 创建Sap2000对象
SapObject.ApplicationStart() # 启动Sap2000程序
SapModel = SapObject.SapModel # 创建SapModel对象
SapModel.InitializeNewModel(9) # 初始化模型,设置单位为N_mm_C。
ret = SapModel.File.NewBlank() # create new blank model
二、定义材料
2.1 创建新材料
matName = "Q235B" # 材料名称,若为已存在名称,则其相关属性将被修改,否则新建材料。
eMatType = 1 # 材料类型
color = -1 # 新建材料的颜色,-1表示采用系统默认配色。
# 'initialize new material property
ret = SapModel.PropMaterial.SetMaterial(matName, eMatType, color)
材料类型 | eMatType |
---|---|
MATERIAL_STEEL | 1 |
MATERIAL_CONCRETE | 2 |
MATERIAL_NODESIGN | 3 |
MATERIAL_ALUMINUM | 4 |
MATERIAL_COLDFORMED | 5 |
MATERIAL_REBAR | 6 |
MATERIAL_TENDON | 7 |
2.2 设置密度与重度
matName = "Q235B" # 须为已有材料的名称
rho = 7850 # 材料的质量密度
gamma = 78500 # 材料的重度
ret = SapModel.PropMaterial.SetWeightAndMass(matName, 1, gamma) # 设置材料的重度
ret = SapModel.PropMaterial.SetWeightAndMass(matName, 2, rho) # 设置材料的密度
Notes :密度和重度设置其一即可,另一个参数程序自动进行换算。
2.3 设置弹性模量、泊松比与线膨胀系数
matName = "Q235B" # 须为已有材料的名称
e = 2000000 # 弹性模量
mu = 0.3 # 泊松比
alpha = 0.00001 # 线膨胀系数
ret = SapModel.PropMaterial.SetMPIsotropic(matName, e, mu, alpha)
Notes :该方式定义各项同性材料的属性。
2.4 设置钢材力学行为
# 'assign other properties
matName = "Q235B" # 须为已有材料的名称
fy, fu = 55, 68 # 分别为屈服强度最小值和抗拉强度最小值
eFy, eFu = 60, 70 # The effective yield stress. The effective tensile stress.
SSType = 1 # This is 0 or 1, indicating the stress-strain curve type.
# 0 = User defined;1 = Parametric - Simple
SSHysType = 2 # This is 0, 1 or 2, indicating the stress-strain hysteresis type.
# 0 = Elastic;1 = Kinematic;2 = Takeda
StrainAtHardening, StrainAtMaxStress, StrainAtRupture = 0.02, 0.1, 0.2
FinalSlope = -0.1
ret = SapModel.PropMaterial.SetOSteel_1(matName, fy, fu, eFy, eFu, SSType, SSHysType,
StrainAtHardening, StrainAtMaxStress, StrainAtRupture, FinalSlope)
Parameters
- StrainAtHardening
This item applies only to parametric stress-strain curves. It is the strain at the onset of strain hardening.
- StrainAtMaxStress
This item applies only to parametric stress-strain curves. It is the strain at maximum stress. This item must be larger than the StrainAtHardening item.
- StrainAtRupture
This item applies only to parametric stress-strain curves. It is the strain at rupture. This item must be larger than the StrainAtMaxStress item.
以上代码创建的钢材属性如下图所示。
2.5 设置阻尼参数
# 'assign material damping data
# ret = SapModel.PropMaterial.SetDamping(matName, ModalRatio, ViscousMassCoeff,
# ViscousStiffCoeff, HystereticMassCoeff, HystereticStiffCoeff)
三、截面属性
3.1 框架截面
在 SAP2000 系统中框架截面的定义,包含了梁、柱、支撑等所有线对象类型构件的截面。系统本身自带了多种典型形状的截面定义功能,例如工字形、槽形、角形、管形等,基本上能够涵盖工程中所有涉及的截面形状。对于非标准形状构件截面或者组合构件截面,可以通过 SAP2000 截面设计器进行自定义。此外,各种行业标准的型钢构件可以从外部型钢数据文件导入,这些都极大方方便了工程师对构件截面的定义。
3.1.1 新建框架截面
- 角钢截面
secName = "ANGLE1" # 已存在/新框架截面属性名称
matName = "Q235B" # 须为已有材料的名称
t3, t2, tf, tw = 6, 4, 0.5, 0.5, # 参数分别为:垂直肢高度、水平肢宽度、水平肢厚度、垂直肢厚度。
color = -1 # 截面显示颜色。
ret = SapModel.PropFrame.SetAngle(secName, matName, t3, t2, tf, tw, color)
- 圆形截面
matName, secName, d, color = "Q235B", "C1", 20, -1 # d为直径
ret = SapModel.PropFrame.SetCircle(secName, matName, d, color)
- 圆管截面
secName, matName, d, t, color = "PIPE1", "Q235B", 8, 0.375, -1 # d、t分为外径和壁厚。
ret = SapModel.PropFrame.SetPipe(secName, matName, d, t, color)
- 槽钢截面
secName, matName, color = "CHN1", "Q235B", -1
t3, t2, tf, tw = 6, 4, 0.8, 0.5 # 参数分别为:截面高度、截面宽度、翼缘厚度、腹板厚度。
ret = SapModel.PropFrame.SetChannel(secName, matName, t3, t2, tf, tw, color)
- 工字钢截面
secName, matName, color = "ISec1", "Q235B", -1
t3, t2, tf, tw, t2b, tfb = 24, 10, 0.5, 0.3, 14, 0.6
# 截面高度、上翼缘宽度、上翼缘厚度、腹板厚度、下翼缘宽度、下翼缘厚度。
ret = SapModel.PropFrame.SetISection(secName, matName, t3, t2, tf, tw, t2b, tfb, color)
- 双角钢截面
secName, matName, color = "DBANG1", "Q235B", -1
t3, t2, tf, tw, dis = 6, 9, 0.5, 0.5, 1
# 垂直肢高度、水平向总宽度、水平肢厚度、垂直肢厚度,角钢间隙。
ret = SapModel.PropFrame.SetDblAngle(secName, matName, t3, t2, tf, tw, dis, color)
- 双槽钢截面
secName, matName, color = "DBCHN1", "Q235B", -1
t3, t2, tf, tw, dis = 12, 6.5, 0.5, 0.3, 0.5 # 截面高度、水平向总宽度、翼缘厚度、腹板厚度,槽钢间隙。
ret = SapModel.PropFrame.SetDblChannel(secName, matName, t3, t2, tf, tw, dis, color)
- 箱形截面
secName, matName, color = "TUBE1", "Q235B", -1
t3, t2, tf, tw = 8, 6, 0.5, 0.5 # 截面高度、截面宽度、翼缘厚度、腹板厚度
ret = SapModel.PropFrame.SetTube(secName, matName, t3, t2, tf, tw, color)
- T形截面
secName, matName, color = "TEE1", "Q235B", -1
t3, t2, tf, tw = 12, 10, 0.6, 0.3 # 截面高度、截面宽度、翼缘厚度、腹板厚度
ret = SapModel.PropFrame.SetTee(secName, matName, t3, t2, tf, tw, color)
- 一般/常规截面
# ret = SapModel.PropFrame.SetGeneral()
- 变截面
# ret = SapModel.PropFrame.SetNonPrismatic()
- 自动选择截面
# 定义的自动选择截面类型为钢结构
# ret = SapModel.PropFrame.SetAutoSelectSteel("AUTO1", 3, SectName, "ISEC2")
- SD截面
# 通过截面设计器定义的截面简称SD截面。
# SapObject.SapModel.PropFrame.SetSDSection()
# SDShape
以上代码创建的截面属性如下图所示。
3.1.2 设置框架截面修正系数
3.2 索截面
3.2.1 新建索截面
# 'set new cable property
secName, matName, color = "Cable1", "Q235B", 16711935 # 设置截面颜色为洋红
area = 2.25 # 索的横截面积
ret = SapModel.PropCable.SetProp(secName, matName, area, color)
3.2.2 设置索截面修正系数
areaModi, massModi, weightModi = 1.0, 2.0, 2.0
# 横截面积修正系数、质量修正系数、重量修正系数
secModifiers = [areaModi, massModi, weightModi]
secName = "Cable1" # 已存在的索截面名称
ret = SapModel.PropCable.SetModifiers(secName, secModifiers)
以上代码创建的索截面属性及其修正系数如下图所示。
索截面的显示颜色,如下图所示。
3.3 面截面
在 SAP2000 系统中,提供的面对象包括:壳 (Sell)、平面 (Plane) 和轴对称实体 (Asolid)。壳单元用来在平面或三维结构中模拟壳、膜和板的性能,是模型中最常用的一种,例如结构中的楼板、墙、坡面等均以壳定义。壳单元是一个组合了膜和板弯曲行为的3节点或4节点 (4节点单元不必为平面) 。根据对象的受力行为的特点将壳分为纯壳属性、膜属性和板属性。
3.3.1 新建面截面
- 壳/Shell
- 平面/Plane
- 轴对称实体/Asolid
3.3.2 设置面截面修正系数
3.4 实体属性
实体单元是一个8节点单元,多体现为六面体,是基于包含9个可选择的非协调弯曲模式的等参公式,用于模拟三维实体结构,例如坝体等大型浇筑体的力学分析。对于实体的节点只具有平动自由度,没有转动自由度。因此,以实体模拟的结构只传递力不传递弯矩。
# 'create model from template
ret = SapModel.File.NewSolidBlock(20, 50, 20)
secName, matName, color = "Solid1", "Q235B", -1
a, b, c = 0, 10, 20 # 三个材料角
incompatible = True # 启用非协调弯曲模式
# 'set new solid property
ret = SapModel.PropSolid.SetProp(secName, matName, a, b, c, incompatible)
四、坐标系
coordinate system
4.1 新建坐标系
def CreateNewCSys(csysName, x, y, z, rx, ry, rz):
"""新建坐标系
:param csysName: 新建坐标系的名称,若为已存在坐标系的名称,则该坐标系将被修改;
:param x、y、z: 分别新坐标系的原点坐标,相对于全局Global坐标系,全局坐标系不能修改;
:param rx、ry、rz: 分别新坐标系的旋转角度,单位为度。
"""
retVal = SapModel.CoordSys.SetCoordSys(csysName, x, y, z, rz, ry, rx)
assert retVal == 0 # 返回值retVal为0表示程序成功运行
print(retVal)
return retVal
# 在全局坐标系下创建直线框架,起点为(0, 0, 0),终点为(10, 10, 0)。
SapModel.FrameObj.AddByCoord(0, 0, 0, 10, 10, 0, None, "Default", "Frame1", "Global")
# define new coordinate system
# 定义名为"MyCSys"坐标系
# 局部坐标系原点在全局坐标系中的坐标为(20, 20, 0)
# 局部坐标局部z轴正方向指向全局坐标系的x轴的正方向
CreateNewCSys("MyCSys", 20, 20, 0, 0, 90, 0)
# 框架Frame1在局部坐标系MyCSys下的起止点坐标分别为:(0, -20, -20) 和 (0, -10, -10)。
4.2 设定当前
# 'set present coordinate system
ret = SapModel.SetPresentCoordSystem("MyCSys")
# refresh view, update (initialize) zoom
ret = SapModel.View.RefreshView(0, False)
五、节点束缚
constraint
使用节点束缚的基本功效是限制了结构中某些节点之间的相对自由度,因此减少了系统中需要求解的方程数量,通常可以提高计算效率。
大多数束缚类型必须相对某个固定的坐标系来定义。坐标系可以是整体坐标系或附件坐标系,还可以从被束缚的节点位置自动定义。局部束缚不使用固定坐标系,而是使用节点局部坐标系。
SAP2000 中共有 9 种节点束缚的类型:Body (体)、Diaphragm (隔板)、Plate (板)、Rod (杆)、Beam (梁)、Weld (拼接)、Equal (对等)、Local (局部轴) 和 Line (线) 。这 9 种节点束缚分为三大类:刚体类型、对等类型和插值类型。
5.1 刚体类型
束缚将所有节点按同一类型刚体一起运动,会耦合旋转和平动自由度。所有的束缚节点是刚体行为,被限制的节点一起平动和转动,好像被刚性连接所连接。
刚体类型的节点束缚包括:Body (体)、Diaphragm (隔板)、Plate (板)、Rod (杆) 和 Beam (梁) ,共五种束缚类型。
- 定义刚体束缚/Body
体约束导致了其所有约束的节点像一个三维刚体一样一起运动。默认情况下,每一个相连节点的所有自由度都参与。但是,用户可以选择一个要施加约束的自由度子组。
该约束用于:
• 任意尺寸和类型的模型刚体。
• 模型刚性连接,例如几个梁和/或柱框架连接之处。对于连接有偏心处,该约束格外有效。
• 将使用不同剖分的结构模型的不同部分连接起来。必须为各组约束节点定义独立的约束。如果用户需要建立大量的这种连接,要考虑使用焊接约束 代替。
要在模型中产生作用,该约束必须具有至少两个节点。这两个节点可以具有任意空间位置。
约束自由度:选择要约束的自由度。默认情况下,将约束所有的自由度,由约束节点形成一个整体刚性体。
• 如果用户只选择X、Y 平动和Z旋转,而且如果这些节点位于一个垂直于所选坐标系Z轴的平面内,则等效于一个隔板约束。
• 如果用户选择约束一个平动而不是与之垂直的两个转动,当节点不一致时,会出现抑制模型的可能。例如,如果用户约束X方向平动而不是Y轴旋转,而且节点在Z向上有一个非零距离,则由X轴方向力产生的绕Y轴的弯矩将被抑制。
# 'define new constraint
constraintName = "Body1" # 新建节点束缚的名称
constraintDOFs = ["Ux", "Uy"] # 要约束的自由度
CSys = "Global" # 坐标系名称
dofs = ["Ux", "Uy", "Uz", "Rx", "Ry", "Rz"]
val = [1 if i in constraintDOFs else 0 for i in dofs]
ret = SapModel.ConstraintDef.SetBody(constraintName, val, CSys)
5.2 对等类型
不同节点的各独立自由度相同,约束节点的平动和转动自由度是相等的。一般用于连接和对称情况。
对等类型的节点束缚包括:Equal (对等) 和 Local (局部轴) 两种类型。
5.3 插值类型
将一个节点的自由度通过其他节点的自由度插值得到。一般用于连接不协调的单元,即为 Line (线) 类型的节点束缚。
六、节点样式
joint pattern
对于简单的荷载可直接施加给对象,但是对于描述数值复杂的空间荷载分布,节点样式非常有效。
节点样式是包含标量数值的一个组,相当于在节点处定义的一组标量,与坐标系无关。每个数值对应结构上的一个节点。节点样式用来描述结构上复杂的温度变化和压力分布。
节点样式本身不在结构上产生荷载,需要将已经命名的节点样式指定给具体的节点后,才会对框架单元产生温度变化,对面单元产生压力变化。
# create model from template
ret = SapModel.File.New2DFrame(0, 3, 124, 3, 200)
# define a new joint pattern
ret = SapModel.PatternDef.SetPattern("MyPattern")
七、定义组
组的概念是 SAP2000 中某些强有力工具的基础。组是指定了一个特有名称的对象集合。在 SAP2000 中,组可以用来实现多种目的。每个对象都可以成为多个组中的一部分。所有的对象都是名为 “ALL” 内置组的一部分。
组使用 使用该对话框中该区域的复选框来指定组的使用方法。按照用途(如:选择对象、定义截面切割、指定设计组等)将组"归类"使用;例如,在一个大的模型中,定义了大量的组,在钢结构设计时只需要少量的组(即组中的对象)。因此,如果在定义一个名为 GROUP1 的组时,“钢框架设计组"复选框未被选中,则当使用设计 > 钢框架设计 > 选择设计组 命令 并将该组(即组中的对象)指定为需设计的时候,将设计该组。如果不勾选"钢框架设计组”,GROUP1 则不可用。如果用户不知道如何操作,选中所有的选项,或者使用默认选项。
# 'define new group
groupName = "MyGroup" # 新建组名
color = -1 # 组的显示颜色
ret = SapModel.GroupDef.SetGroup(groupName, color)
八、定义函数
8.1 反应谱
反应谱函数只是一列相对于加速度数值的反应谱周期值。在 SAP2000 中,函数中的加速度数值假定为常量化;也就是说,函数本身被假定没有单位。当定义反应谱工况的时候,以一个乘以函数的比例系数替换相关的单位并且指定它,在定义反应谱荷载工况 时指定该比例系数。
注意:默认情况下,程序预定义一个单位常数反应谱函数。该函数可以被修改或删除。
重要提示:可以为任意周期范围定义反应谱函数,从T0到 Tn。对于小于给定第一周期T0的所有周期,其函数值设定为常数即T0对应的函数值。对于大于最终周期Tn的所有周期,其函数值设定为常数即Tn对应的函数值。
8.1.1 反应谱来自文件
8.1.2 自定义反应谱
8.1.3 规范指定反应谱
8.2 时程
8.2.1 函数来自文件
8.2.2 {类型} 函数
8.2.3 自定义函数
8.2.4 自定义周期函数
8.3 功率谱密度
8.4 稳态
九、荷载模式
十、荷载工况
十一、荷载组合
十二、示例
import win32com.client # 库导入
SapObject = win32com.client.Dispatch("Sap2000v15.SapObject") # 创建Sap2000对象
SapObject.ApplicationStart() # 启动Sap2000程序
SapModel = SapObject.SapModel # 创建SapModel对象
SapModel.InitializeNewModel(10) # 初始化模型,设置单位为N_m_C。
ret = SapModel.File.NewBlank() # create new blank model
十三、尾声
以上,便是 SAP2000 二次开发 —— 定义 部分的简介,如有疑问欢迎邮件来询。
仅以此文为我 Python 调用 SAP2000 的学习做一个总结,同时也为有需要的人提供多一点参考。
胸藏文墨怀若谷,腹有诗书气自华,希望各位都能在知识的 pāo 子里快乐徜徉。
因个人水平有限,文中难免有所疏漏,还请各位大神不吝批评指正。
最后,祝各位攻城狮们,珍爱生命,保护发际线!
欢迎大家点赞、评论及转载,转载请注明出处!
为我打call,不如为我打款!