- C# 56.7%
- HTML 33.8%
- CSS 9.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
A rebuild of AdvancedSensors on PhAT and PhAT.Razor: a FormFactor PA200 BlueRay over Velox, the horn on positioner 1, Spectrum vision, and the tester's TCP commands on 43431, each running a sequence (Sequences/*.csx). Includes the Spectrum / direct camera switch, the VeloxPro start-up gate, Velox notifications, fixtures with their own scope homes, and per-job scope positions. Needs PhAT.Razor checked out next to it. Docs in docs/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
| Components | ||
| docs | ||
| Instances/BlueRay | ||
| Machine | ||
| maps | ||
| Properties | ||
| Sequences | ||
| Tester | ||
| wwwroot | ||
| .editorconfig | ||
| .gitignore | ||
| appsettings.json | ||
| Autoprober.Abilene.csproj | ||
| Directory.Build.props | ||
| Directory.Build.targets | ||
| duts.json | ||
| Program.cs | ||
Autoprober.Abilene
The Advanced Sensors autoprober on PhAT: a clean rebuild of AdvancedSensors (AdvancedSensors.Autoprober).
A FormFactor PA200 BlueRay is driven over Velox: the chuck carries the DUT, the horn sits on
positioner 1, and the prober's Spectrum vision finds each site. The tester connects over TCP and
sends LOAD, LAUNCH, UNLOAD and the alignment commands. Each command runs a sequence (Sequences/*.csx).
| Doc | |
|---|---|
| tester.md | The tester protocol: commands, replies, errors |
| sequences.md | Load, Launch, AlignTheta, CorrectXY, Init, InitProbe…: what each does; ProberMachine for scripts |
| setup.md | Settings (Autoprober, Prober), the DUT file, maps, vision jobs, the old core.json mapped to the new settings, before the first run |
| alignment.md | Teaching a new DUT or probe card (also on the Alignment page) |
| phat-additions.md | What this app added to PhAT: the Velox client, commanders and simulator, VeloxProber |
| plan.md | The survey of the old code and what came over |
Running it
| Profile | Settings | URL |
|---|---|---|
http (desk) |
appsettings.json: Velox simulated (Prober:Driver VeloxSimulator on 127.0.0.1:1413), DUTs in duts.json, maps in maps/ |
http://localhost:5193 |
BlueRay (the machine) |
Instances/BlueRay/appsettings.json replaces appsettings.json; the app runs on the prober PC, Velox at 127.0.0.1:1412 |
http://:5193 |
dotnet run --launch-profile http
dotnet run --launch-profile BlueRay
The tester's port is 43431, as before. 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 43431 (not created by the app).
The desk simulator listens on 1413, not Velox's 1412, so it can't collide with another app's simulator (MessageLog's ProjectD uses the same prober).
Standalone or as a Windows service
As with Autoprober.NewYork, 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.Abilene (desk) or Autoprober.Abilene-BlueRay.
PhAT\build\Publish-App.ps1 -Project D:\Workspace\source\Autoprober.Abilene
Autoprober.Abilene.exe --Instance BlueRay
PhAT\build\Install-AppService.ps1 -Name Autoprober.Abilene-BlueRay -Exe <publish>\Autoprober.Abilene.exe -Arguments '--Instance BlueRay' -Start
The second line runs it standalone. The last one installs it as a service and must run as
administrator. Publishing leaves out the files each PC keeps: the DUT file, stage positions,
users, page access, databases and logs. So copy Instances/BlueRay/duts.json to the same path
under the exe's folder before the first start. Without it there are no DUTs.
Pages
| Page | Who | |
|---|---|---|
Messages (home, /) |
everyone | Every tester line in and out (the message log) |
Autoprober (/autoprober) |
everyone | Velox connection and status; the DUT, its fixture, site and last vision result; the Fixture list (each fixture has its own scope home, setup.md); the tester (last command, Accept commands); vision: who has the scope camera (Spectrum or this app), with Use Spectrum / Take over for engineers (setup.md); the defaults for the tester's optional fields; buttons for Load, Launch, Unload, Align theta, Correct XY, Vision test, Load settings, Open project, Cancel. Engineers also get the teach buttons: Init DUT at site, Init horn, Chuck home from site. |
| Prober | everyone | Chuck, horn and scope: positions, heights, gaps, Velox status flags, the project and the scope light (read on a second connection once a second and on every Velox alert, so it follows moves, including ones made in Velox or with the joystick) |
| Maps | everyone | Each DUT's sites as the launches use them (centred, scaled, swapped, µm), the vision job each site gets, map load errors, Reload |
| Controller | everyone | Chuck, horn and scope as PhAT stages: jog, stored positions |
| Launches | everyone | Every launch with its position (MSN = <dut>/<site>) |
| Settings | engineer | The DUT editor (map, alignment sites, homes, heights, vision jobs); the machine settings, read only |
| Alignment | engineer | The teaching procedure, with the horn tool photos |
| Engine | engineer | The sequences: run, edit, history and logs |
| Tester commands | engineer | Connected testers and the recent lines |
| Vision, Vision logs, Templates, Masks, Calibration, Camera diagnostics | engineer | PhAT's vision pages (for DUTs whose vision jobs use PhAT) |
| Users | admin | Accounts and page access |
The footer shows the motion state, the tester, the prober connection, the vision owner, the DUT and site, and the
version with its build time. 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) |
| Vision searches, theta results and launches (CSV, one file a day) | Autoprober:VisionLogFolder: vision.yyyy-MM-dd.csv |
Scope images before vision and after each launch (with LogLaunchImages) |
Autoprober:ImageFolder on the prober PC (Spectrum saves them) |
| Sequence runs | Engine page |
Tested, and not
Tested on the desk against PhAT's Velox simulator (Prober:Driver VeloxSimulator):
- Velox client: framing, units, reference frames, error replies and STOP during a move: 22 checks in a scratch program, run when the client was written.
- Tester: LOAD with and without align theta / correct XY, LAUNCH with each optional field,
UNLOAD, ALIGNTHETA, CORRECTXY, INIT (with and without chuck gaps and vision), INITPROBE (with and
without vision), DUT 1 and DUT 3, and the error replies: unknown site (
SiteNotFound), unknown DUT (DutNotFound), a missing field, and AlignTheta measuring the simulator's 0.04° DUT rotation (0.0397°; a second run finds 0.0003° left), STOP and SNAPWAFER (NotImplemented), an unknown command (NotSupported), and vision failing when a different DUT is on the chuck (VisionError). - Pages: each page opens. The Settings page saves the DUT file.
- Waiting for VeloxPro, with a stand-in process and a 5 s wait: commands answer
RECOVERABLE,Waiting for <name>.exe (not running), thenWaiting for <name>.exe to load (2 of 5 s), at once, then work. - Velox notifications from the simulator. A client registering and dropping as "Spectrum" shows as registered / unregistered. During an UNLOAD move the Prober page updated about every 0.4 s (the poll alone: once a second). PhAT's stages follow alerts too (PhAT/README.md).
- Spectrum / direct switch, with a stand-in Spectrum.exe (a program that only waits) and PhAT's file camera. Use Spectrum starts it and releases the camera. Take over kills it (no window to close) and reopens the camera. Repeating either does nothing. LOAD in Direct switches to Spectrum by itself for its Spectrum jobs. Closing Spectrum outside the app shows on the Autoprober page.
- Fixtures and scope positions (DUT 1 with two test fixtures, B's home 150 / −80 µm from A's,
and its PositiveY job
BySite: −500 µm for NegativeX sites, +500 µm otherwise). LAUNCH put the scope at −500 for J126Top and +500 for X207. Fixture B while loaded moved Velox's scope home by the difference, and the next LAUNCH went back to +500 from the new home. The Autoprober page's list saves the choice. INIT on fixture A taught A's home only. An unknown name givesFixtureNotFound.
Not covered on the desk:
- Images: the simulator's SnapImage draws a stand-in picture.
Not tried on the real machine. Check these first:
- the replies the new client parses differently from the old one:
ReadScopeHeights(the old client checked for 3 values and read 8),FindFeaturematches, and the status flags on the Prober page; - the Spectrum feature ids, shutter and gain of each vision job (copied from the old core.json);
- the theta sign: compare one AlignTheta with the old app's result on the same DUT;
- the horn home after INITPROBE (the old code never got this far: it failed whenever the feature was found);
ImageFolder(D:\vision_logs) exists on the prober PC.- the Spectrum switch with the real Spectrum: that it closes or can be killed without upsetting
Velox, that the scope camera is free a moment later (
CameraRelease), and that it starts again through the scheduled task and answers withinStartTimeout; also its real process name; - Velox notifications: the line format and alert values are from the manual, not a real prober (the old library never got this working); check moves from Velox's own UI show at once;
- direct control with the Guppy F-046C (FirePackage provider, first camera found): the image, colour (Bayer RG) and 90° rotation, and that Spectrum can open the camera after Use Spectrum (setup.md).