Skip to content

Add HighRes MicroServe driver and captured protocol tests - #1246

Draft
rickwierenga wants to merge 6 commits into
mainfrom
highres-microserve
Draft

Add HighRes MicroServe driver and captured protocol tests#1246
rickwierenga wants to merge 6 commits into
mainfrom
highres-microserve

Conversation

@rickwierenga

@rickwierenga rickwierenga commented Sep 9, 2026

Copy link
Copy Markdown
Member

Adds direct TCP control of the HighRes MicroServe through pylabrobot.io.Socket, with fourteen stacker objects, diagnostics, homing, carousel selection, per-operation plate geometry, load/unload preparation, angle-reporting unload, retraction, barcode scans, active counting, stack-height measurement, plate-dimension calculation, manual access, and explicit abort/E-stop recovery. Includes a nested MicroServe guide section, workflow/lifecycle/recovery diagrams, a complete 64-command capability audit, a supervised hardware-validation procedure, API exports, and a device registry entry.

Commands match both the echoed command and ACK identifier. Repeated transfer preparation retains ownership and the original reply of the current handoff; interrupted preparations require explicit reconciliation or inspected retraction. Failed measurement and barcode commands retain an unresolved operation across reconnects and block fresh motion. No command is automatically replayed.

Firmware 2.7.0.756 can leave loaderStatus Extended set after retraction, so motion guards check the loader home sensors and stacker lock. It also retains mode Ready after manual access; the driver verifies the acknowledged transition to unhomed, unselected, idle, retracted status and records ownership for repeated requests. Load/unload and barcode sequencing use firmware routines; Python manages geometry, state checks, command ownership, and recovery decisions.

Hardware validation on MicroServe HRB-2008-10558 covers queries, homing, all fourteen carousel positions, repeated targets, reconnecting, existing geometry write/readback, empty receiving-position preparation/retraction, empty and single-plate stack measurement, retraction after measurement, manual access with repeated requests, return from manual access, and laser on/on/off command exchanges. Loaded unload, angle-variant unload, and load preparation/retraction also passed without external pickup or placement, retaining the single plate and its barcode. Firmware supplied no inline angle report, so the method returns None and preserves that result on repeat rather than substituting a potentially stale cached angle. A barcode scan finished with stacker 12 selected while scanning stacker 5; later operations use fresh status and explicit targets. Ready-state recovery no-ops and clear-abort command acknowledgements were captured with no active fault. Optical laser state has no firmware readback. Empty and single-plate barcode scans, repeated active counts, and cached-count writes also passed. The single-plate test used operator-approved provisional height/pitch with measured thickness, followed by restoration of saved geometry; this does not validate multi-plate or transfer geometry. A separate barcode geometry error is captured and tested as a failure. Exact exchanges are replayed in regression tests.

Validation:

  • 218 targeted tests and 402 subtests passed.
  • Repository-wide lint, formatting, and type checking passed (812 source files).
  • Full HTML documentation build passed with warnings treated as errors; notebook cells and Python 3.9 syntax validated without hardware-cell execution.
  • Full-suite testing remains incomplete: the unchanged FTDI test_purge_discards_bytes_held_for_the_next_read test hangs independently. A follow-up excluding it reached the imposed 180-second limit while running legacy EL406 tests.

Draft pending verified plate-transfer geometry, external plate pickup/placement, multi-plate counting/scanning, four-stacker dimension calculation, and physical fault/E-stop recovery. The capability audit identifies unimplemented maintenance/calibration operations, including conflicting axis numbering and unreliable limit reports. Support remains wip; the available evidence does not establish the registry's ≥90% capability threshold for full.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant