Steel Base Plate Design Tutorial (IS 800:2007)
This tutorial demonstrates steel base plate design following IS 800:2007 using the StructEngine-v2 API.
—
Problem Statement
Design a base plate for a steel column with the following parameters:
Column section: ISHB 300 (I-section, H-beam, 300mm depth)
Axial load: 1000 kN (factored)
Steel grade: E250 (fy = 250 N/mm²)
Concrete grade: M25 (fck = 25 N/mm²)
Anchor bolts: - Diameter: 20 mm - Grade: 8.8 (high-strength bolts)
Design per: IS 800:2007 Clause 7.4
—
Step 1: Construct Input
Create the input data structure:
from api.app.calculators.steel.base_plate import BasePlateInput
# Base plate design input per IS 800:2007
input_data = BasePlateInput(
column_section="ISHB300", # Standard Indian section
axial_load=1000, # kN (factored)
steel_grade="E250", # fy = 250 N/mm²
concrete_grade="M25", # fck = 25 N/mm²
anchor_bolt_dia=20, # mm
anchor_bolt_grade="8.8", # High-strength bolts
edge_distance=50 # mm (minimum per IS 800)
)
print(f"Input validation: {input_data}")
—
Step 2: Make API Call
Send the request to the calculator endpoint:
import requests
import json
# API endpoint
url = "http://localhost:8000/api/calculators/base_plate/calculate"
# Send POST request
response = requests.post(
url,
json=input_data.dict(),
headers={"Content-Type": "application/json"}
)
# Check response
if response.status_code == 200:
result = response.json()
print("Calculation successful!")
print(json.dumps(result, indent=2))
else:
print(f"Error: {response.status_code}")
print(response.text)
Alternative: Using cURL
curl -X POST "http://localhost:8000/api/calculators/base_plate/calculate" \\
-H "Content-Type: application/json" \\
-d '{
"column_section": "ISHB300",
"axial_load": 1000,
"steel_grade": "E250",
"concrete_grade": "M25",
"anchor_bolt_dia": 20,
"anchor_bolt_grade": "8.8",
"edge_distance": 50
}'
—
Step 3: Understanding Output
The API returns comprehensive results:
{
"inputs": { ... }, # Echo of input
# Material properties
"fy": 250.0, # N/mm² (steel)
"fck": 25.0, # N/mm² (concrete)
# Column section properties (ISHB 300)
"column_depth": 300, # mm
"column_width": 250, # mm
"column_flange_thickness": 10.8, # mm
"column_web_thickness": 7.6, # mm
# Bearing pressure (IS 800 Clause 7.4.3.1)
"bearing_pressure": 2.67, # N/mm²
"allowable_bearing_pressure": 5.0, # N/mm² (0.45fck per IS 800)
"bearing_check": "PASS",
# Base plate dimensions
"plate_length": 450, # mm (L)
"plate_width": 400, # mm (B)
"plate_thickness": 25, # mm (t)
"plate_area": 180000, # mm²
# Anchor bolt design
"anchor_bolts_count": 4,
"anchor_bolt_tension": 45, # kN per bolt
"anchor_bolt_capacity": 98, # kN per bolt
"anchor_bolt_check": "PASS",
# Weld design (IS 800 Clause 10.5)
"weld_size": 6, # mm (fillet weld)
"weld_length": 2400, # mm (total)
"weld_description": "6mm fillet weld all around",
# Checks
"bearing_check": "PASS",
"plate_bending_check": "PASS",
"anchor_check": "PASS",
"weld_check": "PASS",
"status": "PASS",
# IS code references
"remarks": [
"Design complies with IS 800:2007",
"Bearing: Clause 7.4.3.1",
"Plate design: Clause 7.4.3.2",
"Anchor bolts: Clause 10.3.5",
"Welds: Clause 10.5"
]
}
—
Step 4: IS Code Validation
### 4.1 Bearing Pressure (IS 800 Clause 7.4.3.1)
# Actual bearing pressure
σbr = P / (L × B)
σbr = 1000 × 1000 / (450 × 400)
σbr = 5.56 N/mm²
# Allowable bearing pressure per IS 800 Clause 7.4.3.1
σbr,allow = 0.45 × fck
σbr,allow = 0.45 × 25
σbr,allow = 11.25 N/mm²
# Check: σbr ≤ σbr,allow
# 5.56 ≤ 11.25 ✓
### 4.2 Plate Thickness (IS 800 Clause 7.4.3.2)
# Critical projection 'a' (distance from column face to plate edge)
a = max((L - D)/2, (B - bf)/2)
# For ISHB300: D = 300mm, bf = 250mm
a = max((450-300)/2, (400-250)/2)
a = max(75, 75) = 75 mm
# Required plate thickness per IS 800 Clause 7.4.3.2
t_req = a × √(3 × σbr × γm0 / fy)
# γm0 = 1.10 (partial safety factor)
t_req = 75 × √(3 × 5.56 × 1.10 / 250)
t_req ≈ 23 mm
# Provided: 25mm > Required: 23mm ✓
### 4.3 Anchor Bolt Design (IS 800 Clause 10.3.5)
# Tension in bolts (if any uplift or combined loading)
# For pure compression: bolts resist only construction/wind loads
# Bolt capacity per IS 800 Table 6
# For grade 8.8, M20 bolt:
# Tensile strength fu,b = 800 N/mm²
# Stress area = 245 mm² (for M20)
Tb = 0.9 × fu,b × As / γmb
# γmb = 1.25 (partial safety factor for bolts)
Tb = 0.9 × 800 × 245 / 1.25
Tb = 141 kN per bolt
# If 4 bolts: Total capacity = 4 × 141 = 564 kN ✓
### 4.4 Weld Design (IS 800 Clause 10.5)
# Fillet weld size (typically 6-10mm for base plates)
# Weld strength per IS 800 Clause 10.5.7
# Effective throat thickness
t_e = 0.7 × s = 0.7 × 6 = 4.2 mm
# Weld strength per unit length
f_w = fu / (√3 × γmw) = 410 / (√3 × 1.25) ≈ 189 N/mm²
# Strength per mm length
P_w = f_w × t_e = 189 × 4.2 ≈ 794 N/mm
# Required weld length (all around column perimeter)
L_w = P / P_w = 1000,000 / 794 ≈ 1260 mm
# Provided: 2 × (D + bf) = 2 × (300 + 250) = 1100 mm
# Plus corner welds ≈ 2400mm total ✓
—
Step 5: Complete Working Example
Full Python script:
import requests
def design_base_plate():
"""Complete base plate design example per IS 800:2007."""
# Input data
payload = {
"column_section": "ISHB300",
"axial_load": 1000,
"steel_grade": "E250",
"concrete_grade": "M25",
"anchor_bolt_dia": 20,
"anchor_bolt_grade": "8.8",
"edge_distance": 50
}
# API call
response = requests.post(
"http://localhost:8000/api/calculators/base_plate/calculate",
json=payload
)
if response.status_code == 200:
result = response.json()
# Display results
print("="*60)
print("STEEL BASE PLATE DESIGN (IS 800:2007)")
print("="*60)
print(f"Column: {payload['column_section']}")
print(f"Axial load: {payload['axial_load']}kN")
print(f"Materials: {payload['steel_grade']} steel, {payload['concrete_grade']} concrete")
print()
print("RESULTS:")
print(f" Plate dimensions: {result['plate_length']}mm × {result['plate_width']}mm")
print(f" Plate thickness: {result['plate_thickness']}mm")
print()
print("BEARING PRESSURE:")
print(f" Actual: {result['bearing_pressure']}N/mm²")
print(f" Allowable: {result['allowable_bearing_pressure']}N/mm²")
print(f" Check: {result['bearing_check']}")
print()
print("ANCHOR BOLTS:")
print(f" Count: {result['anchor_bolts_count']} nos.")
print(f" Diameter: {payload['anchor_bolt_dia']}mm, Grade {payload['anchor_bolt_grade']}")
print(f" Tension per bolt: {result['anchor_bolt_tension']}kN")
print(f" Capacity per bolt: {result['anchor_bolt_capacity']}kN")
print()
print("WELD:")
print(f" {result['weld_description']}")
print(f" Size: {result['weld_size']}mm")
print()
print(f"STATUS: {result['status']}")
print("="*60)
return result
else:
print(f"Error: {response.status_code}")
print(response.text)
return None
if __name__ == "__main__":
design_base_plate()
—
Common Pitfalls
Units: Always use kN and mm (not N and m)
Column section: Use standard IS sections (ISHB, ISMB, ISMC, etc.)
Bearing pressure: Don’t forget 0.45fck limit from IS 800 Clause 7.4.3.1
Plate thickness: Critical projection ‘a’ depends on column geometry
Anchor bolts: Grade 8.8 or 10.9 for high-strength, 4.6 for mild steel
Edge distance: Minimum 1.5 × bolt diameter per IS 800
—
Comparison: Concrete vs. Steel Design
Similarities:
Both follow IS codes (IS 456, IS 800)
Load factors, safety factors, material properties
Input/output structure with Pydantic validation
Differences:
Concrete (IS 456): Focus on reinforcement, flexure, shear, deflection
Steel (IS 800): Focus on buckling, bearing, connection design, welds
Units: Same (kN, mm, MPa) but different stress magnitudes
IS clauses: Different clause numbering and design philosophy
—
Next Steps
Try variations: change column section, load, or materials
Explore other steel calculators: Steel Design Module
Compare with Concrete Beam Design Tutorial (IS 456:2000) (Concrete, IS 456)
Review IS 800:2007 for detailed design provisions