No description
  • C# 60.7%
  • HTML 21.3%
  • CSS 10.2%
  • PowerShell 7.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
joe 7f1bebb0e8 Initial import of Autoprober.Nacogdoches
The NGJ MBX autoprober (formerly Autoprober.NewYork) on PhAT and PhAT.Razor:
tester protocol, sequences, NGJ16 instance with converted vision jobs,
launch calibration training, docs and tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:38:37 -05:00
Components Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
docs Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Galil Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Instances/NGJ16 Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Machine Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Properties Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Sequences Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Tester Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
tools Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
VisionJobs Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
wwwroot Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
.editorconfig Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
.gitignore Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
appsettings.Development.json Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
appsettings.json Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Autoprober.Nacogdoches.csproj Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Directory.Build.props Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Directory.Build.targets Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
Program.cs Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00
stage-positions.json Initial import of Autoprober.Nacogdoches 2026-10-28 21:38:37 -05:00

Autoprober.Nacogdoches

The NGJ MBX autoprober on PhAT: a clean reimplementation of NGJ\NGJ16\NGJ.MBX.Autoprober. The tester connects over TCP and sends LOAD, POCKET, LAUNCH and FLUSH. Each command runs a sequence (Sequences/*.csx), which drives the Galil stages, the UR carrier handler, the scope's vision and the PNA.

Doc
tester.md The tester protocol: commands, replies, errors, stack light
sequences.md Load, Pocket, Launch, Flush: what each does; NgjMachine for scripts
setup.md Settings (Autoprober, Galil, UR, PNA, light), stored positions, vision jobs, before the first run on the machine
phat-additions.md What this app added to PhAT: command server, data listener, network shares, serial, CCS light, UR, Modbus, EtherNet/IP, SCPI, build info
plan.md The survey of the old code and what came over

Running it

Profile Settings URL
http (desk) appsettings.json: everything simulated (stages, handler, PNA, vision, camera, light) http://localhost:5197
NGJ16 (the machine) Instances/NGJ16/appsettings.json replaces appsettings.json http://:5197
dotnet run --launch-profile http
dotnet run --launch-profile NGJ16

The tester's port is 50000. On the desk it listens on 127.0.0.1 only; on the machine on every interface, which needs a Windows firewall rule for port 50000 (not created by the app).

On this development PC, 50000–50059 is a reserved (administered) port range, and so are several ranges after it (netsh int ipv4 show excludedportrange protocol=tcp), so the desk setup can't listen on 50000 there: the log says "Can't listen on 127.0.0.1:50000 ... forbidden by its access permissions". Pass another port, e.g. --CommandServer:Port 47500.

Standalone or as a Windows service

Like NGJ.MBX.Autoprober, the same build runs standalone or as a service (PhAT.Hosting.AppHost, see PhAT/build/README-service.md). The web port comes from "Urls" in the settings file (a service or published exe doesn't read the launch profiles), and each instance is its own service: Autoprober.Nacogdoches (desk) or Autoprober.Nacogdoches-NGJ16.

PhAT\build\Publish-App.ps1 -Project D:\Workspace\source\Autoprober.Nacogdoches
Autoprober.Nacogdoches.exe --Instance NGJ16
PhAT\build\Install-AppService.ps1 -Name Autoprober.Nacogdoches-NGJ16 -Exe <publish>\Autoprober.Nacogdoches.exe -Arguments '--Instance NGJ16' -Start

The second line runs it standalone; the last one installs it as a service, run as administrator. Publishing leaves out the files each PC keeps (stage positions, users, page access, vision jobs, databases, logs), so a new install starts without them: copy Instances/NGJ16/stage-positions.json and Instances/NGJ16/VisionJobs to the same paths under the exe's folder (the desk setup's positions are stage-positions.json next to the exe). As a service the app has no desktop and no mapped drive letters: use UNC paths for network shares, and run it standalone if a camera SDK needs a logged-in session.

Pages

Page Who
Autoprober (home) everyone Carrier, lid, MSN; where the stages are; tester and handler state; stack light; buttons for Load, Pocket 1–3, Launch Ch1–4, Flush, Home, Maintenance; the connected testers
Messages everyone Every tester line in and out (the message log)
Controller everyone Stages, jog, stored positions, actuators, robots, lights
Launches everyone Every launch with its position, power, MSN and vision image; analysis
Engine engineer The sequences: run, edit, history and logs (also TrainRatio / TrainOffset, see setup.md)
Vision, Vision logs, Templates, Calibration, Camera diagnostics engineer PhAT's vision pages
Network shares engineer (passwords: admin) Connect, disconnect, store passwords
Users admin Accounts and page access

The footer shows the motion state, the tester, carrier / lid / MSN, and the version with its build time (and git commit when built from a repository); GET /buildinfo returns the same as JSON.

Logs

What Where
Tester lines (SQLite) MessageLog:DatabasePath (Messages page)
Tester lines (text, one file a day) CommandServer:TextLogFolder
Launches Launches:DatabasePath (Launches page)
Positions and plate sensors every 30 s (the old status log) Autoprober:StatusLogFolder
Vision runs (images, results) the vision log folder (Vision page settings)

Tested, and not

Tested in desk runs, against simulators in a scratch project (not shipped):

  • Galil: two fake DMC-4080s running the NGJ routines (homes, moves, clamp, plates), with active-low sensors.
  • UR: a fake controller (Dashboard, RTDE with the command/ack/result handshake, Modbus watchdog).
  • PNA: a fake analyser that reports contact.
  • Tester: LOAD (with and without a carrier already on the indexer), POCKET, LAUNCH (PNA search on both ports), FLUSH, invalid commands, the busy reply to a second tester, STOP during a launch, and the refusal while STOP is latched.
  • Handler errors (the fake UR answering chosen results): no carriers on pick → DONE; vacuum failed on place → RECOVERABLE,Handler,Failed to secure vacuum on carrier.; output full on FLUSH → RECOVERABLE,Handler,Output stacks are full.; no ack → RECOVERABLE,Handler,Timed out after … waiting for PickInput to finish., with the command cleared so the robot takes the next one.
  • Vision jobs (converted from the old app), checked against its logged pictures and result JSONs (D:\Workspace\data: new_logs Aug–Sep 2026 and old_logs Dec 2025–Aug 2026, up to 300 pictures per old job and outcome, ~10,900 in all):
    • Reads: every code the old jobs read is read, with the same text (old-set ReadMSN: the old Tesseract reads were often wrong, and the trained OCR's reads checked by eye were right). The combined jobs also read 85–95 % of the old ReadMSNBC/ReadMSN2/3 failures and about half the old ReadLid failures. No read disagrees with another picture of the same sequence.
    • Template matches agree within 0.5 px wherever the old run used today's ROI and template; earlier versions of the jobs (other ROIs and templates, Jan–Aug) don't compare.
    • LOAD on the fake machine with a logged carrier picture answers the code the old app read.
    • Not fixable from the logs: the unread ReadLid pictures are overexposed (bars barely visible), a light or exposure change on the machine.
  • Standalone: the published exe, started from another folder, finds its settings and keeps its data in its own folder. Installing it as a service hasn't been tried.

Not tried on the real machine. Check these first:

  • the Galil record layout and routines (see MessageLog/docs/galil.md);
  • the UR register numbers and stack light outputs;
  • the CCS controller's reply format (the parser follows the old code's indices);
  • the PNA measurement numbers;
  • the sensor polarities (Autoprober:Inputs);
  • the vision jobs with live pictures (converted from the old jobs and checked on the old app's logged pictures; see setup.md).