Skip to content

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.

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:

  • SQ201 watches 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.10 is 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
  • atc-operation.md - the ATC sequence this partly exercises
  • drills-and-saw-on-linuxcnc.md - the drill interlock design that IF.10 now challenges
  • machine-timings.md - the PLC ceilings these measurements replace
  • io-map.md - every address above, to its terminal and wire
  • ../linuxcnc-bringup/decode_io.py - the decoder