5.3 KiB
5.3 KiB
NcProgramManager
What This Is
Console EXE (C# .NET 4.7.2) for upload/download of CNC programs to/from machine controllers. Supports Fanuc FOCAS, Heidenhain LSV2, Siemens Sinumerik FTP, and Mitsubishi FTP. Runs on Windows, distributed to licensed machine operators and integrators.
Core Value
Machinists and operators transfer CNC programs to/from any controller without manual intervention or internet access.
Current State
| Attribute | Value |
|---|---|
| Type | Application |
| Version | 0.2.0 |
| Status | v0.2 complete |
| Last Updated | 2026-05-17 |
Requirements
Core Features
- Upload programs to CNC controller
- Download programs from CNC controller
- Local file management (organize/store programs on disk)
- Multi-CN brand support (Fanuc + others)
Validated (Shipped)
- Fanuc FOCAS upload/download — initial
- AES encryption for program files
- CLI argument parsing
- Machine-bound license check (hardcoded)
- Multi-CN support — Fanuc, Heidenhain, Siemens, Mitsubishi — Phase 1–4
- 3-file management mode (Fanuc) via IFanucMachine — Phase 4
- NC program validation before upload (all 4 manufacturers) — Phase 5
- Project renamed FanucProgramManager → NcProgramManager — Phase 6
Validated (Shipped) — continued
- RSA offline license core: IMachineFingerprint, ILicenseValidator, LicenseValidator, LicenseFile — Phase 7
- License wired into Program.cs — RSA check at startup, license.lic next to EXE, -chiave= removed — Phase 8
- LicenseGenerator standalone tool (keygen, fingerprint, sign) — Phase 9
- Real RSA 2048-bit key pair generated; PublicKeyXml embedded in LicenseValidator.cs — Phase 9
- ArgParser extracted — CLI parsing isolated from Program.cs; AesCrypt.cs dead code removed — Phase 11
- Connection leak fixed — try/finally in Scarica/Invia; CncResult.Errors surfaced on failure — Phase 11
- README.md — all 16 CLI params documented; 12 error codes with causa probabile + soluzione — Phase 12
Planned (Next)
- ReadActiveProgramAsync / SelectMainProgram for Heidenhain and Siemens
- Integration test against real hardware (Heidenhain, Siemens, Mitsubishi)
Out of Scope
- Cloud sync
- Web UI
- Internet-dependent license validation
Constraints
Technical Constraints
- .NET Framework 4.7.2 — max compatibility, no upgrade
- Fanuc FOCAS via
fwlib32(32-bit DLL, Windows-only) - Must run offline — no internet dependency at runtime
- License validation must work without network
Business Constraints
- Software must be license-protected (offline, machine-bound)
- License approach: RSA-SHA256 asymmetric, machine fingerprint (WMI CPU+board), .lic file next to EXE
- Vendor issues licenses with LicenseGenerator.exe; private key never distributed
Key Decisions
| Decision | Rationale | Date | Status |
|---|---|---|---|
| .NET 4.7.2 | Max compatibility with operator machines | 2026-05-13 | Active |
| Console EXE output | Simple deployment, scriptable | 2026-05-13 | Active |
| Offline license only | Operators may have no internet on shop floor | 2026-05-13 | Active |
# = Warning in Fanuc/Mitsubishi |
Macro variable indicator — valid in context | 2026-05-13 | Active |
| Constructor injection for validator | Internal ctor accepts mock — enables unit testing without Windows DLL | 2026-05-13 | Active |
| RSA asymmetric licensing | Private key vendor-only; public key embedded in binary — decompiler can't forge licenses | 2026-05-17 | Active |
| LicenseGenerator as standalone separate repo | Vendor tool, never shipped to customers; separate lifecycle from NcProgramManager | 2026-05-17 | Active |
| Heidenhain LSV2 port 19000 | Standard LSV2 port; needs real hardware verification | 2026-05-13 | Active |
Siemens FTP dir /_N_MPF_DIR/ |
Sinumerik standard MPF directory; FTP option must be enabled | 2026-05-13 | Active |
Success Metrics
| Metric | Target | Current | Status |
|---|---|---|---|
| Program transfer correctness | 100% (byte-verified) | Unknown | Pending hardware test |
| License validation (offline) | Works without network | RSA + LicenseGenerator complete; needs Windows hardware test | Done (pending HW test) |
| Multi-CN support | ≥2 manufacturers | 4 (Fanuc/Heidenhain/Siemens/Mitsubishi) | Done |
| NC validation coverage | All manufacturers | 4 manufacturers, 30+ tests | Done |
Tech Stack / Tools
| Layer | Technology | Notes |
|---|---|---|
| Language | C# | .NET Framework 4.7.2 |
| UI | Console EXE | CLI args via InputArgs.cs |
| CN Protocol (Fanuc) | FOCAS fwlib32 | 32-bit DLL, Windows-only |
| CN Protocol (Heidenhain) | LSV2 over TCP | Port 19000, CRC-16/CCITT |
| CN Protocol (Siemens) | FTP (FtpWebRequest) | ASCII mode, passive, /_N_MPF_DIR/ |
| CN Protocol (Mitsubishi) | FTP (FtpWebRequest) | Port 21, /PRG/, no extensions |
| Validation | NcProgramValidator | Universal + per-manufacturer rules |
| Encryption | AES | AesCrypt.cs removed (dead code) — encryption not active |
| Licensing | RSA-SHA256 asymmetric | IMachineFingerprint + ILicenseValidator + LicenseGenerator; real key pair embedded |
| Testing | NUnit 3.13.3 + Moq 4.18.4 | .NET 4.7.2 test project |
PROJECT.md — Updated when requirements or context change Last updated: 2026-05-18 after Phase 11 (refactor) — v0.3 in progress