From face699a284ac81718537026ee0a7207bc92ee70 Mon Sep 17 00:00:00 2001 From: grabowski Date: Mon, 19 Oct 2026 10:43:59 +0700 Subject: [PATCH] Optical QC: EtherCAT control plan with geizhals.de prices User, 19 Oct 2026: plan the current EtherCAT setup, keep the 100 W servo, check prices on geizhals.de. - New docs/equipment/inline-qc-control-plan.md: decisions, bus layout (drives at the end of the line because the A6-200EC takes control power from the main supply), I/O list for EL1809/EL2809/EL3152/EL5101 and the drive touch probe, PDO and DC notes from the A6-EC manual, geizhals.de price table (EUR 1,891.60 to 2,104.39 + USD 246.58 for the servo kits, THB 80k to 88k), NixOS/EtherCrab software, safety circuit (PNOZ s3, two contactors, dump valve), bench test with pass marks (parts about THB 64k, all reused), build order, spares, open points. - EL3102 replaced by EL3152: the optoNCDT 1420 output is 4 to 20 mA. - Spindle encoder index goes to an EL5101 instead of the drive touch probe; encoder 2,000 to 2,500 pulses. - BOM: control lines split per part with geizhals.de prices (+30% high end for shipping and Thai duty/VAT, estimate); total USD 16,912 to 33,061 (THB 0.56M to 1.09M). Doc, render caption and fleet calculator text now say USD 17k to 33k. - README links the plan. --- README.md | 5 + docs/equipment/inline-optical-qc.md | 71 ++--- docs/equipment/inline-qc-control-plan.md | 281 ++++++++++++++++++ .../inline-qc-station/annotate_render.py | 2 +- .../inline-qc-station-annotated.png | Bin 1534245 -> 1534424 bytes .../inline-qc-station-bom.csv | 23 +- docs/fleet-calculator.html | 2 +- 7 files changed, 339 insertions(+), 45 deletions(-) create mode 100644 docs/equipment/inline-qc-control-plan.md diff --git a/README.md b/README.md index 8318327..e4e50ad 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,10 @@ The detail lives in dedicated documents: NixOS software, specials, prices and a two-station cost estimate, and a FreeCAD concept model of the station (aluminium profile frame, rim-belt conveyor, chuck, sensors) with a sourced bill of materials +- [QC station control plan](docs/equipment/inline-qc-control-plan.md): + EtherCAT with two 100 W servo kits, Beckhoff I/O and an N100 mini PC + running an open-source master on NixOS; bus layout, I/O list, + geizhals.de prices, safety circuit, bench test and build order - [Quality automation](docs/quality-automation.md): stamper metrology (Keyence-class confocal, profiler, XRF), layered pressed-record QC (100% optical inspection, per-cycle press telemetry, sampled automated audio @@ -347,6 +351,7 @@ docs/ │ ├── duplex-cell-layout-sketch.png Duplex cell arrangement (sketch, not to scale) │ ├── galvanics.md Electroforming and stamper prep equipment plan │ ├── inline-optical-qc.md Devices for the record inspection station +│ ├── inline-qc-control-plan.md EtherCAT control plan for the station │ ├── inline-qc-station/ Concept model of the station (FreeCAD script, │ │ .FCStd, renders, labelled investor view, │ │ bill of materials) diff --git a/docs/equipment/inline-optical-qc.md b/docs/equipment/inline-optical-qc.md index 104186e..2365e9a 100644 --- a/docs/equipment/inline-optical-qc.md +++ b/docs/equipment/inline-optical-qc.md @@ -19,7 +19,7 @@ parts: - a servo turntable with a centring chuck; - an edge PC running open-source vision software on NixOS. -The hardware costs about USD 16k to 33k per station (bill of materials, +The hardware costs about USD 17k to 33k per station (bill of materials, 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 @@ -249,14 +249,14 @@ October 2026). The conveyor uses the same kit, so one spare covers both. divided encoder output: its CN1 port carries five inputs, two of them touch probes, and three outputs ([A6-EC manual](https://www.omc-stepperonline.com/download/A6-EC_series_servo_drive_manual.pdf)). - So an incremental encoder (RS-422 line driver, 2,500 to 5,000 pulses a + So an incremental encoder (RS-422 line driver, 2,000 to 2,500 pulses a turn) sits on the spindle shaft. Its A/B signals clock both line-scans directly (Basler racer 2 encoder control, [Basler](https://docs.baslerweb.com/encoder-control)), so line timing never passes through software, and it measures the spindle itself - rather than the motor behind the belt. Its index pulse goes to the - drive's touch-probe input, which latches the servo position at the same - mark every turn. The scan, the laser traces and the servo then share + rather than the motor behind the belt. The same line also runs to an + EtherCAT encoder terminal (EL5101), which counts A/B and latches the + index once a turn. The scan, the laser traces and the servo then share one angle reference. - **STO version, looked at in October 2026.** StepperOnline sells the A6-EC drive with Safe Torque Off only from 400 W: A6-EC400H2B1-M17-STO @@ -283,7 +283,7 @@ station controller needs to run the station. Lights, drives and cylinders are in | 8 MP colour area camera, GigE, 16 mm lens, ring light | 2: top and bottom | Basler ace 2 a2A2840-14gcPRO | label gate, 520 mm from the infeed | right label on the right side, print, label centring; the top camera also reads the stamper number in the run-out | 1,119 (Basler web shop); lens and ring light 300 to 800 (estimate) | | Laser distance sensor | 2 | Micro-Epsilon optoNCDT 1420 | under the record, at 90 and 130 mm radius; analog output to the EtherCAT analog input | warp: height traced round two circles during the turn | from EUR 470 list; ILD1420-25 about 1,600 at a reseller | | Servo encoder, 17-bit | 2: spindle and conveyor | StepperOnline A6-EC100L2A1-M17 kit | in each motor; position over EtherCAT | spindle angle for the sequence and the warp traces; conveyor travel | in the kit, 123.29 | -| Incremental encoder, RS-422 line driver, 2,500 to 5,000 pulses a turn | 1 | Omron E6B2-CWZ1X class | on the spindle shaft | A/B clock both line-scans; the index latches the servo position through the drive's touch probe | 60 to 300 (estimate) | +| Incremental encoder, RS-422 line driver, 2,000 to 2,500 pulses a turn | 1 | Omron E6B2-CWZ1X class | on the spindle shaft | A/B clock both line-scans; A/B and the index go to the EL5101 encoder terminal, which counts the spindle angle | 53 to 282 (geizhals.de, October 2026) | | Diffuse photoelectric sensor | 3 | any industrial make | looking up through the open centre: infeed, label trigger, outfeed | a record at the infeed starts the cycle; the trigger fires the label cameras; a full outfeed holds the next record | 50 to 150 (estimate) | | Through-beam photoelectric sensor | 1 pair | any industrial make | across the conveyor at the inspection position | the record's leading edge; stops the belts over the chuck | 50 to 150 (estimate) | | Cylinder position switch | 6 | SMC D-M9 class | lift (up, down), reject pusher (home, out), mandrel (open, clamped) | confirms each move before the next step | 25 to 60 (estimate) | @@ -314,12 +314,14 @@ every 28 s; together that is 5 to 6 records a minute, against the 10 to carried to the pusher. **Control: EtherCAT** (decided October 2026; it replaces the small PLC -of the first draft). +of the first draft). The full plan, with the I/O list, geizhals.de +prices, safety circuit, bench test and build order, is in +[inline-qc-control-plan.md](inline-qc-control-plan.md). -- **Station controller:** a fanless mini PC, Intel N100 class with two - Intel i226 ports, from USD 162 on Alibaba to USD 279 to 469 at retail - ([listing](https://cards.keenable.ai/w/01a15225-b50f-7e20-b3c2-e5fdaafae28c), - [plugpcs](https://plugpcs.com/mini)). It runs NixOS with the PREEMPT_RT +- **Station controller:** a fanless mini PC, Intel N100 with Intel + i226-V ports, EUR 394 to 456 on + [geizhals.de](https://geizhals.de/mini-pc-barebone-netzwerk-pc-intel-n100-a2926989.html) + (October 2026). It runs NixOS with the PREEMPT_RT kernel, declared in the plant's clan like the edge PC. It is the EtherCAT master and runs the station sequence, which we write ourselves; there is no PLC. @@ -334,18 +336,20 @@ of the first draft). Its native igc driver for the i226 is listed for the 6.12 kernel, so with IgH, pin the 6.12 LTS kernel ([IgH device drivers](https://docs.etherlab.org/ethercat/1.6/doxygen/devicedrivers.html)). -- **On the bus, in one line:** the spindle drive, the conveyor drive, and - an EK1100 coupler with EL1809 (16 inputs: photoelectric sensors, - cylinder switches, door and e-stop status), EL2809 (16 outputs: valves, - stack light) and EL3102 (two analog inputs for the warp lasers; - [Beckhoff](https://www.beckhoff.com/en-us/products/i-o/ethercat-terminals/el-ed3xxx-analog-input/el3102.html)). - The cycle is 1 ms with distributed clocks. The spindle runs in cyclic - synchronous position mode, the conveyor in cyclic synchronous velocity. +- **On the bus, in one line:** an EK1100 coupler with EL1809 (16 + inputs: photoelectric sensors, cylinder switches, door and e-stop + status), EL2809 (16 outputs: valves, stack light), EL3152 (two 4 to + 20 mA inputs for the warp lasers) and EL5101 (spindle encoder), then + the spindle drive and the conveyor drive at the end of the line. The + small A6-200EC takes its control power from the main supply, so it + leaves the bus when the safety contactors open; at the end it cuts + nothing else off. The cycle is 1 ms with distributed clocks. The + spindle runs in cyclic synchronous position mode, the conveyor in + cyclic synchronous velocity. - **Warp traces:** the lasers are sampled in the same cycle as the - spindle position, so each trace comes with its angles: about 1,000 - points a turn at 1 ms (our arithmetic). The EL3102 takes ±10 V; if the - lasers are ordered with a current output, an EL3152 (4 to 20 mA) takes - its place. + spindle encoder count, so each trace comes with its angles: about + 1,000 points a turn at 1 ms (our arithmetic). The optoNCDT 1420 has a + 4 to 20 mA output, hence the EL3152 rather than a voltage terminal. - **Safety stays hardwired:** the e-stop and the door switch sit on a safety relay that drops a contactor in the drive supply. The 100 W kit has no STO input; in the A6-EC list, STO versions start at 400 W. @@ -379,8 +383,8 @@ By group, per station: | Handling | 1.9k to 4.5k | guided lift cylinder, 100 W EtherCAT spindle servo, spindle head with mandrel, rodless cylinder, pneumatics | | Vision | 7.7k to 12.5k | 2 line-scans, 2 colour cameras, lenses, 2 coaxial, 4 dark-field and 2 backlights, 2 ring lights, controllers | | Sensors | 1.5k to 4.6k | 2 laser distance sensors, presence and stop sensors, cylinder switches, spindle encoder | -| Control | 3.6k to 8.0k | EtherCAT controller and I/O, edge PC with GPU, HMI, safety, cabinet and wiring | -| **Total** | **16k to 33k (0.53M to 1.09M THB)** | thermal camera (USD 2.1k to 3.0k) not included | +| Control | 4.4k to 8.1k | EtherCAT controller and I/O, edge PC with GPU, HMI, safety, cabinet and wiring | +| **Total** | **17k to 33k (0.56M to 1.09M THB)** | thermal camera (USD 2.1k to 3.0k) not included | **Open points for the machine builder.** @@ -423,7 +427,7 @@ October 2026). - **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 + - One station instead of two: USD 17k 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 @@ -508,9 +512,9 @@ simulated. | Item | Estimate | |---|---| -| Hardware per station, from the [bill of materials](inline-qc-station/inline-qc-station-bom.csv) | USD 16k to 33k (0.53M to 1.09M THB) | +| Hardware per station, from the [bill of materials](inline-qc-station/inline-qc-station-bom.csv) | USD 17k to 33k (0.56M to 1.09M 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: 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) | +| Launch plant: one station for both presses, after cooling | the hardware above, USD 17k to 33k, plus the first-station work (about USD 32k to 73k in all, 1.1M 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 @@ -542,13 +546,12 @@ vision share is not yet confirmed. 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. **EtherCAT bench.** Before the frame is built, run one A6-EC kit, an - EK1100 with the three terminals and the spindle encoder from the mini - PC with EtherCrab: distributed clocks at 1 ms, cyclic synchronous - position on the drive, the touch probe latching the encoder index, and - the cycle jitter measured under load. The drive's EtherCAT description - file is on the StepperOnline product page. If EtherCrab falls short on - the drive, repeat the test with the IgH master. +5. **EtherCAT bench.** Before the frame is built, run one A6-EC kit, the + EK1100 with its terminals and the spindle encoder from the mini PC + with EtherCrab: eight tests and pass marks are in the + [control plan](inline-qc-control-plan.md#7-bench-test-before-the-frame-is-built) + (about THB 64,000 of parts, all reused in the station). If EtherCrab + falls short on the drive, repeat the test with the IgH master. 6. **Acceptance test.** Write it before ordering. It should cover the detection rate per defect class on the trial set, the false-reject rate on good records (black and specials apart), and every result diff --git a/docs/equipment/inline-qc-control-plan.md b/docs/equipment/inline-qc-control-plan.md new file mode 100644 index 0000000..c48bf73 --- /dev/null +++ b/docs/equipment/inline-qc-control-plan.md @@ -0,0 +1,281 @@ +# Optical QC station: EtherCAT control plan + +How the [inline optical QC station](inline-optical-qc.md) is controlled, +wired, priced, built and tested. Decided in October 2026: EtherCAT, no +PLC, and the 100 W StepperOnline servo kit on both axes. Prices for the +EtherCAT parts were checked on [geizhals.de](https://geizhals.de/) on +19 October 2026. The station hardware itself (frame, cameras, lights, +lasers) is in the station doc and its +[bill of materials](inline-qc-station/inline-qc-station-bom.csv). + +## 1. What is decided + +| Part | Choice | Why | +|---|---|---| +| Fieldbus | EtherCAT, 1 ms cycle, distributed clocks | one cable for drives and I/O; the laser samples and the spindle position come from the same cycle | +| Spindle drive | StepperOnline A6-EC100L2A1-M17 (100 W, A6-200EC drive), cyclic synchronous position, 1:6 timing belt | torque need about 0.02 N·m at the motor against 0.32 N·m rated; the belt brings the load inertia to about 28 times the rotor (station doc) | +| Conveyor drive | the same kit, cyclic synchronous velocity | one spare covers both axes | +| Controller | fanless Intel N100 mini PC with Intel i226-V ports, NixOS with a real-time kernel | open source stack, declared in the plant's clan like every other machine | +| Master software | EtherCrab (Rust, MIT or Apache-2.0); IgH EtherCAT Master as the fallback | EtherCrab fits the Rust factory application; IgH is older and proven | +| Camera clock | separate RS-422 encoder on the spindle shaft | the A6-EC drive has no divided encoder output | +| Safety | hardwired: safety relay, two contactors in the drive supply | the 100 W kit has no STO; the 400 W STO kit's manual names no safety rating (station doc) | + +## 2. Bus layout + +``` +Station controller (N100, NixOS, real-time kernel) + | + |-- port 1 (i226-V) == EtherCAT ==> EK1100 coupler + | |-- EL1809 16 digital inputs + | |-- EL2809 16 digital outputs + | |-- EL3152 2 analog inputs (warp lasers, 4 to 20 mA) + | |-- EL5101 spindle encoder (A, B, index) + | |-- EL9011 end cap + | | + | X2 out ==> A6-200EC spindle (CSP) + | ==> A6-200EC conveyor (CSV) + | + |-- port 2 (i226-V) -- plain Ethernet --> edge PC, plant OT network + +Spindle encoder (RS-422, 5 V from the EL5101) + A, B ---> racer 2 line-scan 1 ---> racer 2 line-scan 2 ---> EL5101 (A, B, index) +``` + +- **The drives sit at the end of the line.** On the small A6-200EC the + control electronics share the main supply; there are no separate + control-power terminals ([A6-EC manual](https://www.omc-stepperonline.com/download/A6-EC_series_servo_drive_manual.pdf), + specification table). So when the safety contactors open, both drives + leave the bus. At the end of the line that cuts nothing else off: the + coupler, the I/O and the encoder count stay up, and the master can read + the e-stop and door status and bring the drives back after the reset. + The distributed-clock reference also sits on the I/O side for the same + reason. +- **One RS-422 line, three receivers.** The encoder's line driver feeds + both cameras and the EL5101 in a chain (RS-422 allows up to ten + receivers). The racer 2 inputs take RS-422 with a switchable 120 Ω + terminator ([Basler](https://docs.baslerweb.com/io-control-racer-2-l-xl)). + Only the last receiver on the line is terminated; check on the bench + whether the EL5101 input already is. +- **Port 2 is ordinary Ethernet** to the edge PC and the plant's OT + network (VLAN as in [digital factory](../digital-factory.md)). The + EtherCAT port is a point-to-point cable to the EK1100, never a switch. + +## 3. Signals + +**EL1809, 16 inputs (24 V):** + +| Ch | Signal | Device | +|---|---|---| +| 1 | record at the infeed | diffuse photoelectric sensor | +| 2 | label trigger (also wired straight to the two colour cameras' trigger inputs) | diffuse photoelectric sensor | +| 3 | record at the inspection position (also to the conveyor drive's touch probe 1, CN1 DI5) | through-beam pair | +| 4 | outfeed full | diffuse photoelectric sensor | +| 5, 6 | lift up, lift down | cylinder switches | +| 7, 8 | mandrel open, mandrel clamped | cylinder switches | +| 9, 10 | pusher home, pusher out | cylinder switches | +| 11 | safety relay status | PNOZ s3 semiconductor output | +| 12 | door closed (status contact) | safety door switch | +| 13 | contactors closed | contactor auxiliary contact | +| 14 | reset pressed | second contact on the reset button | +| 15 | air pressure ok | pressure switch on the FRL | +| 16 | spare | | + +**EL2809, 16 outputs (24 V, 0.5 A):** lift up, lift down, mandrel clamp, +pusher out, pusher back, stack light green, amber and red, buzzer, light +controllers on (lights only during the turn), reset-button lamp; five +spare (an ionising bar at the infeed is one candidate). + +**EL3152, 2 analog inputs:** the two optoNCDT 1420 lasers at 90 and 130 mm +radius. Their analog output is 4 to 20 mA; voltage only comes through a +load resistor in the cable +([Micro-Epsilon manual](https://micro-epsilon.com/download/manuals/man--optoNCDT-1420--en.pdf)), +so the current-input EL3152 replaces the ±10 V EL3102 of the first draft. + +**EL5101:** spindle encoder A, B and index. It counts the spindle angle +directly (not the motor behind the belt) and latches the count at the +index once a turn. + +**Drive inputs:** only the conveyor drive's touch probe 1 is used: the +through-beam latches the conveyor position at the record's leading edge, +so the stop over the chuck does not depend on the 1 ms cycle or the +input filter. + +**Process data per drive.** The A6-EC has one freely mapped RPDO and +TPDO plus fixed sets; the fixed 1702h set carries control word, target +position, target velocity and mode together (manual, PDO section), so +both drives can share one mapping and differ only in the mode (8 for +CSP, 9 for CSV). The drive runs only in DC sync mode; its SYNC0 period +range depends on the mode, so the 1 ms cycle is the first bench check. + +## 4. Prices from geizhals.de + +Lowest listed price on 19 October 2026, in EUR including 19% German VAT; +THB at 38.115 per EUR. + +| Part | Qty | Example | EUR | THB | Source | +|---|---|---|---|---|---| +| Station controller | 1 | ANDAQI RS55 (6 × i226-V) / MNBOXCONET P2-N100 (2 × i226-V, fanless) | 393.99 to 455.99 | 15,017 to 17,380 | [geizhals](https://geizhals.de/mini-pc-barebone-netzwerk-pc-intel-n100-a2926989.html) | +| EtherCAT coupler | 1 | Beckhoff EK1100 | 150.75 | 5,746 | [geizhals](https://geizhals.de/144468496) | +| 16 digital inputs | 1 | Beckhoff EL1809 | 93.97 | 3,582 | [geizhals](https://geizhals.de/1371087148) | +| 16 digital outputs | 1 | Beckhoff EL2809 | 102.97 | 3,925 | [geizhals](https://geizhals.de/1371087504) | +| 2 analog inputs, 4 to 20 mA | 1 | Beckhoff EL3152 | 208.90 | 7,962 | [geizhals](https://geizhals.de/185886294) | +| Encoder interface, RS-422 | 1 | Beckhoff EL5101 | 291.04 | 11,093 | [geizhals](https://geizhals.de/2974477757) | +| End cap | 1 | Beckhoff EL9011 | 4.33 | 165 | [geizhals](https://geizhals.de/455904583) | +| Spindle encoder | 1 | E6B2-CWZ1X 2000 P/R (marketplace) / GHH60 2500 P/R line driver | 45.52 to 187.83 | 1,735 to 7,159 | [geizhals](https://geizhals.de/6925000400) | +| Safety relay | 1 | Pilz PNOZ s3 750103 | 148.38 | 5,656 | [geizhals](https://geizhals.de/pilz-pnoz-s3-24vdc-2-n-o-750103-a3204143.html) | +| Contactor, 24 V DC coil | 2 | Siemens 3RT2015 | 27.95 each | 2,131 | [geizhals](https://geizhals.de/siemens-leistungsschuetz-3rt2015-1bb41-a3269085.html) | +| E-stop button | 1 | Schneider Harmony, 40 mm head | 45.08 | 1,718 | [geizhals](https://geizhals.de/208045150) | +| HMI touch monitor 10.1 inch | 1 | iiyama ProLite TF1015MC-B3 | 311.90 | 11,888 | [geizhals](https://geizhals.de/iiyama-prolite-tf1015mc-b3-a3228748.html) | +| 24 V supply, 120 W | 1 | Mean Well SDR-120-24 | 38.87 to 47.35 | 1,482 to 1,805 | [geizhals](https://geizhals.de/980542712) | +| Servo kit 100 W, EtherCAT | 2 | StepperOnline A6-EC100L2A1-M17 | USD 123.29 each | 8,137 | not on geizhals; [StepperOnline](https://www.omc-stepperonline.com/a6-series-100w-ethercat-ac-servo-motor-kit-3000rpm-0-32nm-17-bit-absolute-encoder-ip67-a6-ec100l2a1-m17), China warehouse | +| **Total** | | | **1,891.60 to 2,104.39 + USD 246.58** | **80,235 to 88,346** | | + +Notes on the prices: + +- **German VAT comes off, Thai duty and VAT go on.** For an order + shipped to Thailand the 19% German VAT is not charged; Thai import VAT + (7%) and duty are added. The listed gross price is therefore used as + the landed low end; the bill of materials adds 30% for shipping and a + Thai distributor as the high end (estimate). +- **EK1100:** geizhals has no current offer; EUR 150.75 is the last + price, with EUR 255.43 at the top of the range. +- **Mini PCs** on geizhals are marketplace brands (ANDAQI, MNBOXCONET, + AIOPCWA). Before ordering, check that the ports are i226-V (not the + older i225) and that the BIOS lets C-states be switched off. +- **Encoder:** the EUR 45.52 E6B2-CWZ1X listings come from marketplace + sellers and may be copies; the bench test decides whether one is good + enough. A genuine Omron or a 2,500-pulse line-driver encoder (GHH60, + EUR 187.83) is the fallback. +- **Contactors:** the price is for 3RT2015-1BB41 (one NO auxiliary + contact). The feedback loop needs the NC version, 3RT2015-1BB42 + (price not checked; same class). +- **Not on geizhals:** the servo kits (StepperOnline direct), the optoNCDT + lasers and the Basler cameras (both in the station bill of materials). + +Bill of materials effect: the control group comes to USD 4.4k to 8.1k +(edge PC with GPU and the cabinet lot included) and the station to +**USD 16.9k to 33.1k (THB 0.56M to 1.09M)**, up from 16.1k to 32.9k, +mostly the EL5101 and the retail price of the mini PC. + +## 5. Software on the station controller + +**Operating system (NixOS module in the plant's clan):** + +- Kernel 6.12 LTS with PREEMPT_RT, which is in the mainline kernel since + 6.12. The same kernel suits the IgH fallback, whose native i226 (igc) + driver is listed for 6.12 + ([IgH device drivers](https://docs.etherlab.org/ethercat/1.6/doxygen/devicedrivers.html)). +- One core isolated for the bus loop (`isolcpus`, `nohz_full`, + `rcu_nocbs`), the EtherCAT port's interrupts pinned to it, deep + C-states and Energy Efficient Ethernet off on that port. +- The station service runs under systemd with real-time priority and + restarts on failure; logs go to the plant's log store. + +**Station service (Rust, one program, written by us):** + +1. **Bus loop:** EtherCrab every 1 ms with distributed clocks; brings + all slaves to OP, maps the drive PDOs, runs the CiA402 state machine + of both drives, and re-adds a drive that left the bus after an + e-stop. +2. **Sequence:** one state machine per record: wait at the infeed, + convey, stop on the latched leading edge, lift, clamp, one turn, + unclamp, lower, convey out, push if rejected. Every step has a + timeout and a fault text (for example "lift up not reached in 0.8 s"). +3. **Measurement:** during the turn, each cycle stores the EL5101 count + and both laser values, about 1,000 points a turn at one turn a + second. The laser output lags 750 µs at 4 kHz (Micro-Epsilon), a fixed + offset of about 0.3° at that speed, corrected in software. Edge + run-out and dish are computed at the end of the turn. +4. **Edge PC link** over port 2: record in place, turn started, turn + done with the warp values; the edge PC answers with the verdict and + the reason. No answer in time means reject and an alarm. +5. **HMI:** a web page served by the same program and shown on the touch + monitor in a kiosk browser: state, last results, alarms, counters, and + a setup mode (jog, single steps) that works only with the door shut. + +The cameras keep their clock in hardware: the encoder pulses go straight +into the racer 2 encoder input, and the camera's frequency converter +scales them to the line count the optics need +([Basler](https://docs.baslerweb.com/frequency-converter)). No software +sits between the spindle and the line timing. + +## 6. Safety + +- **Circuit:** e-stop (two channels) and the tunnel door switch (two + channels) on a Pilz PNOZ s3 with a monitored manual reset. Its two + safety contacts switch two contactors in series in the 230 V supply of + both drives; the contactors' NC mirror contacts sit in the relay's + feedback loop. A dump valve on the FRL, wired with the contactor + coils, vents the cylinders at the same time. +- **Stop category 0:** power off at once. Both axes carry a few + kg·cm², so they coast to a stop in well under a second (estimate). If + the risk assessment asks for a controlled stop first (category 1), a + relay with delayed outputs (Pilz PNOZ s5 class) lets the master brake + the axes before the power goes. +- **Target:** PL d (estimate). A risk assessment to ISO 12100 and + ISO 13849-1 by the machine builder decides; it is part of the + acceptance test. +- **After a stop:** reset, the drives power up and rejoin the bus, the + master takes them back to OP, and the spindle angle comes from the + EL5101 count, which never lost power. + +## 7. Bench test, before the frame is built + +**Parts:** one servo kit, the mini PC, the EK1100 with the four I/O +terminals and the end cap, the spindle encoder, the PNOZ s3, two +contactors, the e-stop and the 24 V supply: EUR 1,579.70 on geizhals +plus USD 123.29, about **THB 64,000 (USD 1,950)**. Every part goes into +the station afterwards. One laser and one line-scan camera, ordered +early from the station list, make the test complete. A reject record on +a test mandrel is the load. + +| # | Test | Pass (our targets) | +|---|---|---| +| 1 | EtherCrab brings coupler, terminals and drive to OP with distributed clocks at 1 ms | all slaves in OP, no lost frames over 24 h | +| 2 | Cycle timing under load: images streaming on port 2, HMI open, CPU stress on the other cores | worst-case jitter under 50 µs over 24 h | +| 3 | Spindle in CSP: one turn a second, 0.15 s run-up | stop repeatable within ±0.1° at the spindle | +| 4 | EL5101 count against the servo position | exactly 6 motor turns per spindle turn over 1,000 turns, index latched every turn | +| 5 | Laser through the EL3152 on the reject record | the warp trace repeats turn to turn within 0.05 mm, a tenth of the smallest edge run-out limit (0.5 mm, Mobineko) | +| 6 | Camera clock: racer 2 on the encoder chain | the set number of lines every turn, none missed over 100 turns | +| 7 | Conveyor (same drive in CSV): through-beam on touch probe 1 | position latched on every pass | +| 8 | E-stop and door | contactors open, drive leaves the bus, I/O stays in OP; drive back in OP within 10 s of the reset | + +If EtherCrab fails tests 1, 2, 3 or 8 and a week of work does not fix +it, repeat them with the IgH master on the same kernel. The station +service keeps the bus loop behind one interface, so only that part +changes. + +## 8. Build order and timing (estimates) + +| Weeks | Step | Who | +|---|---|---| +| 1 to 3 | order the bench parts; servo kits from StepperOnline's China warehouse, Beckhoff and the rest from Germany or a Thai distributor | us | +| 3 to 6 | bench test (section 7) | us | +| 5 to 9 | cabinet schematic (QElectroTech, open source) and cabinet build; station service and HMI | us, with a panel builder in Chiang Mai if needed | +| 7 to 11 | frame, conveyor, spindle head and pneumatics | machine builder | +| 10 to 12 | cabinet on the frame, wiring, drive tuning on the real spindle, first records | us and the machine builder | +| 12 to 14 | risk assessment, acceptance test, then into production behind the cooling racks | us and the machine builder | + +So the control work should start about four months before the first +records need checking (estimate). + +## 9. Spares + +One servo kit (covers both axes), one spindle encoder and one contactor: +about USD 210 at the prices above. The Beckhoff terminals are not +stocked at launch; a failed one is a few days by courier from Europe +(estimate). + +## 10. Open points + +1. **EtherCrab with the A6-EC drive** is untested; its CiA402 support is + basic. The bench answers it, with IgH as the fallback. +2. **SYNC0 range of the A6-EC** at 1 ms in CSP and CSV: not in the + material read so far; the bench checks it. +3. **EL5101 termination** and the RS-422 chain with three receivers. +4. **Local prices:** ask a Thai Beckhoff source for a quote before + ordering from Germany. +5. **Risk assessment** by the machine builder: confirms PL d and stop + category 0, or asks for the delayed relay. +6. Still open from the station doc: 7"/10" quick change, anti-static at + the infeed, belt tension against the motor's 78 N radial load. diff --git a/docs/equipment/inline-qc-station/annotate_render.py b/docs/equipment/inline-qc-station/annotate_render.py index b1f9c02..49c651d 100644 --- a/docs/equipment/inline-qc-station/annotate_render.py +++ b/docs/equipment/inline-qc-station/annotate_render.py @@ -14,7 +14,7 @@ TITLE = "Inline optical QC station" SUBTITLE = ("Every record checked on both faces in one turn: surface, label, warp and centring. " "Failed records leave the line automatically.") FOOTER = ("CNX Vinyl, concept model (FreeCAD); bought parts drawn as outlines. 1.9 × 0.65 × 1.5 m, " - "front panels and lid removed for the view. Hardware about USD 16k to 33k per station (estimate).") + "front panels and lid removed for the view. Hardware about USD 17k to 33k per station (estimate).") NAVY, GREY, LINE = (18, 53, 91), (85, 95, 105), (60, 74, 90) diff --git a/docs/equipment/inline-qc-station/inline-qc-station-annotated.png b/docs/equipment/inline-qc-station/inline-qc-station-annotated.png index 1a55fae9bd4bfe5856755b7b8b308cb31d7d136b..d4213d161de121a2268066d412421ac8809d9dac 100644 GIT binary patch delta 23814 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 SNSI^1nVPD$N~ZE{pZ@}3sQ8rt delta 23580 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