⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 自动生成结构数据.bas

📁 钢筋混凝土框架结构设计计算源程序
💻 BAS
字号:
Attribute VB_Name = "Module6"
Option Explicit
Sub 自动生成NgnXY()
    Dim i, j
    Dim s0 As String, s1 As String, Nh As Integer, Ns As Integer
    s0 = 0: s1 = 0: Kuatot = 0: Cengtot = 0
    s0 = Kua         '跨串
    s1 = Ceng        '层串
    Call LxLy(s0, s1)
    柱总数 = Cengshu * (Kuashu + 1)
    For i = 1 To Kuashu
        Kuatot = Kuatot + Lx(i)       '单位:米
    Next i
    For i = 1 To Cengshu
        Cengtot = Cengtot + Ly(i)
   Next i
   Call SetNgnXY
End Sub
Sub LxLy(s0 As String, s1 As String)    '从层串跨串中取出总层数和总跨数及各层各跨长
    Dim N1, N2, i As Integer, j As Integer
    i = 0
    Do
        N1 = InStr(s0, "*")
        N2 = InStr(s0, "+")
        For j = 1 To Val(s0)
            i = i + 1
            Lx(i) = Val(Mid(s0, N1 + 1)) / 1000
            Next j
        If N2 = 0 Then Exit Do
        s0 = Mid$(s0, N2 + 1)
    Loop
    Kuashu = i
    i = 0
    Do
        N1 = InStr(s1, "*")
        N2 = InStr(s1, "+")
        For j = 1 To Val(s1)
            i = i + 1
            Ly(i) = Val(Mid$(s1, N1 + 1)) / 1000          '单位:米
        Next j
        If N2 = 0 Then Exit Do
        s1 = Mid$(s1, N2 + 1)
    Loop
    Cengshu = i
End Sub
Sub EAI的自动生成()
    Dim temp As String, n As Integer, M As Integer, B As Single, H As Single
    Dim i As Integer, j As Integer, k As Integer, L As Integer, N1 As Integer
    k = 1
    For i = 1 To Cengshu     '柱 b*hC. 例250*400C20
        For j = 1 To Kuashu + 1
            temp = CTable(Cengshu + 1 - i, j)
            n = InStr(temp, "*")
            M = InStr(temp, "C")
            N1 = Len(temp)
            B = Val(Left$(temp, n - 1))
            H = Val(Mid$(temp, n + 1, M - n - 1))
            EAI(k, 1) = Elast(Right$(temp, N1 - M + 1))   ' N/mm2
            EAI(k, 2) = B / 1000 * H / 1000              '注意单位m2
            EAI(k, 3) = B / 1000 * (H / 1000) ^ 3 / 12
            BH(k, 1) = B
            BH(k, 2) = H
            混凝土标号(k) = Right$(temp, N1 - M + 1)
            L = Length(k)
            EIL(k) = EAI(k, 1) * EAI(k, 3) / L
            tuxing1.Command.Text = tuxing1.Command.Text + Str(k) + "单元第" + Str(i) + "层第" + Str(j) + "跨柱" + Str(B) + "×" + Str(H) + vbCrLf
            k = k + 1
        Next j
    Next i
    For i = 1 To Cengshu    '梁        '250*400C20
        For j = 1 To Kuashu
            temp = BTable(Cengshu + 1 - i, j)
            n = InStr(temp, "*")
            M = InStr(temp, "C")
            N1 = Len(temp)
            B = Val(Left$(temp, n - 1))
            H = Val(Mid$(temp, n + 1, M - n - 1))
            EAI(k, 1) = Elast(Right$(temp, N1 - M + 1))
            EAI(k, 2) = B / 1000 * H / 1000                 '注意单位m2
'            EAI(k, 3) = B / 1000 * (H / 1000) ^ 3 / 12
            BH(k, 1) = B
            BH(k, 2) = H
            混凝土标号(k) = Right$(temp, N1 - M + 1)
            EAI(k, 3) = TLI(k, B, H, Right$(temp, N1 - M + 1))
            L = Length(k)
            EIL(k) = EAI(k, 1) * EAI(k, 3) / L
            tuxing1.Command.Text = tuxing1.Command.Text + Str(k) + "单元第" + Str(i) + "层第" + Str(j) + "跨梁" + Str(B) + "×" + Str(H) + vbCrLf
            k = k + 1
        Next j
    Next i
End Sub
Sub SetNgnXY()  '这段程序为梁柱自动生成单元号并存储单元杆端结点号及节点坐标
    Dim X As Single            '以左下方为起点的横坐标
    Dim Y As Single            '以左下方为起点的纵坐标
    Dim n As Integer           '节点计数器
    Dim i As Integer, j As Integer
    '先将各柱按“从左至右,从下至上”的原则编号,并确定各柱的端点的结点号
    Ncell = 1                   '计数器,在过程中作单元号
    For i = 1 To Cengshu        '逐层
        For j = 1 To Kuashu + 1 '逐柱
            NGN(Ncell, 1) = (Kuashu + 1) * (i - 1) + j
            NGN(Ncell, 2) = NGN(Ncell, 1) + Kuashu + 1
            Ncell = Ncell + 1
        Next j
    Next i
    '       柱编号后,各梁也按“从左至右,从下至上”的原则接着柱编号,并确定各梁的端点的结点号
    For i = 1 To Cengshu              '逐层
        For j = 1 To Kuashu           '逐梁
            NGN(Ncell, 1) = i * (Kuashu + 1) + j
            NGN(Ncell, 2) = NGN(Ncell, 1) + 1
            Ncell = Ncell + 1
        Next j
    Next i
    '节点坐标生成
    Ncell = Ncell - 1
'    If Ncell <> (kuashu + 1 + kuashu) * cengshu Then Stop     '调试时语句
    Y = 0                           '起点的纵坐标
    n = 1                           '计数器
    For i = 1 To Cengshu + 1
        X = 0
        For j = 1 To Kuashu + 1
            XY(n, 1) = X             '记录X方向坐标
            XY(n, 2) = Y             '记录Y方向坐标
            n = n + 1
            X = X + Lx(j)
        Next j
        Y = Y + Ly(i)
    Next i
    '生成支座力
    Nodg = n - 1
    If Nodg <> (Kuashu + 1) * (Cengshu + 1) Then Stop
    For i = 1 To Ncell                   '各结点受力清零
        For j = 1 To 3
            XYM(i, j) = 0
        Next j
    Next i
End Sub
Function TLI(Ne As Integer, B As Single, H As Single, ci As String)
    Dim Hf As Single, Bf As Single, H0 As Single
    Dim temp As Single, A1 As Single, A2 As Single
    Dim Yc As Single
    Hf = Val(钢筋混凝土楼板厚度) / 1000
    Bf = Length(Ne) / 3
    H0 = (H - 保护层厚度(ci)) / 1000
    Select Case Hf / H0
        Case Is >= 0.05
            temp = B / 1000 + 6 * Hf
        Case Is >= 0.1
            temp = B / 1000 + 12 * Hf
        Case Else
            temp = B / 1000
    End Select
    If Bf > temp Then Bf = temp
    A1 = Bf * Hf
    A2 = B / 1000 * (H / 1000 - Hf)
    Yc = A2 * H / 2000 / (A1 + A2)
    TLI = B / 1000 * (H / 1000 - Hf) ^ 3 / 12 + A1 * (H / 2000 - Yc) ^ 2 + Bf / 1000 * (Hf / 1000) ^ 3 / 12 + A2 * Yc ^ 2
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -