Working documentation
This page is generated from the project's working notes. It records a real retrofit in progress, corrections included. Anything marked 🔴 or ⚠️ is unresolved or carries a caveat - read those before acting.
What RESET actually does - the machine's own self-test, measured¶
31 October 2026. The first direct observation of the Tecnos running its reset/homing cycle, decoded point by point from screen captures of the MW310 diagnostic screen at ~56 frames per second.
🔴 This is not just axis homing. The cycle homes the carousel, then fires every head on the machine three times and checks each one returns. It is the machine's own pneumatic self-test, and nothing in MW310.PLC made that obvious.
How it was captured¶
| Method | PowerShell screen capture of the MW310 diagnostic screen, 640x270 region, ~56 fps, PNG |
| Decoded by | linuxcnc-bringup/decode_io.py - samples 96 fixed pixels per frame and emits state changes |
| Frames | 3,905 covering 11:42:49.710 to 11:43:55.697 (66 seconds) |
| Raw PNGs | 🔴 Google Drive, 10 TuChop - 47 MB, too large for the repo. Not reproduced here |
| Transitions found | 128 |
⭐ The decode is exact, not approximate. The diagnostic screen draws each point as a flat rectangle in one of four colours - dark green (0,128,0) off, bright green (0,255,0) on, dark red (128,0,0) off, bright red (255,0,0) on. Screenshots do not drift, so every square sits at a fixed pixel. There is no thresholding or image matching involved.
The sequence¶
Phase 0 - at rest¶
Steady state before anything happens, and the baseline everything below is a change from:
Inputs on: IF.7 HOLD · IF.8 EMERGENZA TERMICI · IF.10 AGGREGATI SU · IF.11 LAMA SU · IF.14/15 feed override · IF.19 · IF.20 PISTONE CAMBIO SU · IF.26-28 horizontal units · IF.33/34 photocells · IF.35 POSIZIONE RAGGIUNTA · IF.36-40 position bits · IF.44 PINZA GIU · IF.45 oil level · IF.46 O ASSE 560
Outputs on: OF.1 CNC OK · OF.36 PINZA GIU · OF.41 EMG · OF.43-47 position bits
⭐ IF.36-40 all high is position 31, and POS_RESET = 31 in the PLC. The carousel sits parked at its reset position with the command and the echo agreeing.
Phase 1 - the carousel homes (2.95 s)¶
11:43:39.857 IF.36-40 OFF (echo bits drop) OF.42 ON
11:43:40.044 IF.35 OFF, IF.46 OFF
11:43:41.526 IF.46 ON (carousel zero found)
11:43:42.421 IF.36-40 ON (echo back to 31)
11:43:42.808 IF.35 ON OF.42 OFF
Phase 2 - the head self-test, three identical cycles¶
Fired at 43.207, 47.039 and 50.765 - about 3.8 s apart.
| Offset | Event |
|---|---|
| 0 ms | 🔴 OF.10-15, OF.25-28, OF.16-18, OF.20 all ON together - ten vertical drills, three horizontal heads and the saw, simultaneously |
| +205 ms | IF.11 OFF (saw left up), IF.26/27/28 OFF (horizontals left up) |
| +1.0 to 1.2 s | All of the above OFF, and OF.19 CONTROPRESSIONE ON |
| +1.4 s | IF.11 ON - saw back up |
| +1.6 s | IF.26/27 ON - horizontals back up |
| +2.9 s | OF.19 OFF |
✅ What this settles¶
OF.42 is the go command. The drawing was wrong.¶
atc-operation.md carried this warning since September: the PLC uses OF.42 as the go command with five bits on OF.43-OF.47, while the wiring diagram reads OF.42 as SVON with the strobe on OF.43. The survey said to ring it out with a meter.
🔴 Observed: OF.42 goes ON at the start of the carousel move and OFF when it completes, while OF.43-47 hold steady at 31 throughout and the echo bits IF.36-40 drop and return.
A strobe does not sit on for three seconds alongside its data. The PLC reading is correct and the drawing's label is wrong. No meter needed.
Counter-pressure is a retract aid, confirmed¶
OF.19 comes on at the instant the heads are commanded up, never while they are down, and runs for about 1.8 s. This was corrected in the repo from the PLC source, where all six OF_CONTRO_PRESS references sit in the retract branch. Now it is observed directly.
Measured timings, replacing PLC ceilings¶
| Measured | |
|---|---|
| Head down-stroke, command to command-off | 1.0 - 1.2 s |
| Sensor response after firing | ~205 ms |
| Counter-pressure pulse | ~1.8 s |
| Cycle repeat interval | ~3.8 s |
| Carousel home | 2.95 s |
🔴 Three things that need answering¶
1. IF.10 never moved¶
Not once, across all three cycles, with every head on the machine firing.
⚠️ The drill interlock in tuchop-io.hal is built on the premise that IF.10 goes false on every plunge. drills-and-saw-on-linuxcnc.md states it as the central fact of the design. The observation contradicts it.
Possible readings, none confirmed:
SQ201watches something other than the drill block - the router head, or an aggregate carrier- The heads were commanded but did not physically descend, so no sensor would change
IF.10is a series chain whose other members held it high
⭐ The capture is sound - IF.11 proves it¶
The saw answered its command perfectly, three times out of three:
| Cycle | OF.20 ON |
IF.11 OFF |
lag | OF.20 OFF |
IF.11 ON |
lag |
|---|---|---|---|---|---|---|
| 1 | 43.207 | 43.426 | 219 ms | 44.275 | 44.676 | 401 ms |
| 2 | 47.039 | 47.240 | 201 ms | 48.074 | 48.475 | 401 ms |
| 3 | 50.765 | 50.971 | 206 ms | 51.960 | 52.176 | 216 ms |
Valve, ram and sensor all healthy, with repeatable timing. IF.26/27 behaved the same way. So IF.10's silence is a real observation, not a decode artefact.
🔴 Which direction the fault would be, if it is one¶
⚠️ IF.10 is stuck in the ON state - "everything is retracted". For an interlock that is the fail-dangerous direction: a machine that permanently believes the heads are up. If SQ201 is faulty and the retrofit inherits it, LinuxCNC inherits the fault.
⭐ But SQ201 watching something that genuinely did not move is equally consistent. Each vertical drill has its own air ram (Grant). Firing OF.10-15 and OF.25-28 fires individual drill rams - if SQ201 sits on the block carrier or the router head rather than the drills, nothing it watches moved and it is behaving correctly. IF.10 is also the only point carrying six symbols on one physical input, which is exactly where this ambiguity lives.
When to settle it¶
⚠️ Not before strip-out. The MW310 has no diagnostic screen that fires a single output, so the Tecnos cannot isolate one drill (Grant, 31 Oct). An earlier version of this page suggested otherwise and was wrong.
✅ At Mesa commissioning it is easy, and the tooling already exists: linuxcnc-bringup/ reads every input live and fires one output at a time, which is precisely what the Tecnos will not do. Fire one drill, watch IF.10.
2. OF.9 MOTORE PUNTE never ran¶
The heads are exercised dry - valves fired, nothing spinning. Sensible for a self-test, and worth knowing: the drill motor is not interlocked into this sequence at all.
3. IF.28 responds in cycle 1 but not in cycles 2 or 3¶
IF.26 and IF.27 toggle on all three cycles. IF.28 (SQ133, horizontal unit 3) drops only on the first. Either a sticky sensor or a head that stopped returning fully. Worth watching next time the machine runs.
The full transition list¶
Every state change, in order. Times are wall clock from the capture.
| Time | Point | What | |
|---|---|---|---|
11:42:49.966 |
IF.2 |
ON | START ZONA D |
11:42:50.370 |
IF.2 |
OFF11:43:39.857 | START ZONA D |
11:43:39.857 |
IF.37 |
OFF | POS BIT 2 |
11:43:39.857 |
IF.38 |
OFF | POS BIT 3 |
11:43:39.857 |
IF.39 |
OFF | POS BIT 4 |
11:43:39.857 |
IF.40 |
OFF | POS BIT 5 |
11:43:39.857 |
OF.42 |
ON | VAI IN POSIZIONE (go) |
11:43:40.044 |
IF.35 |
OFF | POSIZIONE RAGGIUNTA |
11:43:40.044 |
IF.46 |
OFF | O ASSE 560 |
11:43:41.526 |
IF.46 |
ON | O ASSE 560 |
11:43:42.421 |
IF.36 |
ON | POS BIT 1 |
11:43:42.421 |
IF.37 |
ON | POS BIT 2 |
11:43:42.421 |
IF.38 |
ON | POS BIT 3 |
11:43:42.421 |
IF.39 |
ON | POS BIT 4 |
11:43:42.421 |
IF.40 |
ON | POS BIT 5 |
11:43:42.808 |
IF.35 |
ON | POSIZIONE RAGGIUNTA |
11:43:42.808 |
OF.42 |
OFF | VAI IN POSIZIONE (go) |
11:43:43.207 |
OF.10 |
ON | FORATORE VERT. T1 |
11:43:43.207 |
OF.11 |
ON | T2 |
11:43:43.207 |
OF.12 |
ON | T3 |
11:43:43.207 |
OF.13 |
ON | T4 |
11:43:43.207 |
OF.14 |
ON | T5 |
11:43:43.207 |
OF.15 |
ON | T6 |
11:43:43.207 |
OF.16 |
ON | FORATORE ORIZZ. 1 |
11:43:43.207 |
OF.17 |
ON | FORATORE ORIZZ. 2 |
11:43:43.207 |
OF.18 |
ON | FORATORE ORIZZ. 3 |
11:43:43.207 |
OF.20 |
ON | LAMA GIU |
11:43:43.207 |
OF.25 |
ON | FORATORE VERT. T7 |
11:43:43.207 |
OF.26 |
ON | T8 |
11:43:43.207 |
OF.27 |
ON | T9 |
11:43:43.207 |
OF.28 |
ON | T10 |
11:43:43.426 |
IF.11 |
OFF | LAMA SU |
11:43:43.426 |
IF.26 |
OFF | UT. ORIZZ. 1 |
11:43:43.426 |
IF.27 |
OFF | UT. ORIZZ. 2 |
11:43:43.426 |
IF.28 |
OFF | UT. ORIZZ. 3 |
11:43:44.275 |
OF.10 |
OFF | FORATORE VERT. T1 |
11:43:44.275 |
OF.11 |
OFF | T2 |
11:43:44.275 |
OF.12 |
OFF | T3 |
11:43:44.275 |
OF.13 |
OFF | T4 |
11:43:44.275 |
OF.14 |
OFF | T5 |
11:43:44.275 |
OF.15 |
OFF | T6 |
11:43:44.275 |
OF.16 |
OFF | FORATORE ORIZZ. 1 |
11:43:44.275 |
OF.17 |
OFF | FORATORE ORIZZ. 2 |
11:43:44.275 |
OF.18 |
OFF | FORATORE ORIZZ. 3 |
11:43:44.275 |
OF.19 |
ON | CONTROPRESSIONE |
11:43:44.275 |
OF.20 |
OFF | LAMA GIU |
11:43:44.275 |
OF.25 |
OFF | FORATORE VERT. T7 |
11:43:44.275 |
OF.26 |
OFF | T8 |
11:43:44.275 |
OF.27 |
OFF | T9 |
11:43:44.275 |
OF.28 |
OFF | T10 |
11:43:44.676 |
IF.11 |
ON | LAMA SU |
11:43:44.877 |
IF.26 |
ON | UT. ORIZZ. 1 |
11:43:44.877 |
IF.27 |
ON | UT. ORIZZ. 2 |
11:43:44.877 |
IF.28 |
ON | UT. ORIZZ. 3 |
11:43:46.191 |
OF.19 |
OFF | CONTROPRESSIONE |
11:43:47.039 |
OF.10 |
ON | FORATORE VERT. T1 |
11:43:47.039 |
OF.11 |
ON | T2 |
11:43:47.039 |
OF.12 |
ON | T3 |
11:43:47.039 |
OF.13 |
ON | T4 |
11:43:47.039 |
OF.14 |
ON | T5 |
11:43:47.039 |
OF.15 |
ON | T6 |
11:43:47.039 |
OF.16 |
ON | FORATORE ORIZZ. 1 |
11:43:47.039 |
OF.17 |
ON | FORATORE ORIZZ. 2 |
11:43:47.039 |
OF.18 |
ON | FORATORE ORIZZ. 3 |
11:43:47.039 |
OF.20 |
ON | LAMA GIU |
11:43:47.039 |
OF.25 |
ON | FORATORE VERT. T7 |
11:43:47.039 |
OF.26 |
ON | T8 |
11:43:47.039 |
OF.27 |
ON | T9 |
11:43:47.039 |
OF.28 |
ON | T10 |
11:43:47.240 |
IF.11 |
OFF | LAMA SU |
11:43:47.240 |
IF.26 |
OFF | UT. ORIZZ. 1 |
11:43:47.240 |
IF.27 |
OFF | UT. ORIZZ. 2 |
11:43:48.074 |
OF.10 |
OFF | FORATORE VERT. T1 |
11:43:48.074 |
OF.11 |
OFF | T2 |
11:43:48.074 |
OF.12 |
OFF | T3 |
11:43:48.074 |
OF.13 |
OFF | T4 |
11:43:48.074 |
OF.14 |
OFF | T5 |
11:43:48.074 |
OF.15 |
OFF | T6 |
11:43:48.074 |
OF.16 |
OFF | FORATORE ORIZZ. 1 |
11:43:48.074 |
OF.17 |
OFF | FORATORE ORIZZ. 2 |
11:43:48.074 |
OF.18 |
OFF | FORATORE ORIZZ. 3 |
11:43:48.074 |
OF.19 |
ON | CONTROPRESSIONE |
11:43:48.074 |
OF.20 |
OFF | LAMA GIU |
11:43:48.074 |
OF.25 |
OFF | FORATORE VERT. T7 |
11:43:48.074 |
OF.26 |
OFF | T8 |
11:43:48.074 |
OF.27 |
OFF | T9 |
11:43:48.074 |
OF.28 |
OFF | T10 |
11:43:48.475 |
IF.11 |
ON | LAMA SU |
11:43:48.677 |
IF.26 |
ON | UT. ORIZZ. 1 |
11:43:48.677 |
IF.27 |
ON | UT. ORIZZ. 2 |
11:43:49.959 |
OF.19 |
OFF | CONTROPRESSIONE |
11:43:50.765 |
OF.10 |
ON | FORATORE VERT. T1 |
11:43:50.765 |
OF.11 |
ON | T2 |
11:43:50.765 |
OF.12 |
ON | T3 |
11:43:50.765 |
OF.13 |
ON | T4 |
11:43:50.765 |
OF.14 |
ON | T5 |
11:43:50.765 |
OF.15 |
ON | T6 |
11:43:50.765 |
OF.16 |
ON | FORATORE ORIZZ. 1 |
11:43:50.765 |
OF.17 |
ON | FORATORE ORIZZ. 2 |
11:43:50.765 |
OF.18 |
ON | FORATORE ORIZZ. 3 |
11:43:50.765 |
OF.20 |
ON | LAMA GIU |
11:43:50.765 |
OF.25 |
ON | FORATORE VERT. T7 |
11:43:50.765 |
OF.26 |
ON | T8 |
11:43:50.765 |
OF.27 |
ON | T9 |
11:43:50.765 |
OF.28 |
ON | T10 |
11:43:50.971 |
IF.11 |
OFF | LAMA SU |
11:43:50.971 |
IF.26 |
OFF | UT. ORIZZ. 1 |
11:43:50.971 |
IF.27 |
OFF | UT. ORIZZ. 2 |
11:43:51.960 |
OF.10 |
OFF | FORATORE VERT. T1 |
11:43:51.960 |
OF.11 |
OFF | T2 |
11:43:51.960 |
OF.12 |
OFF | T3 |
11:43:51.960 |
OF.13 |
OFF | T4 |
11:43:51.960 |
OF.14 |
OFF | T5 |
11:43:51.960 |
OF.15 |
OFF | T6 |
11:43:51.960 |
OF.16 |
OFF | FORATORE ORIZZ. 1 |
11:43:51.960 |
OF.17 |
OFF | FORATORE ORIZZ. 2 |
11:43:51.960 |
OF.18 |
OFF | FORATORE ORIZZ. 3 |
11:43:51.960 |
OF.19 |
ON | CONTROPRESSIONE |
11:43:51.960 |
OF.20 |
OFF | LAMA GIU |
11:43:51.960 |
OF.25 |
OFF | FORATORE VERT. T7 |
11:43:51.960 |
OF.26 |
OFF | T8 |
11:43:51.960 |
OF.27 |
OFF | T9 |
11:43:51.960 |
OF.28 |
OFF | T10 |
11:43:52.176 |
IF.11 |
ON | LAMA SU |
11:43:52.345 |
IF.26 |
ON | UT. ORIZZ. 1 |
11:43:52.345 |
IF.27 |
ON | UT. ORIZZ. 2 |
11:43:53.665 |
OF.19 |
OFF | CONTROPRESSIONE |
Related¶
atc-operation.md- the ATC sequence this partly exercisesdrills-and-saw-on-linuxcnc.md- the drill interlock design thatIF.10now challengesmachine-timings.md- the PLC ceilings these measurements replaceio-map.md- every address above, to its terminal and wire../linuxcnc-bringup/decode_io.py- the decoder