目 錄
阿陽的SAP2000二次開發簡明教程,本系列博客僅用於個人學習,除此之外,無其他任何用途。
Blog Links
- Python語言 SAP2000 二次開發 —— 概述
- Python語言 SAP2000 二次開發 —— 定義
- Python語言 SAP2000 二次開發 —— 繪製
- Python語言 SAP2000 二次開發 —— 指定 (未完待續)
- Python語言 SAP2000 二次開發 —— 分析 (未完待續)
- Python語言 SAP2000 二次開發 —— 設計 (未完待續)
- Python語言 SAP2000 二次開發 —— 實例
因個人能力有限,該系列博客難免有所疏漏/錯誤,不妥之處還請各位批評指正。
本系列博客暫未全部完結,極其不定期的更新。
一、前沿
本文主要介紹 SAP2000 GUI 主菜單欄中定義菜單內的有關內容。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
=============================
Author: DalNur
Email: [email protected]
=============================
"""
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,不如爲我打款!