Skip to content

Micronic rack reader v1b1#1009

Open
alexjamesgodfrey wants to merge 18 commits intoPyLabRobot:v1b1from
alexjamesgodfrey:micronic-rack-reader-v1b1
Open

Micronic rack reader v1b1#1009
alexjamesgodfrey wants to merge 18 commits intoPyLabRobot:v1b1from
alexjamesgodfrey:micronic-rack-reader-v1b1

Conversation

@alexjamesgodfrey
Copy link
Copy Markdown

Micronic provides liquid storage solutions in the form of barcoded (normal and "Data Matrix") vials, racks for the vials, and "rack readers" that read all vials and the rack barcode. This PR adds two new capabilities (rack_reading, barcode_scanning) and a Micronic IO Monitor driver/backend that implements them.

While Micronic manufactures many physical readers, they all share the same IO Monitor HTTP server — see this PDF.

What's in this PR

  • RackReader capability (rack_reading) with scan_rack, scan_rack_id, layout management, state polling
  • BarcodeScanner capability (barcode_scanning) for single-tube reads
  • MicronicIOMonitorDriver — async HTTP transport with retry/backoff
  • MicronicIOMonitorRackReadingBackend and MicronicIOMonitorBarcodeScannerBackend
  • MicronicCodeReader device exposing both capabilities
  • Docs: docs/user_guide/capabilities/rack-reading.md, docs/user_guide/micronic/index.md
  • 27 unit tests; live smoke-tested on hardware

IO Monitor REST coverage

Micronic IO Monitor

Endpoint Method Wired via Notes
/state GET driver.get_iomonitor_state Shared by both backends
/layoutlist GET rack_reading.get_layouts
/currentlayout GET / PUT rack_reading.get_current_layout / set_current_layout
/scanbox POST rack_reading.trigger_rack_scan / scan_rack Full rack scan, ~30–60s
/scanresult GET rack_reading.get_scan_result
/rackid GET rack_reading.get_rack_id / scan_rack_id One-shot trigger+result, ~3s
/scantube POST barcode_scanning.scan Single-tube small-spot scan
/scanresultcsv GET Skipped (same data as /scanresult)
/retry PUT Skipped — body schema undocumented; live device rejects every reasonable guess
/rescan PUT Same as /retry

PUT requests must include Content-Length; the driver handles that.

This video shows a scan of the rack barcode, and also a whole rack + rack barcode scan with an 8x12 vial layout through plr, with this code:

carbon
rack.mp4

Copy link
Copy Markdown
Member

@rickwierenga rickwierenga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

direct machine support is awesome

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we use PLR io.Serial (thin wrapper around pyserial) rather than windows specific postscript?

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.

2 participants