0% found this document useful (0 votes)
8 views5 pages

Base Plate Bolt Design Calculator

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views5 pages

Base Plate Bolt Design Calculator

Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

import math

import pandas as pd

# --- LOAD SECTION PROPERTIES ---


try:
df = pd.read_excel("Steel [Link]", sheet_name="Base Plate")
[Link] = [Link]()
except Exception as e:
print(f"❌ Error reading Excel file: {e}")
exit()

# --- INPUT SECTION ---


section = input("Enter Section (e.g., ISHB200): ").strip().upper()
bolt_grade = input("Enter Bolt Grade (e.g., 8.8): ").strip()
member_grade = input("Enter Member Grade (e.g., E250):
").strip().upper()
try:
bolt_dia = float(input("Enter Bolt Diameter in mm: "))
Fx = float(input("Enter factored shear force Fx (in kN): "))
Fz = float(input("Enter factored axial force Fz (in kN): "))
Mz = float(input("Enter factored moment Mz (in kNm): "))
My = float(input("Enter factored moment My (in kNm): "))
Mx = float(input("Enter factored moment Mx (in kNm): "))
a = float(input("Enter edge distance 'a' along depth (mm): "))
b = float(input("Enter edge distance 'b' along width (mm): "))
except ValueError:
print("❌ Invalid numeric input. Please enter valid numbers.")
exit()

# --- FETCH SECTION DATA ---


sec_data = df[df['Section'] == section]

if sec_data.empty:
print("❌ Section not found in database.")
print("Available sections:", df['Section'].tolist())
exit()

D = float(sec_data['D'].values[0])
Bf = float(sec_data['B'].values[0])
Tf = float(sec_data['Tf'].values[0])
Tw = float(sec_data['Tw'].values[0])

# --- MATERIAL STRENGTHS ---


gamma_m2 = 1.25
fck = 25 # Concrete grade M25

# Bolt grade properties


if bolt_grade == "8.8":
fub = 800
fyb = 640
elif bolt_grade == "10.9":
fub = 1040
fyb = 940
else:
print("❌ Unsupported bolt grade, defaulting to 400/240 MPa.")
fub = 400
fyb = 240

# Member steel grade properties


if member_grade in ["E250", "FE250"]:
fy = 250
fu = 410
elif member_grade in ["E350", "FE350"]:
fy = 350
fu = 490
elif member_grade in ["E450", "FE450"]:
fy = 450
fu = 570
elif member_grade in ["E550", "FE550"]:
fy = 550
fu = 600
else:
print("❌ Unsupported member grade, defaulting to E250 values.")
fy = 250
fu = 410

# --- BASE PLATE GEOMETRY ---


A = D + 2 * a
B = Bf + 2 * b
actual_base_plate_area = A * B
min_base_plate_area = Fx * 1000 / (0.45 * fck) # in mm²
w = Fx * 1000 / actual_base_plate_area # kN to N/mm² (pressure)

# Thickness calculation with safety check


val = (2.5 * w * (a ** 2 - 0.3 * b ** 2) * 1.1) / fy
if val <= 0:
print("❌ Invalid input parameters: negative sqrt argument in
thickness calculation.")
exit()
tmin = [Link](val)
t = max(10, tmin) # Assuming minimum thickness of 10 mm

# --- BOLT CAPACITY CALCULATION ---


bolt_area = [Link] * (bolt_dia ** 2) / 4
bolt_hole_dia = bolt_dia + 2
e1 = a / 2
e2 = b / 2
lever_y = A - 2 * e1
lever_z = B - 2 * e2
# Bolt shear capacity (Vdsb)
bolt_area_net = 0.78 * ([Link]/4 * bolt_dia ** 2 )
Vdsb = (fub / [Link](3)) * bolt_area_net / gamma_m2 / 1000 # kN

# Bolt bearing capacity (Vdpb)


Lvc = e1
kb = min(Lvc * bolt_dia / 3, fub / fu, 1)
Vdpb = 2.5 * kb * bolt_dia * t * fu / (gamma_m2 * 1000) # kN

# Bolt tension capacity (Tdb)


Tdb_nom1 = min (0.9 * fub * 0.78 * ([Link]/4) * bolt_dia ** 2,fyb *
([Link]/4 * bolt_dia ** 2 * 1.25)/1.1)
Tdb = Tdb_nom1 / gamma_m2 / 1000 # kN

# --- BOLT REQUIREMENTS ---


try:
n_bolt_y = [Link]((Fx + (My * 1000 / lever_z)) / min(Tdb, Vdpb)
/ 2) * 2
n_bolt_z = [Link]((Fx + (Mz * 1000 / lever_y)) / min(Tdb, Vdpb)
/ 2) * 2
n_bolt_in_shear = [Link](((Fx + (Mx * 1000 / min(lever_y,
lever_z))) / min(Vdsb, Vdpb)) / 2) * 2
except ZeroDivisionError:
print("❌ Error: Division by zero in bolt count calculations. Check
input values.")
exit()

n_total = max(n_bolt_y, n_bolt_z, n_bolt_in_shear)

# --- FORCES ON BOLTS ---


shear_on_bolt = (Fx + (Mx * 1000 / min(lever_y, lever_z))) / n_total
T_y = (Fx + (My * 1000 / lever_z)) / n_bolt_y if n_bolt_y != 0 else 0
T_z = (Fx + (Mz * 1000 / lever_y)) / n_bolt_z if n_bolt_z != 0 else 0
T_max = max(T_y, T_z)

# --- INTERACTION CHECK ---


interaction = (shear_on_bolt / Vdsb) ** 2 + (T_max / Tdb) ** 2
bolt_check = "PASS" if interaction <= 1.0 else "FAIL"
plate_check = "PASS" if actual_base_plate_area >= min_base_plate_area
else "FAIL"

# --- OUTPUT ---


print("\n--- BASE PLATE BOLT DESIGN RESULTS ---")
print(f"✅ Section Used: {section}")
print(f" Depth (D): {D} mm")
print(f" Flange Width (Bf): {Bf} mm")
print(f" Flange Thickness (Tf): {Tf} mm")
print(f" Web Thickness (Tw): {Tw} mm")
print(f"\nBase Plate Size A x B = {A:.1f} mm x {B:.1f} mm")
print(f"Required Base Plate Area ≥ {min_base_plate_area:.0f} mm² →
{plate_check}")
print(f"Thickness Required (tmin) = {tmin:.2f} mm, Assumed Thickness t
= {t:.2f} mm")
print(f"Bolt Dia = {bolt_dia} mm, Bolt Area = {bolt_area:.1f} mm²")

print("\n=== BOLT DESIGN STRENGTHS ===")


print(f"Shear Capacity Vdsb: {Vdsb:.2f} kN")
print(f"Bearing Capacity Vdpb: {Vdpb:.2f} kN")
print(f"Tensile Capacity Tdb: {Tdb:.2f} kN")

print("\n=== BOLT REQUIREMENTS ===")


print(f"Bolts Required in Y-Moment (n_bolt_y): {n_bolt_y}")
print(f"Bolts Required in Z-Moment (n_bolt_z): {n_bolt_z}")
print(f"Bolts Required in Shear: {n_bolt_in_shear}")
print(f"Final Number of Bolts (max of above): {n_total}")

print("\n=== FORCES ON BOLTS ===")


print(f"Shear Force on Each Bolt: {shear_on_bolt:.2f} kN")
print(f"Tensile Force on Each Bolt (Y): {T_y:.2f} kN")
print(f"Tensile Force on Each Bolt (Z): {T_z:.2f} kN")
print(f"Maximum Tensile Force on Bolt: {T_max:.2f} kN")

print("\n=== INTERACTION CHECK ===")


print(f"Interaction Value: {interaction:.2f}")
if bolt_check == "PASS":
print("✅ Bolt design is SAFE.")
else:
print("❌ Bolt design is NOT SAFE. Increase bolt size or number of
bolts.")

Enter Section (e.g., ISHB200): ismb400


Enter Bolt Grade (e.g., 8.8): 8.8
Enter Member Grade (e.g., E250): E350
Enter Bolt Diameter in mm: 16
Enter factored shear force Fx (in kN): 21.408
Enter factored axial force Fz (in kN): 9.366
Enter factored moment Mz (in kNm): 22.918
Enter factored moment My (in kNm): 13.984
Enter factored moment Mx (in kNm): 0
Enter edge distance 'a' along depth (mm): 62.5
Enter edge distance 'b' along width (mm): 57.5

--- BASE PLATE BOLT DESIGN RESULTS ---


✅ Section Used: ISMB400
Depth (D): 400.0 mm
Flange Width (Bf): 140.0 mm
Flange Thickness (Tf): 16.0 mm
Web Thickness (Tw): 8.9 mm

Base Plate Size A x B = 525.0 mm x 255.0 mm


Required Base Plate Area ≥ 1903 mm² → PASS
Thickness Required (tmin) = 1.91 mm, Assumed Thickness t = 10.00 mm
Bolt Dia = 16.0 mm, Bolt Area = 201.1 mm²

=== BOLT DESIGN STRENGTHS ===


Shear Capacity Vdsb: 57.95 kN
Bearing Capacity Vdpb: 156.80 kN
Tensile Capacity Tdb: 90.33 kN

=== BOLT REQUIREMENTS ===


Bolts Required in Y-Moment (n_bolt_y): 2
Bolts Required in Z-Moment (n_bolt_z): 2
Bolts Required in Shear: 2
Final Number of Bolts (max of above): 2

=== FORCES ON BOLTS ===


Shear Force on Each Bolt: 10.70 kN
Tensile Force on Each Bolt (Y): 46.11 kN
Tensile Force on Each Bolt (Z): 35.48 kN
Maximum Tensile Force on Bolt: 46.11 kN

=== INTERACTION CHECK ===


Interaction Value: 0.29
✅ Bolt design is SAFE.

You might also like