diff --git a/.gitignore b/.gitignore index 7e7ecf1..a2647ba 100644 --- a/.gitignore +++ b/.gitignore @@ -217,3 +217,7 @@ docs/superpowers/ # Local test config (contains user-specific paths to proprietary test assets) OpenNest.Tests/test-config.json + +# Vendor programming manuals: keep reference copies outside source control. +CINCINNATI LASER PROGRAMMING MANUAL.pdf +TF5200_programming_manual_en.pdf diff --git a/AGENTS.md b/AGENTS.md index f7519ec..eecbfa3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -137,6 +137,8 @@ Always keep `README.md` and `AGENTS.md` up to date when making changes that affe **Do not commit** design specs, implementation plans, or other temporary planning documents (`docs/superpowers/` etc.) to the repository. These are working documents only — keep them local and untracked. +Keep vendor programming manuals and full-text extracts outside source control unless redistribution permission has been established. Maintain project-written post behavior references instead: [Cincinnati CL](docs/cincinnati-post-output.md) and [Cincinnati CI Fiber](docs/cincinnati-ci-fiber-post-output.md). Cite the manual edition and relevant sections, distinguish controller rules from machine-specific macros, and document unconfirmed behavior without copying vendor text. + ## Key Patterns - OpenNest.Core uses multiple namespaces: `OpenNest` (root domain), `OpenNest.CNC`, `OpenNest.Geometry`, `OpenNest.Converters`, `OpenNest.Math`, `OpenNest.Collections`. diff --git a/docs/CINCINNATI LASER PROGRAMMING MANUAL.pdf b/docs/CINCINNATI LASER PROGRAMMING MANUAL.pdf deleted file mode 100644 index 8dba37d..0000000 Binary files a/docs/CINCINNATI LASER PROGRAMMING MANUAL.pdf and /dev/null differ diff --git a/docs/cincinnati-ci-fiber-post-output.md b/docs/cincinnati-ci-fiber-post-output.md new file mode 100644 index 0000000..968fdbd --- /dev/null +++ b/docs/cincinnati-ci-fiber-post-output.md @@ -0,0 +1,69 @@ +# Cincinnati CI Fiber Post Output Reference + +Project-written summary of `OpenNest.Posts.CincinnatiCIFiber`, not a vendor +manual or a machine-operation guide. For the separate CL-series post, see +[Cincinnati output](cincinnati-post-output.md). + +Controller reference used during development: Beckhoff *TF5200 | TwinCAT 3 CNC +Programming manual*, version 1.33, May 19, 2026 +(`TF5200_programming_manual_en.pdf`). Obtain the applicable documentation from +Beckhoff and Cincinnati. Vendor PDFs and full-text extracts stay outside source +control; redistribution permission has not been established. + +## Output contract + +The current [writer](../Posts/OpenNest.Posts.CincinnatiCIFiber/CIFiberProgramWriter.cs) +uses the Cincinnati machine-sample convention, not a generic TF5200 laser API: + +- Header: nest/configuration/material comments; `V.E.MATERIAL`, `V.E.THICKNESS`, + `V.E.X_SIZE`, `V.E.Y_SIZE`, and `V.E.UNIT`. Sheet weight is omitted by default. +- Startup: `G90`, `L PROGRAMSTART.NC`, then `P3=V.E.R3`, `$GOTO NP3:`, and `N0:`. +- Parts follow plate order. `V.E.R4` identifies the part within its sheet; + numbered contour labels and `V.E.R3` continue across sheets for restart lookup. +- Each contour: `/L "L0"`, restart number, rapid to pierce, then interior + `/L "L2"` with `G41` or exterior `/L "L4"` with `G42`; linear lead-in, + `/L "L6"`, cutting moves, and `/L "ZHSOFF"`. +- Tail: `/L "L0"`, `L PROGRAMEND.NC`, `M50`, `M30`, and `%`. +- Motion endpoints are sheet-absolute XY. Arc `I`/`J` are offsets from the arc + start, matching the G162 convention; the post does not explicitly emit G162. +- Hole subprogram geometry is inlined. Suppressed moves and, by default, + wholly scribe contours are omitted. +- Files use UTF-8 without a BOM and CRLF lines. Default accuracy is three decimal + places: coordinates trim trailing zeros; dimensional header values retain them. + +## Configuration and boundaries + +See [CIFiberPostConfig](../Posts/OpenNest.Posts.CincinnatiCIFiber/CIFiberPostConfig.cs) +for macro names, material mappings, unit codes, precision, and table limits. +The post is named for the machine family; table size belongs in configuration. + +- Assign linear lead-ins before posting, including circular holes. The writer + rejects missing or arc-first lead-ins. Its conservative rule cites the G238 + compensation-selection restriction in TF5200 §13.2.4.1; do not generalize it + to every controller compensation mode. +- `/L` calls are skippable; `L PROGRAMSTART.NC` and `L PROGRAMEND.NC` are not. + Macro bodies, process settings, restart handling, and compensation cancellation + belong to the machine configuration. The post does not emit an explicit G40. +- `InchUnitCode` defaults to `1`; `MetricUnitCode` defaults to `0` but remains + unconfirmed. Table limits compare directly with nest dimensions, without unit + conversion. Do not assume changing the unit code establishes metric support. +- Multiple nonempty plates are written sequentially, but dimensional header + values come only from the first plate and the pallet-change tail occurs once. + This is not proof of a qualified multi-sheet machine cycle. +- Validation can throw after output has started. Discard any output from a failed + post; it may be incomplete. Successful generation and tests do not establish + that a program is safe to run on a particular machine. + +## Verification + +[Output-contract tests](../OpenNest.Tests/CincinnatiCIFiber/CIFiberPostProcessorTests.cs) +cover a square with a hole, coordinate transforms/formatting, lead-in rejection, +table bounds, and suppression/scribe handling. Run: + +```sh +dotnet test OpenNest.Tests/OpenNest.Tests.csproj --filter FullyQualifiedName~CincinnatiCIFiber +``` + +Keep this summary aligned with the implementation and tests. Cite the relevant +manual section for controller rules and distinguish those rules from +Cincinnati-specific macros and behavior observed in a machine sample. diff --git a/docs/cincinnati-post-output.md b/docs/cincinnati-post-output.md index f410952..0633e9f 100644 --- a/docs/cincinnati-post-output.md +++ b/docs/cincinnati-post-output.md @@ -2,8 +2,14 @@ Reference for the G-code structure emitted by `OpenNest.Posts.Cincinnati`. Every code listed here maps to a section in the Cincinnati Laser Programming -Manual (`docs/CINCINNATI LASER PROGRAMMING MANUAL.pdf`, EM-423 R-02/11). -Section numbers in parentheses (e.g. `§1.52`) refer to the manual. +Manual (EM-423 R-02/11). Section numbers in parentheses (e.g. `§1.52`) +refer to that edition. Obtain the applicable manual from Cincinnati; vendor +manuals are not bundled because redistribution permission has not been established. + +This is a project-written implementation reference, not a replacement for the +machine's programming, operating, or safety documentation. Keep vendor PDFs and +full-text extracts outside source control; do not re-add them without permission. +For the separate CI Fiber post, see [CI Fiber output](cincinnati-ci-fiber-post-output.md). If you add a new emission in the post, either cite the manual section it maps to, or flag it here as a known custom extension. "Custom code" in this project