This commit is contained in:
2026-09-12 18:16:27 +08:00
parent b7f55aa631
commit 397a7a8cc4
96 changed files with 1167 additions and 1259 deletions
@@ -136,8 +136,7 @@ returned to no offset at all.</li>
<code>/general-setup?tree=equipment/controller/program-data/work-coordinates</code>. The grey line above the
table names where this brand keeps the offsets — on Fanuc, its own parameter table — and the rows
below it are the coordinate ids that brand holds, with only <code>G54</code> carrying a value here. The panel
is narrow, so the row actions sit off the right edge; the same three are shown in full on the Legacy
Controller screen below.</p>
is narrow, so the row actions sit off the right edge.</p>
<p><img src="program-zero-alignment-img/work-coordinates.en.png" alt="The Work Coordinates leaf of the Control Tree selected on the General Setup page, its panel showing a caption reading that the offsets are stored in the Fanuc parameter table and a table of G54 through G57 rows with X, Y and Z fields, G54 holding values and the rest zero"></p>
<p><strong>P0 has something to write only once the scene is assembled.</strong> It works out where the program-zero
anchor is by walking the machine chain to it, so a project with no machine tool attached, or a
@@ -146,32 +145,25 @@ the machine position at program zero rather than writing a wrong number.</p>
<p>The row's values can also be typed in directly when the offset is already known from the machine.
Clicking anywhere in a row marks that coordinate on the canvas, so the offset can be seen rather
than only read.</p>
<h2 id="reproducing-a-real-cut-move-the-workpiece-onto-the-offset">Reproducing a real cut: move the workpiece onto the offset</h2>
<p>Going the other way — leaving the offset alone and moving the part to meet it — is <strong>Align P0</strong>, and
it is on the Legacy Controller screen's <strong>Coordinate Table</strong> tab (<code>/controller/coordinate-table</code>),
not on the Controller branch. It moves the workpiece and fixture together, by changing where the
fixture sits on the machine table, until program zero lands on the offset the row holds. The toast
reports the translation it assigned.</p>
<p>The tab on a demo project. Each row carries <strong>P0</strong> and <strong>M0</strong> — the same two writes the branch's
leaf offers — and <strong>ALIGN P0</strong> beside them, which is the one control that moves the part instead of
writing a number. <strong>Undo Align</strong> and <strong>Redo Align</strong> in the header step back and forth through the
alignments this screen has recorded; <strong>Show on Display</strong> turns the coordinate marker in the viewer on
and off, and the checkbox at the left of each row picks which coordinate it marks.</p>
<p><img src="program-zero-alignment-img/align-p0.en.png" alt="The Legacy Controller screen's Coordinate Table tab: an ISO Coordinate Table with Undo Align, Redo Align and Show on Display in its header, and rows G54 through G59.5 each carrying X, Y and Z fields and an Actions column with P0, M0 and ALIGN P0"></p>
<p>Align P0 needs a workpiece, a fixture and a machine tool on the project; without all three it writes
nothing and says so. Driving the screen itself — the tab strip, the alignment history and what it
does and does not survive — is <a href="../utilities/legacy-controller.html">Legacy Controller</a>.</p>
<div class="WARNING">
<h5>Warning</h5>
<p><strong>Align P0 reads a different table from the one the run uses.</strong> The offsets on the Legacy
Controller screen and the offsets on the Controller branch's Work Coordinates leaf are two
separate stores: typing a value into one does not change the other, and nothing keeps them in
step. A run resolves its work offsets through the branch's table, while Align P0 takes its target
from the legacy screen's. So before aligning, check that the row you are about to press <strong>ALIGN
P0</strong> on holds the same offset as the branch's row of the same name — otherwise the part is moved
onto a number the program will never use. A project built with both tables filled in agrees only
because it was written that way.</p>
</div>
<h2 id="reproducing-a-real-cut-place-the-workpiece-on-the-offset">Reproducing a real cut: place the workpiece on the offset</h2>
<p>Going the other way — leaving the offset alone and moving the part to meet it — is not offered on
the runner path. The Legacy-Controller screen that used to carry a one-press control for it
(Align P0) was removed on 2026-09-11, and the Work Coordinates leaf's two row actions both write
the row — <strong>P0</strong> from where program zero sits, <strong>M0</strong> to machine zero — and neither moves the part.
So in the reproducing direction the part is placed by hand, and the row checks the placement rather
than making it:</p>
<ol>
<li>Type the recorded offset into the row the program uses — the values can be entered directly, as
above — and click the row so the canvas marks that coordinate.</li>
<li>Move the part to meet the mark by changing where the fixture sits on the machine table: the
fixture's <strong>Geom To Table</strong> transform, in <a href="anchor.html">Anchor</a>. The workpiece rides on the
fixture, so its program-zero anchor moves with it.</li>
<li>Once the program-zero anchor sits on the mark, the part sits where it really sat. Pressing <strong>P0</strong>
afterwards rewrites the row from the scene, so use it only as a check: the numbers it writes should
be the ones you typed, and any difference is how far the placement is off. If they differ, fix the
placement and type the recorded offset back in — the run resolves against whatever the row holds,
and P0 has just overwritten it.</li>
</ol>
<h2 id="checking-that-it-worked">Checking that it worked</h2>
<p>A wrong alignment — a wrong offset, or a workpiece at the wrong height — shows up as <strong>overcut</strong>,
<strong>collision</strong> or <strong>nocut</strong>, and it shows up early: usually within the first hundred or so NC lines.
@@ -227,17 +219,16 @@ is easiest to reason about when each sits at the middle of the face it meets:</p
</tr>
</tbody>
</table>
<p>Align P0 does not depend on this convention — it works out the fixture's placement from the
assembly as it stands, whatever the transforms hold — but a scene built this way is far easier to
check by eye.</p>
<p>Nothing above depends on this convention — <strong>P0</strong> walks the assembly as it stands, whatever the
transforms hold — but a scene built this way is far easier to check by eye, and far easier to place
by hand in the reproducing direction.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="anchor.html">Anchor</a> — placing the workpiece, fixture and tool relative to the machine, which comes before this</li>
<li><a class="xref" href="../../technique/mechanism/assembly-anchors.html">Assembly Anchors</a> — the named buckle anchors this alignment resolves against</li>
<li><a href="workpiece.html">Workpiece</a> — the branch carrying the Geom To Program Zero transform this task sets, and the Mesh resolution the check above uses</li>
<li><a href="fixture.html">Fixture</a> — the transform Align P0 rewrites when it moves the part onto an offset</li>
<li><a href="fixture.html">Fixture</a> — the Geom To Table transform that moves the part onto a recorded offset in the reproducing direction</li>
<li><a href="controller.html">Controller</a> — the branch whose work-offset table a run resolves against</li>
<li><a href="../utilities/legacy-controller.html">Legacy Controller</a> — the screen Align P0 lives on, and its alignment history</li>
<li><a href="../../technique/nc-dialects/index.html">NC Dialects</a> — how each brand's code names the work offset this alignment is expressed against</li>
<li><a class="xref" href="../../workflows/project-data-checklist.html">Project Data Checklist</a> — the collection step this alignment closes</li>
<li><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a> — driving a simulation from an NC file or a controller log</li>