aboutsummaryrefslogtreecommitdiff
path: root/diagrams
diff options
context:
space:
mode:
Diffstat (limited to 'diagrams')
-rw-r--r--diagrams/backplane-connector-diagram.typ127
-rw-r--r--diagrams/cassette-external-dimensions.typ221
-rw-r--r--diagrams/cassette-ventilation.typ364
-rw-r--r--diagrams/chassis-dimensional-requirements.typ477
-rw-r--r--diagrams/db-25-connector-cutout.typ297
-rw-r--r--diagrams/front-panel.typ252
-rw-r--r--diagrams/l-channel-chassis.typ422
-rw-r--r--diagrams/panels-grid.typ342
-rw-r--r--diagrams/u-channel-cover.typ197
9 files changed, 2699 insertions, 0 deletions
diff --git a/diagrams/backplane-connector-diagram.typ b/diagrams/backplane-connector-diagram.typ
new file mode 100644
index 0000000..0b2d254
--- /dev/null
+++ b/diagrams/backplane-connector-diagram.typ
@@ -0,0 +1,127 @@
+#import "../lib/unify.typ": qty
+#import "@preview/cetz:0.5.2"
+
+#figure(
+ cetz.canvas({
+ import cetz.draw: *
+
+ let dx = 1.0
+ let top-y = 0.55
+ let bot-y = -0.55
+
+ // Outer mounting flange / metal ears
+ rect(
+ (-2.0, -1.4),
+ (14.0, 1.4),
+ rx: 0.2,
+ fill: luma(245),
+ stroke: 1pt + luma(100),
+ )
+
+ // Left and right chassis mounting screw holes
+ circle((-1.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120))
+ circle((-1.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100))
+ circle((13.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120))
+ circle((13.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100))
+
+ // D-Sub trapezoidal shroud outline
+ line(
+ (-0.7, 1.15),
+ (12.7, 1.15),
+ (12.2, -1.15),
+ (-0.2, -1.15),
+ close: true,
+ fill: luma(230),
+ stroke: 1.5pt + black,
+ )
+
+ // Shell Earth ground connection reference
+ line((-0.45, -1.15), (-0.45, -2.0), stroke: (
+ paint: luma(120),
+ thickness: 0.7pt,
+ dash: "dashed",
+ ))
+ content(
+ (-0.45, -2.05),
+ text(size: 7.5pt, weight: "bold")[Shell: Chassis Earth],
+ angle: -50deg,
+ anchor: "north-west",
+ )
+
+ // Top row pins (Pins 1 to 13)
+ let top-pins = (
+ ("1", [$plus qty(15.00, "V")$]),
+ ("2", [$plus qty(15.00, "V")$]),
+ ("3", [$qty(-15.00, "V")$]),
+ ("4", [$qty(-15.00, "V")$]),
+ ("5", [AGND]),
+ ("6", [AGND]),
+ ("7", [AGND]),
+ ("8", [$plus qty(10.0000, "V")$ Force]),
+ ("9", [$plus qty(10.0000, "V")$ Sense]),
+ ("10", [$qty(-10.0000, "V")$ Force]),
+ ("11", [$qty(-10.0000, "V")$ Sense]),
+ ("12", [AGND]),
+ ("13", [AGND]),
+ )
+
+ // Bottom row pins (Pins 14 to 25)
+ let bot-pins = (
+ ("14", [AGND]),
+ ("15", [AGND]),
+ ("16", [AGND]),
+ ("17", [DGND]),
+ ("18", [DGND]),
+ ("19", [$plus qty(5.0, "VD")$]),
+ ("20", [$qty(-5.0, "VD")$]),
+ ("21", [Stagger]),
+ ("22", [_Reserved_]),
+ ("23", [_Reserved_]),
+ ("24", [_Reserved_]),
+ ("25", [Chassis Earth]),
+ )
+
+ // Draw Top Pins (1-13)
+ for (i, p) in top-pins.enumerate() {
+ let x = i * dx
+ let p-num = p.at(0)
+ let p-sig = p.at(1)
+
+ circle((x, top-y), radius: 0.26, fill: white, stroke: 1pt + black)
+ content((x, top-y), text(size: 7pt, weight: "bold")[#p-num])
+
+ line((x, top-y + 0.26), (x, 1.8), stroke: (
+ paint: luma(120),
+ thickness: 0.6pt,
+ ))
+ content(
+ (x, 1.85),
+ text(size: 7.5pt)[#p-sig],
+ angle: 50deg,
+ anchor: "south-west",
+ )
+ }
+
+ // Draw Bottom Pins (14-25)
+ for (j, p) in bot-pins.enumerate() {
+ let x = (j + 0.5) * dx
+ let p-num = p.at(0)
+ let p-sig = p.at(1)
+
+ circle((x, bot-y), radius: 0.26, fill: white, stroke: 1pt + black)
+ content((x, bot-y), text(size: 7pt, weight: "bold")[#p-num])
+
+ line((x, bot-y - 0.26), (x, -1.8), stroke: (
+ paint: luma(120),
+ thickness: 0.6pt,
+ ))
+ content(
+ (x, -1.85),
+ text(size: 7.5pt)[#p-sig],
+ angle: -50deg,
+ anchor: "north-west",
+ )
+ }
+ }),
+ caption: [DB-25 backplane connector physical pinout and signal allocation diagram.],
+) <figure-backplane-connector-diagram>
diff --git a/diagrams/cassette-external-dimensions.typ b/diagrams/cassette-external-dimensions.typ
new file mode 100644
index 0000000..61b0877
--- /dev/null
+++ b/diagrams/cassette-external-dimensions.typ
@@ -0,0 +1,221 @@
+#import "../lib/unify.typ": qty
+#import "@preview/cetz:0.5.2"
+
+#figure(
+ cetz.canvas({
+ import cetz.draw: *
+
+ // Scale factor: 1 mm = 0.06 drawing units
+ let s = 0.06
+
+ let h-panel = 177.8 * s // 6.223
+ let h-body = 165.1 * s // 5.7785
+ let h-lip = 6.35 * s // 0.22225
+ let w-panel = 38.0 * s // 1.33
+ let d-body = 152.4 * s // 5.334
+ let t-panel = 3.0 * s // 0.105 (exaggerated slightly for visual clarity)
+
+ let y-center = 0
+ let y-top-panel = h-panel / 2
+ let y-bot-panel = -h-panel / 2
+ let y-top-body = h-body / 2
+ let y-bot-body = -h-body / 2
+
+ // --- FRONT ELEVATION ---
+ let x-front-left = 0
+ let x-front-right = w-panel
+ let x-front-mid = w-panel / 2
+
+ // View Title
+ content((x-front-mid, y-top-panel + 0.8), text(
+ size: 9pt,
+ weight: "bold",
+ )[FRONT ELEVATION])
+
+ // Front Panel Outline
+ rect(
+ (x-front-left, y-bot-panel),
+ (x-front-right, y-top-panel),
+ fill: luma(250),
+ stroke: 1.2pt + black,
+ )
+
+ // Hidden Body Transition Lines (Dashed)
+ line(
+ (x-front-left, y-top-body),
+ (x-front-right, y-top-body),
+ stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"),
+ )
+ line(
+ (x-front-left, y-bot-body),
+ (x-front-right, y-bot-body),
+ stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"),
+ )
+
+ // Panel Mounting Screw Holes (Top and Bottom Lips)
+ circle(
+ (x-front-mid, y-top-panel - h-lip / 2),
+ radius: 0.08,
+ fill: white,
+ stroke: 0.8pt + black,
+ )
+ circle(
+ (x-front-mid, y-bot-panel + h-lip / 2),
+ radius: 0.08,
+ fill: white,
+ stroke: 0.8pt + black,
+ )
+
+ // Dimension: Panel Width (38.0 mm)
+ line(
+ (x-front-left, y-bot-panel),
+ (x-front-left, y-bot-panel - 0.6),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-front-right, y-bot-panel),
+ (x-front-right, y-bot-panel - 0.6),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-front-left, y-bot-panel - 0.6),
+ (x-front-right, y-bot-panel - 0.6),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.12,
+ stroke: 0.7pt + black,
+ )
+ content((x-front-mid, y-bot-panel - 0.9), text(
+ size: 7.5pt,
+ )[$qty(38.0, "mm")$])
+
+ // Dimension: Panel Height (177.8 mm / 4U)
+ line(
+ (x-front-left, y-top-panel),
+ (x-front-left - 0.6, y-top-panel),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-front-left, y-bot-panel),
+ (x-front-left - 0.6, y-bot-panel),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-front-left - 0.6, y-bot-panel),
+ (x-front-left - 0.6, y-top-panel),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.12,
+ stroke: 0.7pt + black,
+ )
+ content(
+ (x-front-left - 0.95, y-center),
+ text(size: 7.5pt)[$qty(177.8, "mm")$ ($qty(4, "U")$)],
+ angle: 90deg,
+ )
+
+ // --- SIDE ELEVATION ---
+ let x-side-start = 2.8
+ let x-panel-back = x-side-start + t-panel
+ let x-body-rear = x-panel-back + d-body
+ let x-side-mid = (x-side-start + x-body-rear) / 2
+
+ // View Title
+ content((x-side-mid, y-top-panel + 0.8), text(
+ size: 9pt,
+ weight: "bold",
+ )[SIDE ELEVATION])
+
+ // Cassette Steel Body
+ rect(
+ (x-panel-back, y-bot-body),
+ (x-body-rear, y-top-body),
+ fill: luma(235),
+ stroke: 1.2pt + black,
+ )
+
+ // Front Panel Plate Attached to Body
+ rect(
+ (x-side-start, y-bot-panel),
+ (x-panel-back, y-top-panel),
+ fill: luma(210),
+ stroke: 1.2pt + black,
+ )
+
+ // Rear DB-25 Connector Standoff / Bezel Projection
+ rect(
+ (x-body-rear, y-center - 0.6),
+ (x-body-rear + 0.25, y-center + 0.6),
+ fill: luma(240),
+ stroke: 0.8pt + black,
+ )
+
+ // Dimension: Depth (152.4 mm)
+ line(
+ (x-panel-back, y-top-panel),
+ (x-panel-back, y-top-panel + 0.2),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-body-rear, y-top-panel - 0.4),
+ (x-body-rear, y-top-panel + 0.2),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-panel-back, y-top-panel + 0.2),
+ (x-body-rear, y-top-panel + 0.2),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.12,
+ stroke: 0.7pt + black,
+ )
+ content(((x-panel-back + x-body-rear) / 2, y-top-panel + 0.4), text(
+ size: 7.5pt,
+ )[$qty(152.4, "mm")$])
+
+ // Dimension: Body Height (165.1 mm)
+ line(
+ (x-body-rear, y-top-body),
+ (x-body-rear + 0.6, y-top-body),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-body-rear, y-bot-body),
+ (x-body-rear + 0.6, y-bot-body),
+ stroke: 0.5pt + luma(120),
+ )
+ line(
+ (x-body-rear + 0.6, y-bot-body),
+ (x-body-rear + 0.6, y-top-body),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.12,
+ stroke: 0.7pt + black,
+ )
+ content(
+ (x-body-rear + 0.9, y-center),
+ text(size: 7.5pt)[$qty(165.1, "mm")$],
+ angle: -90deg,
+ )
+
+ // Dimension: Top Lip Height (6.35 mm)
+ line(
+ (x-panel-back, y-top-panel),
+ (x-body-rear + 1.8, y-top-panel),
+ stroke: 0.4pt + luma(160),
+ )
+ line(
+ (x-panel-back, y-top-body),
+ (x-body-rear + 1.8, y-top-body),
+ stroke: 0.4pt + luma(160),
+ )
+ line(
+ (x-body-rear + 1.65, y-top-body),
+ (x-body-rear + 1.65, y-top-panel),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.10,
+ stroke: 0.7pt + black,
+ )
+ content(
+ (x-body-rear + 2.2, (y-top-panel + y-top-body) / 2),
+ text(size: 7.0pt)[$qty(6.35, "mm")$],
+ )
+ }),
+ caption: [Cassette enclosure orthographic projections (front and side elevation) detailing external physical dimensions and lip offsets],
+) <figure-cassette-external-dimensions-diagram>
diff --git a/diagrams/cassette-ventilation.typ b/diagrams/cassette-ventilation.typ
new file mode 100644
index 0000000..c353d4c
--- /dev/null
+++ b/diagrams/cassette-ventilation.typ
@@ -0,0 +1,364 @@
+#import "../lib/unify.typ": qty
+#import "@preview/cetz:0.5.2"
+
+#figure(
+ cetz.canvas({
+ import cetz.draw: *
+
+ // Scale factor: 1 mm = 0.045 drawing units
+ let s = 0.045
+
+ let face-d = 152.4 * s // Depth = 152.4 mm
+ let face-w = 35.7 * s // Width = 35.7 mm
+
+ // Slot parameters
+ let slot-w = 2.5 * s // Slot width = 2.5 mm
+ let slot-l = 10.0 * s // Slot length = 10.0 mm
+ let slot-r = slot-w / 2 // Full corner radius = 1.25 mm
+ let row-pitch = 5.0 * s // 5 rows across width
+ let col-pitch = 12.0 * s // 12 columns across depth
+
+ // Calculate array offsets to center slots on face
+ let row-start = (face-w - (4 * row-pitch)) / 2
+ let col-start = (face-d - (11 * col-pitch + slot-l)) / 2
+
+ // ==========================================
+ // 1. TOP / BOTTOM FACE VENTILATION PATTERN (152.4 mm x 35.7 mm)
+ // ==========================================
+ let x-top-start = -0.5
+ let y-top-start = 5.2
+ let x-top-end = x-top-start + face-d
+ let y-top-end = y-top-start + face-w
+ let x-top-mid = (x-top-start + x-top-end) / 2
+ let y-top-mid = (y-top-start + y-top-end) / 2
+
+ // View Title
+ content((x-top-mid, y-top-end + 0.7), text(
+ size: 9pt,
+ weight: "bold",
+ )[TOP / BOTTOM FACE VENTILATION PATTERN])
+ content((x-top-mid, y-top-end + 0.35), text(
+ size: 7pt,
+ fill: luma(90),
+ )[(60 Slots per face: $5$ rows $times 12$ columns)])
+
+ // Main Plate Outline
+ rect(
+ (x-top-start, y-top-start),
+ (x-top-end, y-top-end),
+ fill: luma(250),
+ stroke: 1.2pt + black,
+ )
+
+ // 5 Rows x 12 Columns Slot Array with Full Corner Radius
+ for r in range(0, 5) {
+ let sy = y-top-start + row-start + r * row-pitch
+ for c in range(0, 12) {
+ let sx = x-top-start + col-start + c * col-pitch
+ rect(
+ (sx, sy - slot-w / 2),
+ (sx + slot-l, sy + slot-w / 2),
+ radius: slot-r,
+ fill: white,
+ stroke: 0.5pt + black,
+ )
+ }
+ }
+
+ // Depth Dimension (152.4 mm)
+ line(
+ (x-top-start, y-top-start),
+ (x-top-start, y-top-start - 0.5),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-top-end, y-top-start),
+ (x-top-end, y-top-start - 0.5),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-top-start, y-top-start - 0.45),
+ (x-top-end, y-top-start - 0.45),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.10,
+ stroke: 0.6pt + black,
+ )
+ content((x-top-mid, y-top-start - 0.75), text(
+ size: 7.5pt,
+ )[$qty(152.4, "mm")$])
+
+ // Width Dimension (35.7 mm)
+ line(
+ (x-top-end, y-top-start),
+ (x-top-end + 0.5, y-top-start),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-top-end, y-top-end),
+ (x-top-end + 0.5, y-top-end),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-top-end + 0.45, y-top-start),
+ (x-top-end + 0.45, y-top-end),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.10,
+ stroke: 0.6pt + black,
+ )
+ content(
+ (x-top-end + 0.75, y-top-mid),
+ text(size: 7.5pt)[$qty(35.7, "mm")$],
+ angle: -90deg,
+ )
+
+ // Column Pitch Indicator (12.0 mm)
+ let c0-x = x-top-start + col-start + slot-l / 2
+ let c1-x = c0-x + col-pitch
+ line((c0-x, y-top-start), (c0-x, y-top-start - 1.2), stroke: (
+ paint: luma(140),
+ thickness: 0.4pt,
+ dash: "dashed",
+ ))
+ line((c1-x, y-top-start), (c1-x, y-top-start - 1.2), stroke: (
+ paint: luma(140),
+ thickness: 0.4pt,
+ dash: "dashed",
+ ))
+ line(
+ (c0-x, y-top-start - 1.15),
+ (c1-x, y-top-start - 1.15),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.5pt + black,
+ )
+ content(((c0-x + c1-x) / 2, y-top-start - 1.35), text(
+ size: 6.5pt,
+ )[Column pitch: $qty(12.0, "mm")$ ($12$ cols)])
+
+ // Row Pitch Indicator (5.0 mm)
+ let r0-y = y-top-start + row-start
+ let r1-y = r0-y + row-pitch
+ line((x-top-start, r0-y), (x-top-start - 0.8, r0-y), stroke: (
+ paint: luma(140),
+ thickness: 0.4pt,
+ dash: "dashed",
+ ))
+ line((x-top-start, r1-y), (x-top-start - 0.8, r1-y), stroke: (
+ paint: luma(140),
+ thickness: 0.4pt,
+ dash: "dashed",
+ ))
+ line(
+ (x-top-start - 0.75, r0-y),
+ (x-top-start - 0.75, r1-y),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.5pt + black,
+ )
+ content(
+ (x-top-start - 0.85, (r0-y + r1-y) / 2),
+ text(size: 6.5pt)[Row pitch: $qty(5.0, "mm")$ ($5$ rows)],
+ anchor: "east",
+ )
+
+ // ==========================================
+ // 2. SINGLE SLOT GEOMETRY DETAIL (Enlarged View)
+ // ==========================================
+ let x-detail-center = -1.0
+ let y-detail-center = 1.8
+ let detail-l = 2.8 // Magnified length (10.0 mm)
+ let detail-w = 0.7 // Magnified width (2.5 mm)
+ let detail-r = detail-w / 2 // Full radius (1.25 mm)
+
+ let sx1 = x-detail-center - detail-l / 2
+ let sx2 = x-detail-center + detail-l / 2
+ let sy1 = y-detail-center - detail-w / 2
+ let sy2 = y-detail-center + detail-w / 2
+
+ // View Title
+ content((x-detail-center, y-detail-center + 1.2), text(
+ size: 8.5pt,
+ weight: "bold",
+ )[SINGLE SLOT GEOMETRY DETAIL])
+ content((x-detail-center, y-detail-center + 0.85), text(
+ size: 7pt,
+ fill: luma(90),
+ )[(Enlarged view: $qty(2.5, "mm") times qty(10.0, "mm")$ slot)])
+
+ // Centerlines
+ line(
+ (sx1 - 0.4, y-detail-center),
+ (sx2 + 0.4, y-detail-center),
+ stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"),
+ )
+ line(
+ (x-detail-center, sy1 - 0.4),
+ (x-detail-center, sy2 + 0.4),
+ stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"),
+ )
+
+ // Magnified Rounded Stadium Slot Contour
+ rect(
+ (sx1, sy1),
+ (sx2, sy2),
+ radius: detail-r,
+ fill: white,
+ stroke: 1.2pt + black,
+ )
+
+ // Slot Length Dimension (10.0 mm)
+ line((sx1, sy1), (sx1, sy1 - 0.5), stroke: 0.4pt + luma(140))
+ line((sx2, sy1), (sx2, sy1 - 0.5), stroke: 0.4pt + luma(140))
+ line(
+ (sx1, sy1 - 0.45),
+ (sx2, sy1 - 0.45),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content((x-detail-center, sy1 - 0.7), text(
+ size: 7pt,
+ )[$qty(10.0, "mm")$ (parallel to depth)])
+
+ // Slot Width Dimension (2.5 mm)
+ line((sx2, sy1), (sx2 + 0.5, sy1), stroke: 0.4pt + luma(140))
+ line((sx2, sy2), (sx2 + 0.5, sy2), stroke: 0.4pt + luma(140))
+ line(
+ (sx2 + 0.45, sy1),
+ (sx2 + 0.45, sy2),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(
+ (sx2 + 0.55, y-detail-center),
+ text(size: 7pt)[$qty(2.5, "mm")$],
+ anchor: "west",
+ )
+
+ // Full Corner Radius Callout (R = 1.25 mm)
+ let arc-px = sx1 + detail-r * 0.29
+ let arc-py = y-detail-center + detail-r * 0.71
+ line(
+ (arc-px - 0.8, arc-py + 0.3),
+ (arc-px, arc-py),
+ mark: (end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(
+ (arc-px - 0.85, arc-py + 0.35),
+ text(size: 6.5pt)[$R = qty(1.25, "mm")$],
+ anchor: "east",
+ )
+
+ // ==========================================
+ // 3. CONVECTIVE COOLING & EMI SHIELDING CONCEPT
+ // ==========================================
+ let x-phys-center = 6.5
+ let y-phys-center = 1.8
+ let phys-w = 3.6
+ let phys-t = 0.12
+
+ // View Title
+ content((x-phys-center, y-phys-center + 1.2), text(
+ size: 8.5pt,
+ weight: "bold",
+ )[CONVECTIVE COOLING & EMI SHIELDING])
+ content((x-phys-center, y-phys-center + 0.85), text(
+ size: 7pt,
+ fill: luma(90),
+ )[(Cross-sectional thermal & RF attenuation concept)])
+
+ // Top Face Metal Plate with 4 Slot Openings
+ let top-y = y-phys-center + 0
+ rect(
+ (x-phys-center - phys-w / 2, top-y),
+ (x-phys-center + phys-w / 2, top-y + phys-t),
+ fill: luma(220),
+ stroke: 0.8pt + black,
+ )
+
+ // Bottom Face Metal Plate with 4 Slot Openings
+ let bot-y = y-phys-center - 1.2
+ rect(
+ (x-phys-center - phys-w / 2, bot-y - phys-t),
+ (x-phys-center + phys-w / 2, bot-y),
+ fill: luma(220),
+ stroke: 0.8pt + black,
+ )
+
+ // Slot Apertures Cut into Plates
+ let ap-offsets = (-1.2, -0.4, 0.4, 1.2)
+ for dx in ap-offsets {
+ rect(
+ (x-phys-center + dx - 0.15, top-y - 0.02),
+ (x-phys-center + dx + 0.15, top-y + phys-t + 0.02),
+ fill: white,
+ stroke: none,
+ )
+ rect(
+ (x-phys-center + dx - 0.15, bot-y - phys-t - 0.02),
+ (x-phys-center + dx + 0.15, bot-y + 0.02),
+ fill: white,
+ stroke: none,
+ )
+
+ // Convective Natural Airflow Lines (Dashed Vertical Lines)
+ line(
+ (x-phys-center + dx, bot-y - 0.4),
+ (x-phys-center + dx, top-y + 0.4),
+ stroke: (paint: black, thickness: 0.8pt, dash: "dashed"),
+ mark: (end: "stealth"),
+ mark-size: 0.08,
+ )
+ }
+
+ // Plate Labels
+ content(
+ (x-phys-center + phys-w / 2 + 0.15, top-y + phys-t / 2),
+ text(size: 6.5pt, weight: "bold")[Top face],
+ anchor: "west",
+ )
+ content(
+ (x-phys-center + phys-w / 2 + 0.15, bot-y - phys-t / 2),
+ text(size: 6.5pt, weight: "bold")[Bottom face],
+ anchor: "west",
+ )
+
+ // Convective Airflow Center Annotation
+ content((x-phys-center, y-phys-center - 0.6), text(
+ size: 7pt,
+ weight: "bold",
+ )[Natural convection airflow])
+
+ // Incident RF Wave Attenuation Annotation (Wave Bouncing off Metal Face)
+ let wave-x0 = x-phys-center - 1.5
+ line(
+ (wave-x0, top-y - 0.2),
+ (wave-x0 + 0.15, top-y - 0.4),
+ (wave-x0 + 0.3, top-y - 0.2),
+ (wave-x0 + 0.45, top-y - 0.4),
+ (wave-x0 + 0.6, top-y - 0.25),
+ stroke: 0.8pt + black,
+ )
+ line(
+ (wave-x0 + 0.6, top-y - 0.25),
+ (wave-x0 + 0.3, top-y - 0.05),
+ stroke: 0.8pt + black,
+ mark: (end: "stealth"),
+ mark-size: 0.07,
+ )
+ content(
+ (wave-x0 - 0.1, top-y - 0.1),
+ text(size: 6pt, weight: "bold")[Incident RF wave],
+ anchor: "east",
+ )
+ content(
+ (wave-x0 - 0.1, top-y - 0.35),
+ text(size: 5.5pt, fill: luma(100))[(Attenuated $> qty(20, "dB")$)],
+ anchor: "east",
+ )
+ }),
+ caption: [Cassette ventilation system details detailing full $5 times 12$ slot top elevation array, magnified single slot geometry with $R = qty(1.25, "mm")$ corner radius, and cross-sectional natural convective cooling / RF electromagnetic shielding concept],
+) <figure-cassette-ventilation-diagram>
diff --git a/diagrams/chassis-dimensional-requirements.typ b/diagrams/chassis-dimensional-requirements.typ
new file mode 100644
index 0000000..9168a7d
--- /dev/null
+++ b/diagrams/chassis-dimensional-requirements.typ
@@ -0,0 +1,477 @@
+#import "../lib/unify.typ": qty
+#import "@preview/cetz:0.5.2"
+
+#figure(
+ cetz.canvas({
+ import cetz.draw: *
+
+ // Scale factor: 1 mm = 0.04 drawing units
+ let s = 0.04
+
+ // =========================================================================
+ // VIEW A: SIDE ELEVATION CUTAWAY (Chassis & Module Clearance)
+ // =========================================================================
+ let x-side-start = -3.8
+ let y-side-bot = 0
+ let h-panel = 177.8 * s // 4.2672
+ let h-body = 165.1 * s // 3.9624
+ let h-lip = 6.35 * s // 0.1524
+ let d-body = 152.4 * s // 3.6576
+ let d-cable = 28.0 * s // 0.672 (>= 25 mm cable bend zone)
+
+ let y-side-top = y-side-bot + h-panel
+ let y-body-bot = y-side-bot + h-lip
+ let y-body-top = y-side-top - h-lip
+ let x-panel-front = x-side-start
+ let x-body-start = x-panel-front + 3.0 * s
+ let x-body-rear = x-body-start + d-body
+ let x-chassis-rear = x-body-rear + d-cable
+
+ // View Title
+ content((x-body-start + (d-body + d-cable) / 2, y-side-top + 1.5), text(
+ size: 8.5pt,
+ weight: "bold",
+ )[VIEW A: SIDE ELEVATION CUTAWAY])
+ content((x-body-start + (d-body + d-cable) / 2, y-side-top + 1.15), text(
+ size: 7pt,
+ fill: luma(90),
+ )[(Chassis enclosure & module interface clearance)])
+
+ // Chassis Steel Structure Outline (1.5 mm / 2.0 mm outer shell)
+ rect(
+ (x-body-start - 2.0 * s, y-side-bot - 2.0 * s),
+ (x-chassis-rear + 2.0 * s, y-side-top + 2.0 * s),
+ fill: luma(250),
+ stroke: 1.2pt + black,
+ )
+
+ // Cassette Guide Rails (Top and Bottom Channels)
+ rect(
+ (x-body-start, y-side-top - 8.0 * s),
+ (x-body-rear, y-side-top),
+ fill: luma(210),
+ stroke: 0.8pt + black,
+ )
+ rect(
+ (x-body-start, y-side-bot),
+ (x-body-rear, y-side-bot + 8.0 * s),
+ fill: luma(210),
+ stroke: 0.8pt + black,
+ )
+
+ // Installed Cassette Outer Body (White fill inside chassis)
+ rect(
+ (x-body-start, y-body-bot),
+ (x-body-rear, y-body-top),
+ fill: white,
+ stroke: 1pt + black,
+ )
+
+ // Front Panel Attached to Cassette Lip
+ rect(
+ (x-panel-front, y-side-bot),
+ (x-body-start, y-side-top),
+ fill: luma(225),
+ stroke: 1.2pt + black,
+ )
+
+ // DB-25 Backplane Connector (Mating Pair at Rear of Cassette)
+ let db-h = 50.0 * s
+ rect(
+ (x-body-rear - 2.0 * s, y-side-bot + (h-panel - db-h) / 2),
+ (x-body-rear + 8.0 * s, y-side-bot + (h-panel + db-h) / 2),
+ fill: luma(180),
+ stroke: 0.9pt + black,
+ )
+
+ // Cable Bend & Wiring Harness Zone (Dashed hatched path behind backplane)
+ line(
+ (x-body-rear + 8.0 * s, y-side-bot + h-panel / 2),
+ (x-chassis-rear - 4.0 * s, y-side-bot + h-panel / 2),
+ (x-chassis-rear - 4.0 * s, y-side-bot + 15.0 * s),
+ stroke: (paint: luma(120), thickness: 0.8pt, dash: "dashed"),
+ )
+
+ // Dimensions for View A
+ // Total Panel Height (177.8 mm / 4U)
+ line(
+ (x-panel-front, y-side-bot),
+ (x-panel-front - 0.5, y-side-bot),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-panel-front, y-side-top),
+ (x-panel-front - 0.5, y-side-top),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-panel-front - 0.45, y-side-bot),
+ (x-panel-front - 0.45, y-side-top),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(
+ (x-panel-front - 0.75, (y-side-bot + y-side-top) / 2),
+ text(size: 6.5pt, weight: "bold")[$qty(177.8, "mm")$ ($qty(4, "U")$)],
+ angle: 90deg,
+ )
+
+ // Lip Height (6.35 mm)
+ line(
+ (x-body-start, y-side-top),
+ (x-body-start + 0.4, y-side-top),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-body-start, y-body-top),
+ (x-body-start + 0.4, y-body-top),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-body-start + 0.35, y-body-top),
+ (x-body-start + 0.35, y-side-top),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.06,
+ stroke: 0.6pt + black,
+ )
+ content((x-body-start + 0.65, (y-body-top + y-side-top) / 2), text(
+ size: 5.5pt,
+ )[$qty(6.35, "mm")$])
+
+ // Body Height (165.1 mm)
+ line(
+ (x-body-start + 0.8, y-body-bot),
+ (x-body-start + 0.8, y-body-top),
+ stroke: (paint: luma(140), thickness: 0.4pt, dash: "dashed"),
+ )
+ line(
+ (x-body-start + 0.8, y-body-bot),
+ (x-body-start + 0.8, y-body-top),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(
+ (x-body-start + 1.1, (y-body-bot + y-body-top) / 2),
+ text(size: 6.5pt)[$qty(165.1, "mm")$ body],
+ angle: -90deg,
+ )
+
+ // Cassette Depth (152.4 mm)
+ line(
+ (x-body-start, y-side-top + 2.0 * s),
+ (x-body-start, y-side-top + 0.5),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-body-rear, y-side-top + 2.0 * s),
+ (x-body-rear, y-side-top + 0.5),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-body-start, y-side-top + 0.45),
+ (x-body-rear, y-side-top + 0.45),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(((x-body-start + x-body-rear) / 2, y-side-top + 0.65), text(
+ size: 6.5pt,
+ )[$qty(152.4, "mm")$])
+
+ // Cable Zone Depth (>= 25.0 mm)
+ line(
+ (x-chassis-rear, y-side-top + 2.0 * s),
+ (x-chassis-rear, y-side-top + 0.5),
+ stroke: 0.4pt + luma(140),
+ )
+ line(
+ (x-body-rear, y-side-top + 0.45),
+ (x-chassis-rear, y-side-top + 0.45),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(((x-body-rear + x-chassis-rear) / 2, y-side-top + 0.65), text(
+ size: 6pt,
+ )[$gt.eq qty(25.0, "mm")$])
+
+ // Callout Annotations for View A
+ line(
+ (x-body-rear + 3.0 * s, y-side-bot + h-panel / 2),
+ (x-body-rear + 1.2, y-side-bot + h-panel / 2 + 0.6),
+ stroke: 0.5pt + black,
+ )
+ content(
+ (x-body-rear + 1.25, y-side-bot + h-panel / 2 + 0.6),
+ text(size: 6pt)[DB-25 backplane \
+ (grounded via shell & pin 25)],
+ anchor: "south-west",
+ )
+
+ line(
+ (x-chassis-rear - 2.0 * s, y-side-bot + 20.0 * s),
+ (x-chassis-rear + 0.5, y-side-bot - 0.3),
+ stroke: 0.5pt + black,
+ )
+ content(
+ (x-chassis-rear + 0.55, y-side-bot - 0.3),
+ text(size: 6pt)[Cable bend & wiring zone],
+ anchor: "west",
+ )
+
+ // =========================================================================
+ // VIEW B: FRONT ELEVATION (Module Pitch Alignment)
+ // =========================================================================
+ let x-front-view = 7.2
+ let w-module = 38.0 * s // 0.912
+ let pitch-module = 38.1 * s // 0.9144
+
+ // View Title
+ content((x-front-view + 1.5 * pitch-module, y-side-top + 1.5), text(
+ size: 8.5pt,
+ weight: "bold",
+ )[VIEW B: FRONT ELEVATION])
+ content((x-front-view + 1.5 * pitch-module, y-side-top + 1.15), text(
+ size: 7pt,
+ fill: luma(90),
+ )[(Module pitch & slot interface alignment)])
+
+ // Chassis Front Frame
+ rect(
+ (x-front-view - 0.2, y-side-bot - 2.0 * s),
+ (x-front-view + 3 * pitch-module + 0.2, y-side-top + 2.0 * s),
+ fill: luma(240),
+ stroke: 1.2pt + black,
+ )
+
+ // Module Slot 1 (Module 1 Installed)
+ let m1-x = x-front-view
+ rect(
+ (m1-x, y-side-bot),
+ (m1-x + w-module, y-side-top),
+ fill: luma(250),
+ stroke: 1pt + black,
+ )
+ circle(
+ (m1-x + w-module / 2, y-side-bot + h-lip / 2),
+ radius: 1.2 * s,
+ fill: white,
+ stroke: 0.6pt + black,
+ )
+ circle(
+ (m1-x + w-module / 2, y-side-top - h-lip / 2),
+ radius: 1.2 * s,
+ fill: white,
+ stroke: 0.6pt + black,
+ )
+ content((m1-x + w-module / 2, y-side-bot + h-panel / 2), text(
+ size: 6.5pt,
+ weight: "bold",
+ )[Module 1])
+
+ // Module Slot 2 (Module 2 Installed)
+ let m2-x = x-front-view + pitch-module
+ rect(
+ (m2-x, y-side-bot),
+ (m2-x + w-module, y-side-top),
+ fill: luma(250),
+ stroke: 1pt + black,
+ )
+ circle(
+ (m2-x + w-module / 2, y-side-bot + h-lip / 2),
+ radius: 1.2 * s,
+ fill: white,
+ stroke: 0.6pt + black,
+ )
+ circle(
+ (m2-x + w-module / 2, y-side-top - h-lip / 2),
+ radius: 1.2 * s,
+ fill: white,
+ stroke: 0.6pt + black,
+ )
+ content((m2-x + w-module / 2, y-side-bot + h-panel / 2), text(
+ size: 6.5pt,
+ weight: "bold",
+ )[Module 2])
+
+ // Module Slot 3 (Empty Slot showing chassis guide rails)
+ let m3-x = x-front-view + 2 * pitch-module
+ rect(
+ (m3-x, y-side-bot),
+ (m3-x + w-module, y-side-top),
+ fill: white,
+ stroke: 0.8pt + black,
+ )
+ rect(
+ (m3-x, y-side-top - h-lip),
+ (m3-x + w-module, y-side-top),
+ fill: luma(210),
+ stroke: 0.5pt + black,
+ )
+ rect(
+ (m3-x, y-side-bot),
+ (m3-x + w-module, y-side-bot + h-lip),
+ fill: luma(210),
+ stroke: 0.5pt + black,
+ )
+ content((m3-x + w-module / 2, y-side-bot + h-panel / 2), text(
+ size: 6pt,
+ fill: luma(100),
+ )[Empty slot \ (rails visible)])
+
+ // Centerlines for Module Center Pitch
+ line(
+ (m1-x + w-module / 2, y-side-bot - 0.4),
+ (m1-x + w-module / 2, y-side-top + 0.4),
+ stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"),
+ )
+ line(
+ (m2-x + w-module / 2, y-side-bot - 0.4),
+ (m2-x + w-module / 2, y-side-top + 0.4),
+ stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"),
+ )
+ line(
+ (m3-x + w-module / 2, y-side-bot - 0.4),
+ (m3-x + w-module / 2, y-side-top + 0.4),
+ stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"),
+ )
+
+ // Dimension: Module Pitch (38.1 mm / 1.5")
+ line(
+ (m1-x + w-module / 2, y-side-top + 0.35),
+ (m2-x + w-module / 2, y-side-top + 0.35),
+ mark: (start: "stealth", end: "stealth"),
+ mark-size: 0.08,
+ stroke: 0.6pt + black,
+ )
+ content(((m1-x + m2-x + w-module) / 2, y-side-top + 0.55), text(
+ size: 6.5pt,
+ )[$qty(38.1, "mm")$ ($qty(1.5, "inch")$) pitch])
+
+ // =======================================================