Case studies/Enterprise, SaaS & industrial
Industrial automation · 36-axis hot-wire panel line

Guardian Shield Systems

2026 - now

Software around a 36-axis hot-wire line that cuts foam billets into building panels, delivered ahead of its commissioning: an independent audit of the PLC project, a machine console on the Bosch Rexroth ctrlX CORE controller, and an AI support assistant grounded in the machine's own drawings and drive manuals.

Overview

Guardian Structural Technologies makes Guardian Shield panels, an engineered thermal envelope panel system for residential and commercial buildings. The panels are cut out of foam billets, and the company is building an automated line to do it: an infeed table, a cutting section and an outfeed table in a row, 36 servo axes and six hot wires. A raw billet 18 feet long is squared against a fence and pushed to a stop, a vertical wire slices a panel off its face, four wires cut the channels for the structural steel in one pass, and an overhead wire traces the window and door openings. Motion runs on a Bosch Rexroth ctrlX CORE with IndraDrive Mi drives, and the cutting paths arrive as G-code, one program per wire.

The engagement began in May 2026 and runs on two tracks, both ahead of commissioning. The first is the control software. The PLC project - IEC 61131-3 Structured Text written by the client's controls developer - came in for an independent review before the machine is powered up. The review had to be static: the ctrlX PLC Engineering project is a single encrypted binary that opens only in the vendor's Windows IDE, so it worked from a text export of all 46 program blocks, read line by line and cross-checked against the supplied documentation and the motion library calls. The report ranks findings by consequence, separates what is a fix from what is a question of design intent, says plainly what could not be checked without the device configuration, and ends with 15 questions for the developer rather than verdicts. A companion analysis covered how the hot-wire power controllers should reach the PLC, fieldbus module or analog I/O, a decision that had to land while the panel was still being built.

The second track is everything an operator and a maintenance technician need around the controller, built as one web console. It talks to the ctrlX CORE through the Data Layer: REST for browsing, reads and typed writes, server-sent events for live values. Its home screen is a machine map. All 36 axes are located on the real geometry, converted from the client's STEP assembly into a web 3D model, and each one is tied to its name in the PLC and the process specification, its sheet in the electrical drawings and its drive chain. A new alarm flies the camera to the faulted component. Around the map sit a fault logbook, cases that open themselves from alarms, maintenance with a per-shift pre-start checklist, escalation by email and SMS, security and network views, backups, and an admin side with usage and cost metering.

The assistant inside the console answers in English and Spanish from the machine's own paper: nine source PDFs, 2,531 pages in all - the 62-sheet electrical drawing set and the drive manuals, the largest of them 1,442 pages - plus the bill of materials, the process specification and assembly facts read out of the CAD file. Answers cite the document and the page, and the citation opens the PDF at that page. It can read the controller through tools, and it can propose a write, but only a person confirming in the interface executes one.

The status is stated as it is. The machine is not commissioned yet, and today the console is bound to a ctrlX CORE on a test bench that exposes a single axis. The 36 axes on the map come from the CAD model, the drawings and the bill of materials, an axis that is not bound to the controller never shows an invented live state, and binding the full machine is a written procedure waiting for the day it comes online.

What was built

Stack

Controls & machine

Bosch Rexroth ctrlX CORE
Motion controller of the line on ctrlX OS: 36 coordinated servo axes with IndraDrive Mi near-motor drives.
IEC 61131-3 Structured Text
The PLC project under audit: programs, function blocks, global variable lists and data types, reviewed from a text export of the ctrlX PLC Engineering project.
PLCopen motion blocks
Axis power, reset, homing and absolute moves, with electronic gearing between master and slave axes; the audit checked the code against the ctrlX motion library it calls.
ctrlX Data Layer REST API
Token auth, node browse, read, metadata and typed writes, with server-sent events for live values.
G-code (ctrlX NPG)
One cutting program per hot wire, parsed in the console for preview, including the older FANUC-style dialect.

Frontend

Next.js 16 + React 19
The console: machine map, assistant, faults, cases, maintenance, security, network and admin, in TypeScript with Tailwind 4, English and Spanish.
three.js
The 3D machine map with orbit, markers, fly-to on a fault and drive-chain lines, and the cutting cycle film.
Recharts
Fault frequency, faults by operator and shift, a 48-hour fault timeline and escalation response.

Backend

Next.js API routes
Assistant chat over SSE, controller reads and confirmed writes, cases, maintenance, alerts, backups and admin reports.
MCP server
Stateless Streamable HTTP endpoint with read-only controller tools, the same toolbox the built-in chat uses.
Python
Data Layer client and CLI for the controller, and the script that converts the CAD assembly into the web model.

Data

Supabase / Postgres
A dedicated schema for this client on a shared instance, row-level security, private storage buckets for backups and knowledge-base uploads.
Turbopuffer
Vector namespace for the machine's corpus; every chunk carries source file, page, section and part numbers so an answer can cite it.
Upstash Redis
Rate limiting, including the ten-per-minute limit on controller writes.

AI

Claude
Sonnet for answers and controller tool use, Haiku as the judge in the Fault Lab.
Voyage AI
voyage-4-large embeddings at 2,048 dimensions and reranking of retrieved chunks.
pdf.js + Tesseract.js
In-app knowledge-base ingestion on serverless: PDF text extraction with an OCR fallback for scanned documents.

3D & CAD

STEP AP214 to GLB
cascadio conversion of the SolidWorks assembly, CAD colours baked into vertex colours, parts bucketed into one mesh per axis and per zone.
gltfpack
Mesh simplification and compression into a high-quality model of about 14 MB and a lite one of about 5 MB for weak GPUs.

Infrastructure & DevOps

Vercel
Hosting and four cron jobs: controller sampling every minute, the case scan every five, a nightly backup and a weekly report.
Telegraf + InfluxDB + Grafana
Docker Compose stack for long-term controller metrics, fed by Telegraf's native ctrlX Data Layer input.

Integrations

Twilio SMS
Alert delivery to escalation contacts by severity, next to email.
Nodemailer
Email for fault alerts and the scheduled weekly report.

Tooling & QA

Vitest
94 test files, among them the safety gate, the G-code parser, the cycle kinematics and the integrity of the 3D model assets.
Playwright
End-to-end specs plus headless smoke scripts for the 3D map, the live binding, the mobile console and the guided demo.

Engineering highlights

Safety is code, not tone. A prompt contract rules out live-voltage procedures and makes a safety section mandatory, and behind it a deterministic gate scans every generated answer, in English and Spanish, for anything that reads like bypassing an interlock, a guard, STO or an E-stop, and replaces it with a stop-and-escalate message. The gate understands negation, so the required warning 'never bypass the interlocks' passes while the instruction fails closed.

A second deterministic gate handles fabrication. Every drive parameter or command id an answer cites has to exist somewhere in the manual corpus, otherwise the answer is blocked and never served. Together with cross-page chunk overlap and an abstention rule it took hallucinated fault answers in the Fault Lab from 60 to 36, none of them served.

The 36 axes were identified from three sources that had to agree: the CAD assembly for positions, the bill of materials for the count - exactly 36 servo motors against 36 drives - and the electrical drawings for identity, where sheets 35 to 52 are the 36 motor nodes. Where a mapping is inference rather than something the drawings state, the interface marks it as tentative.

The cutting film is a reviewed specification as much as a picture. The cycle was written out in plain words, corrected by the machine's architect line by line, and the film is checked against that text. The code keeps what is sourced apart from what is assumed, the step durations are labelled as estimates, and the page says it is time compressed.

An audit without a compiler. With the PLC project locked inside an encrypted binary, the review ran on a text export kept in git as a diffable mirror of the real project, and the report is explicit about its limits: nothing was compiled or run, and the device configuration was out of scope.