User, 18 Oct 2026: use an EtherCAT based system.
- Spindle and conveyor on the StepperOnline A6-EC100L2A1-M17 kit
(100 W, A6-200EC drive, USD 123.29), spindle through a 1:6 belt in
cyclic synchronous position, conveyor in cyclic synchronous velocity.
- The A6-EC drive has no divided encoder output, so an RS-422
incremental encoder on the spindle shaft clocks both line-scans; its
index goes to the drive touch probe for one angle reference.
- Station controller: fanless N100 mini PC with 2x Intel i226, NixOS
PREEMPT_RT, EtherCAT master EtherCrab (Rust, MIT/Apache) first, IgH
(nixpkgs, igc native driver on 6.12 LTS) as fallback; no PLC.
- EtherCAT I/O: EK1100, EL1809, EL2809, EL3102 (warp lasers sampled with
the spindle position, ~1,000 points a turn at 1 ms).
- Safety stays hardwired (safety relay, contactor; no STO at 100 W).
- Edge PC with the GPU stays off the real-time loop.
- BOM: drives, encoder, controller and I/O lines with sources; total
USD 16,112 to 32,938 (THB 0.53M to 1.09M). Next step: EtherCAT bench.
- Investor render: cabinet and outfeed labels.
User, 18 Oct 2026: for now one QC station for both machines; let the
records cool in a queue before testing them.
- inline-optical-qc.md "Where it sits": launch setup. Spindle stacks
from the Duplex system and the Classic, labelled at the press (press,
stamper set, first and last cycle), cool in FIFO racks (24 h accepted
practice, 8 h at the shortest, Stamper Discs; about one day of output,
2,800 to 3,100 records); the finishing operator feeds the station from
the cooled stacks. Gains: warp and centring measured on settled records
(the release value), one station instead of two, no Classic unloader
change, no warm-record sag or thermal camera. Cost: defects found hours
later, covered by the Duplex operator, per-cycle telemetry and an early
lane for the first records of each run and after stamper changes.
Record key from the stack label and stack position, checked against the
run-out stamper number. Capacity 10 to 12 a minute against 5 to 6:
one station to about two Duplex systems and two Classics. A station at
each press stays the later option. Cost table, open points, infeed row,
thermal camera note and the Newbilt question follow.
- Fleet calculator: the per-press stations and the release station are
gone; the finishing block shows the cooling racks with record stacks
and the one optical station by the corridor glass; tooltips, corridor
and conveyor texts; machine park back to its legend, finishing box
"cooling, QC, packing".
- quality-automation.md layer 1, digital-factory.md QC row,
process-flow.md stage 6, site-candidates.md block ground floor,
crane-workshop-tours.md tour stop 6.
- Investor render: infeed label "the operator sets each cooled record
down".
Checks: node --check; pw_bp_calc.py 0 fails; pw_iso_view_check.py OK;
info for every data-id at all presets, levels and rotations; GF nodes
2,414 at the full preset; zoomed shots in two rotations.
User, 18 Oct 2026: use real 40x40 profiles, make a render with text
pointing out the parts to show the investor; the ring lights looked
like they were floating.
- build_station.py: frame drawn from the real 8-slot 40 series section
(profile_shape: slots, centre bore, corner cavities; 40x80 with centre
cavity) and 24 cast angle brackets; top beams now butt between the
uprights; label-camera posts moved beside the cameras so both ring
lights clamp straight to them; top line-scan on a side post with
visible camera plate and light hangers; slide strips on carrier angles,
pulley axles, end-stop posts, presence-sensor brackets, backlight post,
cabinet on base crosses, chute on two supports and clear of the rail,
pneumatics rail, stack light on the back upright, touch screen on the
front end upright. A connectivity check at the end lists any part that
does not reach the floor through touching parts: none.
- render_annotated.py (FreeCAD): front three-quarter view, camera backed
off so nothing is clipped, no navigation cube or preselection, label
positions projected from the camera and checked with marker renders.
- annotate_render.py (Pillow): title, 16 labels in two columns, leaders
assigned so none cross -> inline-qc-station-annotated.png.
- render_station.py: same camera and preselection fixes; all six views
re-rendered.
- BOM: 32 m of 40x40 in 45 pieces; total still USD 16k to 33k.
- inline-optical-qc.md and README updated; .gitignore for the render
intermediates.