?? 梁配筋.bas
字號:
Attribute VB_Name = "Module7"
Option Explicit
DefInt I-N
DefSng X-Y
Public 是否加3列 As Integer
Public 抗震等級 As String
Public ρmax As Single '最大配筋率
Public 是否排序過 As Integer
Public 配筋組合(1000) As String, 鋼筋面積(1000) As Integer
'分別調幅
Sub 彎矩調幅() '原理參多高層138頁
Dim i, N1, M1 As Single, M2 As Single, file As Variant
Dim loads As New Collection
'Collection 對象提供了簡便方法,直截了當將一組相關的項目視為單一對象來引用。集合中的項目或成員被這樣一個事實聯系起來:它們都屬于這個集合。集合的成員不一定都是同一種數據類型的。
'一旦建立集合之后,就可以用 Add 方法添加成員,用 Remove 方法刪除成員。在用 For Each...Next 語句重復整個集合時,可以用 Item 方法從集合返回特定成員。
Dim 梁端力 As 桿端內力
loads.Add "梯形恒載內力"
loads.Add "均布恒載內力"
loads.Add "活荷載A內力"
loads.Add "活荷載B內力"
loads.Add "風荷載內力"
loads.Add "地震作用內力"
For Each file In loads
Open Fname & file For Random As #10 Len = Len(梁端力)
For i = 1 To Ncell - 柱總數
Get #10, i, 梁端力
With 梁端力
.M1 = .M1 * 0.85 '彎矩調幅
.M2 = .M2 * 0.85
End With
Put #10, i, 梁端力
Next i
Close #10
Next
End Sub
Function 跨內Mmax(M1 As Single, M2 As Single, qq As Single, qt As Single, a As Single, L As Single)
Dim Mx As Single, X As Single, x2 As Single
Dim Mmax As Single, Q1 As Single, Q2 As Single
Q1 = (M1 + M2) / L + qq * L / 2 + qt * L / 2 - qt * a / 2 '將簡支梁上的力全部疊加疊加
Q2 = (qq + qt) * L - qt * a - Q1
Mmax = 0
'通過"十等分"梁計算跨內最大彎矩的近似值
For X = 0 To L Step L / 10
If X < a Then
Mx = Q1 * X - M1 - qq * X ^ 2 / 2
Mx = Mx - qt * X ^ 2 / 6
ElseIf X > a Then
Mx = Q1 * X - M1 - (qq + qt) * X ^ 2 / 2
Mx = Mx + qt * a / 2 * (X - a / 3)
Else
x2 = L - X
Mx = Q2 * x2 + M2 - (qq + qt) * x2 ^ 2 / 2
Mx = Mx - qt * x2 ^ 2 / 6
End If
If Mx > Mmax Then Mmax = Mx
Next X
跨內Mmax = Mmax
End Function
Sub 跨中M_恒12活14() '1.2*恒載+1.4*活荷載
Dim ii, i As Integer, M1 As Single, M2 As Single, qt As Single, qq As Single, a As Single, L As Single
Dim M1_ As Single, M2_ As Single, Mmax1 As Single, Mmax2 As Single
Dim qtA As Single, qtB As Single
Dim 荷載 As 單元荷載
Dim 梁端力 As 桿端內力, 梁不利 As 桿端內力
'讀內力
Close #2
Open Fname & "梯形恒載內力" For Random As #1 Len = Len(梁端力) '計算跨中彎矩
Open Fname & "均布恒載內力" For Random As #2 Len = Len(梁端力)
Open Fname & "活荷載A內力" For Random As #3 Len = Len(梁端力)
Open Fname & "活荷載B內力" For Random As #4 Len = Len(梁端力)
'讀Ld
Open Fname & "梯形恒載" For Random As #11 Len = Len(荷載)
Open Fname & "均布恒載" For Random As #12 Len = Len(荷載)
Open Fname & "活荷載A" For Random As #13 Len = Len(荷載)
Open Fname & "活荷載B" For Random As #14 Len = Len(荷載)
'放入Mmax
Open Fname & "梁不利" For Random As #20 Len = Len(梁不利)
ii = 柱總數 + 1
For i = ii To Ncell
With 梁端力
Get #1, i, 梁端力
Get #11, i - 柱總數, 荷載
M1 = .M1 * 1.2
M2 = .M2 * 1.2
qt = 荷載.s * 1.2 '梯形恒載
a = 荷載.Po 'T形荷載的位置
L = Length(i)
Get #2, i, 梁端力
Get #12, i - 柱總數, 荷載
M1 = M1 + .M1 * 1.2
M2 = M2 + .M2 * 1.2
qq = Ld(i).s * 1.2 ' 均布恒載
Mmax1 = 跨內Mmax(M1, M2, qq, qt, a, L)
Get #3, i, 梁端力
Get #13, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.4
M2_ = M2 + .M2 * 1.4
qtA = 荷載.s * 1.4 '梯形活載A
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtA, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
M1 = M1_
M2 = M2_
qt = qt + qtA '為便于后面作滿載布置而變qt
End If
Get #4, i, 梁端力
Get #14, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.4
M2_ = M2 + .M2 * 1.4
qtB = 荷載.s * 1.4 '梯形活載B
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtB, a, L) '這時的qt+qtB相當于最初的qt + qtA+qtB即滿載
If Mmax2 > Mmax1 Then Mmax1 = Mmax2 '最終完成 1.2*恒載+1.4*活荷載 的組合
End With
梁不利.N1 = Mmax1
Put #20, i - 柱總數, 梁不利
Next i
Close #1, #2, #3, #4, #11, #12, #13, #14, #20
End Sub
Sub 跨中M_恒12活風1485() '1.2*恒載+(1.4*活載+1.4*風載)*0.85
Dim ii, i As Integer, M1 As Single, M2 As Single, qt As Single, qq As Single, a As Single, L As Single
Dim M1_ As Single, M2_ As Single, Mmax1 As Single, Mmax2 As Single
Dim qtA As Single, qtB As Single
Dim 荷載 As 單元荷載
Dim 梁端力 As 桿端內力, 梁不利 As 桿端內力
'讀內力
Open Fname & "梯形恒載內力" For Random As #1 Len = Len(梁端力) '計算跨中彎矩
Open Fname & "均布恒載內力" For Random As #2 Len = Len(梁端力)
Open Fname & "活荷載A內力" For Random As #3 Len = Len(梁端力)
Open Fname & "活荷載B內力" For Random As #4 Len = Len(梁端力)
Open Fname & "風荷載內力" For Random As #5 Len = Len(梁端力)
'讀Ld
Open Fname & "梯形恒載" For Random As #11 Len = Len(荷載)
Open Fname & "均布恒載" For Random As #12 Len = Len(荷載)
Open Fname & "活荷載A" For Random As #13 Len = Len(荷載)
Open Fname & "活荷載B" For Random As #14 Len = Len(荷載)
Open Fname & "風荷載" For Random As #15 Len = Len(荷載)
'放入Mmax
Open Fname & "梁不利" For Random As #20 Len = Len(梁不利)
ii = 柱總數 + 1
For i = ii To Ncell
With 梁端力
Get #1, i, 梁端力
Get #11, i - 柱總數, 荷載
M1 = .M1 * 1.2
M2 = .M2 * 1.2
qt = 荷載.s * 1.2 '梯形恒載
a = 荷載.Po 'T形荷載的位置
L = Length(i)
Get #2, i, 梁端力
Get #12, i - 柱總數, 荷載
M1 = M1 + .M1 * 1.2
M2 = M2 + .M2 * 1.2
qq = Ld(i).s * 1.2 ' 均布恒載
Mmax1 = 跨內Mmax(M1, M2, qq, qt, a, L)
Get #3, i, 梁端力
Get #13, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.19 '1.19=0.85*1.4
M2_ = M2 + .M2 * 1.19
qtA = 荷載.s * 1.19 '梯形活載A
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtA, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
M1 = M1_
M2 = M2_
qt = qt + qtA '為便于后面作滿載布置而變qt
End If
Get #4, i, 梁端力
Get #14, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.19 '1.19=0.85*1.4
M2_ = M2 + .M2 * 1.19
qtB = 荷載.s * 1.19 '梯形活載B
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtB, a, L) '這時的qt+qtB相當于最初的qt + qtA+qtB即滿載
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2 '完成 1.2*恒載+1.4*活荷載*0.85 的組合
M1 = M1_
M2 = M2_
qt = qt + qtB
End If
Get #5, i, 梁端力
Get #15, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.19 '左風順坐標軸X方向所以取+號
M2_ = M2 + .M2 * 1.19
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
End If
M1_ = M1 - .M1 * 1.19 '右風逆坐標軸X方向所以取-號
M2_ = M2 - .M2 * 1.19
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2 '最終完成 1.2*恒載+(1.4*活載+1.4*風載)*0.85
End If
End With
'取原來的Mmax1比較
Get #20, i - 柱總數, 梁端力 '梁不利.M1 存放的是最大彎矩
If 梁端力.N1 < Mmax1 Then 梁端力.N1 = Mmax1
Put #20, i - 柱總數, 梁端力
Next i
Close #1, #2, #3, #4, #5, #11, #12, #13, #14, #15, #20
End Sub
Sub 跨中M_恒活12地震13() '1.2*(恒載+0.5*活載)+1.3*水平地震
Dim ii, i As Integer, M1 As Single, M2 As Single, qt As Single, qq As Single, a As Single, L As Single
Dim M1_ As Single, M2_ As Single, Mmax1 As Single, Mmax2 As Single
Dim qtA As Single, qtB As Single
Dim 荷載 As 單元荷載
Dim 梁端力 As 桿端內力, 梁不利 As 桿端內力
'讀內力
Open Fname & "梯形恒載內力" For Random As #1 Len = Len(梁端力) '計算跨中彎矩
Open Fname & "均布恒載內力" For Random As #2 Len = Len(梁端力)
Open Fname & "活荷載A內力" For Random As #3 Len = Len(梁端力)
Open Fname & "活荷載B內力" For Random As #4 Len = Len(梁端力)
Open Fname & "風荷載內力" For Random As #5 Len = Len(梁端力)
Open Fname & "地震作用內力" For Random As #6 Len = Len(梁端力)
'讀Ld
Open Fname & "梯形恒載" For Random As #11 Len = Len(荷載)
Open Fname & "均布恒載" For Random As #12 Len = Len(荷載)
Open Fname & "活荷載A" For Random As #13 Len = Len(荷載)
Open Fname & "活荷載B" For Random As #14 Len = Len(荷載)
Open Fname & "風荷載" For Random As #15 Len = Len(荷載)
Open Fname & "地震作用" For Random As #16 Len = Len(荷載)
'放入Mmax
Open Fname & "梁不利" For Random As #20 Len = Len(梁不利)
ii = 柱總數 + 1
For i = ii To Ncell
With 梁端力
Get #1, i, 梁端力
Get #11, i - 柱總數, 荷載
M1 = .M1 * 1.2
M2 = .M2 * 1.2
qt = 荷載.s * 1.2 '梯形恒載
a = 荷載.Po 'T形荷載的位置
L = Length(i)
Get #2, i, 梁端力
Get #12, i - 柱總數, 荷載
M1 = M1 + .M1 * 1.2
M2 = M2 + .M2 * 1.2
qq = Ld(i).s * 1.2 ' 均布恒載
Mmax1 = 跨內Mmax(M1, M2, qq, qt, a, L)
Get #3, i, 梁端力
Get #13, i - 柱總數, 荷載
M1_ = M1 + .M1 * 0.6 '0.6=1.2*0.5
M2_ = M2 + .M2 * 0.6
qtA = 荷載.s * 0.6 '梯形活載A
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtA, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
M1 = M1_
M2 = M2_
qt = qt + qtA '為便于后面作滿載布置而變qt
End If
Get #4, i, 梁端力
Get #14, i - 柱總數, 荷載
M1_ = M1 + .M1 * 0.6 '0.6=1.2*0.5
M2_ = M2 + .M2 * 0.6
qtB = 荷載.s * 0.6 '梯形活載B
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt + qtB, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
M1 = M1_
M2 = M2_
qt = qt + qtB '這時的qt+qtB相當于最初的qt + qtA+qtB即滿載
End If
Get #5, i, 梁端力
Get #15, i - 柱總數, 荷載
M1_ = M1 + .M1 * 1.3 '左地震力坐標軸X方向所以取+號
M2_ = M2 + .M2 * 1.3
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt, a, L)
If Mmax2 > Mmax1 Then
Mmax1 = Mmax2
End If
M1_ = M1 - .M1 * 1.3 '右地震力坐標軸X方向所以取-號
M2_ = M2 - .M2 * 1.3
Mmax2 = 跨內Mmax(M1_, M2_, qq, qt, a, L)
If Mmax2 > Mmax1 Then
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -