@structupath/pi-steel 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/package.json +37 -0
- package/skills/steel-rfq/SKILL.md +178 -0
- package/skills/steel-rfq/assets/company-profile.example.json +7 -0
- package/skills/steel-takeoff/SKILL.md +157 -0
- package/skills/steel-takeoff/assets/aisc-shapes-database.json +484 -0
- package/skills/steel-takeoff/assets/bom-template.csv +1 -0
- package/skills/steel-takeoff/assets/material-grades.json +153 -0
- package/skills/steel-takeoff/references/aisc-shapes-guide.md +96 -0
- package/skills/steel-takeoff/references/connection-types.md +124 -0
- package/skills/steel-takeoff/references/takeoff-procedures.md +163 -0
- package/skills/steel-takeoff/scripts/calculate-weight.sh +148 -0
- package/skills/steel-takeoff/scripts/lookup-member.sh +90 -0
- package/skills/steel-takeoff/scripts/validate-bom.py +218 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,Total_Wt_lbs,Connections,Notes
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"grade": "A992",
|
|
4
|
+
"description": "Standard specification for structural steel shapes",
|
|
5
|
+
"typical_use": "W-shapes (wide flange beams and columns)",
|
|
6
|
+
"Fy_ksi": 50,
|
|
7
|
+
"Fu_ksi": 65,
|
|
8
|
+
"Fy_Fu_ratio_max": 0.85,
|
|
9
|
+
"elongation_pct": 18,
|
|
10
|
+
"weldability": "Excellent — no preheat typically required",
|
|
11
|
+
"notes": "Default grade for all W-shapes. Replaced A36 as standard."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"grade": "A500 Gr. B",
|
|
15
|
+
"description": "Cold-formed welded/seamless structural tubing — round",
|
|
16
|
+
"typical_use": "HSS round shapes, round pipe columns",
|
|
17
|
+
"Fy_ksi": 42,
|
|
18
|
+
"Fu_ksi": 58,
|
|
19
|
+
"elongation_pct": 23,
|
|
20
|
+
"weldability": "Good — may need preheat for thick walls",
|
|
21
|
+
"notes": "Standard grade for round HSS. Check wall thickness for weld requirements."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"grade": "A500 Gr. C",
|
|
25
|
+
"description": "Cold-formed welded/seamless structural tubing — rectangular",
|
|
26
|
+
"typical_use": "HSS rectangular/square shapes, HSS columns and bracing",
|
|
27
|
+
"Fy_ksi": 50,
|
|
28
|
+
"Fu_ksi": 62,
|
|
29
|
+
"elongation_pct": 21,
|
|
30
|
+
"weldability": "Good — may need preheat for thick walls (≥1/2\")",
|
|
31
|
+
"notes": "Standard grade for rectangular/square HSS. Higher Fy than Gr. B."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"grade": "A36",
|
|
35
|
+
"description": "Carbon structural steel",
|
|
36
|
+
"typical_use": "Angles, channels, plates, miscellaneous shapes",
|
|
37
|
+
"Fy_ksi": 36,
|
|
38
|
+
"Fu_ksi": 58,
|
|
39
|
+
"elongation_pct": 20,
|
|
40
|
+
"weldability": "Excellent — easiest steel to weld",
|
|
41
|
+
"notes": "Legacy standard. Still used for angles, channels, and plates. Dual-certified with A992 for many W-shapes."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"grade": "A572 Gr. 50",
|
|
45
|
+
"description": "High-strength low-alloy structural steel",
|
|
46
|
+
"typical_use": "Plates, built-up sections, heavy columns",
|
|
47
|
+
"Fy_ksi": 50,
|
|
48
|
+
"Fu_ksi": 65,
|
|
49
|
+
"elongation_pct": 18,
|
|
50
|
+
"weldability": "Good — preheat may be required for thick plates",
|
|
51
|
+
"notes": "Used for plates and built-up members. Same Fy as A992."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"grade": "A572 Gr. 42",
|
|
55
|
+
"description": "High-strength low-alloy structural steel — Grade 42",
|
|
56
|
+
"typical_use": "Lighter plates, structural shapes",
|
|
57
|
+
"Fy_ksi": 42,
|
|
58
|
+
"Fu_ksi": 60,
|
|
59
|
+
"elongation_pct": 20,
|
|
60
|
+
"weldability": "Good",
|
|
61
|
+
"notes": "Less common than Gr. 50. Check availability."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"grade": "A913 Gr. 50",
|
|
65
|
+
"description": "HSLA quenched and self-tempered shapes",
|
|
66
|
+
"typical_use": "Jumbo W-shapes (Group 4 and 5), heavy columns",
|
|
67
|
+
"Fy_ksi": 50,
|
|
68
|
+
"Fu_ksi": 65,
|
|
69
|
+
"elongation_pct": 21,
|
|
70
|
+
"weldability": "Excellent — superior to A992 for thick sections, no preheat needed",
|
|
71
|
+
"notes": "Premium grade for heavy sections. Better CVN toughness. Typically 5-10% cost premium."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"grade": "A913 Gr. 65",
|
|
75
|
+
"description": "HSLA quenched and self-tempered shapes — Grade 65",
|
|
76
|
+
"typical_use": "Heavy columns, high-rise applications",
|
|
77
|
+
"Fy_ksi": 65,
|
|
78
|
+
"Fu_ksi": 80,
|
|
79
|
+
"elongation_pct": 17,
|
|
80
|
+
"weldability": "Good — follow AWS D1.1 for thick sections",
|
|
81
|
+
"notes": "High-strength grade for reducing column sizes. Verify availability and lead time."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"grade": "A514",
|
|
85
|
+
"description": "High-yield-strength quenched and tempered alloy steel plates",
|
|
86
|
+
"typical_use": "Base plates, heavy gusset plates, built-up columns",
|
|
87
|
+
"Fy_ksi": 100,
|
|
88
|
+
"Fu_ksi": 115,
|
|
89
|
+
"elongation_pct": 16,
|
|
90
|
+
"weldability": "Requires special procedures — preheat, low-hydrogen electrodes, controlled heat input",
|
|
91
|
+
"notes": "Very high strength but difficult to weld. Use only when specified by engineer."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"grade": "A588 / A242",
|
|
95
|
+
"description": "Weathering steel — atmospheric corrosion resistant",
|
|
96
|
+
"typical_use": "Exposed structural steel, bridges, exterior applications",
|
|
97
|
+
"Fy_ksi": 50,
|
|
98
|
+
"Fu_ksi": 70,
|
|
99
|
+
"elongation_pct": 18,
|
|
100
|
+
"weldability": "Good — use matching weathering filler metals",
|
|
101
|
+
"notes": "Forms protective patina, no painting required. Not suitable for submerged or constantly wet conditions. Also known as COR-TEN."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"grade": "A53 Gr. B",
|
|
105
|
+
"description": "Pipe — welded and seamless",
|
|
106
|
+
"typical_use": "Standard weight, extra-strong, and double extra-strong pipe",
|
|
107
|
+
"Fy_ksi": 35,
|
|
108
|
+
"Fu_ksi": 60,
|
|
109
|
+
"elongation_pct": 22,
|
|
110
|
+
"weldability": "Excellent",
|
|
111
|
+
"notes": "Standard pipe grade. Available in STD, XS (extra strong), and XXS (double extra strong) wall thicknesses."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"grade": "A325",
|
|
115
|
+
"description": "High-strength bolts for structural joints",
|
|
116
|
+
"typical_use": "Standard structural bolts — 3/4\", 7/8\", 1\" diameter",
|
|
117
|
+
"Fy_ksi": 92,
|
|
118
|
+
"Fu_ksi": 120,
|
|
119
|
+
"elongation_pct": 14,
|
|
120
|
+
"weldability": "N/A — bolts not welded",
|
|
121
|
+
"notes": "Most common structural bolt. Superseded by ASTM F3125 Gr. A325 but still commonly referenced. Available as bearing (N/X) or slip-critical (SC)."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"grade": "A490",
|
|
125
|
+
"description": "High-strength bolts — heat treated",
|
|
126
|
+
"typical_use": "Heavy connections, moment frames, high-load joints",
|
|
127
|
+
"Fy_ksi": 130,
|
|
128
|
+
"Fu_ksi": 150,
|
|
129
|
+
"elongation_pct": 14,
|
|
130
|
+
"weldability": "N/A — bolts not welded, never galvanized",
|
|
131
|
+
"notes": "Higher capacity than A325. Cannot be galvanized. Superseded by ASTM F3125 Gr. A490."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"grade": "F1852",
|
|
135
|
+
"description": "Twist-off type tension control bolt (TC bolt) — A325 equivalent",
|
|
136
|
+
"typical_use": "Field connections — easier installation verification than A325",
|
|
137
|
+
"Fy_ksi": 92,
|
|
138
|
+
"Fu_ksi": 120,
|
|
139
|
+
"elongation_pct": 14,
|
|
140
|
+
"weldability": "N/A",
|
|
141
|
+
"notes": "TC bolts have a splined end that shears off at proper pretension. Same capacity as A325. Commonly used for slip-critical connections."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"grade": "E70XX",
|
|
145
|
+
"description": "Weld electrode/filler metal — 70 ksi tensile",
|
|
146
|
+
"typical_use": "Fillet welds, CJP welds, PJP welds on A36/A992/A572 steel",
|
|
147
|
+
"Fy_ksi": 58,
|
|
148
|
+
"Fu_ksi": 70,
|
|
149
|
+
"elongation_pct": 22,
|
|
150
|
+
"weldability": "N/A — this IS the filler metal",
|
|
151
|
+
"notes": "Standard electrode classification. FEXX = 70 ksi. Matches A992 and lower steels. Common designations: E7018 (SMAW), ER70S-6 (GMAW), E71T-1 (FCAW)."
|
|
152
|
+
}
|
|
153
|
+
]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# AISC Shapes Guide — 16th Edition
|
|
2
|
+
|
|
3
|
+
## Shape Families
|
|
4
|
+
|
|
5
|
+
### W-Shapes (Wide Flange)
|
|
6
|
+
- **Designation**: WdXw (e.g., W14X30 = 14" nominal depth, 30 plf)
|
|
7
|
+
- **Grade**: A992 (Fy=50 ksi) — default for all W-shapes
|
|
8
|
+
- **Range**: W4X13 to W44X335 (standard) up to W14X730 (jumbo column)
|
|
9
|
+
- **Use**: Beams, columns, girders — the workhorse of structural steel
|
|
10
|
+
- **Key Properties**: d, bf, tf, tw, A, Ix, Sx, Iy, Sy, Zx, Zy, ry
|
|
11
|
+
|
|
12
|
+
**Common Beam Sizes**: W8, W10, W12, W14, W16, W18, W21, W24, W27, W30, W33, W36
|
|
13
|
+
**Common Column Sizes**: W10, W12, W14 (wide flange series with bf ≈ d)
|
|
14
|
+
|
|
15
|
+
### S-Shapes (American Standard)
|
|
16
|
+
- **Designation**: SdXw (e.g., S12X35)
|
|
17
|
+
- **Grade**: A36 (Fy=36 ksi)
|
|
18
|
+
- **Note**: Rarely specified in new construction. Replaced by W-shapes.
|
|
19
|
+
|
|
20
|
+
### HP-Shapes (Bearing Piles)
|
|
21
|
+
- **Designation**: HPdXw (e.g., HP14X73)
|
|
22
|
+
- **Grade**: A572 Gr. 50 or A36
|
|
23
|
+
- **Use**: Driven piles, foundation support
|
|
24
|
+
- **Key Feature**: Approximately equal flange width and depth (bf ≈ d)
|
|
25
|
+
|
|
26
|
+
### C-Shapes (American Standard Channels)
|
|
27
|
+
- **Designation**: CdXw (e.g., C10X20)
|
|
28
|
+
- **Grade**: A36 (Fy=36 ksi)
|
|
29
|
+
- **Use**: Struts, framing, edge members, stair stringers
|
|
30
|
+
- **Key Properties**: Shear center is NOT at the centroid — beware of lateral-torsional effects
|
|
31
|
+
|
|
32
|
+
### MC-Shapes (Miscellaneous Channels)
|
|
33
|
+
- **Designation**: MCdXw (e.g., MC8X22.8)
|
|
34
|
+
- **Grade**: A36
|
|
35
|
+
- **Use**: Similar to C-shapes but non-standard proportions
|
|
36
|
+
|
|
37
|
+
### L-Shapes (Angles)
|
|
38
|
+
- **Designation**: LaxbXt (e.g., L4X4X3/8)
|
|
39
|
+
- Equal leg: L4X4X3/8 (4" x 4" x 3/8" thick)
|
|
40
|
+
- Unequal leg: L6X4X1/2 (6" x 4" x 1/2" thick)
|
|
41
|
+
- **Grade**: A36 (Fy=36 ksi)
|
|
42
|
+
- **Use**: Bracing, struts, lintels, clip angles, connections
|
|
43
|
+
- **Key Feature**: Properties about geometric axes AND principal axes differ
|
|
44
|
+
|
|
45
|
+
### WT-Shapes (Structural Tees)
|
|
46
|
+
- **Designation**: WTdXw (e.g., WT7X15)
|
|
47
|
+
- **Grade**: A992 (same as parent W-shape)
|
|
48
|
+
- **Note**: Cut from W-shapes — WT7X15 is half of W14X30
|
|
49
|
+
|
|
50
|
+
### HSS — Rectangular / Square
|
|
51
|
+
- **Designation**: HSSaxbXt (e.g., HSS8X6X1/2 = 8" x 6" x 1/2" wall)
|
|
52
|
+
- **Grade**: A500 Gr. C (Fy=50 ksi) for rectangular/square
|
|
53
|
+
- **Use**: Columns, bracing, truss members, exposed applications
|
|
54
|
+
- **Key Feature**: Excellent for compression (no weak axis). Clean appearance.
|
|
55
|
+
- **Wall thickness**: Nominal vs. design — design thickness = 0.93 × nominal
|
|
56
|
+
|
|
57
|
+
### HSS — Round
|
|
58
|
+
- **Designation**: HSSd.dXt (e.g., HSS6.625X0.280)
|
|
59
|
+
- **Grade**: A500 Gr. C (Fy=42 ksi for round)
|
|
60
|
+
- **Use**: Columns, bracing, handrails, pipe bollards
|
|
61
|
+
- **Note**: Round HSS Fy is LOWER than rectangular HSS
|
|
62
|
+
|
|
63
|
+
### Pipe
|
|
64
|
+
- **Designation**: PIPEdXtype (e.g., PIPE6STD, PIPE6XS, PIPE6XXS)
|
|
65
|
+
- STD = Standard wall
|
|
66
|
+
- XS = Extra Strong
|
|
67
|
+
- XXS = Double Extra Strong
|
|
68
|
+
- **Grade**: A53 Gr. B (Fy=35 ksi)
|
|
69
|
+
- **Use**: Columns, bollards, handrails, process structures
|
|
70
|
+
|
|
71
|
+
## Property Definitions
|
|
72
|
+
|
|
73
|
+
| Symbol | Property | Units | What It Means |
|
|
74
|
+
|--------|----------|-------|---------------|
|
|
75
|
+
| d | Depth | in | Overall depth of section |
|
|
76
|
+
| bf | Flange width | in | Width of flange (W, C shapes) |
|
|
77
|
+
| tf | Flange thickness | in | Thickness of flange |
|
|
78
|
+
| tw | Web thickness | in | Thickness of web |
|
|
79
|
+
| A | Area | in² | Cross-sectional area — used for axial capacity |
|
|
80
|
+
| Ix | Moment of inertia (x) | in⁴ | Stiffness about strong axis — controls deflection |
|
|
81
|
+
| Sx | Section modulus (x) | in³ | Bending capacity about strong axis |
|
|
82
|
+
| Iy | Moment of inertia (y) | in⁴ | Stiffness about weak axis |
|
|
83
|
+
| Sy | Section modulus (y) | in³ | Bending capacity about weak axis |
|
|
84
|
+
| Zx | Plastic section modulus (x) | in³ | Full plastic bending capacity (strong axis) |
|
|
85
|
+
| Zy | Plastic section modulus (y) | in³ | Full plastic bending capacity (weak axis) |
|
|
86
|
+
| rx | Radius of gyration (x) | in | Column buckling parameter (strong axis) |
|
|
87
|
+
| ry | Radius of gyration (y) | in | Column buckling parameter (weak axis) — controls column capacity |
|
|
88
|
+
| J | Torsional constant | in⁴ | Resistance to twisting |
|
|
89
|
+
| Cw | Warping constant | in⁶ | Warping resistance |
|
|
90
|
+
|
|
91
|
+
## Selection Tips for Takeoff
|
|
92
|
+
|
|
93
|
+
1. **Beams**: Higher Ix = less deflection. Sx controls bending strength. Deeper beams are more efficient but check clearances.
|
|
94
|
+
2. **Columns**: ry controls capacity (weak axis buckles first). W14 column series (W14X48 to W14X730) have bf ≈ d for balanced buckling.
|
|
95
|
+
3. **Bracing**: HSS members are excellent — high r values in both directions. Angles are cheaper but less efficient.
|
|
96
|
+
4. **Weight**: Always verify unit weight from database. Never estimate — the difference between W14X30 (30 plf) and W14X34 (34 plf) is 13% more steel.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Steel Connection Types — Reference for Takeoff
|
|
2
|
+
|
|
3
|
+
## Simple (Shear) Connections
|
|
4
|
+
|
|
5
|
+
### Single Plate (Shear Tab)
|
|
6
|
+
- **Use**: Most common beam-to-beam and beam-to-column
|
|
7
|
+
- **Hardware**: 1 plate shop-welded to support, field-bolted to beam web
|
|
8
|
+
- **Typical bolts**: (3) to (5) 3/4" A325-N
|
|
9
|
+
- **Est. weight**: 8-15 lbs per connection
|
|
10
|
+
- **Takeoff note**: Count plates, bolts, and erection bolts
|
|
11
|
+
|
|
12
|
+
### Double Angle (Clip Angle)
|
|
13
|
+
- **Use**: Beam-to-girder, beam-to-column
|
|
14
|
+
- **Hardware**: 2 angles, either shop-bolted or shop-welded to support
|
|
15
|
+
- **Typical bolts**: (3) to (6) 3/4" A325-N per side
|
|
16
|
+
- **Est. weight**: 10-25 lbs per connection
|
|
17
|
+
- **Takeoff note**: Count pairs of angles
|
|
18
|
+
|
|
19
|
+
### Single Angle
|
|
20
|
+
- **Use**: Light beams, infill framing
|
|
21
|
+
- **Hardware**: 1 angle, bolted or welded
|
|
22
|
+
- **Typical bolts**: (2) to (3) 3/4" A325-N
|
|
23
|
+
- **Est. weight**: 4-10 lbs per connection
|
|
24
|
+
|
|
25
|
+
### Seated Connection (Unstiffened/Stiffened)
|
|
26
|
+
- **Use**: When web connection is impractical
|
|
27
|
+
- **Hardware**: Seat angle or bracket below beam, top clip angle
|
|
28
|
+
- **Est. weight**: 15-35 lbs per connection
|
|
29
|
+
|
|
30
|
+
## Moment Connections
|
|
31
|
+
|
|
32
|
+
### Directly Welded Flange
|
|
33
|
+
- **Use**: Moment frames (pre-Northridge NOT recommended)
|
|
34
|
+
- **Hardware**: CJP welds at flanges, shear tab at web
|
|
35
|
+
- **Est. weight**: 25-50 lbs per connection (plates + welding material)
|
|
36
|
+
- **Takeoff note**: Flag for special inspection requirements
|
|
37
|
+
|
|
38
|
+
### Bolted Flange Plate (BFP)
|
|
39
|
+
- **Use**: Moment frames per AISC 358
|
|
40
|
+
- **Hardware**: Top and bottom flange plates, bolted to beam flanges
|
|
41
|
+
- **Typical bolts**: (6) to (12) 7/8" or 1" A325 or A490
|
|
42
|
+
- **Est. weight**: 40-80 lbs per connection
|
|
43
|
+
- **Takeoff note**: Plates are shop-welded to column, field-bolted to beam
|
|
44
|
+
|
|
45
|
+
### Extended End Plate
|
|
46
|
+
- **Use**: Moment frames, rigid connections
|
|
47
|
+
- **Hardware**: End plate welded to beam, bolted to column flange
|
|
48
|
+
- **Typical bolts**: (4) to (8) 1" A490
|
|
49
|
+
- **Est. weight**: 30-60 lbs per connection
|
|
50
|
+
|
|
51
|
+
### Reduced Beam Section (RBS / "Dogbone")
|
|
52
|
+
- **Use**: Special moment frames (SMF) in seismic zones
|
|
53
|
+
- **Hardware**: Trimmed beam flanges + moment connection
|
|
54
|
+
- **Est. weight**: 30-50 lbs per connection + flange trimming labor
|
|
55
|
+
- **Takeoff note**: Requires CJP weld special inspection
|
|
56
|
+
|
|
57
|
+
## Bracing Connections
|
|
58
|
+
|
|
59
|
+
### Gusset Plate
|
|
60
|
+
- **Use**: Brace-to-beam/column intersection
|
|
61
|
+
- **Hardware**: Steel plate, bolted or welded to brace and frame
|
|
62
|
+
- **Size range**: 1/4" to 1" thick, varies widely by load
|
|
63
|
+
- **Est. weight**: 20-150 lbs per connection (highly variable)
|
|
64
|
+
- **Takeoff note**: Gusset plate weight can be significant — get sizes from details
|
|
65
|
+
|
|
66
|
+
### Brace Clip
|
|
67
|
+
- **Use**: Light bracing, kicker bracing
|
|
68
|
+
- **Hardware**: Small plate or angle, bolted/welded
|
|
69
|
+
- **Est. weight**: 5-15 lbs per connection
|
|
70
|
+
|
|
71
|
+
## Base Plates
|
|
72
|
+
|
|
73
|
+
### Standard Base Plate
|
|
74
|
+
- **Use**: Column to foundation connection
|
|
75
|
+
- **Hardware**: Base plate + anchor bolts + leveling nuts + grout
|
|
76
|
+
- **Typical**: 4 anchor bolts for gravity columns, 4-8 for moment frames
|
|
77
|
+
- **Plate thickness**: 3/4" to 2" typically
|
|
78
|
+
- **Est. weight**: 25-200 lbs per base plate (varies with column load)
|
|
79
|
+
- **Takeoff note**: Include anchor bolts in steel or concrete scope (verify)
|
|
80
|
+
|
|
81
|
+
### Moment Base Plate
|
|
82
|
+
- **Use**: Fixed-base columns, cantilevered columns
|
|
83
|
+
- **Hardware**: Heavy base plate + 4-8 anchor bolts + stiffeners
|
|
84
|
+
- **Est. weight**: 75-400 lbs per base plate
|
|
85
|
+
- **Takeoff note**: Much heavier than standard — get plate sizes from details
|
|
86
|
+
|
|
87
|
+
## Connection Hardware Weight Rules of Thumb
|
|
88
|
+
|
|
89
|
+
| Building Type | Connection % of Member Weight |
|
|
90
|
+
|---|---|
|
|
91
|
+
| Simple warehouse / single-story | 8-10% |
|
|
92
|
+
| Standard commercial (2-5 stories) | 10-12% |
|
|
93
|
+
| Moment frame / complex framing | 12-18% |
|
|
94
|
+
| Heavy industrial / power plant | 15-20% |
|
|
95
|
+
| Seismic (SMF/SCBF) | 15-22% |
|
|
96
|
+
|
|
97
|
+
## Bolt Weight Reference
|
|
98
|
+
|
|
99
|
+
| Bolt Diameter | Weight per Bolt (incl. nut + washer) |
|
|
100
|
+
|---|---|
|
|
101
|
+
| 1/2" A307 | 0.10 lb |
|
|
102
|
+
| 5/8" A325 | 0.20 lb |
|
|
103
|
+
| 3/4" A325 | 0.34 lb |
|
|
104
|
+
| 7/8" A325 | 0.56 lb |
|
|
105
|
+
| 1" A325 | 0.80 lb |
|
|
106
|
+
| 1-1/8" A325 | 1.15 lb |
|
|
107
|
+
| 1-1/4" A325 | 1.50 lb |
|
|
108
|
+
|
|
109
|
+
## Shear Stud Weight Reference
|
|
110
|
+
|
|
111
|
+
| Stud Size | Weight Each |
|
|
112
|
+
|---|---|
|
|
113
|
+
| 3/4" x 3" | 0.14 lb |
|
|
114
|
+
| 3/4" x 4-1/2" | 0.20 lb |
|
|
115
|
+
| 7/8" x 3-1/2" | 0.22 lb |
|
|
116
|
+
|
|
117
|
+
## Anchor Bolt Weight Reference
|
|
118
|
+
|
|
119
|
+
| Bolt Size | Weight per Foot (rod) | Typical Length | Weight Each (w/ nut+washer) |
|
|
120
|
+
|---|---|---|---|
|
|
121
|
+
| 3/4" F1554 | 1.50 lb/ft | 18"-24" | 3-4 lb |
|
|
122
|
+
| 1" F1554 | 2.67 lb/ft | 24"-36" | 7-10 lb |
|
|
123
|
+
| 1-1/4" F1554 | 4.17 lb/ft | 30"-48" | 12-20 lb |
|
|
124
|
+
| 1-1/2" F1554 | 6.01 lb/ft | 36"-60" | 20-35 lb |
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Steel Takeoff Procedures — Detailed Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
A steel takeoff quantifies every piece of structural steel on a project to determine total tonnage for bidding. Accuracy directly impacts profit margin — a 5% error on a 200-ton job is 10 tons ($32,000+ at current rates).
|
|
6
|
+
|
|
7
|
+
## Takeoff Order (recommended)
|
|
8
|
+
|
|
9
|
+
1. **Columns** — Start at foundations, work up
|
|
10
|
+
2. **Girders** — Primary spanning members (grid-to-grid)
|
|
11
|
+
3. **Beams** — Secondary members (between girders)
|
|
12
|
+
4. **Bracing** — Vertical and horizontal
|
|
13
|
+
5. **Joists & Joist Girders** — If in scope (often separate trade)
|
|
14
|
+
6. **Miscellaneous Steel** — Lintels, embeds, loose angles, stair framing
|
|
15
|
+
7. **Connections** — Percentage allowance based on complexity
|
|
16
|
+
|
|
17
|
+
## Step-by-Step Procedure
|
|
18
|
+
|
|
19
|
+
### 1. Gather Documents
|
|
20
|
+
- Structural plans (S sheets)
|
|
21
|
+
- Structural details (SD sheets)
|
|
22
|
+
- General notes and specifications
|
|
23
|
+
- Architectural drawings (for clearances, finishes)
|
|
24
|
+
- Addenda and bulletins
|
|
25
|
+
- Geotechnical report (for pile/foundation type)
|
|
26
|
+
|
|
27
|
+
### 2. Read General Notes FIRST
|
|
28
|
+
General notes override everything. Look for:
|
|
29
|
+
- Steel grade specifications (may differ from standard)
|
|
30
|
+
- Coating/painting requirements
|
|
31
|
+
- Fireproofing requirements (affects schedule, not weight)
|
|
32
|
+
- Special inspection requirements (affects cost)
|
|
33
|
+
- Fabrication standards (AISC certification level)
|
|
34
|
+
- Erection procedures or sequences
|
|
35
|
+
- Design loads (helps verify member sizes)
|
|
36
|
+
|
|
37
|
+
### 3. Mark Up the Drawings
|
|
38
|
+
Use colored pencils/markers on prints (or layers in PDF):
|
|
39
|
+
- **Red** — Columns
|
|
40
|
+
- **Blue** — Beams/Girders
|
|
41
|
+
- **Green** — Bracing
|
|
42
|
+
- **Orange** — Misc steel
|
|
43
|
+
- **Yellow highlight** — Items already counted
|
|
44
|
+
|
|
45
|
+
### 4. Column Takeoff
|
|
46
|
+
|
|
47
|
+
For each column mark:
|
|
48
|
+
```
|
|
49
|
+
Mark | Qty | Size | Grade | Length (TOS to TOS) | Splice? | Base Plate
|
|
50
|
+
C1 | 8 | W14X48 | A992 | 14'-6" (FTG to 2nd) | No | 18"x18"x1"
|
|
51
|
+
C1a | 8 | W14X48 | A992 | 14'-0" (2nd to Roof) | Yes | N/A
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Length rules:**
|
|
55
|
+
- Foundation to first floor: Top of base plate to TOS
|
|
56
|
+
- Floor to floor: TOS to TOS (top of steel)
|
|
57
|
+
- Top column: TOS to TOS at roof
|
|
58
|
+
|
|
59
|
+
**Watch for:**
|
|
60
|
+
- Column splices (add splice plate weight)
|
|
61
|
+
- Cap plates at top
|
|
62
|
+
- Stepped columns (different sizes at different levels)
|
|
63
|
+
- Cantilevered columns (verify fixed vs. pinned base)
|
|
64
|
+
|
|
65
|
+
### 5. Beam/Girder Takeoff
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
Mark | Qty | Size | Grade | Length | Camber | Studs | Connections
|
|
69
|
+
B1 | 12 | W16X26 | A992 | 28'-6" | None | (24) 3/4"x4-1/2" | 2x shear tab
|
|
70
|
+
G1 | 6 | W24X76 | A992 | 36'-0" | 3/4" | (56) 3/4"x4-1/2" | 2x moment
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Length determination:**
|
|
74
|
+
- Grid line to grid line MINUS column setbacks
|
|
75
|
+
- Add for overhang/cantilever past column face
|
|
76
|
+
- If not dimensioned, scale from drawings (note as "SCALED")
|
|
77
|
+
|
|
78
|
+
**Watch for:**
|
|
79
|
+
- Camber requirements (affects fabrication cost)
|
|
80
|
+
- Composite design (shear studs — count them)
|
|
81
|
+
- Coped beams (note "COPE TOP" or "COPE BOT")
|
|
82
|
+
- Moment vs. shear connections (different hardware)
|
|
83
|
+
- Typical bays — count ALL typical bays, don't assume
|
|
84
|
+
|
|
85
|
+
### 6. Bracing Takeoff
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Mark | Qty | Size | Grade | Length | Connection
|
|
89
|
+
BR1 | 8 | HSS6X6X3/8 | A500C | 18'-9" (diag) | Gusset both ends
|
|
90
|
+
BR2 | 4 | L4X4X3/8 | A36 | 12'-4" (diag) | Clip angle
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**Length:** Use diagonal length, not horizontal projection:
|
|
94
|
+
```
|
|
95
|
+
Diagonal = √(horizontal² + vertical²)
|
|
96
|
+
Example: 24'-0" horizontal, 14'-0" vertical
|
|
97
|
+
Diagonal = √(24² + 14²) = √(576 + 196) = √772 = 27.78' → 27'-9"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 7. Miscellaneous Steel
|
|
101
|
+
|
|
102
|
+
These items are easy to miss but add up:
|
|
103
|
+
- **Lintels** — Over CMU openings (angles, typically L4X4, L5X3-1/2)
|
|
104
|
+
- **Embed plates** — In concrete for attachments
|
|
105
|
+
- **Loose angles** — Shelf angles, relief angles, ledger angles
|
|
106
|
+
- **Kicker angles** — Diagonal braces for masonry/curtain wall support
|
|
107
|
+
- **Sag rods** — Between purlins
|
|
108
|
+
- **Stair framing** — Stringers (C10, C12), landing beams, toe plates
|
|
109
|
+
- **Handrail posts** — Pipe or HSS posts
|
|
110
|
+
- **Safety cable anchors** — Roof perimeter life safety
|
|
111
|
+
|
|
112
|
+
### 8. Verify Completeness
|
|
113
|
+
|
|
114
|
+
Checklist:
|
|
115
|
+
- [ ] All grid intersections have a column
|
|
116
|
+
- [ ] Every bay has beams spanning both directions
|
|
117
|
+
- [ ] Bracing is shown at required locations (check all elevations)
|
|
118
|
+
- [ ] Stair/elevator framing accounted for
|
|
119
|
+
- [ ] Opening framing (headers, trimmers) included
|
|
120
|
+
- [ ] Roof framing matches roof plan
|
|
121
|
+
- [ ] Mezzanine/platform framing included
|
|
122
|
+
- [ ] Equipment support steel included
|
|
123
|
+
- [ ] Canopy/awning framing included
|
|
124
|
+
|
|
125
|
+
## Common Takeoff Errors
|
|
126
|
+
|
|
127
|
+
| Error | Impact | How to Avoid |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| Missed symmetry | Under by 50% | Check "SIM OPP HAND" notes |
|
|
130
|
+
| Wrong bay count | Under/over 10-20% | Count every bay, mark on plan |
|
|
131
|
+
| Forgot elevation change | Wrong lengths | Cross-ref plans with sections |
|
|
132
|
+
| Didn't count connections | Under 10-15% | Always add connection allowance |
|
|
133
|
+
| Scaled instead of calculated | ±5-10% error | Calculate from grid dimensions |
|
|
134
|
+
| Missed addendum | Variable | Always read ALL addenda |
|
|
135
|
+
| Wrong grade assumed | Cost impact | Read general notes for grade specs |
|
|
136
|
+
| Forgot misc steel | Under 3-8% | Use the misc steel checklist above |
|
|
137
|
+
|
|
138
|
+
## Output Format
|
|
139
|
+
|
|
140
|
+
Final takeoff should be organized by:
|
|
141
|
+
|
|
142
|
+
### Level 1: By Drawing Sheet
|
|
143
|
+
```
|
|
144
|
+
Sheet S-101: Foundation Plan
|
|
145
|
+
C1 - 8ea W14X48 @ 14'-6" = 5,568 lbs
|
|
146
|
+
...
|
|
147
|
+
Sheet subtotal: XX,XXX lbs
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Level 2: By Category
|
|
151
|
+
```
|
|
152
|
+
Columns: XX,XXX lbs (XX.X tons)
|
|
153
|
+
Beams: XX,XXX lbs (XX.X tons)
|
|
154
|
+
Girders: XX,XXX lbs (XX.X tons)
|
|
155
|
+
Bracing: XX,XXX lbs (XX.X tons)
|
|
156
|
+
Misc: XX,XXX lbs (XX.X tons)
|
|
157
|
+
Connection: XX,XXX lbs (XX.X tons) — X% allowance
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Level 3: Grand Total
|
|
161
|
+
```
|
|
162
|
+
TOTAL: XXX,XXX lbs = XX.X tons
|
|
163
|
+
```
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
3
|
+
# Steel Weight Calculator
|
|
4
|
+
# Usage: ./scripts/calculate-weight.sh path/to/bom.csv [connection_pct] [misc_pct]
|
|
5
|
+
#
|
|
6
|
+
# BOM CSV format:
|
|
7
|
+
# Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,Total_Wt_lbs,Connections,Notes
|
|
8
|
+
#
|
|
9
|
+
# Optional arguments:
|
|
10
|
+
# connection_pct - Connection allowance percentage (default: 12)
|
|
11
|
+
# misc_pct - Misc steel allowance percentage (default: 5)
|
|
12
|
+
#
|
|
13
|
+
# Output: Line-by-line breakdown + totals with cost estimate
|
|
14
|
+
# ═══════════════════════════════════════════════════════════════════
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
if [ $# -eq 0 ]; then
|
|
18
|
+
echo "Usage: $0 <bom.csv> [connection_pct] [misc_pct]"
|
|
19
|
+
echo ""
|
|
20
|
+
echo " bom.csv CSV file with columns: Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,..."
|
|
21
|
+
echo " connection_pct Connection hardware allowance (default: 12%)"
|
|
22
|
+
echo " misc_pct Misc steel allowance (default: 5%)"
|
|
23
|
+
echo ""
|
|
24
|
+
echo "Example:"
|
|
25
|
+
echo " $0 takeoff.csv 15 5"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
BOM_FILE="$1"
|
|
30
|
+
CONN_PCT="${2:-12}"
|
|
31
|
+
MISC_PCT="${3:-5}"
|
|
32
|
+
|
|
33
|
+
if [ ! -f "$BOM_FILE" ]; then
|
|
34
|
+
echo "ERROR: File not found: $BOM_FILE"
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
python3 - "$BOM_FILE" "$CONN_PCT" "$MISC_PCT" <<'PYTHON'
|
|
39
|
+
import csv
|
|
40
|
+
import sys
|
|
41
|
+
import os
|
|
42
|
+
|
|
43
|
+
bom_file = sys.argv[1]
|
|
44
|
+
conn_pct = float(sys.argv[2]) / 100.0
|
|
45
|
+
misc_pct = float(sys.argv[3]) / 100.0
|
|
46
|
+
|
|
47
|
+
print(f"\n{'='*78}")
|
|
48
|
+
print(f" STEEL TAKEOFF — WEIGHT CALCULATION")
|
|
49
|
+
print(f" File: {os.path.basename(bom_file)}")
|
|
50
|
+
print(f"{'='*78}\n")
|
|
51
|
+
|
|
52
|
+
# Header
|
|
53
|
+
print(f" {'Mark':<8} {'Qty':>4} x {'Size':<14} x {'Length':>9} @ {'Wt/ft':>8} = {'Total':>12} {'Grade':<8}")
|
|
54
|
+
print(f" {'-'*8} {'-'*4} {'-'*14} {'-'*9} {'-'*8} {'-'*12} {'-'*8}")
|
|
55
|
+
|
|
56
|
+
total_lbs = 0
|
|
57
|
+
total_pieces = 0
|
|
58
|
+
categories = {}
|
|
59
|
+
grade_totals = {}
|
|
60
|
+
line_count = 0
|
|
61
|
+
|
|
62
|
+
with open(bom_file) as f:
|
|
63
|
+
reader = csv.DictReader(f)
|
|
64
|
+
for row in reader:
|
|
65
|
+
mark = row.get("Mark", "").strip()
|
|
66
|
+
if not mark or mark.startswith("#"):
|
|
67
|
+
continue
|
|
68
|
+
|
|
69
|
+
qty = int(row.get("Qty", 0))
|
|
70
|
+
size = row.get("Size", "?").strip()
|
|
71
|
+
grade = row.get("Grade", "A992").strip()
|
|
72
|
+
length_str = row.get("Length_ft", "0").strip()
|
|
73
|
+
unit_wt_str = row.get("Unit_Wt_plf", "0").strip()
|
|
74
|
+
|
|
75
|
+
# Parse length — support both decimal (28.5) and feet-inches (28'-6")
|
|
76
|
+
if "'" in length_str:
|
|
77
|
+
parts = length_str.replace('"', '').split("'")
|
|
78
|
+
feet = float(parts[0].replace('-', '').strip())
|
|
79
|
+
inches = float(parts[1].replace('-', '').strip()) if len(parts) > 1 and parts[1].strip() else 0
|
|
80
|
+
length = feet + inches / 12.0
|
|
81
|
+
else:
|
|
82
|
+
length = float(length_str) if length_str else 0
|
|
83
|
+
|
|
84
|
+
unit_wt = float(unit_wt_str) if unit_wt_str else 0
|
|
85
|
+
|
|
86
|
+
line_wt = qty * length * unit_wt
|
|
87
|
+
total_lbs += line_wt
|
|
88
|
+
total_pieces += qty
|
|
89
|
+
line_count += 1
|
|
90
|
+
|
|
91
|
+
# Categorize by prefix
|
|
92
|
+
if size.startswith("W"):
|
|
93
|
+
cat = "W-Shapes"
|
|
94
|
+
elif size.startswith("HSS"):
|
|
95
|
+
cat = "HSS"
|
|
96
|
+
elif size.startswith("L"):
|
|
97
|
+
cat = "Angles"
|
|
98
|
+
elif size.startswith("C") or size.startswith("MC"):
|
|
99
|
+
cat = "Channels"
|
|
100
|
+
elif size.startswith("PIPE"):
|
|
101
|
+
cat = "Pipe"
|
|
102
|
+
elif size.startswith("PL") or size.startswith("PLATE"):
|
|
103
|
+
cat = "Plates"
|
|
104
|
+
else:
|
|
105
|
+
cat = "Other"
|
|
106
|
+
|
|
107
|
+
categories[cat] = categories.get(cat, 0) + line_wt
|
|
108
|
+
grade_totals[grade] = grade_totals.get(grade, 0) + line_wt
|
|
109
|
+
|
|
110
|
+
print(f" {mark:<8} {qty:>4} x {size:<14} x {length:>7.1f} ft @ {unit_wt:>6.1f} plf = {line_wt:>10,.0f} lb {grade:<8}")
|
|
111
|
+
|
|
112
|
+
# Connection & misc allowances
|
|
113
|
+
conn_wt = total_lbs * conn_pct
|
|
114
|
+
misc_wt = total_lbs * misc_pct
|
|
115
|
+
grand_total = total_lbs + conn_wt + misc_wt
|
|
116
|
+
|
|
117
|
+
print(f"\n {'='*78}")
|
|
118
|
+
print(f"\n CATEGORY BREAKDOWN:")
|
|
119
|
+
for cat in sorted(categories.keys()):
|
|
120
|
+
wt = categories[cat]
|
|
121
|
+
pct = (wt / total_lbs * 100) if total_lbs > 0 else 0
|
|
122
|
+
print(f" {cat:<20} {wt:>12,.0f} lb ({pct:>5.1f}%)")
|
|
123
|
+
|
|
124
|
+
print(f"\n GRADE BREAKDOWN:")
|
|
125
|
+
for grade in sorted(grade_totals.keys()):
|
|
126
|
+
wt = grade_totals[grade]
|
|
127
|
+
pct = (wt / total_lbs * 100) if total_lbs > 0 else 0
|
|
128
|
+
print(f" {grade:<20} {wt:>12,.0f} lb ({pct:>5.1f}%)")
|
|
129
|
+
|
|
130
|
+
print(f"\n {'─'*60}")
|
|
131
|
+
print(f" {'Members:':<30} {line_count:>8} marks")
|
|
132
|
+
print(f" {'Total Pieces:':<30} {total_pieces:>8} pcs")
|
|
133
|
+
print(f" {'Member Weight:':<30} {total_lbs:>12,.0f} lb ({total_lbs/2000:>8,.1f} tons)")
|
|
134
|
+
print(f" {'Connection Allow ({:.0f}%):':<30} {conn_wt:>12,.0f} lb ({conn_wt/2000:>8,.1f} tons)".format(conn_pct*100))
|
|
135
|
+
print(f" {'Misc Steel Allow ({:.0f}%):':<30} {misc_wt:>12,.0f} lb ({misc_wt/2000:>8,.1f} tons)".format(misc_pct*100))
|
|
136
|
+
print(f" {'─'*60}")
|
|
137
|
+
print(f" {'GRAND TOTAL:':<30} {grand_total:>12,.0f} lb ({grand_total/2000:>8,.1f} tons)")
|
|
138
|
+
print(f" {'─'*60}")
|
|
139
|
+
|
|
140
|
+
# Cost estimates at various $/ton rates
|
|
141
|
+
print(f"\n COST ESTIMATES:")
|
|
142
|
+
tons = grand_total / 2000
|
|
143
|
+
for rate in [2800, 3200, 3600, 4000]:
|
|
144
|
+
cost = tons * rate
|
|
145
|
+
print(f" @ ${rate:,}/ton: ${cost:>14,.0f}")
|
|
146
|
+
|
|
147
|
+
print(f"\n{'='*78}\n")
|
|
148
|
+
PYTHON
|