Optical QC: one station for both presses, after the cooling racks
Deploy test site / deploy (push) Successful in 55s
Deploy test site / deploy (push) Successful in 55s
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.
This commit is contained in:
1 parent
9ffcfe62f1
commit
8c2143630c
9 files changed
+142
-95
No files matched your search
@@ -290,9 +290,8 @@ to run along the corridor:
|
||||
3. Stamper prep
|
||||
4. Material lab and PVC handling
|
||||
5. **Press hall**, the long glazed stretch and the centre of the tour
|
||||
6. Release inspection of cooled samples (every record is already
|
||||
checked by the optical QC station at its press, and the presses trim
|
||||
inline)
|
||||
6. Cooling racks and 100% optical inspection of the cooled records (the
|
||||
presses trim inline)
|
||||
7. QC and listening, with a headphone listening point
|
||||
8. Finishing and packaging, where the records leave production
|
||||
|
||||
|
||||
@@ -563,7 +563,7 @@ same watcher pattern as the metrology exports below. See
|
||||
|
||||
| Instrument | How results reach the database | Key | Open integration item |
|
||||
|---|---|---|---|
|
||||
| Inline optical inspection at the press unloader (PC-based GenICam station or Keyence/Cognex class, custom integration; devices in [inline optical QC](equipment/inline-optical-qc.md)) | vision controller sends one result string per record over TCP to a receiver on `vinyl-edge-press`; images pushed by SFTP to the collector, synced to the core's image dataset | press ID + cycle counter, passed from the PLC to the vision trigger | the cycle counter hand-off between PLC and vision controller is an integrator deliverable and an acceptance test |
|
||||
| Optical inspection of every record (at launch one station after the cooling racks, fed from labelled spindle stacks; PC-based GenICam station or Keyence/Cognex class, custom integration; devices and setup in [inline optical QC](equipment/inline-optical-qc.md)) | vision controller sends one result string per record over TCP to a receiver on `vinyl-edge-press`; images pushed by SFTP to the collector, synced to the core's image dataset | press ID + cycle counter, passed from the PLC to the vision trigger | the cycle counter hand-off between PLC and vision controller is an integrator deliverable and an acceptance test |
|
||||
| Stamper metrology (Keyence VK-X, VR-6000, XRF gauge, profilometer) | vendor Windows PCs export CSV and raw 3D to an SMB share on `vinyl-st-metrology`; a watcher parses and posts | back-side Data Matrix serial, scanned at the bench before measurement | export format per instrument confirmed with Keyence Thailand |
|
||||
| PVC material lab (moisture analyzer, spectrophotometer, balance, later torque rheometer, DSC, FTIR) | instruments with RS232/USB export are read at `vinyl-st-lab`; the rest are typed in with the printout photographed; CoA PDF attached | compound lot ID (printed label scanned at intake) | which benchtop models have serial export |
|
||||
| Audio QC station | capture service on `vinyl-st-audioqc` records the needle-drop (PipeWire, FLAC to the core's capture dataset); analysis pipeline computes spectral-envelope match to the source master, click/pop count, noise floor, channel balance; scores posted | record key (stamper + press + cycle + side), typed or picked from the run list | first-of-kind pipeline, developed in Expand phase against launch-phase recordings |
|
||||
|
||||
@@ -20,8 +20,9 @@ parts:
|
||||
- an edge PC running open-source vision software on NixOS.
|
||||
|
||||
The hardware costs about USD 16k to 33k per station (bill of materials,
|
||||
partly estimates). The launch plant needs two stations, one for the Duplex
|
||||
cell and one for the Classic. A concept model of the station, an aluminium
|
||||
partly estimates). At launch one station serves both presses, the Duplex
|
||||
system and the Classic, and it checks the records after they have cooled
|
||||
(decided October 2026; see [where it sits](#where-it-sits)). A concept model of the station, an aluminium
|
||||
profile frame with a rim-belt conveyor and all sensors mounted to it, is
|
||||
in [the station setup](#the-station-setup-frame-conveyor-and-sensors).
|
||||
|
||||
@@ -130,11 +131,11 @@ chuck.
|
||||
| Output | a record every 15 to 20 s from its two presses (at 30 to 40 s per press; Newbilt quotes about 30 s, and the [fleet calculator](../fleet-calculator.html) takes 3 records a minute as 40 s) | a 180 g record every 28 s (Newbilt) |
|
||||
| Station time per record | about 1 s of scan plus 2 to 3 s to load and unload (estimate) | same |
|
||||
|
||||
That leaves slack at both stations. One central station could in
|
||||
principle take the launch plant's 5 to 6 records a minute. A station at
|
||||
each cell needs no conveyor and catches a non-fill streak within a cycle
|
||||
or two. The calculator's iso view draws a conveyor to one optical
|
||||
station; that drawing is schematic.
|
||||
That leaves slack at both stations. One central station takes the
|
||||
launch plant's 5 to 6 records a minute with room to spare, and that is
|
||||
the launch setup ([where it sits](#where-it-sits)). A station at each
|
||||
cell would catch a non-fill streak within a cycle or two; that stays the
|
||||
option for a larger fleet.
|
||||
|
||||
## The station setup: frame, conveyor and sensors
|
||||
|
||||
@@ -187,13 +188,13 @@ can reach the record from below.
|
||||
The belts run on UHMW slide strips and are driven by one shaft at the
|
||||
outfeed end. Side guides with a flared mouth centre the record at the
|
||||
infeed. Supported on two rim lines, a warm 180 g record sags about 1 mm
|
||||
in the middle (beam estimate); the trials should confirm that this does
|
||||
no harm. For 10" and 7" records the belt spacing moves in on a slide;
|
||||
in the middle (beam estimate). The launch setup feeds cooled records,
|
||||
which are stiffer; the trials should confirm that the sag does no harm. For 10" and 7" records the belt spacing moves in on a slide;
|
||||
the model shows the 12" setting.
|
||||
|
||||
| Station | Position from the infeed end | What happens |
|
||||
|---|---|---|
|
||||
| Infeed | 200 mm | the operator (Duplex) or the unloader (Classic) puts the record down; a presence sensor starts the cycle |
|
||||
| Infeed | 200 mm | the finishing operator puts each cooled record down (at a press-side station: the press operator or the Classic's unloader); a presence sensor starts the cycle |
|
||||
| Label gate | 520 mm | both colour cameras flash the labels on the fly through the open centre (exposure about 20 µs, under 10 µm blur at 0.5 m/s); the top camera also reads the dead-wax code that ties the record to its stamper, and so to its press and cycle (readability to test, as in [digital factory](../digital-factory.md)) |
|
||||
| Inspection | 880 mm | a through-beam on the leading edge stops the belts; the chuck lifts the record 75 mm off them (the pad waits below the belt plane), expands the mandrel in the 7.24 mm hole and turns it once in about 1 s |
|
||||
| Reject | 1,320 mm | a pneumatic rodless cylinder on a bridge pushes a reject sideways by its edge onto a felt-lined chute at the back and into the bin |
|
||||
@@ -223,7 +224,9 @@ belt crosses that line:
|
||||
- **Lift drive:** the lift is a guided pneumatic cylinder, and the
|
||||
spindle is belt-driven from a servo set to the side. That keeps the
|
||||
bottom camera's view cone clear, which the elevation shows.
|
||||
- **Thermal camera (option):** hangs at the tunnel entry.
|
||||
- **Thermal camera (option):** hangs at the tunnel entry. It only makes
|
||||
sense at a press-side station; cooled records show no temperature
|
||||
pattern, so the launch setup leaves it out.
|
||||
|
||||
**Cycle per record (estimate).**
|
||||
|
||||
@@ -237,7 +240,8 @@ belt crosses that line:
|
||||
| **Total** | **about 5 to 6 s** |
|
||||
|
||||
A Duplex cell delivers a record every 15 to 20 s and the Classic one
|
||||
every 28 s. The PC finishes the verdict while the record is lowered and
|
||||
every 28 s; together that is 5 to 6 records a minute, against the 10 to
|
||||
12 the station can take. The PC finishes the verdict while the record is lowered and
|
||||
carried to the pusher.
|
||||
|
||||
**Control.** A small PLC (Mitsubishi FX5U or Delta class, both common in
|
||||
@@ -272,45 +276,88 @@ By group, per station:
|
||||
|
||||
**Open points for the machine builder.**
|
||||
|
||||
1. **Sag:** confirm that the rim-only support does not mark or bend warm
|
||||
records.
|
||||
1. **Sag:** confirm that the rim-only support does not mark or bend the
|
||||
records: cooled ones at launch, warm ones at a press-side station.
|
||||
2. **Static:** fresh PVC attracts dust, so an ionising bar at the infeed
|
||||
may be needed. Otherwise the station counts dust it attracted itself.
|
||||
3. **Classic hand-off:** where and how the Classic's unloader sets the
|
||||
record down.
|
||||
3. **Classic hand-off:** only for a press-side station later; at launch
|
||||
the Classic stacks on its spindle as built.
|
||||
4. **Belt width:** a quick-change spacing for 10" and 7" records.
|
||||
5. **Space in the cell:** check that the 1.9 m length fits the 5 × 3 m
|
||||
Duplex cell next to the trimmer.
|
||||
5. **Space:** at launch the station and the cooling racks stand at the
|
||||
start of the finishing block; a press-side station later has to fit the
|
||||
5 × 3 m Duplex cell next to the trimmer.
|
||||
|
||||
## Where it sits
|
||||
|
||||
- **Duplex cell.** The station sits after the edge trimmer, in front of
|
||||
the operator, before the spindle. The flow per record:
|
||||
1. The operator puts the trimmed record on the infeed conveyor.
|
||||
2. A presence sensor starts the cycle.
|
||||
3. A stack light and the HMI show green or red.
|
||||
4. A reject is pushed into a bin, and the HMI shows the reason; a good
|
||||
record waits at the outfeed for the spindle.
|
||||
**Launch setup: one station for both presses, after cooling** (decided
|
||||
October 2026).
|
||||
|
||||
The operator still sees every record, so the visual check stays as it
|
||||
is today.
|
||||
- **Classic.** The Classic unloads by itself onto the spindle stack. Ask
|
||||
Newbilt whether the unload handling can set the record down on the
|
||||
station's infeed instead; a conveyor takes a record dropped within a few
|
||||
millimetres, which is easier than hitting a chuck. If that does not
|
||||
work, use a fixed area camera over the unload position. That covers
|
||||
surface and label, and leaves warp and eccentricity to samples.
|
||||
- **Warm records.** Records leave the press warm and settle in the stack;
|
||||
24 hours of cooling is the usual practice
|
||||
- **To the cooling racks.** The records leave both presses on spindle
|
||||
stacks as they do today: the Classic stacks by itself, with its cooling
|
||||
plates ([pressing line](pressing-line.md)), and the Duplex operator
|
||||
stacks the trimmed records. Each full stack gets a label, scanned at the
|
||||
press, with the press, the stamper set and the first and last cycle. The
|
||||
stacks go into the cooling racks first in, first out.
|
||||
- **The queue.** 24 hours of cooling before sleeving is accepted practice,
|
||||
and some plants cut it to 8 hours
|
||||
([Stamper Discs](https://stamperdiscs.com/horns-and-quality-issues-in-vinyl-record-pressing)).
|
||||
The warp reading at the press is therefore an early warning. Release on
|
||||
warp uses sampled cooled records, measured on a second station of the
|
||||
same design next to the QC lab in the finishing block (the room the
|
||||
layout had for end-of-line optical inspection).
|
||||
- **Plant view.** The [plant and business plan calculator](../fleet-calculator.html)
|
||||
draws a station in front of the operator in every Duplex cell, one at
|
||||
the unload side of every Classic, and the release station in the
|
||||
finishing block; the machine park schematic shows them too.
|
||||
The station takes the stacks at the end of that time. A single record
|
||||
would reach room temperature within minutes in still air (our estimate
|
||||
for a 1.8 mm disc), but records keep settling for hours, so the queue is
|
||||
measured in hours. The racks hold about one day of output: 2,800 to
|
||||
3,100 records at the launch plant (the 850k target to the ~0.94M
|
||||
capacity in the [calculator](../fleet-calculator.html), over 300 days).
|
||||
- **At the station.** The finishing operator takes each record off the
|
||||
cooled stack and puts it on the infeed. Good records leave the outfeed
|
||||
into sleeving; a reject goes into the bin, and the HMI shows the reason.
|
||||
Finishing handles every record anyway, so the station adds no handling
|
||||
step.
|
||||
- **What it gains.**
|
||||
- Warp and centring are measured on settled records, so the reading is
|
||||
the release value; no separate sampling of cooled records is needed.
|
||||
- One station instead of two: USD 16k to 33k instead of 50k to 105k
|
||||
(estimates).
|
||||
- The Classic needs no change to its unloader.
|
||||
- The questions about warm records drop out: sag on the rim belts and
|
||||
the thermal camera.
|
||||
- **What it costs.** A defect is found hours after pressing instead of
|
||||
within a cycle or two. Three things cover that gap:
|
||||
1. The Duplex operator still sees every record.
|
||||
2. Press telemetry flags process drift every cycle
|
||||
([layer 2](../quality-automation.md#layer-2-press-telemetry-every-cycle)).
|
||||
3. An early lane: the first records of every run, and the first after
|
||||
each stamper change, go to the station warm, straight from the press.
|
||||
Their surface and label verdicts count; their warp is only an early
|
||||
warning. The station runs at about half its capacity at launch, so
|
||||
there is room for this lane.
|
||||
- **Record key.** Away from the press, the station takes the key from the
|
||||
stack label and the record's place in the stack (the top record is the
|
||||
last one pressed). It checks that against the stamper number read in the
|
||||
run-out; the readability of that code is still to test. Where the check
|
||||
fails, the result stays tied to the stack: press, stamper set and time
|
||||
window ([traceability](../traceability.md)).
|
||||
- **Capacity.** The launch plant makes 5 to 6 records a minute and the
|
||||
station takes 10 to 12. One station covers about two Duplex systems and
|
||||
two Classics at the calculator's planning rates (3 + 3 + 2 + 2 = 10 a
|
||||
minute). Past that, add a second station or move to stations at the
|
||||
presses.
|
||||
|
||||
**Later option: a station at each press.** It finds a defect streak
|
||||
within a cycle or two, at the price of one station per cell, and it reads
|
||||
warm records, so release on warp still needs cooled samples.
|
||||
|
||||
- **Duplex cell.** After the edge trimmer, in front of the operator,
|
||||
before the spindle. The operator puts each trimmed record on the infeed;
|
||||
a stack light and the HMI show green or red; a good record waits at the
|
||||
outfeed for the spindle.
|
||||
- **Classic.** Ask Newbilt whether the unload handling can set the record
|
||||
down on the station's infeed instead of the spindle. If not, a fixed
|
||||
area camera over the unload position covers surface and label, and
|
||||
leaves warp and eccentricity to samples.
|
||||
|
||||
**Plant view.** The [plant and business plan calculator](../fleet-calculator.html)
|
||||
draws the station with the cooling racks in the room at the start of the
|
||||
finishing block.
|
||||
|
||||
## Two software routes
|
||||
|
||||
@@ -355,7 +402,7 @@ simulated.
|
||||
|---|---|
|
||||
| Hardware per station, from the [bill of materials](inline-qc-station/inline-qc-station-bom.csv) | USD 16k to 33k (0.53M to 1.08M THB) |
|
||||
| First station: frame build and machined parts, lighting trials, software, training data | 2 to 4 person-months, USD 15k to 40k (our own team with a local machine builder) |
|
||||
| Launch plant: two stations, Duplex cell and Classic | about USD 50k to 105k (1.6M to 3.5M THB) |
|
||||
| Launch plant: one station for both presses, after cooling | the hardware above, USD 16k to 33k, plus the first-station work (about USD 31k to 73k in all, 1.0M to 2.4M THB) |
|
||||
|
||||
All three figures are estimates; the bill of materials names a source for each priced line. They fit inside the existing metrology
|
||||
launch-tier line, USD 170k to 460k for XRF, inline vision and the audio
|
||||
@@ -381,9 +428,10 @@ vision share is not yet confirmed.
|
||||
lights.
|
||||
2. **Keyence test.** Ask Keyence Thailand for a test report on the same
|
||||
records.
|
||||
3. **Newbilt.** Ask about the Classic unload hand-off. Also ask for the
|
||||
cycle counter over OPC UA, so every result carries the record key
|
||||
(stamper, press, cycle, side; see [digital factory](../digital-factory.md)).
|
||||
3. **Newbilt.** Ask how the Classic hands over its spindle stacks and
|
||||
cooling plates (records per stack). Also ask for the cycle counter over
|
||||
OPC UA, so every stack label carries the record key (stamper, press,
|
||||
cycle, side; see [digital factory](../digital-factory.md)).
|
||||
4. **Warp sensors.** Choose between two point lasers and a line profiler
|
||||
once the trials show whether a thickness map is worth the extra cost.
|
||||
5. **Acceptance test.** Write it before ordering. It should cover the
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
@@ -18,7 +18,7 @@ V = App.Vector
|
||||
ANCHORS = [
|
||||
("frame", V(340, -320, 1150), "Aluminium profile frame", "40 × 40 mm slot profile, 1.9 × 0.65 × 1.5 m"),
|
||||
("belts", V(70, -151.5, 897), "Rim-belt conveyor", "touches only the record's edge, never a groove"),
|
||||
("infeed", V(200, -80, 902.5), "Infeed", "the operator or the press unloader sets the record down"),
|
||||
("infeed", V(200, -80, 902.5), "Infeed", "the operator sets each cooled record down"),
|
||||
("label", V(520, -15, 1275), "Label cameras, top and bottom", "right label, right side, centred"),
|
||||
("tunnel", V(820, 319, 1100), "Light-tight tunnel", "black panels keep factory light out"),
|
||||
("lscan_top", V(975, -31, 1385), "Line-scan camera, top", "images a full radius while the record turns once"),
|
||||
|
||||
+33
-36
@@ -38,7 +38,7 @@ document.documentElement.setAttribute("data-theme",t);})();
|
||||
.pk-press { fill: var(--pk-press); stroke: var(--pk-pressS); stroke-width: 1.2; }
|
||||
.pk-col { fill: var(--pk-pressS); }
|
||||
.pk-ex50 { fill: var(--dstd); } .pk-ex35 { fill: var(--dspec); }
|
||||
.pk-op { fill: #e8b400; } .pk-trim { fill: var(--mute); } .pk-qc { fill: #c9d0d8; stroke: #5d6878; } .pk-qct { fill: #2c3442; } .pk-disc { fill: #111; stroke: var(--mute); }
|
||||
.pk-op { fill: #e8b400; } .pk-trim { fill: var(--mute); } .pk-disc { fill: #111; stroke: var(--mute); }
|
||||
.pk-glyph { fill: var(--pk-glyph); stroke: var(--pk-pressS); }
|
||||
.pk-feed { stroke: var(--mute); stroke-width: 1; fill: none; stroke-dasharray: 2 3; }
|
||||
.pk-t { fill: var(--fg); font-size: 12px; font-weight: 600; }
|
||||
@@ -808,9 +808,9 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
<section class="card">
|
||||
<h2>Machine park and stamper production</h2>
|
||||
<p class="note" style="margin-top:0">The fleet above as a schematic, not to scale: each Duplex cell as
|
||||
in the cell sketch (presses either side of the operator, EX 50 and EX 35 behind him, trimmer and
|
||||
inline optical QC station in front), each Classic with its built-in extruder and a QC station at its
|
||||
unload side; above it the stamper line that feeds the presses,
|
||||
in the cell sketch (presses either side of the operator, EX 50 and EX 35 behind him, trimmer in
|
||||
front), each Classic with its built-in extruder; on the right finishing, where the records cool and
|
||||
one optical station checks them; above it the stamper line that feeds the presses,
|
||||
sized from the cycle times in galvanics.md; below it the central utilities. Bars show how busy
|
||||
each station is; an amber box exceeds the plant as planned today.</p>
|
||||
<div class="tscroll"><svg id="park" viewBox="0 0 1200 600" role="img" aria-label="Machine park and stamper production schematic"></svg></div>
|
||||
@@ -1393,9 +1393,10 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
s.led(cx, (y0 + y1) / 2, z + h + 0.02, "iso-ledo");
|
||||
return s;
|
||||
}
|
||||
// inline optical QC station (equipment/inline-optical-qc.md, FreeCAD concept model): 1.9 x 0.65 x 1.5 m
|
||||
// aluminium profile frame with the rim-belt conveyor, a light-tight tunnel over the cameras, stack light on
|
||||
// the tunnel exit and the reject bin beside the outfeed; records run toward -x, the bin stands on the -y side
|
||||
// optical QC station (equipment/inline-optical-qc.md, FreeCAD concept model): 1.9 x 0.65 x 1.5 m aluminium
|
||||
// profile frame with the rim-belt conveyor, a light-tight tunnel over the cameras, stack light on the tunnel
|
||||
// exit and the reject bin beside the outfeed; records run toward -x, the bin stands on the -y side.
|
||||
// Launch setup (October 2026): one station for both presses, at the start of finishing, after the cooling racks
|
||||
function qcStation(sc, id, xa, ya, z, tag) {
|
||||
var s = sc.sprite(id), xb = xa + 1.9, yb = ya + 0.65;
|
||||
s.seq([
|
||||
@@ -1410,9 +1411,6 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
if (tag) sc.tag(xa + 0.95, ya + 0.33, z + 2.1, tag, 3, id);
|
||||
return s;
|
||||
}
|
||||
var QC_INFO = "Checks every record on both faces in one turn: surface (a line-scan camera per side), label (a colour camera per side), " +
|
||||
"warp (two lasers) and centring; a failed record is pushed into the bin. 1.9 x 0.65 x 1.5 m on a 40 x 40 aluminium profile frame, " +
|
||||
"cycle about 5 to 6 s, hardware about USD 16k to 33k (estimate), inside the metrology budget (inline-optical-qc.md)";
|
||||
function duplexCell(sc, n, cx, cy, z, running) {
|
||||
var id = "duplex-" + n;
|
||||
pressM(sc, id, cx - 1.75, cy - 0.1, z, true, running);
|
||||
@@ -1423,12 +1421,8 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
t.box(cx + 0.75, cy - 1.65, cx + 1.35, cy - 1.05, z, z + 1.0, "iso-steel");
|
||||
t.disc(cx + 1.05, cy - 1.35, z + 1.02, 0.22, "iso-vinylc");
|
||||
sc.sprite(id).person(cx, cy - 0.35, z);
|
||||
// inline QC in front of the operator: trimmed record on the infeed (trimmer side), good records out at the far end
|
||||
qcStation(sc, "qc-" + id, cx - 1.25, cy - 1.85, z, "Inline QC");
|
||||
sc.inf("qc-" + id, "Inline optical QC, Duplex " + n,
|
||||
"After the trimmer, in front of the operator: he puts each trimmed record on the infeed and still sees every record. " + QC_INFO);
|
||||
sc.inf(id, "Duplex system " + n + ": 2 HRP 12 presses, EX 50 + EX 35",
|
||||
"One operator's cell (~5 x 3 m): presses turned 45 degrees to the operator, EX 50 main and EX 35 colour extruder behind him, trimmer front-left, inline optical QC station in front of him. HRP 12 ~150 t; steam 150 to 180 kg/h and cooling up to 125 kW per press (Newbilt).");
|
||||
"One operator's cell (~5 x 3 m): presses turned 45 degrees to the operator, EX 50 main and EX 35 colour extruder behind him, trimmer front-left; trimmed records go on spindle stacks to the cooling racks. HRP 12 ~150 t; steam 150 to 180 kg/h and cooling up to 125 kW per press (Newbilt).");
|
||||
}
|
||||
function classicM(sc, n, cx, cy, z, running) {
|
||||
var id = "classic-" + n, s = sc.sprite(id), P = sc.P;
|
||||
@@ -1442,10 +1436,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
s.led(p, cy, z + 1.47, "iso-ledg");
|
||||
if (running) s.puffs(cx - 0.55, cy, z + 2.6, "iso-puff", 2, 3.9);
|
||||
sc.inf(id, "Classic " + n + ": Newbilt Classic, fully automatic",
|
||||
"Built-in extruder, automatic cake loading, label feed and spindle stacking; 28 s cycle at 180 g, ~128 records/h (vendor flyer). Inline optical QC station in front of it.");
|
||||
qcStation(sc, "qc-" + id, cx - 1.2, cy - 1.6, z, "Inline QC");
|
||||
sc.inf("qc-" + id, "Inline optical QC, Classic " + n,
|
||||
"In front of the Classic's unload side. Open point for Newbilt: can the unloader set the record down on the station's infeed instead of the spindle? If not, a fixed camera over the unload position covers surface and label, and warp and centring go to samples. " + QC_INFO);
|
||||
"Built-in extruder, automatic cake loading, label feed and spindle stacking; 28 s cycle at 180 g, ~128 records/h (vendor flyer); the stacks go to the cooling racks.");
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------ the site
|
||||
@@ -1580,7 +1571,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
|
||||
// ------------------------------------------------------------ factory
|
||||
// finishing and print block, 14 x 25 m on two levels at fx 92..106 (site-candidates.md, block floor plans):
|
||||
// ground floor release inspection, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m
|
||||
// ground floor cooling racks + optical inspection, QC lab, stair + goods lift along the corridor, packaging behind; upper floor at +3.8 m
|
||||
var BLK = { fx0: 92, fx1: 106, up: 3.8 };
|
||||
function zoneList(cfg, up) {
|
||||
var z = [
|
||||
@@ -1618,14 +1609,15 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.inf("colourstore", "Colour store, ~180 m2", "About 100 pallet positions on four levels for tens of colours (estimate); weighing, mixing and vacuum conveying");
|
||||
sc.inf("plantroom", "Central hydraulic and air plant room, ~62 m2", "Pump sets on one manifold with the accumulators, one compressed-air plant; ring mains with a valved tee at every press position (pressing-line.md)");
|
||||
sc.inf("aisle", "Crane and forklift aisle, 4.5 m", "Along the back wall from the machine door to the finishing block: heavy moves need a floor-level path");
|
||||
sc.inf("trim", "Release inspection, cooled samples", "Every record is already inspected inline at its press. Records settle for about 24 h, so warp and centring for the release are measured here on cooled samples, on a second station of the same design (inline-optical-qc.md). No separate trimmer: every Duplex cell and the Classic trim inline (pressing-line.md)");
|
||||
sc.inf("trim", "Optical inspection after cooling", "One station checks every record of both presses after the cooling racks: surface (a line-scan camera per side), label, warp and centring in one turn. The finishing operator feeds it from the cooled stacks; good records go on to sleeving, rejects into the bin with the reason on the screen. Early lane: the first records of each run and after each stamper change go through warm. 1.9 x 0.65 x 1.5 m, about 10 to 12 records a minute against 5 to 6 from the launch plant; hardware about USD 16k to 33k (estimate) (inline-optical-qc.md). No separate trimmer: every Duplex cell and the Classic trim inline (pressing-line.md)");
|
||||
sc.inf("cooling", "Cooling racks", "Spindle stacks from both presses, labelled at the press (press, stamper set, first and last cycle), first in, first out. 24 h of cooling before sleeving is accepted practice, 8 h at the shortest (Stamper Discs, in inline-optical-qc.md): about one day of output, 2,800 to 3,100 records at the launch plant");
|
||||
sc.inf("qc", "QC and listening", "Sampled audio comparison (about 1 in 50) and the listening point on the tour (quality-automation.md)");
|
||||
sc.inf("packaging", "Finishing and packaging", "Packing tables, shrink wrap and pallet wrapper, ~170 m2 on the ground floor of the finishing and print block (14 x 25 m on two levels, print room reserved upstairs)");
|
||||
sc.inf("block-stair", "Stair and goods lift", "Connect the two levels of the finishing and print block. The crane runway ends at the press hall, so loads here move by forklift and goods lift; heavy compound stays on the ground floor (site-candidates.md, crane-workshop-tours.md)");
|
||||
if (cfg.cassette) sc.inf("cassette", "Cassette duplication", "Bench line, ~40 to 80 m2 (project-timeline.md)");
|
||||
if (cfg.cdr) sc.inf("cdr", "CD-R duplication, short run", "Tower duplicator and printer bench, ~20 to 40 m2 (project-timeline.md)");
|
||||
sc.inf("printblock", "Finishing and print block, 14 x 25 m",
|
||||
"Two levels: release inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)");
|
||||
"Two levels: cooling racks, optical inspection, the QC lab and packaging (~170 m2) on the ground floor; print room (reserve), print stock and packaging materials on the upper floor at +3.8 m (site-candidates.md)");
|
||||
sc.inf("printroom", "Print room (kept in reserve)", "Upper floor at +3.8 m. In-house printing is not decided; jackets come from a print partner today (site-candidates.md, production-timeline.md)");
|
||||
sc.inf("printstock", "Print stock", "Paper and board, upper floor at +3.8 m (site-candidates.md)");
|
||||
sc.inf("packmat", "Packaging materials", "Sleeves, inner bags, mailers and cartons, upper floor at +3.8 m (site-candidates.md)");
|
||||
@@ -1636,12 +1628,12 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.inf("wc-w", "Toilets at the staff entry", "Women: 2 WC and a basin; men: 1 WC, 1 urinal and a basin; an accessible WC. Thai minimum for a factory, per up to 15 workers of each sex (Ministerial Regulation No. 39, B.E. 2537, table 2); separate toilets for women, men and disabled staff (labour welfare regulation B.E. 2548). Showers are in the office changing rooms.");
|
||||
sc.inf("wc-e", "Toilets, finishing block", "Second set at the east end of the press hall, so nobody walks ~90 m back to the staff entry: women 2 WC and a basin, men 1 WC, 1 urinal and a basin. Proposed (October 2026), not yet in the parametric floor plans.");
|
||||
sc.inf("corridor", cfg.corridor ? "Visitor corridor, glazed, ~98 m" : "Visitor corridor: later",
|
||||
cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall with an optical QC station at every press, release inspection, QC and listening, finishing. No PPE, filtered air." :
|
||||
cfg.corridor ? "Along the car-park wall in process order: cutting, galvanics, stamper prep, material lab, press hall, cooling racks and optical inspection, QC and listening, finishing. No PPE, filtered air." :
|
||||
"The strip along the car-park wall stays free; the glazed corridor is built later.");
|
||||
sc.inf("crane", cfg.crane === "buy" ? "Overhead crane, 5 t" : "Crane-ready frame (crane rented)",
|
||||
cfg.crane === "buy" ? "EOT crane over the production compartment, runway to the end of the press hall, rail at ~5.6 m; parks over the workshop (crane-workshop-tours.md)" :
|
||||
"Runway brackets and rails in the frame; a crane is rented for installations");
|
||||
sc.inf("conveyor", "Records to finishing", "Schematic: inspected records travel from the presses to finishing");
|
||||
sc.inf("conveyor", "Records to finishing", "Schematic: records travel from the presses to the cooling racks (in practice as spindle stacks)");
|
||||
sc.inf("pipebridge", "Pipe bridge", "Steam, condensate and cooling water from the yard to the service trench along the press rows");
|
||||
}
|
||||
function factoryRoof(sc, cfg, pv) {
|
||||
@@ -1729,7 +1721,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
} else fl.flat(pts, z + 0.015, "iso-slot", sl.t === "D" ? "duplex-" + sl.n : "classic-" + sl.n);
|
||||
if (!sl.e && sl.t === "D") {
|
||||
var cx = (sl.x0 + sl.x1) / 2, cy = (sl.y0 + sl.y1) / 2;
|
||||
fl.flat(rect(cx - 2.6, cy - 2.4, cx + 2.6, cy + 2.15), z + 0.02, "iso-cell", "duplex-" + sl.n);
|
||||
fl.flat(rect(cx - 2.6, cy - 2.0, cx + 2.6, cy + 2.15), z + 0.02, "iso-cell", "duplex-" + sl.n);
|
||||
}
|
||||
});
|
||||
// walls cut: back walls taller than front walls (cutaway)
|
||||
@@ -1914,7 +1906,7 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
sc.sprite("plantroom").box(X(45.4), Y(17.3), X(47.3), Y(19.0), z, z + 1.5, "iso-comp");
|
||||
sc.sprite("plantroom").box(X(41), Y(16.0), X(43.6), Y(17.2), z, z + 1.2, "iso-oil");
|
||||
sc.tag(X(44), Y(16.5), z + 3, "Plant room", 4, "plantroom");
|
||||
// finishing and print block, ground floor (block floor plans): along the corridor release inspection, QC lab,
|
||||
// finishing and print block, ground floor (block floor plans): along the corridor cooling + optical inspection, QC lab,
|
||||
// stair + goods lift; packaging behind with the cassette and CD-R benches; the upper floor is drawn at 1F
|
||||
if (!up) finishingGF(sc, cfg, z);
|
||||
// warehouse: three racking rows; dispatch: staged pallets and a forklift
|
||||
@@ -1937,10 +1929,18 @@ html[data-theme=light] .iso-svg .iso-glint { display: inline; }
|
||||
}
|
||||
// finishing and print block, ground floor (fx 92..106)
|
||||
function finishingGF(sc, cfg, z) {
|
||||
// release inspection (fx 92..96): every record is inspected inline at its press (October 2026); here a second
|
||||
// station of the same design measures cooled samples before release. No trimmer: the presses trim inline
|
||||
qcStation(sc, "trim", X(93.1), Y(5.2), z, "");
|
||||
sc.tag(X(94), Y(5.5), z + 2.6, "Release inspection", 4, "trim");
|
||||
// cooling racks and optical inspection (fx 92..96): spindle stacks from both presses cool first in, first out,
|
||||
// then one station checks every record (inline-optical-qc.md, October 2026). No trimmer: the presses trim inline
|
||||
// the station stands by the corridor glass (tour stop), the racks behind it
|
||||
var cr = sc.sprite("cooling");
|
||||
cr.box(X(92.4), Y(5.7), X(95.6), Y(6.4), z, z + 0.45, "iso-shelf");
|
||||
cr.seq([0, 1, 2, 3, 4, 5].map(function (i) {
|
||||
var fx = 92.68 + i * 0.53;
|
||||
return [X(fx), Y(6.05), function (q) { q.cyl(X(fx), Y(6.05), 0.16, z + 0.45, z + 0.45 + (i % 3 === 1 ? 0.3 : 0.48), "iso-dome"); }];
|
||||
}));
|
||||
sc.tag(X(94), Y(6.05), z + 1.5, "Cooling racks", 3, "cooling");
|
||||
qcStation(sc, "trim", X(93.6), Y(3.85), z, "");
|
||||
sc.tag(X(94.5), Y(4.2), z + 2.4, "Optical QC", 4, "trim");
|
||||
// QC lab (fx 96..100): bench on the packaging side
|
||||
var qb = sc.sprite("qc"); qb.box(X(96.3), Y(6.7), X(99.7), Y(7.5), z, z + 0.85, "iso-bench");
|
||||
qb.seq([[X(97), Y(7.1), function (q) { q.box(X(96.5), Y(6.8), X(97.5), Y(7.4), z + 0.85, z + 1.0, "iso-instr"); q.disc(X(97), Y(7.1), z + 1.02, 0.24, "iso-vinylc"); }],
|
||||
@@ -3910,11 +3910,10 @@ function drawPark(r, b) {
|
||||
const y1 = y0 + bh + 44, hh = Math.max(230, 46 + L.h + 18);
|
||||
box(hx, y1, hw, hh, "pk-hall", 8);
|
||||
T(hx + 14, y1 + 20, "pk-lane", `PRESS HALL · ${r.D} DUPLEX SYSTEM${r.D === 1 ? "" : "S"} + ${r.C} CLASSIC${r.C === 1 ? "" : "S"} · ${r.P} PRESSES · ~${f0(r.floor)} M² PRESS FLOOR`);
|
||||
o.push(`<g transform="translate(${hx + hw - 375},${y1 + hh - 22})"><rect width="10" height="10" class="pk-ex50"/><text x="14" y="9" class="pk-s">EX 50</text>` +
|
||||
o.push(`<g transform="translate(${hx + hw - 300},${y1 + 10})"><rect width="10" height="10" class="pk-ex50"/><text x="14" y="9" class="pk-s">EX 50</text>` +
|
||||
`<rect x="62" width="10" height="10" class="pk-ex35"/><text x="76" y="9" class="pk-s">EX 35 colour</text>` +
|
||||
`<circle cx="160" cy="5" r="5" class="pk-op"/><text x="169" y="9" class="pk-s">operator</text>` +
|
||||
`<rect x="225" width="10" height="10" class="pk-trim"/><text x="239" y="9" class="pk-s">trimmer</text>` +
|
||||
`<rect x="290" y="1" width="16" height="8" class="pk-qc"/><rect x="295" y="1" width="6" height="8" class="pk-qct"/><text x="310" y="9" class="pk-s">inline QC</text></g>`);
|
||||
`<rect x="225" width="10" height="10" class="pk-trim"/><text x="239" y="9" class="pk-s">trimmer</text></g>`);
|
||||
if (!items.length) T(hx + hw / 2, y1 + hh / 2, "pk-s", "no presses", "middle");
|
||||
items.forEach(([k, n], i) => {
|
||||
const [px, py] = L.pos[i], tx = hx + 15 + px, ty = y1 + 34 + py;
|
||||
@@ -3927,7 +3926,6 @@ function drawPark(r, b) {
|
||||
`<rect x="77" y="14" width="11" height="24" rx="2" class="pk-ex35"/>` +
|
||||
`<circle cx="73" cy="57" r="5.5" class="pk-op"/>` +
|
||||
`<rect x="48" y="66" width="13" height="13" rx="1" class="pk-trim"/>` +
|
||||
`<rect x="65" y="68" width="40" height="11" class="pk-qc"/><rect x="78" y="68" width="16" height="11" class="pk-qct"/>` +
|
||||
`<text x="75" y="96" class="pk-s" text-anchor="middle">Duplex ${n} · ${pct(r.dUse)}</text></g>`);
|
||||
else o.push(`<g transform="translate(${tx},${ty}) scale(${sc})">` +
|
||||
`<rect width="84" height="104" rx="6" class="pk-cell"/>` +
|
||||
@@ -3935,7 +3933,6 @@ function drawPark(r, b) {
|
||||
`<rect x="28" y="22" width="36" height="36" rx="3" class="pk-press"/>` +
|
||||
`<circle cx="33" cy="27" r="3.5" class="pk-col"/><circle cx="59" cy="27" r="3.5" class="pk-col"/><circle cx="46" cy="53" r="3.5" class="pk-col"/>` +
|
||||
`<circle cx="66" cy="73" r="7" class="pk-disc"/>` +
|
||||
`<rect x="12" y="68" width="40" height="11" class="pk-qc"/><rect x="24" y="68" width="16" height="11" class="pk-qct"/>` +
|
||||
`<text x="42" y="96" class="pk-s" text-anchor="middle">Classic ${n} · ${pct(r.cUse)}</text></g>`);
|
||||
});
|
||||
// compound in
|
||||
@@ -3957,7 +3954,7 @@ function drawPark(r, b) {
|
||||
// finished records out to finishing
|
||||
const fy = ry + 108;
|
||||
box(rx0, fy, 130, 104, "pk-box");
|
||||
T(rx0 + 8, fy + 17, "pk-t", "Finishing"); T(rx0 + 8, fy + 33, "pk-s", "QC, sleeves, packing");
|
||||
T(rx0 + 8, fy + 17, "pk-t", "Finishing"); T(rx0 + 8, fy + 33, "pk-s", "cooling, QC, packing");
|
||||
T(rx0 + 8, fy + 54, "pk-v", `${f0(r.X / days)} a day`);
|
||||
T(rx0 + 8, fy + 72, "pk-s", `${r.fin} ${r.fin === 1 ? "person" : "people"} per shift`);
|
||||
T(rx0 + 8, fy + 88, "pk-s", `${f0(r.perHour)} records an hour`);
|
||||
|
||||
@@ -56,7 +56,7 @@ flowchart TD
|
||||
| 5 | Stamper prep | Concentricity and dimensional checks after punch, back-finish, and coining; visual inspection | |
|
||||
| M | PVC intake (parallel input) | Material lab gate per lot: certificate of analysis, moisture, heat stability, color, density, granulate physicals; new lots released only by test pressing; regrind stream passes its own contamination gate before joining the 80/20 mix | |
|
||||
| L | Labels (parallel input) | Print inspection of each label lot against the approved proof; labels pre-dried in the oven before they go to the press (moisture in the paper causes bubbles); label lot logged per press cycle | |
|
||||
| 6 | Pressing | Bottom label, cake and top label are loaded between the stampers every cycle, so the labels are pressed into the record; press telemetry logged every cycle; then per record: 100% inline optical inspection (including label identity and centering); sampled automated audio comparison against the source master | Artist/label approves the test pressing before the production run |
|
||||
| 6 | Pressing | Bottom label, cake and top label are loaded between the stampers every cycle, so the labels are pressed into the record; press telemetry logged every cycle; then per record, after cooling: 100% optical inspection (including label identity and centering); sampled automated audio comparison against the source master | Artist/label approves the test pressing before the production run |
|
||||
| 7 | Finishing | Trimming quality; inner sleeving; shrink wrap on sampling basis | |
|
||||
| 8 | Packaging | Incoming carton QC per delivery (dimensions, print Delta E against approved proof, seam strength, inner sleeve scuff check); assembly verification by scanning the runout matrix code against the jacket barcode; barcode verification on every unit | |
|
||||
| 9 | Fulfillment | Consignment assembly against the order's bill of materials; carrier tracking recorded per shipment or per dropshipped end customer | |
|
||||
|
||||
@@ -135,14 +135,17 @@ optical inspection is a strong proxy for audio quality without playing the
|
||||
record.
|
||||
|
||||
No vinyl-specific vision product exists (search of October 2026); this is
|
||||
a custom integration of general machine vision at the press unloader, on
|
||||
the pattern of the old CD and DVD in-line scanners: one turn under a
|
||||
a custom integration of general machine vision on the pattern of the old
|
||||
CD and DVD in-line scanners: one turn under a
|
||||
radial line-scan camera with angled lights, plus laser distance sensors
|
||||
for warp. The closest vinyl precedent is Precision Record Pressing's
|
||||
in-house AQA (2023), which scans sampled records with cameras in the lid
|
||||
of modified turntables before playing them. CNX would be an early
|
||||
adopter, and it should be budgeted as an integration project. The device
|
||||
options, a station design, prices and a cost estimate are in
|
||||
adopter, and it should be budgeted as an integration project. At launch
|
||||
one station checks every record of both presses after the records have
|
||||
cooled, at the start of finishing, with an early lane for the first
|
||||
records of each run. The device options, the station design, where it
|
||||
sits, prices and a cost estimate are in
|
||||
[inline optical QC](equipment/inline-optical-qc.md).
|
||||
|
||||
### Layer 2: press telemetry, every cycle
|
||||
|
||||
@@ -199,8 +199,8 @@ and every equipment envelope is an estimate.
|
||||
- **Finishing and print block**, 14 × 25 m on two levels, beyond the
|
||||
end of the crane runway
|
||||
([plans](cnx_vinyl_parametric_payap-block.png)).
|
||||
- Ground floor: the release inspection station (cooled samples;
|
||||
every record is already inspected inline at its press, see
|
||||
- Ground floor: the cooling racks and the optical inspection station
|
||||
(one station checks every record after cooling, see
|
||||
[inline optical QC](equipment/inline-optical-qc.md#where-it-sits)),
|
||||
the QC lab, and packaging (~170 m²) with packing tables, shrink wrap and a pallet wrapper next
|
||||
to the fire shutter into the warehouse. There is no separate
|
||||
|
||||
Reference in new issue
Block a user